UNPKG

@probe.gl/log

Version:

JavaScript debug logging for browser and Node

8 lines (7 loc) 38.4 kB
{ "version": 3, "sources": ["../src/index.ts", "../src/loggers/probe-log.ts", "../src/utils/assert.ts", "../src/loggers/log-utils.ts", "../src/loggers/base-log.ts", "../src/utils/local-storage.ts", "../src/utils/formatters.ts", "../src/utils/color.ts", "../src/utils/autobind.ts", "../src/utils/hi-res-timestamp.ts", "../src/loggers/console-log.ts", "../src/loggers/memory-log.ts", "../src/init.ts"], "sourcesContent": ["import {ProbeLog} from './loggers/probe-log';\n\n// DEFAULT EXPORT IS A LOG INSTANCE\nexport default new ProbeLog({id: '@probe.gl/log'});\n\n// LOGGING\nexport type {Logger} from './loggers/logger';\nexport {ProbeLog, ProbeLog as Log} from './loggers/probe-log';\nexport {ConsoleLog} from './loggers/console-log';\nexport {BaseLog} from './loggers/base-log';\nexport type {MemoryLogMessage} from './loggers/memory-log';\nexport {MemoryLog} from './loggers/memory-log';\n\n// UTILITIES\nexport {COLOR} from './utils/color';\nexport {addColor} from './utils/color';\nexport {leftPad, rightPad} from './utils/formatters';\nexport {autobind} from './utils/autobind';\nexport {LocalStorage} from './utils/local-storage';\nexport {getHiResTimestamp} from './utils/hi-res-timestamp';\n\nimport './init';\n", "// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-console,prefer-rest-params */\nimport {VERSION, isBrowser} from '@probe.gl/env';\nimport {LogFunction} from './logger';\nimport {BaseLog, NormalizedLogArguments, noop} from './base-log';\nimport {LocalStorage} from '../utils/local-storage';\nimport {formatTime, leftPad} from '../utils/formatters';\nimport {addColor} from '../utils/color';\nimport {autobind} from '../utils/autobind';\nimport assert from '../utils/assert';\nimport {getHiResTimestamp} from '../utils/hi-res-timestamp';\n\n/** \"Global\" log configuration settings */\ntype ProbeLogConfiguration = {\n enabled?: boolean;\n level?: number;\n [key: string]: unknown;\n};\n\ntype Table = Record<string, any>;\n\n// Instrumentation in other packages may override console methods, so preserve them here\nconst originalConsole = {\n debug: isBrowser() ? console.debug || console.log : console.log,\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error\n};\n\nconst DEFAULT_LOG_CONFIGURATION: Required<ProbeLogConfiguration> = {\n enabled: true,\n level: 0\n};\n\n/** A console wrapper */\n\nexport class ProbeLog extends BaseLog {\n static VERSION = VERSION;\n\n id: string;\n VERSION: string = VERSION;\n _startTs: number = getHiResTimestamp();\n _deltaTs: number = getHiResTimestamp();\n _storage: LocalStorage<Record<string, ProbeLogConfiguration>>;\n override userData = {};\n\n // TODO - fix support from throttling groups\n LOG_THROTTLE_TIMEOUT: number = 0; // Time before throttled messages are logged again\n\n constructor({id} = {id: ''}) {\n super({level: 0});\n this.id = id;\n this.userData = {};\n this._storage = new LocalStorage<Record<string, ProbeLogConfiguration>>(\n `__probe-${this.id}__`,\n {[this.id]: DEFAULT_LOG_CONFIGURATION}\n );\n\n this.timeStamp(`${this.id} started`);\n\n autobind(this);\n Object.seal(this);\n }\n\n isEnabled(): boolean {\n return this._getConfiguration().enabled;\n }\n\n override getLevel(): number {\n return this._getConfiguration().level;\n }\n\n /** @return milliseconds, with fractions */\n getTotal(): number {\n return Number((getHiResTimestamp() - this._startTs).toPrecision(10));\n }\n\n /** @return milliseconds, with fractions */\n getDelta(): number {\n return Number((getHiResTimestamp() - this._deltaTs).toPrecision(10));\n }\n\n /** @deprecated use logLevel */\n set priority(newPriority: number) {\n this.level = newPriority;\n }\n\n /** @deprecated use logLevel */\n get priority(): number {\n return this.level;\n }\n\n /** @deprecated use logLevel */\n getPriority(): number {\n return this.level;\n }\n\n // Configure\n\n enable(enabled: boolean = true): this {\n this._updateConfiguration({enabled});\n return this;\n }\n\n override setLevel(level: number): this {\n this._updateConfiguration({level});\n return this;\n }\n\n /** return the current status of the setting */\n get(setting: string): any {\n return this._getConfiguration()[setting];\n }\n\n // update the status of the setting\n set(setting: string, value: any): void {\n this._updateConfiguration({[setting]: value});\n }\n\n /** Logs the current settings as a table */\n settings(): void {\n if (console.table) {\n console.table(this._storage.config);\n } else {\n console.log(this._storage.config);\n }\n }\n\n // Unconditional logging\n\n assert(condition: unknown, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n }\n\n /** Warn, but only once, no console flooding */\n override warn(message: string, ...args: unknown[]): LogFunction;\n override warn(message: string, ...args: unknown[]): LogFunction {\n return this._log('warn', 0, message, args, {\n method: originalConsole.warn,\n once: true\n });\n }\n\n /** Print an error */\n override error(message: string, ...args: unknown[]): LogFunction;\n override error(message: string, ...args: unknown[]): LogFunction {\n return this._log('error', 0, message, args, {\n method: originalConsole.error\n });\n }\n\n /** Print a deprecation warning */\n deprecated(oldUsage: string, newUsage: string): LogFunction {\n return this.warn(`\\`${oldUsage}\\` is deprecated and will be removed \\\nin a later version. Use \\`${newUsage}\\` instead`);\n }\n\n /** Print a removal warning */\n removed(oldUsage: string, newUsage: string): LogFunction {\n return this.error(`\\`${oldUsage}\\` has been removed. Use \\`${newUsage}\\` instead`);\n }\n\n // Conditional logging\n\n /** Log to a group */\n probe(logLevel, message?, ...args: unknown[]): LogFunction;\n probe(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('log', logLevel, message, args, {\n method: originalConsole.log,\n time: true,\n once: true\n });\n }\n\n /** Log a debug message */\n override log(logLevel, message?, ...args: unknown[]): LogFunction;\n override log(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('log', logLevel, message, args, {\n method: originalConsole.debug\n });\n }\n\n /** Log a normal message */\n override info(logLevel, message?, ...args: unknown[]): LogFunction;\n override info(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('info', logLevel, message, args, {method: console.info});\n }\n\n /** Log a normal message, but only once, no console flooding */\n override once(logLevel, message?, ...args: unknown[]): LogFunction;\n override once(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('once', logLevel, message, args, {\n method: originalConsole.debug || originalConsole.info,\n once: true\n });\n }\n\n /** Logs an object as a table */\n table(logLevel, table?, columns?): LogFunction {\n if (table) {\n return this._log('table', logLevel, table, (columns && [columns]) || [], {\n method: console.table || noop,\n tag: getTableHeader(table)\n });\n }\n return noop;\n }\n\n time(logLevel, message) {\n return this._log('time', logLevel, message, [], {\n method: console.time ? console.time : console.info\n });\n }\n\n timeEnd(logLevel, message) {\n return this._log('time', logLevel, message, [], {\n method: console.timeEnd ? console.timeEnd : console.info\n });\n }\n\n timeStamp(logLevel, message?) {\n return this._log('time', logLevel, message, [], {\n method: console.timeStamp || noop\n });\n }\n\n group(logLevel, message, opts = {collapsed: false}) {\n const method = (opts.collapsed ? console.groupCollapsed : console.group) || console.info;\n return this._log('group', logLevel, message, [], {method});\n }\n\n groupCollapsed(logLevel, message, opts = {}) {\n return this.group(logLevel, message, Object.assign({}, opts, {collapsed: true}));\n }\n\n groupEnd(logLevel) {\n return this._log('groupEnd', logLevel, '', [], {\n method: console.groupEnd || noop\n });\n }\n\n // EXPERIMENTAL\n\n withGroup(logLevel: number, message: string, func: Function): void {\n this.group(logLevel, message)();\n\n try {\n func();\n } finally {\n this.groupEnd(logLevel)();\n }\n }\n\n trace(): void {\n if (console.trace) {\n console.trace();\n }\n }\n\n protected override _shouldLog(logLevel: unknown): boolean {\n return this.isEnabled() && super._shouldLog(logLevel);\n }\n\n protected override _emit(_type: string, normalized: NormalizedLogArguments): LogFunction {\n const method = normalized.method;\n assert(method);\n\n normalized.total = this.getTotal();\n normalized.delta = this.getDelta();\n // reset delta timer\n this._deltaTs = getHiResTimestamp();\n\n const message = decorateMessage(this.id, normalized.message, normalized);\n\n // Bind console function so that it can be called after being returned\n return method.bind(console, message, ...normalized.args);\n }\n\n _getConfiguration(): Required<ProbeLogConfiguration> {\n if (!this._storage.config[this.id]) {\n this._updateConfiguration(DEFAULT_LOG_CONFIGURATION);\n }\n\n // @ts-expect-error guaranteed to be defined\n return this._storage.config[this.id];\n }\n\n _updateConfiguration(configuration: ProbeLogConfiguration): void {\n const currentConfiguration = this._storage.config[this.id] || {\n ...DEFAULT_LOG_CONFIGURATION\n };\n this._storage.setConfiguration({\n [this.id]: {...currentConfiguration, ...configuration}\n });\n }\n}\n\nfunction decorateMessage(id, message, opts) {\n if (typeof message === 'string') {\n const time = opts.time ? leftPad(formatTime(opts.total)) : '';\n message = opts.time ? `${id}: ${time} ${message}` : `${id}: ${message}`;\n message = addColor(message, opts.color, opts.background);\n }\n return message;\n}\n\nfunction getTableHeader(table: Table): string {\n for (const key in table) {\n for (const title in table[key]) {\n return title || 'untitled';\n }\n }\n return 'empty';\n}\n\nexport {normalizeArguments} from './log-utils';\nexport {normalizeLogLevel} from './log-utils';\n", "export default function assert(condition: unknown, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n", "// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport assert from '../utils/assert';\n\n/**\n * Get logLevel from first argument:\n * - log(logLevel, message, args) => logLevel\n * - log(message, args) => 0\n * - log({logLevel, ...}, message, args) => logLevel\n * - log({logLevel, message, args}) => logLevel\n */\nexport function normalizeLogLevel(logLevel: unknown): number {\n if (!logLevel) {\n return 0;\n }\n let resolvedLevel;\n\n switch (typeof logLevel) {\n case 'number':\n resolvedLevel = logLevel;\n break;\n\n case 'object':\n // Backward compatibility\n // TODO - deprecate `priority`\n // @ts-expect-error\n resolvedLevel = logLevel.logLevel || logLevel.priority || 0;\n break;\n\n default:\n return 0;\n }\n // 'log level must be a number'\n assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);\n\n return resolvedLevel;\n}\n\n/**\n * \"Normalizes\" the various argument patterns into an object with known types\n * - log(logLevel, message, args) => {logLevel, message, args}\n * - log(message, args) => {logLevel: 0, message, args}\n * - log({logLevel, ...}, message, args) => {logLevel, message, args}\n * - log({logLevel, message, args}) => {logLevel, message, args}\n */\nexport function normalizeArguments(opts: {\n logLevel;\n message;\n collapsed?: boolean;\n args?: IArguments | any[] | undefined;\n opts?;\n}): NormalizedArguments {\n const {logLevel, message} = opts;\n opts.logLevel = normalizeLogLevel(logLevel);\n\n // We use `arguments` instead of rest parameters (...args) because IE\n // does not support the syntax. Rest parameters is transpiled to code with\n // perf impact. Doing it here instead avoids constructing args when logging is\n // disabled.\n // TODO - remove when/if IE support is dropped\n const args: any[] = opts.args ? Array.from(opts.args) : [];\n // args should only contain arguments that appear after `message`\n // eslint-disable-next-line no-empty\n while (args.length && args.shift() !== message) {}\n\n switch (typeof logLevel) {\n case 'string':\n case 'function':\n if (message !== undefined) {\n args.unshift(message);\n }\n opts.message = logLevel;\n break;\n\n case 'object':\n Object.assign(opts, logLevel);\n break;\n\n default:\n }\n\n // Resolve functions into strings by calling them\n if (typeof opts.message === 'function') {\n opts.message = opts.message();\n }\n const messageType = typeof opts.message;\n // 'log message must be a string' or object\n assert(messageType === 'string' || messageType === 'object');\n\n // original opts + normalized opts + opts arg + fixed up message\n return Object.assign(opts, {args}, opts.opts);\n}\nexport type NormalizedArguments = {\n logLevel: number;\n message: any;\n args: any[];\n tag?: unknown;\n method?: Function;\n once?: boolean;\n total?: number;\n delta?: number;\n [key: string]: any;\n};\n", "// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Logger, LogFunction} from './logger';\nimport {NormalizedArguments, normalizeArguments, normalizeLogLevel} from './log-utils';\n\nconst noop = () => {};\n\nexport type NormalizedLogArguments = NormalizedArguments;\ntype LogType = 'log' | 'info' | 'once' | 'warn' | 'error' | 'table' | 'group' | 'groupEnd' | 'time';\n\ntype LogOptions = Partial<NormalizedLogArguments>;\n\n/**\n * Base logger that implements log level handling and once de-duplication.\n * Concrete loggers implement `_emit` to perform actual output.\n */\nexport abstract class BaseLog implements Logger {\n userData: Record<string, unknown> = {};\n\n protected _level: number;\n protected _onceCache = new Set<unknown>();\n\n constructor({level = 0}: {level?: number} = {}) {\n this._level = level;\n }\n\n set level(newLevel: number) {\n this.setLevel(newLevel);\n }\n\n get level(): number {\n return this.getLevel();\n }\n\n setLevel(level: number): this {\n this._level = level;\n return this;\n }\n\n getLevel(): number {\n return this._level;\n }\n\n // Unconditional logging\n\n warn(message: string, ...args: unknown[]): LogFunction {\n return this._log('warn', 0, message, args, {once: true});\n }\n\n error(message: string, ...args: unknown[]): LogFunction {\n return this._log('error', 0, message, args);\n }\n\n // Conditional logging\n\n log(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('log', logLevel, message, args);\n }\n\n info(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('info', logLevel, message, args);\n }\n\n once(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('once', logLevel, message, args, {once: true});\n }\n\n protected _log(\n type: LogType,\n logLevel: unknown,\n message: unknown,\n args: unknown[],\n options: LogOptions = {}\n ): LogFunction {\n const normalized = normalizeArguments({\n logLevel,\n message,\n args: this._buildArgs(logLevel, message, args),\n opts: options\n });\n\n return this._createLogFunction(type, normalized, options);\n }\n\n protected _buildArgs(logLevel: unknown, message: unknown, args: unknown[]): unknown[] {\n return [logLevel, message, ...args];\n }\n\n protected _createLogFunction(\n type: LogType,\n normalized: NormalizedLogArguments,\n options: LogOptions\n ): LogFunction {\n if (!this._shouldLog(normalized.logLevel)) {\n return noop;\n }\n\n const tag = this._getOnceTag(options.tag ?? normalized.tag ?? normalized.message);\n if ((options.once || normalized.once) && tag !== undefined) {\n if (this._onceCache.has(tag)) {\n return noop;\n }\n this._onceCache.add(tag);\n }\n\n return this._emit(type, normalized);\n }\n\n protected _shouldLog(logLevel: unknown): boolean {\n return this.getLevel() >= normalizeLogLevel(logLevel);\n }\n\n protected _getOnceTag(tag: unknown): unknown {\n if (tag === undefined) {\n return undefined;\n }\n try {\n return typeof tag === 'string' ? tag : String(tag);\n } catch {\n return undefined;\n }\n }\n\n /** Create the actual log function for this logger implementation. */\n protected abstract _emit(type: LogType, normalized: NormalizedLogArguments): LogFunction;\n}\n\nexport {noop};\n", "// probe.gl, MIT license\n\nexport type StorageType = 'sessionStorage' | 'localStorage';\n\nfunction getStorage(type: StorageType): Storage | null {\n try {\n const storage: Storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return storage;\n } catch (e) {\n return null;\n }\n}\n\n// Store keys in local storage via simple interface\nexport class LocalStorage<Configuration extends {}> {\n storage: Storage | null;\n id: string;\n config: Required<Configuration>;\n\n constructor(\n id: string,\n defaultConfig: Required<Configuration>,\n type: StorageType = 'sessionStorage'\n ) {\n this.storage = getStorage(type);\n this.id = id;\n this.config = defaultConfig;\n this._loadConfiguration();\n }\n\n getConfiguration(): Required<Configuration> {\n return this.config;\n }\n\n setConfiguration(configuration: Configuration): void {\n Object.assign(this.config, configuration);\n if (this.storage) {\n const serialized = JSON.stringify(this.config);\n this.storage.setItem(this.id, serialized);\n }\n }\n\n // Get config from persistent store, if available\n _loadConfiguration() {\n let configuration = {};\n if (this.storage) {\n const serializedConfiguration = this.storage.getItem(this.id);\n configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};\n }\n Object.assign(this.config, configuration);\n return this;\n }\n}\n", "// probe.gl, MIT license\n\nexport type FormatValueOptions = {\n isInteger?: boolean;\n maxElts?: number;\n size?: number;\n};\n\n/**\n * Format time\n */\nexport function formatTime(ms: number): string {\n let formatted;\n if (ms < 10) {\n formatted = `${ms.toFixed(2)}ms`;\n } else if (ms < 100) {\n formatted = `${ms.toFixed(1)}ms`;\n } else if (ms < 1000) {\n formatted = `${ms.toFixed(0)}ms`;\n } else {\n formatted = `${(ms / 1000).toFixed(2)}s`;\n }\n return formatted;\n}\n\nexport function leftPad(string: string, length: number = 8): string {\n const padLength = Math.max(length - string.length, 0);\n return `${' '.repeat(padLength)}${string}`;\n}\n\nexport function rightPad(string: string, length: number = 8): string {\n const padLength = Math.max(length - string.length, 0);\n return `${string}${' '.repeat(padLength)}`;\n}\n\nexport function formatValue(v: unknown, options: FormatValueOptions = {}): string {\n const EPSILON = 1e-16;\n const {isInteger = false} = options;\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, options);\n }\n if (!Number.isFinite(v)) {\n return String(v);\n }\n // @ts-expect-error\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n if (isInteger) {\n // @ts-expect-error\n return v.toFixed(0);\n }\n // @ts-expect-error\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n // @ts-expect-error\n return v.toFixed(0);\n }\n // @ts-expect-error\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n\n/** Helper to formatValue */\nfunction formatArrayValue(v: any, options: FormatValueOptions) {\n const {maxElts = 16, size = 1} = options;\n let string = '[';\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += `,${i % size === 0 ? ' ' : ''}`;\n }\n string += formatValue(v[i], options);\n }\n const terminator = v.length > maxElts ? '...' : ']';\n return `${string}${terminator}`;\n}\n", "import {isBrowser} from '@probe.gl/env';\n\nexport enum COLOR {\n BLACK = 30,\n RED = 31,\n GREEN = 32,\n YELLOW = 33,\n BLUE = 34,\n MAGENTA = 35,\n CYAN = 36,\n WHITE = 37,\n\n BRIGHT_BLACK = 90,\n BRIGHT_RED = 91,\n BRIGHT_GREEN = 92,\n BRIGHT_YELLOW = 93,\n BRIGHT_BLUE = 94,\n BRIGHT_MAGENTA = 95,\n BRIGHT_CYAN = 96,\n BRIGHT_WHITE = 97\n}\n\nconst BACKGROUND_INCREMENT = 10;\n\nfunction getColor(color: string | COLOR): number {\n if (typeof color !== 'string') {\n return color;\n }\n color = color.toUpperCase();\n return COLOR[color] || COLOR.WHITE;\n}\n\nexport function addColor(\n string: string,\n color: string | COLOR,\n background?: string | COLOR\n): string {\n if (!isBrowser && typeof string === 'string') {\n if (color) {\n const colorCode = getColor(color);\n string = `\\u001b[${colorCode}m${string}\\u001b[39m`;\n }\n if (background) {\n // background colors values are +10\n const colorCode = getColor(background);\n string = `\\u001b[${colorCode + BACKGROUND_INCREMENT}m${string}\\u001b[49m`;\n }\n }\n return string;\n}\n", "// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/**\n * Binds the \"this\" argument of all functions on a class instance to the instance\n * @param obj - class instance (typically a react component)\n */\nexport function autobind(obj: object, predefined = ['constructor']): void {\n const proto = Object.getPrototypeOf(obj);\n const propNames = Object.getOwnPropertyNames(proto);\n\n const object = obj as Record<string, unknown>;\n for (const key of propNames) {\n const value = object[key];\n if (typeof value === 'function') {\n if (!predefined.find((name) => key === name)) {\n object[key] = value.bind(obj);\n }\n }\n }\n}\n", "// probe.gl, MIT license\n\nimport {window, process, isBrowser} from '@probe.gl/env';\n\n/** Get best timer available. */\nexport function getHiResTimestamp() {\n let timestamp;\n if (isBrowser() && window.performance) {\n timestamp = window?.performance?.now?.();\n } else if ('hrtime' in process) {\n // @ts-ignore\n const timeParts = process?.hrtime?.();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n } else {\n timestamp = Date.now();\n }\n\n return timestamp;\n}\n", "// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-console */\n\nimport {LogFunction} from './logger';\nimport {BaseLog, NormalizedLogArguments, noop} from './base-log';\n\n/**\n * Minimal console-backed logger. Does not persist configuration or implement log levels.\n * Intended as a lightweight Logger implementation.\n */\nexport class ConsoleLog extends BaseLog {\n override warn(message: string, ...args: unknown[]): LogFunction {\n return this._log('warn', 0, message, args, {\n method: console.warn || console.log,\n once: true\n });\n }\n\n override error(message: string, ...args: unknown[]): LogFunction {\n return this._log('error', 0, message, args, {method: console.error});\n }\n\n override log(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('log', logLevel, message, args, {\n method: console.debug || console.log\n });\n }\n\n override info(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('info', logLevel, message, args, {\n method: console.info || console.log\n });\n }\n\n override once(logLevel, message?, ...args: unknown[]): LogFunction {\n return this._log('once', logLevel, message, args, {\n method: console.debug || console.info || console.log,\n once: true\n });\n }\n\n protected override _emit(_type: string, normalized: NormalizedLogArguments): LogFunction {\n const method = normalized.method;\n if (!method) {\n return noop;\n }\n return method.bind(console, normalized.message, ...normalized.args);\n }\n}\n", "// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {LogFunction} from './logger';\nimport {BaseLog, NormalizedLogArguments} from './base-log';\n\nexport type MemoryLogMessage = {\n level: number;\n type: 'warning' | 'error' | 'log' | 'info' | 'once' | 'table';\n message: string;\n args: unknown[];\n};\n\nexport class MemoryLog extends BaseLog {\n override userData: Record<string, unknown> = {};\n\n messages: MemoryLogMessage[] = [];\n onMessage?: ((message: MemoryLogMessage) => void) | undefined;\n\n constructor(\n options: {\n onMessage?: (message: MemoryLogMessage) => void;\n level?: number;\n } = {}\n ) {\n super({level: options.level ?? 0});\n this.onMessage = options.onMessage;\n }\n\n protected override _emit(type: string, normalized: NormalizedLogArguments): LogFunction {\n const messageText = String(normalized.message);\n const entry: MemoryLogMessage = {\n type: this._normalizeType(type),\n level: normalized.logLevel,\n message: messageText,\n args: normalized.args\n };\n\n return () => {\n this.messages.push(entry);\n if (this.onMessage) {\n this.onMessage(entry);\n }\n };\n }\n\n private _normalizeType(type: string): MemoryLogMessage['type'] {\n switch (type) {\n case 'warn':\n return 'warning';\n case 'error':\n return 'error';\n case 'info':\n return 'info';\n case 'once':\n return 'once';\n case 'table':\n return 'table';\n default:\n return 'log';\n }\n }\n}\n", "// @ts-nocheck\n/* eslint-disable */\nglobalThis.probe = {};\n"], "mappings": "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", "names": ["import_env", "COLOR", "import_env"] }