{"version":3,"file":"fifo-logger.min.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","super","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","this","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]}