{"version":3,"file":"fifo-logger.js","sources":["../lib/events.js","../node_modules/typescript-event-target/dist/index.mjs","../lib/levels.js","../lib/FifoLogger.js"],"sourcesContent":["export class LogEvent extends CustomEvent {\n    constructor(data) {\n        super('log', {\n            detail: data,\n        });\n    }\n}\nexport class ChangeEvent extends CustomEvent {\n    constructor(data) {\n        super('change', { detail: data });\n    }\n}\n//# sourceMappingURL=events.js.map","var e=class extends EventTarget{dispatchTypedEvent(s,t){return super.dispatchEvent(t)}};export{e as TypedEventTarget};\n","export const levels = {\n    values: {\n        fatal: 60,\n        error: 50,\n        warn: 40,\n        info: 30,\n        debug: 20,\n        trace: 10,\n        silent: 0,\n    },\n    labels: {\n        0: 'silent',\n        10: 'trace',\n        20: 'debug',\n        30: 'info',\n        40: 'warn',\n        50: 'error',\n        60: 'fatal',\n    },\n};\n//# sourceMappingURL=levels.js.map","import { TypedEventTarget } from 'typescript-event-target';\nimport { ChangeEvent, LogEvent } from \"./events.js\";\nimport { levels } from \"./levels.js\";\n/**\n * A FIFO logger that stores the most recent events in an array.\n */\nexport class FifoLogger extends TypedEventTarget {\n    lastID;\n    initialOptions;\n    events;\n    uuids;\n    levelAsNumber;\n    limit;\n    bindings;\n    level;\n    constructor(options = {}) {\n        super();\n        this.lastID = { id: 0 };\n        this.initialOptions = options;\n        this.uuids = [crypto.randomUUID()];\n        this.events = [];\n        this.level = options.level || 'info';\n        this.levelAsNumber = levels.values[this.level];\n        this.limit = options.limit ?? 1000;\n        this.bindings = options.bindings ?? {};\n    }\n    setLevel(level) {\n        this.level = level;\n        this.levelAsNumber = levels.values[level];\n    }\n    setLimit(limit) {\n        this.limit = limit;\n        this.checkSize();\n    }\n    checkSize() {\n        if (this.events.length > this.limit) {\n            this.events.splice(0, this.events.length - this.limit);\n        }\n    }\n    /**\n     * Remove events from the current logger and its children.\n     */\n    clear() {\n        for (let i = this.events.length - 1; i >= 0; i--) {\n            if (this.events[i].uuids.includes(this.uuids[0])) {\n                this.events.splice(i, 1);\n            }\n        }\n        this.dispatchTypedEvent('change', new ChangeEvent({\n            logs: this.events,\n            info: { depth: this.uuids.length },\n        }));\n    }\n    /**\n     * Get a filtered list of all log events.\n     * @param options - Options.\n     * @returns Array of filtered logs.\n     */\n    getLogs(options = {}) {\n        const { level, minLevel, includeChildren } = options;\n        let logs = this.events.slice();\n        if (includeChildren) {\n            logs = logs.filter((log) => log.uuids.includes(this.uuids[0]));\n        }\n        else {\n            logs = logs.filter((log) => log.uuids[0] === this.uuids[0]);\n        }\n        if (level) {\n            const levelNumber = levels.values[level];\n            if (Number.isNaN(levelNumber)) {\n                throw new Error('Invalid level');\n            }\n            logs = logs.filter((log) => log.level === levelNumber);\n        }\n        if (minLevel) {\n            const levelNumber = levels.values[minLevel];\n            if (Number.isNaN(levelNumber)) {\n                throw new Error('Invalid level');\n            }\n            logs = logs.filter((log) => log.level >= levelNumber);\n        }\n        return logs;\n    }\n    /**\n     * Create a child logger with additional bindings.\n     * @param bindings - an object of key-value pairs to include in log lines as properties.\n     * @returns The new child logger.\n     */\n    child(bindings) {\n        const newFifoLogger = new FifoLogger(this.initialOptions);\n        newFifoLogger.events = this.events;\n        newFifoLogger.uuids = [crypto.randomUUID(), ...this.uuids];\n        newFifoLogger.lastID = this.lastID;\n        newFifoLogger.bindings = { ...this.bindings, ...bindings };\n        newFifoLogger.addEventListener('change', (event) => {\n            this.dispatchTypedEvent('change', new ChangeEvent(event.detail));\n        });\n        return newFifoLogger;\n    }\n    trace(value, message) {\n        this.#addEvent(levels.values.trace, value, message);\n    }\n    debug(value, message) {\n        this.#addEvent(levels.values.debug, value, message);\n    }\n    info(value, message) {\n        this.#addEvent(levels.values.info, value, message);\n    }\n    warn(value, message) {\n        this.#addEvent(levels.values.warn, value, message);\n    }\n    error(value, message) {\n        this.#addEvent(levels.values.error, value, message);\n    }\n    fatal(value, message) {\n        this.#addEvent(levels.values.fatal, value, message);\n    }\n    #addEvent(level, value, message) {\n        if (level < this.levelAsNumber)\n            return;\n        const event = {\n            id: ++this.lastID.id,\n            level,\n            levelLabel: levels.labels[level],\n            time: Date.now(),\n            uuids: this.uuids,\n            message: '',\n        };\n        if (value instanceof Error) {\n            event.message = value.toString();\n            event.error = value;\n            event.meta = { ...this.bindings };\n        }\n        else if (message !== undefined && typeof value === 'object') {\n            event.message = message;\n            event.meta = { ...this.bindings, ...value };\n        }\n        else if (message === undefined && typeof value === 'string') {\n            event.message = value;\n            event.meta = { ...this.bindings };\n        }\n        else {\n            throw new Error('Invalid arguments');\n        }\n        this.events.push(event);\n        this.checkSize();\n        this.dispatchTypedEvent('log', new LogEvent({\n            log: event,\n            logs: this.events,\n            info: { depth: this.uuids.length },\n        }));\n        this.dispatchTypedEvent('change', new ChangeEvent({\n            logs: this.events,\n            info: { depth: this.uuids.length },\n        }));\n    }\n}\n//# sourceMappingURL=FifoLogger.js.map"],"names":["LogEvent","CustomEvent","constructor","data","detail","ChangeEvent","e","EventTarget","dispatchTypedEvent","s","t","dispatchEvent","levels","values","fatal","error","warn","info","debug","trace","silent","labels","FifoLogger","TypedEventTarget","lastID","initialOptions","events","uuids","levelAsNumber","limit","bindings","level","options","id","crypto","randomUUID","setLevel","setLimit","checkSize","length","splice","clear","i","includes","logs","depth","getLogs","minLevel","includeChildren","slice","filter","log","levelNumber","Number","isNaN","Error","child","newFifoLogger","addEventListener","event","value","message","#addEvent","levelLabel","time","Date","now","toString","meta","undefined","push"],"mappings":"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","x_google_ignoreList":[1]}