{"version":3,"sources":["logger.ts"],"sourcesContent":["/*******************************************************************************************\n * ╔══════════════════════════════════════════════════════════════════════════════════════╗ *\n * ║  UNYT - logger                                                                       ║ *\n * ╠══════════════════════════════════════════════════════════════════════════════════════╣ *\n * ║ Console output for web or node.js                                                    ║ *\n * ║                                                                                      ║ *\n * ╠═════════════════════════════════════════╦════════════════════════════════════════════╣ *\n * ║  © 2022 unyt.org                        ║ ██████████████████████████████████████████ ║ *\n * ╚═════════════════════════════════════════╩════════════════════════════════════════════╝ *\n *******************************************************************************************/\n\nimport type { Runtime } from \"../runtime/runtime.ts\";\nimport type { Type } from \"../types/type.ts\";\nimport type { Pointer } from \"../runtime/pointers.ts\";\nimport { console as console_ansi } from \"./ansi_compat.ts\";\nimport { hasDebugCookie } from \"./debug-cookie.ts\";\n\nlet _Runtime:typeof Runtime; // to circular imports logger - Runtime\nlet _Type:typeof Type; // to circular imports logger - Type\nlet _Pointer:typeof Pointer; // to circular imports logger - Pointer\n\n// copied from datex_runtime\ninterface StreamSink {\n    write: (chunk:ArrayBuffer|string)=>Promise<any>|any\n}\n\n// @ts-ignore\nconst is_worker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\nconst client_type = is_worker ? 'worker' : (\"Deno\" in globalThis && !(globalThis.Deno as any).isPolyfill ? 'deno' : 'browser')\n\n\n\n/**\n * Predefined unyt specific color scheme.\n */\nexport const UNYT_COLORS = {\n    RED: [234,43,81],\n    GREEN: [30,218,109],\n    BLUE: [6,105,193],\n    YELLOW: [235,182,38],\n    MAGENTA: [196,112,222],\n    CYAN: [79,169,232],\n    BLACK: [5,5,5],\n    WHITE: [250,250,250],\n    GREY: [150,150,150]\n} as const\n\n/**\n * Common ANSI esacpe sequences for colors and text style\n */\nexport const ESCAPE_SEQUENCES = {\n\n    CLEAR:      \"\\x1b[2J\", // clear screen\n\n    RESET:      \"\\x1b[0m\",\n    BOLD:       \"\\x1b[1m\",\n    DIM:        \"\\x1b[2m\",\n    ITALIC:     \"\\x1b[3m\",\n    UNDERLINE: \"\\x1b[4m\",\n    INVERSE:    \"\\x1b[7m\",\n    HIDDEN:     \"\\x1b[8m\",\n\n    DEFAULT:    \"\\x1b[22m\",\n    RESET_UNDERLINE: \"\\x1b[24m\",\n    RESET_INVERSE:    \"\\x1b[27m\",\n\n    BLACK:      \"\\x1b[30m\",\n    RED:        \"\\x1b[31m\",\n    GREEN:      \"\\x1b[32m\",\n    YELLOW:     \"\\x1b[33m\",\n    BLUE:       \"\\x1b[34m\",\n    MAGENTA:    \"\\x1b[35m\",\n    CYAN:       \"\\x1b[36m\",\n    WHITE:      \"\\x1b[37m\",\n    GREY:       \"\\x1b[90m\",\n    COLOR_DEFAULT: \"\\x1b[39m\",\n\n    BG_BLACK:   \"\\x1b[40m\",\n    BG_RED:     \"\\x1b[41m\",\n    BG_GREEN:   \"\\x1b[42m\",\n    BG_YELLOW:  \"\\x1b[43m\",\n    BG_BLUE:    \"\\x1b[44m\",\n    BG_MAGENTA: \"\\x1b[45m\",\n    BG_CYAN:    \"\\x1b[46m\",\n    BG_WHITE:   \"\\x1b[47m\",\n    BG_GREY:    \"\\x1b[100m\",\n    BG_COLOR_DEFAULT: \"\\x1b[49m\",\n\n    UNYT_RED:        `\\x1b[38;2;${UNYT_COLORS.RED.join(';')}m`,\n    UNYT_GREEN:      `\\x1b[38;2;${UNYT_COLORS.GREEN.join(';')}m`,\n    UNYT_BLUE:       `\\x1b[38;2;${UNYT_COLORS.BLUE.join(';')}m`,\n    UNYT_CYAN:       `\\x1b[38;2;${UNYT_COLORS.CYAN.join(';')}m`,\n    UNYT_MAGENTA:    `\\x1b[38;2;${UNYT_COLORS.MAGENTA.join(';')}m`,\n    UNYT_YELLOW:     `\\x1b[38;2;${UNYT_COLORS.YELLOW.join(';')}m`,\n    UNYT_BLACK:      `\\x1b[38;2;${UNYT_COLORS.BLACK.join(';')}m`,\n    UNYT_WHITE:      `\\x1b[38;2;${UNYT_COLORS.WHITE.join(';')}m`,\n    UNYT_GREY:       `\\x1b[38;2;${UNYT_COLORS.GREY.join(';')}m`,\n\n    UNYT_BG_RED:        `\\x1b[48;2;${UNYT_COLORS.RED.join(';')}m`,\n    UNYT_BG_GREEN:      `\\x1b[48;2;${UNYT_COLORS.GREEN.join(';')}m`,\n    UNYT_BG_BLUE:       `\\x1b[48;2;${UNYT_COLORS.BLUE.join(';')}m`,\n    UNYT_BG_CYAN:       `\\x1b[48;2;${UNYT_COLORS.CYAN.join(';')}m`,\n    UNYT_BG_MAGENTA:    `\\x1b[48;2;${UNYT_COLORS.MAGENTA.join(';')}m`,\n    UNYT_BG_YELLOW:     `\\x1b[48;2;${UNYT_COLORS.YELLOW.join(';')}m`,\n    UNYT_BG_GREY:       `\\x1b[48;2;${UNYT_COLORS.GREY.join(';')}m`,\n\n\n    UNYT_POINTER:  \"\\x1b[38;2;65;102;238m\",\n\n} as const\n\n\n\ntype COLOR = readonly [string,string];\n\n// [4-bit color escape sequence, rgb color escape sequence]\nconst COLOR = {\n    RED: [ESCAPE_SEQUENCES.RED, ESCAPE_SEQUENCES.UNYT_RED] as COLOR,\n    GREEN: [ESCAPE_SEQUENCES.GREEN, ESCAPE_SEQUENCES.UNYT_GREEN] as COLOR,\n    BLUE: [ESCAPE_SEQUENCES.BLUE, ESCAPE_SEQUENCES.UNYT_BLUE] as COLOR,\n    CYAN: [ESCAPE_SEQUENCES.CYAN, ESCAPE_SEQUENCES.UNYT_CYAN] as COLOR,\n    MAGENTA: [ESCAPE_SEQUENCES.MAGENTA, ESCAPE_SEQUENCES.UNYT_MAGENTA] as COLOR,\n    YELLOW: [ESCAPE_SEQUENCES.YELLOW, ESCAPE_SEQUENCES.UNYT_YELLOW] as COLOR,\n    BLACK: [ESCAPE_SEQUENCES.BLACK, ESCAPE_SEQUENCES.UNYT_BLACK] as COLOR,\n    WHITE: [ESCAPE_SEQUENCES.WHITE, ESCAPE_SEQUENCES.UNYT_WHITE] as COLOR,\n    GREY: [ESCAPE_SEQUENCES.GREY, ESCAPE_SEQUENCES.UNYT_GREY] as COLOR,\n\n    POINTER:  [ESCAPE_SEQUENCES.BLUE, ESCAPE_SEQUENCES.UNYT_POINTER] as COLOR,\n} as const;\n\nexport let console_theme:\"dark\"|\"light\" = (globalThis as any)._override_console_theme ?? ((client_type==\"deno\" || (<any>globalThis).matchMedia && (<any>globalThis).matchMedia('(prefers-color-scheme: dark)')?.matches) ? \"dark\" : \"light\");\n\ntry {\n    (<any>globalThis).matchMedia && (<any>globalThis).matchMedia('(prefers-color-scheme: dark)')?.addEventListener(\"change\", (e:any)=>{\n        console_theme = e.matches ? \"dark\" : \"light\";\n    });\n} catch (e){}\n\n\n// handles console.log/error/debug\n\nconst actualConsole = client_type === \"deno\" ? console : console_ansi;\n\nfunction console_log(log_data:any[], log_level:LOG_LEVEL=LOG_LEVEL.DEFAULT) {\n    switch (log_level) {\n        case LOG_LEVEL.ERROR: actualConsole.error(...log_data);break;\n        case LOG_LEVEL.WARNING: actualConsole.warn(...log_data);break;\n        case LOG_LEVEL.VERBOSE: actualConsole.debug(...log_data);break;\n        default: actualConsole.log(...log_data);break;\n    }\n}\n\n\nfunction rgbToHsl(r:number, g:number, b:number):[number, number, number] {\n    r /= 255, g /= 255, b /= 255;\n  \n    const max = Math.max(r, g, b), min = Math.min(r, g, b);\n    let h = 0, s:number;\n    const l = (max + min) / 2;\n    if (max == min) h = s = 0; \n    else {\n        const d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n        switch (max) {\n            case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n            case g: h = (b - r) / d + 2; break;\n            case b: h = (r - g) / d + 4; break;\n        }\n        h /= 6;\n    }\n    return [h, s, l];\n}\n\n// h:0..1, s:0..1, l:0..1\nfunction hslToRgb(h:number, s:number, l:number):[number, number, number] {\n    h *= 360;\n    const k = (n:number) => (n + h / 30) % 12;\n    const a = s * Math.min(l, 1 - l);\n    const f = (n:number) =>\n        l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n    return [Math.round(255 * f(0)), Math.round(255 * f(8)), Math.round(255 * f(4))];\n}\n\nfunction brightenRgb(r:number, g:number, b:number):[number, number, number] {\n    let [h,s,l] = rgbToHsl(r,g,b);\n    l += 0.4;\n    l = Math.min(0.85, l);\n    return hslToRgb(h,s,l);\n}\n\n\nexport enum LOG_LEVEL {\n    VERBOSE,\n    DEFAULT,\n    WARNING,\n    ERROR,\n}\n\nexport enum LOG_FORMATTING {\n    PLAINTEXT,\n    COLOR_4_BIT,\n    COLOR_RGB\n}\n\nexport let font_family = 'font-family: Menlo, Monaco, \"Courier New\", monospace';\n\n\nexport interface LogFormatter {\n    name: string,\n\n    variables?: {[name:string]:any}\n    spread_variables?: {[name:string]:any} // 'tuple' values, get spread as multiple arguments\n\n    formatInline?(text:string, params:any[], main_color:string):string  // apply a format to text content\n    formatValue?(value:any, params:any[], main_color:string):string // apply a format to an inserted value\n    formatMeta?(params:any[], main_color:string, formatting:LOG_FORMATTING):string // apply a format without text/value content\n}\n\n\nclass ColorFormatter implements LogFormatter {\n\n    name = 'color'\n\n    variables = {\n        red: {c:COLOR.RED},\n        green: {c:COLOR.GREEN},\n        yellow:{c:COLOR.YELLOW},\n        blue: {c:COLOR.BLUE},\n        magenta: {c:COLOR.MAGENTA},\n        cyan: {c:COLOR.CYAN},\n        black: {c:COLOR.BLACK},\n        white: {c:COLOR.WHITE},\n        grey: {c:COLOR.GREY},\n    }\n\n    formatMeta(params: any[], main_color:string, formatting:LOG_FORMATTING): string {\n        // predefined color\n        if (params[0].c) return Logger.getFormattingColor(params[0].c, formatting);\n\n        // custom rgb color\n        else if (formatting == LOG_FORMATTING.COLOR_RGB) {\n            return `\\x1b[38;2;${params.slice(0,3).map(v=>v??255).join(';')}m`;\n        }\n\n        else if (formatting == LOG_FORMATTING.PLAINTEXT) return \"\"\n        else return ESCAPE_SEQUENCES.COLOR_DEFAULT;\n    }\n    \n}\n\n\n// just reflect text back, no changes\nclass TextFormatter implements LogFormatter {\n\n    name = 'text'\n    formatMeta(params: any[], main_color:string): string {\n        return ''\n    }\n    formatInline(text: string, params: any[], main_color: string): string {\n        return text;\n    }\n    formatValue(value: any, params: any[], main_color: string): string {\n        return value?.toString();\n    }\n}\n\nclass ResetFormatter implements LogFormatter {\n\n    name = 'reset'\n    formatMeta(params: any[], main_color:string): string {\n        return ESCAPE_SEQUENCES.RESET+main_color;\n    }\n}\n\nclass BoldFormatter implements LogFormatter {\n\n    name = 'bold'\n    formatMeta(params: any[]): string {\n        return ESCAPE_SEQUENCES.BOLD;\n    }\n}\n\nclass BGColorFormatter implements LogFormatter {\n\n    name = 'bg'\n\n    variables = {\n        red: {c:COLOR.RED},\n        green: {c:COLOR.GREEN},\n        yellow:{c:COLOR.YELLOW},\n        blue: {c:COLOR.BLUE},\n        magenta: {c:COLOR.MAGENTA},\n        cyan: {c:COLOR.CYAN},\n        black: {c:COLOR.BLACK},\n        white: {c:COLOR.WHITE},\n        grey: {c:COLOR.GREY},\n    }\n\n\n    formatMeta(params: any[], main_color:string, formatting:LOG_FORMATTING): string {\n        // predefined color\n        if (params[0].c) return Logger.getEscapedBackgroundColor(Logger.getFormattingColor(params[0].c, formatting));\n\n        // custom rgb color\n        else if (formatting == LOG_FORMATTING.COLOR_RGB) {\n            return `\\x1b[48;2;${params.slice(0,3).map(v=>v??255).join(';')}m`;\n        }\n        \n        else if (formatting == LOG_FORMATTING.PLAINTEXT) return \"\"\n        else return ESCAPE_SEQUENCES.BG_COLOR_DEFAULT;\n    }\n    \n}\n\nclass DATEXFormatter implements LogFormatter {\n\n    name = 'datex'\n\n    formatValue(value: any, params: any[]): string {\n        const collapse = params.includes(\"collapse\");\n        const color = !params.includes(\"plain\");\n        return _Runtime ? _Runtime.valueToDatexStringExperimental(value, true, color, collapse, true, true) : (value?.toString??\"\");\n    }\n    \n}\n\nclass ImageFormatter implements LogFormatter {\n\n    name = 'image'\n\n    formatValue(value: any, params: any[]): string {\n        // currently only supported in browser console\n        return client_type == \"deno\" ? '' : `\\x1b[1337;File=;${params[0]?'height='+params[0]+'px;':''}inline=1:${value}\\x07`\n    }\n    \n}\n\ntype dynamicReturn = {\n    readonly update: (text: string | TemplateStringsArray, ...data: any[]) => void;\n}\n\nexport class Logger {\n    private static loggers_by_origin = new Map<string,Set<Logger>>();\n    private static global_log_streams = new Set<StreamSink>();\n\n    private readonly origin:string|undefined;\n    private readonly pointer:string|undefined;\n    private readonly origin_value?:any;\n\n    private locked = false;\n    private lockedContent?: string|null;\n\n\n    private box_width = 50;\n    public formatting:LOG_FORMATTING;\n    private production = false;\n\n    private tags = new WeakMap<COLOR, string>();\n\n    // @ts-ignore check for global chrome variable\n    private static browser_supports_ansi_escape_codes = !!globalThis.chrome\n\n    public log_to_console = true;\n    public log_to_cache = false;\n    public log_to_streams = true;\n    public cache?: string\n    private out_streams = new Set<StreamSink>();\n\n    constructor(origin?:string, production?:boolean, formatting?:LOG_FORMATTING) \n    constructor(for_value:any, production?:boolean, formatting?:LOG_FORMATTING) \n    constructor(origin:any, production = false, formatting:LOG_FORMATTING = LOG_FORMATTING.COLOR_RGB) {\n        \n        this.formatting = formatting;\n        this.production = production;\n\n        if (typeof origin == \"string\") this.origin = origin;\n        else if (origin) {\n            this.origin_value = origin;\n            if (_Type && _Pointer) {\n                this.origin = _Type.ofValue(origin)?.toString().replace(\">\",\"\").replace(\"<\",\"\")??'?';\n                this.pointer = \"$\" + (_Pointer.getByValue(origin)?.id??'?');\n            }\n            else this.origin = (origin?.constructor.name??'') + \"?\";\n        }\n\n        if (this.origin) {\n            if (!Logger.loggers_by_origin.has(this.origin)) Logger.loggers_by_origin.set(this.origin, new Set());\n            Logger.loggers_by_origin.get(this.origin)?.add(this);\n        }\n\n        this.info = this.info.bind(this);\n        this.warn = this.warn.bind(this);\n        this.error = this.error.bind(this);\n        this.debug = this.debug.bind(this);\n        this.log = this.log.bind(this);\n        this.success = this.success.bind(this);\n        this.plain = this.plain.bind(this);\n        this.dynamic = this.dynamic.bind(this);\n    }\n\n    public destroy(){\n        if (this.origin) Logger.loggers_by_origin.get(this.origin)?.delete(this);\n    }\n\n    private log(color: COLOR, text: string, data:any[], log_level:LOG_LEVEL = LOG_LEVEL.DEFAULT, only_log_own_stream = !this.log_to_streams, add_tag = true, raw = false, onlyReturn = false) {\n\n        if (this.production && (log_level < Logger.production_log_level)) return; // don't log for production\n        if (!this.production && (log_level < Logger.development_log_level)) return; // don't log for development\n        const log_string = raw ? text : this.generateLogString(color, text, data, add_tag);\n        if (onlyReturn) return log_string;\n        else this.logRaw(log_string, log_level, only_log_own_stream);\n    }\n\n    // log_level: decides which console log method is used (log, error, warn, debug)\n    // only_log_own_stream: if true, only streams where no other logger is piped in are affected (e.g. to prevent clear of all loggers)\n    // force_browser_compat_mode: if true, browser console formatting falls back to %c sequences (required for non compatible ascii sequences or images)\n    private logRaw(text:string, log_level:LOG_LEVEL = LOG_LEVEL.DEFAULT, only_log_own_stream = !this.log_to_streams, update_xy = true) {\n\n        if (this.production && (log_level < Logger.production_log_level)) return; // don't log for production\n        if (!this.production && (log_level < Logger.development_log_level)) return; // don't log for development\n\n        if (this.log_to_console) {\n            // update newlines\n            if (client_type === \"deno\" && update_xy) {\n                const new_lines = 1 + (text.match(/\\n/g) || []).length\n                Logger.setCursorY(globalThis.Deno.stdout, Logger.getCursorY(globalThis.Deno.stdout)+new_lines);\n            }\n\n            if (this.locked) this.lockedContent = this.lockedContent ? this.lockedContent + '\\r\\n' + text : text;\n            else console_log([text], log_level);\n        }\n        if (this.log_to_cache) {\n            this.cache = this.cache ? this.cache + '\\r\\n' + text : text;\n        }\n\n        // handle log streams\n        if (!only_log_own_stream) {\n            for (const stream of Logger.global_log_streams) stream.write(text+\"\\r\\n\");\n        }\n        for (const stream of this.out_streams) {\n            // is only stream for this logger or 'only_log_own_stream' disabled\n            if (!only_log_own_stream || Logger.loggersForStream.get(stream)?.size == 1) stream.write(text+\"\\r\\n\");\n        }\n    }\n\n    private static inverse_underline_block = /\\x1b\\[7m\\x1b\\[4m(\\x1b\\[(?:(?:\\d{0,4};)*\\d{0,4})?m)/g\n\n    // removes/modifies certain esacpe sequences\n    static convertLogStringForBrowser(text:string){\n        return [\n            text\n                // replace UNDERLINE+INVERSE, (\\x1b[7m is currently not supported by chrome)\n                .replace(Logger.inverse_underline_block, (_,c) => Logger.getFormattingColor(console_theme == 'dark' ?  COLOR.BLACK : COLOR.WHITE, LOG_FORMATTING.COLOR_RGB) + Logger.getEscapedBackgroundColor(c))\n                .replaceAll(ESCAPE_SEQUENCES.CLEAR, '')\n        ]\n    }\n\n\n    private getTag(color:COLOR){\n        if (this.tags.has(color)) return this.tags.get(color);\n        else {\n            this.tags.set(color, this.generateTag(color));\n            return this.tags.get(color);\n        }\n    }\n\n    private generateTag(color:COLOR) {\n        const color_esc = this.getFormattingColor(color);\n        let tag = \"\"\n\n        // handle tag:\n        const esc_tag = this.formatting != LOG_FORMATTING.PLAINTEXT && (this.origin || this.pointer);\n\n        // start tag\n        if (esc_tag) {\n            tag += \n                ESCAPE_SEQUENCES.INVERSE+ESCAPE_SEQUENCES.UNDERLINE + Logger.getEscapedBackgroundColor(this.getFormattingColor(color==COLOR.BLACK?COLOR.WHITE:COLOR.BLACK)) +\n                color_esc +\n                (this.formatting == LOG_FORMATTING.COLOR_RGB ? ESCAPE_SEQUENCES.BOLD : '')\n        }\n        // tag content\n        if (this.origin) {\n            if (this.formatting == LOG_FORMATTING.PLAINTEXT) tag += `[${this.origin}]`;\n            else tag +=  \" \" + this.origin  + \" \";\n        }\n        if (this.pointer) {\n            if (this.formatting == LOG_FORMATTING.PLAINTEXT) tag += `[${this.pointer}]`;\n            else tag += ESCAPE_SEQUENCES.INVERSE+ESCAPE_SEQUENCES.UNDERLINE + this.getFormattingColor(COLOR.POINTER) + \" \" + this.pointer + \" \";\n        }\n        // end tag\n        if (this.formatting != LOG_FORMATTING.PLAINTEXT) tag += ESCAPE_SEQUENCES.RESET + (esc_tag ? \" \" : \"\") + color_esc;\n        else if (esc_tag) tag += \" \"\n\n        return tag;\n    }\n\n    static getFormattingColor(color:COLOR, formatting:LOG_FORMATTING) {\n        if (formatting == LOG_FORMATTING.COLOR_4_BIT) return color[0];\n        else if (formatting == LOG_FORMATTING.COLOR_RGB) return color[1];\n        else if (formatting == LOG_FORMATTING.PLAINTEXT) return \"\"\n        else return ESCAPE_SEQUENCES.COLOR_DEFAULT;\n    }\n\n    private getFormattingColor(color:COLOR) {\n        return Logger.getFormattingColor(color, this.formatting)\n    }\n\n    private generateLogString(color:COLOR, text:string, data:any[], add_tag = true): string {\n\n        const color_esc = this.getFormattingColor(color);\n\n        const message = Logger.applyLogFormatters(Logger.formatEscapeSequences(text, color_esc), data, color_esc, this.formatting)\n            .replace(/\\n/g, '\\r\\n');\n\n\n            const log_data = this.formatting == LOG_FORMATTING.PLAINTEXT ? \n            (add_tag ? this.getTag(color) : '') + message:\n            (add_tag ? this.getTag(color) : '') + message + ESCAPE_SEQUENCES.RESET;\n\n        return log_data;\n    }\n\n    private static match_log_formatter = \n        // @ts-ignore\n        (typeof globalThis.webkitConvertPointFromNodeToPage === 'function') ? // target only saFari\n            /(?:#([a-zA-Z0-9_-]+)(?:\\(((?:[^\\)])*)\\))?(?:(\\[((?:[^\\]])*)\\]|\\?))?|\\?)/g : // TODO use regex with lookaheads when supported in safARi \n            new RegExp('(?:#([a-zA-Z0-9_-]+)(?:\\\\(((?:(?<=\\\\\\\\)\\\\)|[^\\\\)])*)\\\\))?(?:(\\\\[((?:(?<=\\\\\\\\)\\\\]|[^\\\\]])*)\\\\]|\\\\?))?|(?<!\\\\\\\\)\\\\?)','g')\n            ///(?:#([a-zA-Z0-9_-]+)(?:\\(((?:(?<=\\\\)\\)|[^\\)])*)\\))?(?:(\\[((?:(?<=\\\\)\\]|[^\\]])*)\\]|\\?))?|(?<!\\\\)\\?)/g\n\n    private static applyLogFormatters(text:string, data:any[], main_color:string, formatting:LOG_FORMATTING){\n        text = text.replace(Logger.match_log_formatter, (all,name,_args,outer_content,content) => {\n\n            // standalone '?'\n            if (all == '?') {\n                return this.parseInsertValueDefault(data.shift(), main_color);\n            }\n            // formatter command\n            else {\n                content = content?.replaceAll('\\\\]', ']');\n                _args = _args?.replaceAll('\\\\)', ')');       \n\n                const formatter:LogFormatter = this.formatters.get(name) ?? <LogFormatter>this.formatters.get('text'); // fallback formatter is 'text'\n                let args:any[] = _args?.split(',').map((a:string)=>this.parseFormatterArgument(a,formatter.variables)) ?? [];\n\n                // spread var\n                if (args.length == 1 && formatter.spread_variables && (args[0] in formatter.spread_variables)) args = formatter.spread_variables[args[0]];  \n                \n                // insert value\n                if (outer_content=='?' || content=='?') {\n                    if (formatter.formatValue) return formatter.formatValue(data.shift(), args, main_color) + ESCAPE_SEQUENCES.RESET + main_color;\n                    else if (formatter.formatInline) return formatter.formatInline(this.parseInsertValueDefault(data.shift(), main_color), args, main_color) + ESCAPE_SEQUENCES.RESET + main_color;\n                    else if (formatter.formatMeta) return (formatter.formatMeta(args, main_color, formatting)??'') + this.parseInsertValueDefault(data.shift(), main_color) + ESCAPE_SEQUENCES.RESET + main_color;\n                    else return content??'';\n                }\n                // inline text content\n                if (outer_content!=undefined) {\n                    if (formatter.formatInline) return formatter.formatInline(content, args, main_color) + ESCAPE_SEQUENCES.RESET + main_color;\n                    else if (formatter.formatMeta) return (formatter.formatMeta(args, main_color, formatting)??'') + content + ESCAPE_SEQUENCES.RESET + main_color;\n                    else return content??'';\n                }\n                // global (escape sequences not reset)\n                if (content==undefined) {\n                    if (formatter.formatMeta) return (formatter.formatMeta(args, main_color, formatting)??'');\n                    else return content??''; \n                }\n            \n            }\n\n        });\n\n        // still data values left, without corresponding ?\n        if (data.length) {\n            for (const entry of data) {\n                text += \" \" + this.parseInsertValueDefault(entry, main_color);\n            }\n        }\n\n        return text.replaceAll(\"\\\\?\",\"\\?\") // replace escaped question marks\n    }\n\n    private static parseInsertValueDefault(value:any, main_color:string) {\n        if (typeof value == \"string\") return value;\n        else if (value instanceof Error) return value.stack ?? \"???\";\n        else return (this.formatters.get('datex')?.formatValue?.(value, [], main_color) ?? \"???\") + ESCAPE_SEQUENCES.RESET + main_color;\n    }\n\n    private static parseFormatterArgument(arg:string, vars?:Object): any {\n        // variable\n        if (vars && arg in vars) return (<any>vars)[arg];\n        // strings (\" or ')\n        if ((arg.startsWith(\"'\") && arg.endsWith(\"'\"))) return arg.slice(1,-1);\n        if ((arg.startsWith('\"') && arg.endsWith('\"'))) return arg.slice(1,-1);\n        // number\n        if (/^(((-|\\+)?((\\d_?)*\\.)?(\\d_?)*((E|e)(-|\\+)?(\\d_?)+)|(-|\\+)?(\\d_?)+\\.(\\d_?)+)|(-|\\+)?(\\d_?)+\\b(?!\\.\\d))$/.test(arg)) return Number(arg);\n        // otherwise also just a string\n        else return arg.trim();\n    }\n\n\n    private static formatEscapeSequences(text:string, color:string=ESCAPE_SEQUENCES.WHITE):string {\n        return text\n        .replace(/\\*\\*[^*]*\\*\\*/g, (x)=>{\n            return ESCAPE_SEQUENCES.BOLD+this.brightenEscapedColor(color)+x.replace(/\\*/g, \"\")+ESCAPE_SEQUENCES.DEFAULT})\n        .replace(/\\#\\#[^*]*\\#\\#/g, (x)=>{\n            return ESCAPE_SEQUENCES.DEFAULT+this.brightenEscapedColor(color)+x.replace(/\\#/g, \"\")+ESCAPE_SEQUENCES.RESET+color})\n        .replace(/__[^_]*__/g, (x)=>{\n            return ESCAPE_SEQUENCES.UNDERLINE+x.replace(/_/g, \"\")+ESCAPE_SEQUENCES.RESET_UNDERLINE})\n        .replace(/\\[\\[[^[]*\\]\\]/g, (x)=>{\n            return ESCAPE_SEQUENCES.RESET+ESCAPE_SEQUENCES.INVERSE+ESCAPE_SEQUENCES.UNDERLINE+color+x.replace(/\\[/g, '').replace(/]/g, '')+ESCAPE_SEQUENCES.RESET+color})\n    }\n    private static removeEscapeFormatters(text:string):string {\n        return text\n        .replace(/\\*\\*/g, '')\n        .replace(/\\#\\#/g, '')\n        .replace(/__/g, '')\n        .replace(/\\[\\[/g,'')\n        .replace(/\\]\\]/g,'')\n    }\n\n    private static brightenEscapedColor(color:string): string {\n        let match:RegExpMatchArray | null;\n        // rgb color\n        if (match = color.match(/^\\x1b\\[38;2;(\\d+);(\\d+);(\\d+)m/)) {\n            let [r,g,b] = brightenRgb(Number(match[1]), Number(match[2]), Number(match[3]));\n            return `\\x1b[38;2;${r};${g};${b}m`\n        }\n        // rgb color bg\n        if (match = color.match(/^\\x1b\\[48;2;(\\d+);(\\d+);(\\d+)m/)) {\n            let [r,g,b] = brightenRgb(Number(match[1]), Number(match[2]), Number(match[3]));\n            return `\\x1b[48;2;${r};${g};${b}m`\n        }\n        // default color\n        else return color.substring(0, 2) + (parseInt(color.substring(2, 4))+60) + color.substring(4, 5);\n    }\n\n    static getEscapedBackgroundColor(color:string): string {\n        let match:RegExpMatchArray | null;\n        if (match = color.match(/^\\x1b\\[(\\d*)(.*)$/)) {\n            // +10 for bg color\n            return '\\x1b[' + (Number(match[1]) + 10) + match[2];\n        }\n        else return color;\n    }\n\n    private static async imageUrlToBase64(url:string) {\n        const blob = await (await fetch(url)).blob();\n        return new Promise(resolve=>{\n            const reader = new FileReader();\n            reader.onloadend = () => {\n                resolve(<string>reader.result)\n            };\n            reader.readAsDataURL(blob);\n        })\n        \n    }\n\n\n    public box(title?:string, message?:string) {\n        this.box_width = Math.max(title?.length??0, this.box_width);\n\n        title = title?.toString() || \"\";\n        message = message || \"\";\n\n        const message_array = message?.match(new RegExp(`.{1,${this.box_width}}`,\"g\"))?.map(m=>m.split(\"\\n\")).flat();\n\n        const date = new Date().toLocaleDateString()+\" \"+new Date().toLocaleTimeString();\n        let text =  \"\\n\" + ESCAPE_SEQUENCES.MAGENTA +\"╭─\" +  \"\".padEnd(this.box_width-date.length, \"─\") + Logger.brightenEscapedColor(ESCAPE_SEQUENCES.MAGENTA) + date + ESCAPE_SEQUENCES.MAGENTA +  \"─╮\\n\";\n\n        text += `${ESCAPE_SEQUENCES.MAGENTA}│${Logger.brightenEscapedColor(ESCAPE_SEQUENCES.WHITE)} ${title.padEnd(this.box_width, \" \")} ${ESCAPE_SEQUENCES.MAGENTA}│\\n`;\n        text += ESCAPE_SEQUENCES.MAGENTA + \"├\" + \"\".padEnd(this.box_width+2, \"─\") + \"┤\\n\";\n\n        for (let m of message_array || []) {\n            m = m.trim();\n            const formatters_length = m.length - Logger.removeEscapeFormatters(m).length;\n            text += `${ESCAPE_SEQUENCES.MAGENTA}│${ESCAPE_SEQUENCES.WHITE} ${Logger.formatEscapeSequences(m.trim().padEnd(this.box_width+formatters_length, \" \"))} ${ESCAPE_SEQUENCES.RESET+ESCAPE_SEQUENCES.MAGENTA}│\\n`\n        }\n\n        text += ESCAPE_SEQUENCES.MAGENTA + \"╰\" + \"\".padEnd(this.box_width+2, \"─\") + \"╯\\n\" + ESCAPE_SEQUENCES.RESET;\n\n    }\n\n    private normalizeLogText(text:string|TemplateStringsArray):string {\n        if (typeof text == \"string\") return text;\n        else if (text instanceof Array) return text.raw.join(\"?\");\n        else {\n            throw Error(\"Invalid log text\");\n        }\n    }\n\n    private isTemplateStringArrayOrString(text: any): text is TemplateStringsArray|string { // @ts-expect-error\n        return typeof text == \"string\" || (text instanceof Array && text.raw instanceof Array && text.length === text.length)\n    }\n\n\n    public table(){\n        \n    }\n\n\n    public debug(text:TemplateStringsArray, ...data:any[]):void\n    public debug(text:string, ...data:any[]):void\n    public debug(value:any):void\n    public debug(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        this.log(COLOR.CYAN, this.normalizeLogText(text), data, LOG_LEVEL.VERBOSE)\n    }\n\n    public info(text:TemplateStringsArray, ...data:any[]):void\n    public info(text:string, ...data:any[]):void\n    public info(value:any):void\n    public info(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        this.log(console_theme == 'dark' ?  COLOR.WHITE : COLOR.BLACK, this.normalizeLogText(text), data, LOG_LEVEL.DEFAULT)\n    }\n\n    /**\n     * Returns the formatted info message without logging it\n     */\n    public getInfoMessage(text:TemplateStringsArray, ...data:any[]):string\n    public getInfoMessage(text:string, ...data:any[]):string\n    public getInfoMessage(value:any):string\n    public getInfoMessage(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        return this.log(console_theme == 'dark' ?  COLOR.WHITE : COLOR.BLACK, this.normalizeLogText(text), data, LOG_LEVEL.DEFAULT, undefined, undefined, undefined, true)\n    }\n\n    public warn(text:TemplateStringsArray, ...data:any[]):void\n    public warn(text:string, ...data:any[]):void\n    public warn(value:any):void\n    public warn(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        this.log(COLOR.YELLOW, this.normalizeLogText(text), data, LOG_LEVEL.WARNING)\n    }\n\n    public error(text:TemplateStringsArray, ...data:any[]):void\n    public error(text:string, ...data:any[]):void\n    public error(value:any):void\n    public error(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        this.log(COLOR.RED, this.normalizeLogText(text), data, LOG_LEVEL.ERROR)\n    }\n\n    public success(text:TemplateStringsArray, ...data:any[]):void\n    public success(text:string, ...data:any[]):void\n    public success(value:any):void\n    public success(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        this.log(COLOR.GREEN, this.normalizeLogText(text), data, LOG_LEVEL.DEFAULT)\n    }\n\n    public plain(text:TemplateStringsArray, ...data:any[]):void\n    public plain(text:string, ...data:any[]):void\n    public plain(value:any):void\n    public plain(text:string|TemplateStringsArray|any,...data:any[]) {\n        if (!this.isTemplateStringArrayOrString(text)) {data = [text];text = '?';} // text is a single non-string value\n        this.log(console_theme == 'dark' ?  COLOR.WHITE : COLOR.BLACK, this.normalizeLogText(text), data, LOG_LEVEL.DEFAULT, false, false)\n    }\n\n    public raw(text:string) {\n        this.log(console_theme == 'dark' ?  COLOR.WHITE : COLOR.BLACK, this.normalizeLogText(text), [], LOG_LEVEL.DEFAULT, false, false, true)\n    }\n\n    // does not have an effect in the native browser console or log streams with multiple logger inputs (intentionally)\n    public clear(silent = false){\n        this.logRaw(ESCAPE_SEQUENCES.CLEAR, LOG_LEVEL.DEFAULT, true)\n        this.logRaw('\\x1bc', LOG_LEVEL.DEFAULT, true)\n        if (!silent) this.logRaw(ESCAPE_SEQUENCES.ITALIC + '[' + (this.origin??'?') + '] was cleared' + ESCAPE_SEQUENCES.RESET);\n    }\n\n\n    /**\n     * accumulate all logs and only console.log() once when flush() called\n     */\n    public lock() {\n        this.locked = true;\n    }\n\n    public flush() {\n        this.locked = false;\n        this.logRaw(this.lockedContent??'');\n        this.lockedContent = null;\n    }\n\n\n    public dynamic(text:TemplateStringsArray, ...data:any[]): dynamicReturn\n    public dynamic(text:string, ...data:any[]): dynamicReturn\n    public dynamic(text:string|TemplateStringsArray,...data:any[]) {\n        if (client_type !== \"deno\") {\n            throw \"[Logger.dynamic is only supported in Deno environments]\";\n        }\n        const logLevel = LOG_LEVEL.DEFAULT;\n        if (this.production && (logLevel < Logger.production_log_level)) return; // don't log for production\n        if (!this.production && (logLevel < Logger.development_log_level)) return; // don't log for development\n\n\n        const y = Logger.getCursorY(Deno.stdout);\n        const x = Logger.getCursorX(Deno.stdout);\n\n        this.log(console_theme == 'dark' ?  COLOR.WHITE : COLOR.BLACK, this.normalizeLogText(text), data, LOG_LEVEL.DEFAULT, false, false)\n        \n        return {\n            update: (text:string|TemplateStringsArray,...data:any[]) => {\n                const dy = y-Logger.getCursorY(Deno.stdout);\n                const dx = x-Logger.getCursorX(Deno.stdout);\n\n                const log_string = this.generateLogString(console_theme == 'dark' ?  COLOR.WHITE : COLOR.BLACK, this.normalizeLogText(text), data, false);\n                const new_lines = 1 + (log_string.match(/\\n/g) || []).length\n                this.logRaw(\n                    Logger.moveCursor(dx,dy) + \n                    Logger.clearCursorLine +\n                    log_string +\n                    Logger.moveCursor(-dx,-dy-new_lines),\n                    LOG_LEVEL.DEFAULT,\n                    false,\n                    false\n                )\n                // process.stdout.write(Logger.moveCursor(dx,dy));\n                // process.stdout.write(this.normalizeLogText(text)+'\\r\\n');\n                // process.stdout.write(Logger.moveCursor(-dx,-dy))\n            }\n        } as const\n\n    }\n\n\n\n    static cursor_x = new WeakMap<any,number>();\n    static cursor_y = new WeakMap<any,number>();\n\n\n    static getCursorX(term:any) {\n        if (!this.cursor_x.has(term)) this.cursor_x.set(term, 0);\n        return this.cursor_x.get(term)!;\n    }\n\n    static getCursorY(term={}) {\n        if (!this.cursor_y.has(term)) this.cursor_y.set(term, 0);\n        return this.cursor_y.get(term)!\n    }\n\n    static setCursorX(term={}, value:number) {\n        this.cursor_x.set(term, value)\n    }\n\n    static setCursorY(term={}, value:number) {\n        this.cursor_y.set(term, value)\n    }\n\n    private static setCursorPosition(x:number, y:number){\n        return `\\x1b[${y};${x}H`\n    }\n\n\n    private static readonly clearCursorLine = `\\x1b[K`;\n\n    private static moveCursor(x:number, y:number){\n        let move = '';\n        if (x > 0 ) move += `\\x1b[${x}C`\n        else if (x < 0 ) move += `\\x1b[${-x}D`\n\n        if (y > 0 ) move += `\\x1b[${y}B`\n        else if (y < 0 ) move += `\\x1b[${-y}A`\n        return move;\n    }\n\n    // workaround for ciruclar DATEX Runtime dependencies\n    public static setRuntime(runtime:typeof Runtime) {\n        _Runtime = runtime;\n    }\n    public static setType(type:typeof Type) {\n        _Type = type;\n    }\n    public static setPointer(pointer:typeof Pointer) {\n        _Pointer = pointer;\n    }\n\n\n    private static formatters = new Map<string, LogFormatter>();\n\n    public static registerLogFormatter(formatter:LogFormatter) {\n        this.formatters.set(formatter.name, formatter)\n    }\n    \n \n    // set log levels for development / production\n    // only enable debug logs for devlopment logs if cookie set\n    static #development_log_level = LOG_LEVEL.VERBOSE;\n    static #production_log_level = LOG_LEVEL.VERBOSE;\n\n    public static set development_log_level(log_level:LOG_LEVEL) {\n        this.#development_log_level = log_level;\n    }\n    public static get development_log_level() {\n        return this.#development_log_level;\n    }\n\n    public static set production_log_level(log_level:LOG_LEVEL) {\n        this.#production_log_level = log_level;\n    }\n    public static get production_log_level() {\n        return this.#production_log_level;\n    }\n \n\n\n\n    // Log streams\n\n    static loggersForStream = new Map<StreamSink, Set<Logger>>()\n\n    static logToStream<S extends StreamSink>(stream:S, ...filter_origins:string[]):S {\n        // global stream\n        if (!filter_origins?.length) {\n            this.global_log_streams.add(stream);\n        }\n        // stream for specific origins\n        else {\n            for (const origin of filter_origins) {\n                for (const logger of this.loggers_by_origin.get(origin)??[]) {\n                    logger.out_streams.add(stream);\n                    if (!this.loggersForStream.has(stream)) this.loggersForStream.set(stream, new Set());\n                    this.loggersForStream.get(stream)?.add(logger);\n                }\n            }\n        }\n        return stream;\n    }\n\n}\n\n\nLogger.registerLogFormatter(new ColorFormatter);\nLogger.registerLogFormatter(new BGColorFormatter);\nLogger.registerLogFormatter(new BoldFormatter);\nLogger.registerLogFormatter(new ResetFormatter);\nLogger.registerLogFormatter(new DATEXFormatter);\nLogger.registerLogFormatter(new ImageFormatter);\nLogger.registerLogFormatter(new TextFormatter);\n\n\n// @ts-ignore set global logger for dev console\nglobalThis.logger = new Logger(\"main\");\n\n// set log level (browser default true, deno default false)\nLogger.development_log_level = client_type === \"deno\" ? LOG_LEVEL.DEFAULT : (hasDebugCookie() ? LOG_LEVEL.VERBOSE : LOG_LEVEL.DEFAULT)\nLogger.production_log_level = client_type === \"deno\" ? LOG_LEVEL.DEFAULT : LOG_LEVEL.VERBOSE;\n\nexport let verboseArg = false;\n\nif (client_type === \"deno\") (async ()=> {\n    // @ts-ignore no init workaround\n    if (globalThis.NO_DATEX) return;\n    verboseArg = !!(await import(\"./args.ts\" /*lazy*/)).commandLineOptions.option(\"verbose\", {aliases: [\"v\"], type: \"boolean\", default: false, description: \"Show logs for all levels, including debug logs\"})\n\n    if (verboseArg) {\n        Logger.development_log_level = LOG_LEVEL.VERBOSE;\n        Logger.production_log_level = LOG_LEVEL.VERBOSE;\n    }\n    else {\n        Logger.development_log_level = LOG_LEVEL.DEFAULT;\n        Logger.production_log_level = LOG_LEVEL.DEFAULT;\n    }\n})()\n\n"],"names":["LOG_LEVEL","LOG_FORMATTING","_Runtime","_Type","_Pointer","console","console_ansi","hasDebugCookie","client_type","is_worker","WorkerGlobalScope","self","globalThis","Deno","isPolyfill","UNYT_COLORS","RED","GREEN","BLUE","YELLOW","MAGENTA","CYAN","BLACK","WHITE","GREY","ESCAPE_SEQUENCES","CLEAR","RESET","BOLD","DIM","ITALIC","UNDERLINE","INVERSE","HIDDEN","DEFAULT","RESET_UNDERLINE","RESET_INVERSE","COLOR_DEFAULT","BG_BLACK","BG_RED","BG_GREEN","BG_YELLOW","BG_BLUE","BG_MAGENTA","BG_CYAN","BG_WHITE","BG_GREY","BG_COLOR_DEFAULT","UNYT_RED","join","UNYT_GREEN","UNYT_BLUE","UNYT_CYAN","UNYT_MAGENTA","UNYT_YELLOW","UNYT_BLACK","UNYT_WHITE","UNYT_GREY","UNYT_BG_RED","UNYT_BG_GREEN","UNYT_BG_BLUE","UNYT_BG_CYAN","UNYT_BG_MAGENTA","UNYT_BG_YELLOW","UNYT_BG_GREY","UNYT_POINTER","COLOR","POINTER","console_theme","_override_console_theme","matchMedia","matches","addEventListener","e","actualConsole","console_log","log_data","log_level","error","warn","debug","log","rgbToHsl","r","g","b","max","Math","min","h","s","l","d","hslToRgb","k","n","a","f","round","brightenRgb","font_family","ColorFormatter","name","variables","red","c","green","yellow","blue","magenta","cyan","black","white","grey","formatMeta","params","main_color","formatting","Logger","getFormattingColor","slice","map","v","TextFormatter","formatInline","text","formatValue","value","toString","ResetFormatter","BoldFormatter","BGColorFormatter","getEscapedBackgroundColor","DATEXFormatter","collapse","includes","color","valueToDatexStringExperimental","ImageFormatter","loggers_by_origin","Map","global_log_streams","Set","origin","pointer","origin_value","locked","lockedContent","box_width","production","tags","WeakMap","browser_supports_ansi_escape_codes","chrome","log_to_console","log_to_cache","log_to_streams","cache","out_streams","constructor","ofValue","replace","getByValue","id","has","set","get","add","info","bind","success","plain","dynamic","destroy","delete","data","only_log_own_stream","add_tag","raw","onlyReturn","production_log_level","development_log_level","log_string","generateLogString","logRaw","update_xy","new_lines","match","length","setCursorY","stdout","getCursorY","stream","write","loggersForStream","size","inverse_underline_block","convertLogStringForBrowser","_","replaceAll","getTag","generateTag","color_esc","tag","esc_tag","message","applyLogFormatters","formatEscapeSequences","match_log_formatter","webkitConvertPointFromNodeToPage","RegExp","all","_args","outer_content","content","parseInsertValueDefault","shift","formatter","formatters","args","split","parseFormatterArgument","spread_variables","undefined","entry","Error","stack","arg","vars","startsWith","endsWith","test","Number","trim","x","brightenEscapedColor","removeEscapeFormatters","substring","parseInt","imageUrlToBase64","url","blob","fetch","Promise","resolve","reader","FileReader","onloadend","result","readAsDataURL","box","title","message_array","m","flat","date","Date","toLocaleDateString","toLocaleTimeString","padEnd","formatters_length","normalizeLogText","Array","isTemplateStringArrayOrString","table","getInfoMessage","clear","silent","lock","flush","logLevel","y","getCursorX","update","dy","dx","moveCursor","clearCursorLine","cursor_x","cursor_y","term","setCursorX","setCursorPosition","move","setRuntime","runtime","setType","type","setPointer","registerLogFormatter","logToStream","filter_origins","logger","verboseArg","NO_DATEX","commandLineOptions","option","aliases","default","description"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/utils/","file":"logger.ts"}