@dxos/log 0.4.10-main.fa5a270 → 0.4.10-main.fd4f2a3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +49 -18
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +61 -28
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/decorators.d.ts.map +1 -1
- package/dist/types/src/processors/console-processor.d.ts.map +1 -1
- package/dist/types/src/processors/file-processor.d.ts +10 -3
- package/dist/types/src/processors/file-processor.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/context.ts +1 -1
- package/src/decorators.ts +100 -24
- package/src/log.ts +1 -1
- package/src/processors/browser-processor.ts +1 -1
- package/src/processors/console-processor.ts +9 -8
- package/src/processors/file-processor.ts +27 -8
|
@@ -87,7 +87,7 @@ var getContextFromEntry = (entry) => {
|
|
|
87
87
|
if (entry.error) {
|
|
88
88
|
const errorContext = entry.error.context;
|
|
89
89
|
context = Object.assign(context ?? {}, {
|
|
90
|
-
error: entry.error
|
|
90
|
+
error: entry.error,
|
|
91
91
|
...errorContext
|
|
92
92
|
});
|
|
93
93
|
}
|
|
@@ -95,10 +95,12 @@ var getContextFromEntry = (entry) => {
|
|
|
95
95
|
};
|
|
96
96
|
|
|
97
97
|
// packages/common/log/src/decorators.ts
|
|
98
|
+
import chalk from "chalk";
|
|
98
99
|
import { inspect } from "@dxos/node-std/util";
|
|
99
100
|
var nextPromiseId = 0;
|
|
100
101
|
var createMethodLogDecorator = (log2) => (arg0, arg1, meta) => (target, propertyKey, descriptor) => {
|
|
101
102
|
const method = descriptor.value;
|
|
103
|
+
const methodName = propertyKey;
|
|
102
104
|
descriptor.value = function(...args) {
|
|
103
105
|
const combinedMeta = {
|
|
104
106
|
...meta ?? {},
|
|
@@ -110,30 +112,54 @@ var createMethodLogDecorator = (log2) => (arg0, arg1, meta) => (target, property
|
|
|
110
112
|
const result = method.apply(this, args);
|
|
111
113
|
if (isThenable(result)) {
|
|
112
114
|
const id = nextPromiseId++;
|
|
113
|
-
log2
|
|
115
|
+
logAsyncBegin(log2, methodName, formattedArgs, id, combinedMeta);
|
|
114
116
|
result.then((resolvedValue) => {
|
|
115
|
-
|
|
116
|
-
log2.info(`\u2705 resolve #${id} ${(performance.now() - startTime).toFixed(0)}ms => ${inspect(resolvedValue, false, 1, true)}`, {}, combinedMeta);
|
|
117
|
-
} else {
|
|
118
|
-
log2.info(`\u2705 resolve #${id} ${(performance.now() - startTime).toFixed(0)}ms`, {}, combinedMeta);
|
|
119
|
-
}
|
|
117
|
+
logAsyncResolved(log2, methodName, resolvedValue, id, startTime, combinedMeta);
|
|
120
118
|
}, (err) => {
|
|
121
|
-
log2
|
|
119
|
+
logAsyncRejected(log2, methodName, err, id, startTime, combinedMeta);
|
|
122
120
|
});
|
|
123
121
|
} else {
|
|
124
|
-
log2
|
|
122
|
+
logSyncCall(log2, methodName, formattedArgs, result, combinedMeta);
|
|
125
123
|
}
|
|
126
124
|
return result;
|
|
127
125
|
} catch (err) {
|
|
128
|
-
log2
|
|
126
|
+
logSyncError(log2, methodName, formattedArgs, err, combinedMeta);
|
|
129
127
|
throw err;
|
|
130
128
|
}
|
|
131
129
|
};
|
|
132
130
|
Object.defineProperty(descriptor.value, "name", {
|
|
133
|
-
value:
|
|
131
|
+
value: methodName + "$log"
|
|
134
132
|
});
|
|
135
133
|
};
|
|
136
134
|
var isThenable = (obj) => obj && typeof obj.then === "function";
|
|
135
|
+
var logSyncCall = (log2, methodName, formattedArgs, result, combinedMeta) => {
|
|
136
|
+
log2.info(`.${formatFunction(methodName)} (${formattedArgs}) ${chalk.gray("resolve")} ${inspect(result, false, 1, true)}`, {}, combinedMeta);
|
|
137
|
+
};
|
|
138
|
+
var logSyncError = (log2, methodName, formattedArgs, err, combinedMeta) => {
|
|
139
|
+
log2.error(`.${formatFunction(methodName)} (${formattedArgs}) \u{1F525} ${err}`, {}, combinedMeta);
|
|
140
|
+
};
|
|
141
|
+
var logAsyncBegin = (log2, methodName, formattedArgs, promiseId, combinedMeta) => {
|
|
142
|
+
log2.info(`.${formatFunction(methodName)} \u21B4 (${formattedArgs}) ${chalk.gray("=>")} ${formatPromise(promiseId)}`, {}, combinedMeta);
|
|
143
|
+
};
|
|
144
|
+
var logAsyncResolved = (log2, methodName, resolvedValue, promiseId, startTime, combinedMeta) => {
|
|
145
|
+
if (resolvedValue !== void 0) {
|
|
146
|
+
log2.info(`.${formatFunction(methodName)} \u21B2 ${greenCheck} ${chalk.gray("resolve")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${chalk.gray("=>")} ${inspect(resolvedValue, false, 1, true)}`, {}, combinedMeta);
|
|
147
|
+
} else {
|
|
148
|
+
log2.info(`.${formatFunction(methodName)} \u21B2 ${greenCheck} ${chalk.gray("resolve")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)}`, {}, combinedMeta);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
var logAsyncRejected = (log2, methodName, err, promiseId, startTime, combinedMeta) => {
|
|
152
|
+
log2.info(`.${formatFunction(methodName)} \u21B2 \u{1F525} ${chalk.gray("reject")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${chalk.gray("=>")} ${err}`, {}, combinedMeta);
|
|
153
|
+
};
|
|
154
|
+
var greenCheck = chalk.green("\u2714");
|
|
155
|
+
var formatTimeElapsed = (startTime) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);
|
|
156
|
+
var COLOR_FUNCTION = [
|
|
157
|
+
220,
|
|
158
|
+
220,
|
|
159
|
+
170
|
|
160
|
+
];
|
|
161
|
+
var formatFunction = (name) => chalk.bold(chalk.rgb(...COLOR_FUNCTION)(name));
|
|
162
|
+
var formatPromise = (id) => chalk.blue(`Promise#${id}`);
|
|
137
163
|
|
|
138
164
|
// packages/common/log/src/options.ts
|
|
139
165
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
@@ -275,18 +301,23 @@ var BROWSER_PROCESSOR = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_B
|
|
|
275
301
|
import { appendFileSync, mkdirSync, openSync } from "@dxos/node-std/fs";
|
|
276
302
|
import { dirname } from "@dxos/node-std/path";
|
|
277
303
|
import { jsonify } from "@dxos/util";
|
|
278
|
-
var createFileProcessor = ({
|
|
304
|
+
var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
|
|
279
305
|
let fd;
|
|
280
306
|
return (config, entry) => {
|
|
281
|
-
if (!levels2.includes(entry.level)) {
|
|
307
|
+
if (levels2.length > 0 && !levels2.includes(entry.level)) {
|
|
282
308
|
return;
|
|
283
309
|
}
|
|
284
|
-
if (!
|
|
310
|
+
if (!shouldLog(entry, filters)) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (typeof pathOrFd === "number") {
|
|
314
|
+
fd = pathOrFd;
|
|
315
|
+
} else {
|
|
285
316
|
try {
|
|
286
|
-
mkdirSync(dirname(
|
|
317
|
+
mkdirSync(dirname(pathOrFd));
|
|
287
318
|
} catch {
|
|
288
319
|
}
|
|
289
|
-
fd = openSync(
|
|
320
|
+
fd = openSync(pathOrFd, "w");
|
|
290
321
|
}
|
|
291
322
|
const record = {
|
|
292
323
|
...entry,
|
|
@@ -306,7 +337,7 @@ var getLogFilePath = () => {
|
|
|
306
337
|
return logFilePath;
|
|
307
338
|
};
|
|
308
339
|
var FILE_PROCESSOR = createFileProcessor({
|
|
309
|
-
|
|
340
|
+
pathOrFd: getLogFilePath(),
|
|
310
341
|
levels: [
|
|
311
342
|
LogLevel.ERROR,
|
|
312
343
|
LogLevel.WARN,
|
|
@@ -386,7 +417,7 @@ var createLog = () => {
|
|
|
386
417
|
log2.info = (...params) => processLog(LogLevel.INFO, ...params);
|
|
387
418
|
log2.warn = (...params) => processLog(LogLevel.WARN, ...params);
|
|
388
419
|
log2.error = (...params) => processLog(LogLevel.ERROR, ...params);
|
|
389
|
-
log2.catch = (error, context, meta) => processLog(LogLevel.ERROR, error.
|
|
420
|
+
log2.catch = (error, context, meta) => processLog(LogLevel.ERROR, error.message, context, meta, error);
|
|
390
421
|
log2.break = () => log2.info("\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014");
|
|
391
422
|
log2.stack = (message, context, meta) => processLog(LogLevel.INFO, `${message ?? "Stack Dump"}
|
|
392
423
|
${getFormattedStackTrace()}`, context, meta);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/scope.ts", "../../../src/context.ts", "../../../src/decorators.ts", "../../../src/options.ts", "../../../src/platform/browser/index.ts", "../../../src/processors/console-stub.ts", "../../../src/processors/debug-processor.ts", "../../../src/processors/browser-processor.ts", "../../../src/processors/file-processor.ts", "../../../src/log.ts", "../../../src/experimental/ownership.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\n// Message helpers.\nimport omit from 'lodash.omit';\nimport pick from 'lodash.pick';\n\nexport { omit, pick };\n\nexport * from './config';\nexport * from './context';\nexport * from './log';\nexport { parseFilter } from './options';\nexport * from './processors';\nexport * from './scope';\nexport * from './meta';\n\nexport { getCurrentOwnershipScope } from './experimental/ownership';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogProcessor } from './context';\n\n/**\n * Standard levels.\n */\n// NOTE: Keep aligned with LogLevel in @dxos/protocols.\n// TODO(burdon): Update numbers?\nexport enum LogLevel {\n TRACE = 5,\n DEBUG = 10,\n INFO = 11,\n WARN = 12,\n ERROR = 13,\n}\n\nexport const levels: { [index: string]: LogLevel } = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n};\n\nexport const shortLevelName = {\n [LogLevel.TRACE]: 'T',\n [LogLevel.DEBUG]: 'D',\n [LogLevel.INFO]: 'I',\n [LogLevel.WARN]: 'W',\n [LogLevel.ERROR]: 'E',\n};\n\nexport enum LogProcessorType {\n CONSOLE = 'console',\n BROWSER = 'browser',\n DEBUG = 'debug',\n}\n\n/**\n * Individual filter condition.\n */\nexport type LogFilter = {\n level: LogLevel;\n pattern?: string;\n};\n\n/**\n * Options to set inline or load from the YML file.\n */\nexport type LogOptions = {\n file?: string;\n filter?: string | string[] | LogLevel;\n captureFilter?: string | string[] | LogLevel;\n depth?: number; // Context object depth.\n processor?: string | LogProcessorType;\n formatter?: {\n column: number;\n timestamp: boolean;\n timestampFirst: boolean;\n };\n prefix?: string;\n};\n\n/**\n * Runtime config.\n */\nexport interface LogConfig {\n options: LogOptions;\n filters?: LogFilter[];\n captureFilters?: LogFilter[];\n processors: LogProcessor[];\n prefix?: string;\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nconst logInfoProperties = Symbol('logInfoProperties');\n\n/**\n * Decorate fields, properties, or methods to automatically include their values in log messages.\n *\n * Example:\n *\n * ```typescript\n * class Example {\n * @logInfo\n * peerId: PublicKey;\n * }\n * ```\n */\nexport const logInfo = (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n // console.log(target, propertyKey, descriptor);\n (target[logInfoProperties] ??= []).push(propertyKey);\n};\n\n/**\n * Introspects class instance to find decorated metadata.\n * @param scope Class instance.\n */\nexport const gatherLogInfoFromScope = (scope: any): Record<string, any> => {\n if (!scope) {\n return {};\n }\n\n const res: Record<string, any> = {};\n\n const prototype = Object.getPrototypeOf(scope);\n const infoProps = prototype[logInfoProperties] ?? [];\n for (const prop of infoProps) {\n try {\n res[prop] = typeof scope[prop] === 'function' ? scope[prop]() : scope[prop];\n } catch (err: any) {\n res[prop] = err.message;\n }\n }\n\n return res;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogConfig, type LogFilter, type LogLevel } from './config';\nimport { type CallMetadata } from './meta';\nimport { gatherLogInfoFromScope } from './scope';\n\n/**\n * Optional object passed to the logging API.\n */\nexport type LogContext = Record<string, any> | Error | any;\n\n/**\n * Record for current log line.\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n context?: LogContext;\n meta?: CallMetadata;\n error?: Error;\n}\n\n/**\n * Processes (e.g., prints, forwards) log entries.\n */\nexport type LogProcessor = (config: LogConfig, entry: LogEntry) => void;\n\nconst matchFilter = (filter: LogFilter, level: LogLevel, path: string) => {\n return level >= filter.level && (!filter.pattern || path.includes(filter.pattern));\n};\n\n/**\n * Determines if the current line should be logged (called by the processor).\n */\nexport const shouldLog = (entry: LogEntry, filters?: LogFilter[]): boolean => {\n if (filters === undefined) {\n return true;\n } else {\n return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ''));\n }\n};\n\nexport const getContextFromEntry = (entry: LogEntry): Record<string, any> | undefined => {\n let context;\n if (entry.meta) {\n const scopeInfo = gatherLogInfoFromScope(entry.meta.S);\n if (Object.keys(scopeInfo).length > 0) {\n context = Object.assign(context ?? {}, scopeInfo);\n }\n }\n\n if (entry.context) {\n if (entry.context instanceof Error) {\n // Additional context from Error.\n const c = (entry.context as any).context;\n // If ERROR then show stacktrace.\n context = Object.assign(context ?? {}, { error: entry.context.stack, ...c });\n } else if (typeof entry.context === 'object') {\n context = Object.assign(context ?? {}, entry.context);\n }\n }\n\n if (entry.error) {\n const errorContext = (entry.error as any).context;\n context = Object.assign(context ?? {}, { error: entry.error.stack, ...errorContext });\n }\n\n return context && Object.keys(context).length > 0 ? context : undefined;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport type { LogMethods } from './log';\nimport { type CallMetadata } from './meta';\n\nlet nextPromiseId = 0;\n\nexport const createMethodLogDecorator =\n (log: LogMethods) =>\n (arg0?: never, arg1?: never, meta?: CallMetadata): MethodDecorator =>\n (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const method = descriptor.value!;\n descriptor.value = function (this: any, ...args: any) {\n const combinedMeta = {\n ...(meta ?? {}),\n S: this as any,\n } as CallMetadata;\n\n const formattedArgs = args.map((arg: any) => inspect(arg, false, 1, true)).join(', ');\n\n try {\n const startTime = performance.now();\n const result = method.apply(this, args);\n\n if (isThenable(result)) {\n const id = nextPromiseId++;\n log.info(`${propertyKey as string}(${formattedArgs}) => Promise { #${id} }`, {}, combinedMeta);\n result.then(\n (resolvedValue) => {\n if (resolvedValue !== undefined) {\n log.info(\n `✅ resolve #${id} ${(performance.now() - startTime).toFixed(0)}ms => ${inspect(\n resolvedValue,\n false,\n 1,\n true,\n )}`,\n {},\n combinedMeta,\n );\n } else {\n log.info(`✅ resolve #${id} ${(performance.now() - startTime).toFixed(0)}ms`, {}, combinedMeta);\n }\n },\n (err) => {\n log.info(`🔥 reject #${id} #${(performance.now() - startTime).toFixed(0)}ms => ${err}`, {}, combinedMeta);\n },\n );\n } else {\n log.info(\n `${propertyKey as string}(${formattedArgs}) => ${inspect(result, false, 1, true)}`,\n {},\n combinedMeta,\n );\n }\n\n return result;\n } catch (err) {\n log.error(`${propertyKey as string}(${formattedArgs}) 🔥 ${err}`, {}, combinedMeta);\n throw err;\n }\n };\n Object.defineProperty(descriptor.value, 'name', { value: (propertyKey as string) + '$log' });\n };\n\nconst isThenable = (obj: any): obj is Promise<unknown> => obj && typeof obj.then === 'function';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport defaultsDeep from 'lodash.defaultsdeep';\n\nimport { type LogConfig, type LogFilter, LogLevel, type LogOptions, LogProcessorType, levels } from './config';\nimport { type LogProcessor } from './context';\nimport { loadOptions } from './platform';\nimport { CONSOLE_PROCESSOR, DEBUG_PROCESSOR, BROWSER_PROCESSOR } from './processors';\n\n/**\n * Processor variants.\n */\nexport const processors: { [index: string]: LogProcessor } = {\n [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,\n [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,\n [LogProcessorType.DEBUG]: DEBUG_PROCESSOR,\n};\n\nconst IS_BROWSER = typeof window !== 'undefined' || typeof navigator !== 'undefined';\n\nexport const DEFAULT_PROCESSORS = [IS_BROWSER ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];\n\nexport const parseFilter = (filter: string | string[] | LogLevel): LogFilter[] => {\n if (typeof filter === 'number') {\n return [{ level: filter }];\n }\n\n const parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;\n\n const lines = typeof filter === 'string' ? filter.split(/,\\s*/) : filter;\n return lines.map((filter) => {\n const [pattern, level] = filter.split(':');\n return level ? { level: parseLogLevel(level), pattern } : { level: parseLogLevel(pattern) };\n });\n};\n\nexport const getConfig = (options?: LogOptions): LogConfig => {\n const nodeOptions: LogOptions | undefined =\n 'process' in globalThis\n ? {\n file: process!.env.LOG_CONFIG,\n filter: process!.env.LOG_FILTER,\n processor: process!.env.LOG_PROCESSOR,\n }\n : undefined;\n\n const mergedOptions: LogOptions = defaultsDeep({}, loadOptions(nodeOptions?.file), nodeOptions, options);\n return {\n options: mergedOptions,\n filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),\n captureFilters: parseFilter(mergedOptions.captureFilter ?? LogLevel.WARN),\n processors: mergedOptions.processor ? [processors[mergedOptions.processor]] : DEFAULT_PROCESSORS,\n prefix: mergedOptions.prefix,\n };\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogOptions } from '../../config';\n\n// NOTE: Implementation for the browser. See `package.json`.\nexport const loadOptions = (filepath?: string): LogOptions | undefined => {\n let dxlog: string | undefined;\n // if running in a worker, use the localStorage.dxlog setting forwarded on worker initilization in\n // @dxos/client/src/worker/onconnect.ts\n if (typeof localStorage === 'undefined') {\n if ((globalThis as any).localStorage_dxlog) {\n dxlog = (globalThis as any).localStorage_dxlog;\n }\n } else {\n dxlog = localStorage.getItem('dxlog') ?? undefined;\n }\n if (!dxlog) {\n return undefined;\n }\n try {\n return JSON.parse(dxlog);\n } catch (err) {\n console.info(\"can't parse dxlog config\", err);\n return undefined;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(wittjosiah): Consider mapping console processor directly to browser processor in the browser.\nexport const CONSOLE_PROCESSOR = () => {};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { type LogProcessor } from '../context';\n\nexport const DEBUG_PROCESSOR: LogProcessor = (config, entry) => {\n console.log(inspect(entry, false, null, true));\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { getDebugName, safariCheck } from '@dxos/util';\n\nimport { LogLevel } from '../config';\nimport { getContextFromEntry, type LogProcessor, shouldLog } from '../context';\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n\ntype Config = {\n useTestProcessor: boolean;\n printFileLinks: boolean;\n};\n\nconst CONFIG: Config =\n typeof mochaExecutor !== 'undefined'\n ? {\n useTestProcessor: true,\n printFileLinks: true,\n }\n : {\n useTestProcessor: false,\n printFileLinks: false,\n };\n\n/**\n * For running apps in the browser normally.\n */\nconst APP_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n // Example local editor prefix: 'vscode://file/Users/burdon/Code/dxos/dxos/'.\n const LOG_BROWSER_PREFIX = config.prefix ?? 'https://vscode.dev/github.com/dxos/dxos/blob/main/';\n\n // TODO(burdon): CSS breaks formatting (e.g., [Object] rather than expandable property).\n // TODO(burdon): Consider custom formatters.\n // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n // NOTE: Cannot change color of link (from bright white).\n // const LOG_BROWSER_CSS = ['color:gray; font-size:10px; padding-bottom: 4px', 'color:#B97852; font-size:14px;'];\n const LOG_BROWSER_CSS: string[] = [];\n\n let link = '';\n if (entry.meta) {\n const filename = getRelativeFilename(entry.meta.F);\n const filepath = `${LOG_BROWSER_PREFIX.replace(/\\/$/, '')}/${filename}`;\n // TODO(burdon): Line numbers not working for app link, even with colons.\n // https://stackoverflow.com/a/54459820/2804332\n link = `${filepath}#L${entry.meta.L}`;\n }\n\n let args = [];\n\n if (entry.meta?.S) {\n const scope = entry.meta?.S;\n const scopeName = scope.name || getDebugName(scope);\n const processPrefix = entry.meta.S?.hostSessionId ? '[worker] ' : '';\n // TODO(dmaretskyi): Those can be made clickable with a custom formatter.\n args.push(`%c${processPrefix}${scopeName}`, 'color:#C026D3;font-weight:bold');\n }\n\n args.push(entry.message);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n // Safari prints source code location as this file, not the caller.\n if (CONFIG.printFileLinks || safariCheck()) {\n if (LOG_BROWSER_CSS?.length) {\n args = [`%c${link}\\n%c${args.join(' ')}`, ...LOG_BROWSER_CSS];\n } else {\n args = [link + '\\n', ...args];\n }\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\n/**\n * For running unit tests in the headless browser.\n */\nconst TEST_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n let path = '';\n if (entry.meta) {\n path = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;\n }\n\n let args = [];\n\n const processPrefix = entry.meta?.S?.hostSessionId ? '[worker] ' : '';\n args.push(`${processPrefix}${entry.message}`);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n if (CONFIG.printFileLinks) {\n args = [path, ...args];\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\nexport const BROWSER_PROCESSOR: LogProcessor = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { appendFileSync, mkdirSync, openSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { jsonify } from '@dxos/util';\n\nimport { LogLevel } from '../config';\nimport { type LogProcessor, getContextFromEntry } from '../context';\n\nexport const createFileProcessor = ({ path, levels }: { path: string; levels: LogLevel[] }): LogProcessor => {\n let fd: number | undefined;\n\n return (config, entry) => {\n if (!levels.includes(entry.level)) {\n return;\n }\n if (!fd) {\n try {\n mkdirSync(dirname(path));\n } catch {}\n fd = openSync(path, 'w');\n }\n\n const record = {\n ...entry,\n timestamp: Date.now(),\n meta: {\n file: entry.meta?.F,\n line: entry.meta?.L,\n },\n context: jsonify(getContextFromEntry(entry)),\n };\n appendFileSync(fd, JSON.stringify(record) + '\\n');\n };\n};\n\nlet logFilePath: string | undefined;\nconst getLogFilePath = () => {\n logFilePath ??=\n process.env.LOG_FILE ??\n (process.env.HOME ? `${process.env.HOME}/.dxlog/${new Date().toISOString()}.log` : undefined);\n\n return logFilePath!;\n};\n\nexport const FILE_PROCESSOR: LogProcessor = createFileProcessor({\n path: getLogFilePath(),\n levels: [LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO, LogLevel.TRACE],\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogConfig, LogLevel, type LogOptions } from './config';\nimport { type LogContext, type LogProcessor } from './context';\nimport { createMethodLogDecorator } from './decorators';\nimport { type CallMetadata } from './meta';\nimport { getConfig, DEFAULT_PROCESSORS } from './options';\n\n/**\n * Logging function.\n */\ntype LogFunction = (message: string, context?: LogContext, meta?: CallMetadata) => void;\n\n/**\n * Logging methods.\n */\nexport interface LogMethods {\n trace: LogFunction;\n debug: LogFunction;\n info: LogFunction;\n warn: LogFunction;\n error: LogFunction;\n catch: (error: Error | any, context?: LogContext, meta?: CallMetadata) => void;\n break: () => void;\n stack: (message?: string, context?: never, meta?: CallMetadata) => void;\n method: (arg0?: never, arg1?: never, meta?: CallMetadata) => MethodDecorator;\n}\n\n/**\n * Properties accessible on the logging function.\n */\ninterface Log extends LogMethods, LogFunction {\n config: (options: LogOptions) => void;\n addProcessor: (processor: LogProcessor) => void;\n runtimeConfig: LogConfig;\n}\n\ninterface LogImp extends Log {\n _config: LogConfig;\n}\n\nconst createLog = (): LogImp => {\n const log: LogImp = ((...params) => processLog(LogLevel.DEBUG, ...params)) as LogImp;\n\n log._config = getConfig();\n Object.defineProperty(log, 'runtimeConfig', { get: () => log._config });\n\n log.addProcessor = (processor: LogProcessor) => {\n if (DEFAULT_PROCESSORS.filter((p) => p === processor).length === 0) {\n DEFAULT_PROCESSORS.push(processor);\n }\n if (log._config.processors.filter((p) => p === processor).length === 0) {\n log._config.processors.push(processor);\n }\n };\n\n // Set config.\n log.config = (options: LogOptions) => {\n log._config = getConfig(options);\n };\n\n // TODO(burdon): API to set context and separate error object.\n // E.g., log.warn('failed', { key: 123 }, err);\n\n log.trace = (...params) => processLog(LogLevel.TRACE, ...params);\n log.debug = (...params) => processLog(LogLevel.DEBUG, ...params);\n log.info = (...params) => processLog(LogLevel.INFO, ...params);\n log.warn = (...params) => processLog(LogLevel.WARN, ...params);\n log.error = (...params) => processLog(LogLevel.ERROR, ...params);\n\n // Catch only shows error message, not stacktrace.\n log.catch = (error: Error | any, context, meta) => processLog(LogLevel.ERROR, error.stack, context, meta, error);\n\n // Show break.\n log.break = () => log.info('——————————————————————————————————————————————————');\n\n log.stack = (message, context, meta) =>\n processLog(LogLevel.INFO, `${message ?? 'Stack Dump'}\\n${getFormattedStackTrace()}`, context, meta);\n\n log.method = createMethodLogDecorator(log);\n\n /**\n * Process the current log call.\n */\n const processLog = (\n level: LogLevel,\n message: string,\n context: LogContext = {},\n meta?: CallMetadata,\n error?: Error,\n ) => {\n log._config.processors.forEach((processor) => processor(log._config, { level, message, context, meta, error }));\n };\n\n return log;\n};\n\n/**\n * Global logging function.\n */\nexport const log: Log = ((globalThis as any).dx_log ??= createLog());\n\n/**\n * Accessible from browser console.\n */\ndeclare global {\n // eslint-disable-next-line camelcase\n const dx_log: Log;\n}\n\nconst getFormattedStackTrace = () => new Error().stack!.split('\\n').slice(3).join('\\n');\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nconst kOwnershipScope = Symbol('kOwnershipScope');\nconst kCurrentOwnershipScope = Symbol('kCurrentOwnershipScope');\nconst kDebugInfoProperties = Symbol('kDebugInfoProperties');\n\n/**\n *\n */\n// TODO(burdon): Document.\nexport class OwnershipScope {\n public instance: any;\n\n constructor(\n public constr: any,\n public parent?: OwnershipScope,\n ) {}\n\n getInfo() {\n if (!this.instance) {\n return {};\n }\n const props = this.constr.prototype[kDebugInfoProperties] ?? [];\n const info: any = {};\n for (const prop of props) {\n info[prop] = this.instance[prop];\n }\n return info;\n }\n\n [inspect.custom]() {\n return {\n className: this.constr.name,\n info: this.getInfo(),\n parent: this.parent,\n };\n }\n}\n\nfunction decorateMethodWeakReturnOwnership(prototype: any, key: string) {\n const original = prototype[key];\n prototype[key] = function (...args: any) {\n const res = original.apply(this, ...args);\n\n if (res && typeof res.then === 'function') {\n res.then((value: any) => {\n if (kOwnershipScope in value) {\n value[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n });\n } else {\n if (res && kOwnershipScope in res) {\n res[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n }\n\n return res;\n };\n}\n\nexport function ownershipClass<T extends { new (...args: any[]): {} }>(constr: T) {\n for (const key of Object.getOwnPropertyNames(constr.prototype)) {\n if (key !== 'constructor' && typeof constr.prototype[key] === 'function') {\n decorateMethodWeakReturnOwnership(constr.prototype, key);\n }\n }\n\n return class extends constr {\n constructor(...args: any[]) {\n const currentCausality = (globalThis as any)[kCurrentOwnershipScope];\n (globalThis as any)[kCurrentOwnershipScope] = new OwnershipScope(constr, currentCausality);\n super(...args);\n (this as any)[kOwnershipScope] = (globalThis as any)[kCurrentOwnershipScope];\n (this as any)[kOwnershipScope].instance = this;\n (globalThis as any)[kCurrentOwnershipScope] = currentCausality;\n }\n };\n}\n\nexport const debugInfo = (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n // console.log(target, propertyKey, descriptor);\n (target[kDebugInfoProperties] ??= []).push(propertyKey);\n};\n\nexport const getCurrentOwnershipScope = (thisRef: any) => thisRef;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["omit", "pick", "LogLevel", "levels", "trace", "debug", "info", "warn", "error", "shortLevelName", "LogProcessorType", "logInfoProperties", "Symbol", "logInfo", "target", "propertyKey", "descriptor", "push", "gatherLogInfoFromScope", "scope", "res", "prototype", "Object", "getPrototypeOf", "infoProps", "prop", "err", "message", "matchFilter", "filter", "level", "path", "pattern", "includes", "shouldLog", "entry", "filters", "undefined", "some", "meta", "F", "getContextFromEntry", "context", "scopeInfo", "gatherLogInfoFromScope", "S", "Object", "keys", "length", "assign", "Error", "c", "error", "stack", "errorContext", "inspect", "nextPromiseId", "createMethodLogDecorator", "log", "arg0", "arg1", "meta", "target", "propertyKey", "descriptor", "method", "value", "args", "combinedMeta", "S", "formattedArgs", "map", "arg", "inspect", "join", "startTime", "performance", "now", "result", "apply", "isThenable", "id", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\n// Message helpers.\nimport omit from 'lodash.omit';\nimport pick from 'lodash.pick';\n\nexport { omit, pick };\n\nexport * from './config';\nexport * from './context';\nexport * from './log';\nexport { parseFilter } from './options';\nexport * from './processors';\nexport * from './scope';\nexport * from './meta';\n\nexport { getCurrentOwnershipScope } from './experimental/ownership';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogProcessor } from './context';\n\n/**\n * Standard levels.\n */\n// NOTE: Keep aligned with LogLevel in @dxos/protocols.\n// TODO(burdon): Update numbers?\nexport enum LogLevel {\n TRACE = 5,\n DEBUG = 10,\n INFO = 11,\n WARN = 12,\n ERROR = 13,\n}\n\nexport const levels: { [index: string]: LogLevel } = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n};\n\nexport const shortLevelName = {\n [LogLevel.TRACE]: 'T',\n [LogLevel.DEBUG]: 'D',\n [LogLevel.INFO]: 'I',\n [LogLevel.WARN]: 'W',\n [LogLevel.ERROR]: 'E',\n};\n\nexport enum LogProcessorType {\n CONSOLE = 'console',\n BROWSER = 'browser',\n DEBUG = 'debug',\n}\n\n/**\n * Individual filter condition.\n */\nexport type LogFilter = {\n level: LogLevel;\n pattern?: string;\n};\n\n/**\n * Options to set inline or load from the YML file.\n */\nexport type LogOptions = {\n file?: string;\n filter?: string | string[] | LogLevel;\n captureFilter?: string | string[] | LogLevel;\n depth?: number; // Context object depth.\n processor?: string | LogProcessorType;\n formatter?: {\n column: number;\n timestamp: boolean;\n timestampFirst: boolean;\n };\n prefix?: string;\n};\n\n/**\n * Runtime config.\n */\nexport interface LogConfig {\n options: LogOptions;\n filters?: LogFilter[];\n captureFilters?: LogFilter[];\n processors: LogProcessor[];\n prefix?: string;\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nconst logInfoProperties = Symbol('logInfoProperties');\n\n/**\n * Decorate fields, properties, or methods to automatically include their values in log messages.\n *\n * Example:\n *\n * ```typescript\n * class Example {\n * @logInfo\n * peerId: PublicKey;\n * }\n * ```\n */\nexport const logInfo = (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n // console.log(target, propertyKey, descriptor);\n (target[logInfoProperties] ??= []).push(propertyKey);\n};\n\n/**\n * Introspects class instance to find decorated metadata.\n * @param scope Class instance.\n */\nexport const gatherLogInfoFromScope = (scope: any): Record<string, any> => {\n if (!scope) {\n return {};\n }\n\n const res: Record<string, any> = {};\n\n const prototype = Object.getPrototypeOf(scope);\n const infoProps = prototype[logInfoProperties] ?? [];\n for (const prop of infoProps) {\n try {\n res[prop] = typeof scope[prop] === 'function' ? scope[prop]() : scope[prop];\n } catch (err: any) {\n res[prop] = err.message;\n }\n }\n\n return res;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogConfig, type LogFilter, type LogLevel } from './config';\nimport { type CallMetadata } from './meta';\nimport { gatherLogInfoFromScope } from './scope';\n\n/**\n * Optional object passed to the logging API.\n */\nexport type LogContext = Record<string, any> | Error | any;\n\n/**\n * Record for current log line.\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n context?: LogContext;\n meta?: CallMetadata;\n error?: Error;\n}\n\n/**\n * Processes (e.g., prints, forwards) log entries.\n */\nexport type LogProcessor = (config: LogConfig, entry: LogEntry) => void;\n\nconst matchFilter = (filter: LogFilter, level: LogLevel, path: string) => {\n return level >= filter.level && (!filter.pattern || path.includes(filter.pattern));\n};\n\n/**\n * Determines if the current line should be logged (called by the processor).\n */\nexport const shouldLog = (entry: LogEntry, filters?: LogFilter[]): boolean => {\n if (filters === undefined) {\n return true;\n } else {\n return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ''));\n }\n};\n\nexport const getContextFromEntry = (entry: LogEntry): Record<string, any> | undefined => {\n let context;\n if (entry.meta) {\n const scopeInfo = gatherLogInfoFromScope(entry.meta.S);\n if (Object.keys(scopeInfo).length > 0) {\n context = Object.assign(context ?? {}, scopeInfo);\n }\n }\n\n if (entry.context) {\n if (entry.context instanceof Error) {\n // Additional context from Error.\n const c = (entry.context as any).context;\n // If ERROR then show stacktrace.\n context = Object.assign(context ?? {}, { error: entry.context.stack, ...c });\n } else if (typeof entry.context === 'object') {\n context = Object.assign(context ?? {}, entry.context);\n }\n }\n\n if (entry.error) {\n const errorContext = (entry.error as any).context;\n context = Object.assign(context ?? {}, { error: entry.error, ...errorContext });\n }\n\n return context && Object.keys(context).length > 0 ? context : undefined;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport chalk from 'chalk';\nimport { inspect } from 'node:util';\n\nimport type { LogMethods } from './log';\nimport { type CallMetadata } from './meta';\n\nlet nextPromiseId = 0;\n\nexport const createMethodLogDecorator =\n (log: LogMethods) =>\n (arg0?: never, arg1?: never, meta?: CallMetadata): MethodDecorator =>\n (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const method = descriptor.value!;\n const methodName = propertyKey as string;\n descriptor.value = function (this: any, ...args: any) {\n const combinedMeta = {\n ...(meta ?? {}),\n S: this as any,\n } as CallMetadata;\n\n const formattedArgs = args.map((arg: any) => inspect(arg, false, 1, true)).join(', ');\n\n try {\n const startTime = performance.now();\n const result = method.apply(this, args);\n\n if (isThenable(result)) {\n const id = nextPromiseId++;\n logAsyncBegin(log, methodName, formattedArgs, id, combinedMeta);\n result.then(\n (resolvedValue) => {\n logAsyncResolved(log, methodName, resolvedValue, id, startTime, combinedMeta);\n },\n (err) => {\n logAsyncRejected(log, methodName, err, id, startTime, combinedMeta);\n },\n );\n } else {\n logSyncCall(log, methodName, formattedArgs, result, combinedMeta);\n }\n\n return result;\n } catch (err: any) {\n logSyncError(log, methodName, formattedArgs, err, combinedMeta);\n throw err;\n }\n };\n Object.defineProperty(descriptor.value, 'name', { value: methodName + '$log' });\n };\n\nconst isThenable = (obj: any): obj is Promise<unknown> => obj && typeof obj.then === 'function';\n\nconst logSyncCall = (\n log: LogMethods,\n methodName: string,\n formattedArgs: string,\n result: unknown,\n combinedMeta: CallMetadata,\n) => {\n log.info(\n `.${formatFunction(methodName)} (${formattedArgs}) ${chalk.gray('resolve')} ${inspect(result, false, 1, true)}`,\n {},\n combinedMeta,\n );\n};\n\nconst logSyncError = (\n log: LogMethods,\n methodName: string,\n formattedArgs: string,\n err: Error,\n combinedMeta: CallMetadata,\n) => {\n log.error(`.${formatFunction(methodName)} (${formattedArgs}) 🔥 ${err}`, {}, combinedMeta);\n};\n\nconst logAsyncBegin = (\n log: LogMethods,\n methodName: string,\n formattedArgs: string,\n promiseId: number,\n combinedMeta: CallMetadata,\n) => {\n log.info(\n `.${formatFunction(methodName)} ↴ (${formattedArgs}) ${chalk.gray('=>')} ${formatPromise(promiseId)}`,\n {},\n combinedMeta,\n );\n};\n\nconst logAsyncResolved = (\n log: LogMethods,\n methodName: string,\n resolvedValue: unknown | undefined,\n promiseId: number,\n startTime: number,\n combinedMeta: CallMetadata,\n) => {\n if (resolvedValue !== undefined) {\n log.info(\n `.${formatFunction(methodName)} ↲ ${greenCheck} ${chalk.gray('resolve')} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${chalk.gray('=>')} ${inspect(\n resolvedValue,\n false,\n 1,\n true,\n )}`,\n {},\n combinedMeta,\n );\n } else {\n log.info(\n `.${formatFunction(methodName)} ↲ ${greenCheck} ${chalk.gray('resolve')} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)}`,\n {},\n combinedMeta,\n );\n }\n};\n\nconst logAsyncRejected = (\n log: LogMethods,\n methodName: string,\n err: Error,\n promiseId: number,\n startTime: number,\n combinedMeta: CallMetadata,\n) => {\n log.info(\n `.${formatFunction(methodName)} ↲ 🔥 ${chalk.gray('reject')} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${chalk.gray('=>')} ${err}`,\n {},\n combinedMeta,\n );\n};\n\nconst greenCheck = chalk.green('✔');\n\nconst formatTimeElapsed = (startTime: number) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);\n\nconst COLOR_FUNCTION = [220, 220, 170] as const;\n\nconst formatFunction = (name: string) => chalk.bold(chalk.rgb(...COLOR_FUNCTION)(name));\n\nconst formatPromise = (id: number) => chalk.blue(`Promise#${id}`);\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport defaultsDeep from 'lodash.defaultsdeep';\n\nimport { type LogConfig, type LogFilter, LogLevel, type LogOptions, LogProcessorType, levels } from './config';\nimport { type LogProcessor } from './context';\nimport { loadOptions } from './platform';\nimport { CONSOLE_PROCESSOR, DEBUG_PROCESSOR, BROWSER_PROCESSOR } from './processors';\n\n/**\n * Processor variants.\n */\nexport const processors: { [index: string]: LogProcessor } = {\n [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,\n [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,\n [LogProcessorType.DEBUG]: DEBUG_PROCESSOR,\n};\n\nconst IS_BROWSER = typeof window !== 'undefined' || typeof navigator !== 'undefined';\n\nexport const DEFAULT_PROCESSORS = [IS_BROWSER ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];\n\nexport const parseFilter = (filter: string | string[] | LogLevel): LogFilter[] => {\n if (typeof filter === 'number') {\n return [{ level: filter }];\n }\n\n const parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;\n\n const lines = typeof filter === 'string' ? filter.split(/,\\s*/) : filter;\n return lines.map((filter) => {\n const [pattern, level] = filter.split(':');\n return level ? { level: parseLogLevel(level), pattern } : { level: parseLogLevel(pattern) };\n });\n};\n\nexport const getConfig = (options?: LogOptions): LogConfig => {\n const nodeOptions: LogOptions | undefined =\n 'process' in globalThis\n ? {\n file: process!.env.LOG_CONFIG,\n filter: process!.env.LOG_FILTER,\n processor: process!.env.LOG_PROCESSOR,\n }\n : undefined;\n\n const mergedOptions: LogOptions = defaultsDeep({}, loadOptions(nodeOptions?.file), nodeOptions, options);\n return {\n options: mergedOptions,\n filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),\n captureFilters: parseFilter(mergedOptions.captureFilter ?? LogLevel.WARN),\n processors: mergedOptions.processor ? [processors[mergedOptions.processor]] : DEFAULT_PROCESSORS,\n prefix: mergedOptions.prefix,\n };\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogOptions } from '../../config';\n\n// NOTE: Implementation for the browser. See `package.json`.\nexport const loadOptions = (filepath?: string): LogOptions | undefined => {\n let dxlog: string | undefined;\n // if running in a worker, use the localStorage.dxlog setting forwarded on worker initilization in\n // @dxos/client/src/worker/onconnect.ts\n if (typeof localStorage === 'undefined') {\n if ((globalThis as any).localStorage_dxlog) {\n dxlog = (globalThis as any).localStorage_dxlog;\n }\n } else {\n dxlog = localStorage.getItem('dxlog') ?? undefined;\n }\n if (!dxlog) {\n return undefined;\n }\n try {\n return JSON.parse(dxlog);\n } catch (err) {\n console.info(\"can't parse dxlog config\", err);\n return undefined;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(wittjosiah): Consider mapping console processor directly to browser processor in the browser.\nexport const CONSOLE_PROCESSOR = () => {};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { type LogProcessor } from '../context';\n\nexport const DEBUG_PROCESSOR: LogProcessor = (config, entry) => {\n console.log(inspect(entry, false, null, true));\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { getDebugName, safariCheck } from '@dxos/util';\n\nimport { LogLevel } from '../config';\nimport { getContextFromEntry, type LogProcessor, shouldLog } from '../context';\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n\ntype Config = {\n useTestProcessor: boolean;\n printFileLinks: boolean;\n};\n\nconst CONFIG: Config =\n typeof mochaExecutor !== 'undefined'\n ? {\n useTestProcessor: true,\n printFileLinks: true,\n }\n : {\n useTestProcessor: false,\n printFileLinks: false,\n };\n\n/**\n * For running apps in the browser normally.\n */\nconst APP_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n // Example local editor prefix: 'vscode://file/Users/burdon/Code/dxos/dxos/'.\n const LOG_BROWSER_PREFIX = config.prefix ?? 'https://vscode.dev/github.com/dxos/dxos/blob/main/';\n\n // TODO(burdon): CSS breaks formatting (e.g., [Object] rather than expandable property).\n // TODO(burdon): Consider custom formatters.\n // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n // NOTE: Cannot change color of link (from bright white).\n // const LOG_BROWSER_CSS = ['color:gray; font-size:10px; padding-bottom: 4px', 'color:#B97852; font-size:14px;'];\n const LOG_BROWSER_CSS: string[] = [];\n\n let link = '';\n if (entry.meta) {\n const filename = getRelativeFilename(entry.meta.F);\n const filepath = `${LOG_BROWSER_PREFIX.replace(/\\/$/, '')}/${filename}`;\n // TODO(burdon): Line numbers not working for app link, even with colons.\n // https://stackoverflow.com/a/54459820/2804332\n link = `${filepath}#L${entry.meta.L}`;\n }\n\n let args = [];\n\n if (entry.meta?.S) {\n const scope = entry.meta?.S;\n const scopeName = scope.name || getDebugName(scope);\n const processPrefix = entry.meta.S?.hostSessionId ? '[worker] ' : '';\n // TODO(dmaretskyi): Those can be made clickable with a custom formatter.\n args.push(`%c${processPrefix}${scopeName}`, 'color:#C026D3;font-weight:bold');\n }\n\n args.push(entry.message);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n // Safari prints source code location as this file, not the caller.\n if (CONFIG.printFileLinks || safariCheck()) {\n if (LOG_BROWSER_CSS?.length) {\n args = [`%c${link}\\n%c${args.join(' ')}`, ...LOG_BROWSER_CSS];\n } else {\n args = [link + '\\n', ...args];\n }\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\n/**\n * For running unit tests in the headless browser.\n */\nconst TEST_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n let path = '';\n if (entry.meta) {\n path = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;\n }\n\n let args = [];\n\n const processPrefix = entry.meta?.S?.hostSessionId ? '[worker] ' : '';\n args.push(`${processPrefix}${entry.message}`);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n if (CONFIG.printFileLinks) {\n args = [path, ...args];\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\nexport const BROWSER_PROCESSOR: LogProcessor = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { appendFileSync, mkdirSync, openSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { jsonify } from '@dxos/util';\n\nimport { type LogFilter, LogLevel } from '../config';\nimport { type LogProcessor, getContextFromEntry, shouldLog } from '../context';\n\n/**\n * Create a file processor.\n * @param path - Path to log file to create or append to, or existing open file descriptor e.g. stdout.\n * @param levels - Log levels to process. Takes preference over Filters.\n * @param filters - Filters to apply.\n */\nexport const createFileProcessor = ({\n pathOrFd,\n levels,\n filters,\n}: {\n pathOrFd: string | number;\n levels: LogLevel[];\n filters?: LogFilter[];\n}): LogProcessor => {\n let fd: number | undefined;\n\n return (config, entry) => {\n if (levels.length > 0 && !levels.includes(entry.level)) {\n return;\n }\n if (!shouldLog(entry, filters)) {\n return;\n }\n if (typeof pathOrFd === 'number') {\n fd = pathOrFd;\n } else {\n try {\n mkdirSync(dirname(pathOrFd));\n } catch {}\n fd = openSync(pathOrFd, 'w');\n }\n\n const record = {\n ...entry,\n timestamp: Date.now(),\n meta: {\n file: entry.meta?.F,\n line: entry.meta?.L,\n },\n context: jsonify(getContextFromEntry(entry)),\n };\n appendFileSync(fd, JSON.stringify(record) + '\\n');\n };\n};\n\nlet logFilePath: string | undefined;\nconst getLogFilePath = () => {\n logFilePath ??=\n process.env.LOG_FILE ??\n (process.env.HOME ? `${process.env.HOME}/.dxlog/${new Date().toISOString()}.log` : undefined);\n\n return logFilePath!;\n};\n\nexport const FILE_PROCESSOR: LogProcessor = createFileProcessor({\n pathOrFd: getLogFilePath(),\n levels: [LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO, LogLevel.TRACE],\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogConfig, LogLevel, type LogOptions } from './config';\nimport { type LogContext, type LogProcessor } from './context';\nimport { createMethodLogDecorator } from './decorators';\nimport { type CallMetadata } from './meta';\nimport { getConfig, DEFAULT_PROCESSORS } from './options';\n\n/**\n * Logging function.\n */\ntype LogFunction = (message: string, context?: LogContext, meta?: CallMetadata) => void;\n\n/**\n * Logging methods.\n */\nexport interface LogMethods {\n trace: LogFunction;\n debug: LogFunction;\n info: LogFunction;\n warn: LogFunction;\n error: LogFunction;\n catch: (error: Error | any, context?: LogContext, meta?: CallMetadata) => void;\n break: () => void;\n stack: (message?: string, context?: never, meta?: CallMetadata) => void;\n method: (arg0?: never, arg1?: never, meta?: CallMetadata) => MethodDecorator;\n}\n\n/**\n * Properties accessible on the logging function.\n */\ninterface Log extends LogMethods, LogFunction {\n config: (options: LogOptions) => void;\n addProcessor: (processor: LogProcessor) => void;\n runtimeConfig: LogConfig;\n}\n\ninterface LogImp extends Log {\n _config: LogConfig;\n}\n\nconst createLog = (): LogImp => {\n const log: LogImp = ((...params) => processLog(LogLevel.DEBUG, ...params)) as LogImp;\n\n log._config = getConfig();\n Object.defineProperty(log, 'runtimeConfig', { get: () => log._config });\n\n log.addProcessor = (processor: LogProcessor) => {\n if (DEFAULT_PROCESSORS.filter((p) => p === processor).length === 0) {\n DEFAULT_PROCESSORS.push(processor);\n }\n if (log._config.processors.filter((p) => p === processor).length === 0) {\n log._config.processors.push(processor);\n }\n };\n\n // Set config.\n log.config = (options: LogOptions) => {\n log._config = getConfig(options);\n };\n\n // TODO(burdon): API to set context and separate error object.\n // E.g., log.warn('failed', { key: 123 }, err);\n\n log.trace = (...params) => processLog(LogLevel.TRACE, ...params);\n log.debug = (...params) => processLog(LogLevel.DEBUG, ...params);\n log.info = (...params) => processLog(LogLevel.INFO, ...params);\n log.warn = (...params) => processLog(LogLevel.WARN, ...params);\n log.error = (...params) => processLog(LogLevel.ERROR, ...params);\n\n // Catch only shows error message, not stacktrace.\n log.catch = (error: Error | any, context, meta) => processLog(LogLevel.ERROR, error.message, context, meta, error);\n\n // Show break.\n log.break = () => log.info('——————————————————————————————————————————————————');\n\n log.stack = (message, context, meta) =>\n processLog(LogLevel.INFO, `${message ?? 'Stack Dump'}\\n${getFormattedStackTrace()}`, context, meta);\n\n log.method = createMethodLogDecorator(log);\n\n /**\n * Process the current log call.\n */\n const processLog = (\n level: LogLevel,\n message: string,\n context: LogContext = {},\n meta?: CallMetadata,\n error?: Error,\n ) => {\n log._config.processors.forEach((processor) => processor(log._config, { level, message, context, meta, error }));\n };\n\n return log;\n};\n\n/**\n * Global logging function.\n */\nexport const log: Log = ((globalThis as any).dx_log ??= createLog());\n\n/**\n * Accessible from browser console.\n */\ndeclare global {\n // eslint-disable-next-line camelcase\n const dx_log: Log;\n}\n\nconst getFormattedStackTrace = () => new Error().stack!.split('\\n').slice(3).join('\\n');\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nconst kOwnershipScope = Symbol('kOwnershipScope');\nconst kCurrentOwnershipScope = Symbol('kCurrentOwnershipScope');\nconst kDebugInfoProperties = Symbol('kDebugInfoProperties');\n\n/**\n *\n */\n// TODO(burdon): Document.\nexport class OwnershipScope {\n public instance: any;\n\n constructor(\n public constr: any,\n public parent?: OwnershipScope,\n ) {}\n\n getInfo() {\n if (!this.instance) {\n return {};\n }\n const props = this.constr.prototype[kDebugInfoProperties] ?? [];\n const info: any = {};\n for (const prop of props) {\n info[prop] = this.instance[prop];\n }\n return info;\n }\n\n [inspect.custom]() {\n return {\n className: this.constr.name,\n info: this.getInfo(),\n parent: this.parent,\n };\n }\n}\n\nfunction decorateMethodWeakReturnOwnership(prototype: any, key: string) {\n const original = prototype[key];\n prototype[key] = function (...args: any) {\n const res = original.apply(this, ...args);\n\n if (res && typeof res.then === 'function') {\n res.then((value: any) => {\n if (kOwnershipScope in value) {\n value[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n });\n } else {\n if (res && kOwnershipScope in res) {\n res[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n }\n\n return res;\n };\n}\n\nexport function ownershipClass<T extends { new (...args: any[]): {} }>(constr: T) {\n for (const key of Object.getOwnPropertyNames(constr.prototype)) {\n if (key !== 'constructor' && typeof constr.prototype[key] === 'function') {\n decorateMethodWeakReturnOwnership(constr.prototype, key);\n }\n }\n\n return class extends constr {\n constructor(...args: any[]) {\n const currentCausality = (globalThis as any)[kCurrentOwnershipScope];\n (globalThis as any)[kCurrentOwnershipScope] = new OwnershipScope(constr, currentCausality);\n super(...args);\n (this as any)[kOwnershipScope] = (globalThis as any)[kCurrentOwnershipScope];\n (this as any)[kOwnershipScope].instance = this;\n (globalThis as any)[kCurrentOwnershipScope] = currentCausality;\n }\n };\n}\n\nexport const debugInfo = (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n // console.log(target, propertyKey, descriptor);\n (target[kDebugInfoProperties] ??= []).push(propertyKey);\n};\n\nexport const getCurrentOwnershipScope = (thisRef: any) => thisRef;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["omit", "pick", "LogLevel", "levels", "trace", "debug", "info", "warn", "error", "shortLevelName", "LogProcessorType", "logInfoProperties", "Symbol", "logInfo", "target", "propertyKey", "descriptor", "push", "gatherLogInfoFromScope", "scope", "res", "prototype", "Object", "getPrototypeOf", "infoProps", "prop", "err", "message", "matchFilter", "filter", "level", "path", "pattern", "includes", "shouldLog", "entry", "filters", "undefined", "some", "meta", "F", "getContextFromEntry", "context", "scopeInfo", "gatherLogInfoFromScope", "S", "Object", "keys", "length", "assign", "Error", "c", "error", "stack", "errorContext", "chalk", "inspect", "nextPromiseId", "createMethodLogDecorator", "log", "arg0", "arg1", "meta", "target", "propertyKey", "descriptor", "method", "value", "methodName", "args", "combinedMeta", "S", "formattedArgs", "map", "arg", "inspect", "join", "startTime", "performance", "now", "result", "apply", "isThenable", "id", "logAsyncBegin", "then", "resolvedValue", "logAsyncResolved", "err", "logAsyncRejected", "logSyncCall", "logSyncError", "Object", "defineProperty", "obj", "info", "formatFunction", "chalk", "gray", "error", "promiseId", "formatPromise", "undefined", "greenCheck", "formatTimeElapsed", "green", "toFixed", "COLOR_FUNCTION", "name", "bold", "rgb", "blue", "defaultsDeep", "loadOptions", "filepath", "dxlog", "localStorage", "globalThis", "localStorage_dxlog", "getItem", "undefined", "JSON", "parse", "err", "console", "info", "CONSOLE_PROCESSOR", "inspect", "DEBUG_PROCESSOR", "config", "entry", "console", "log", "inspect", "getDebugName", "safariCheck", "getRelativeFilename", "filename", "match", "filePath", "CONFIG", "mochaExecutor", "useTestProcessor", "printFileLinks", "APP_BROWSER_PROCESSOR", "config", "entry", "shouldLog", "filters", "LOG_BROWSER_PREFIX", "prefix", "LOG_BROWSER_CSS", "link", "meta", "F", "filepath", "replace", "L", "args", "S", "scope", "scopeName", "name", "getDebugName", "processPrefix", "hostSessionId", "push", "message", "context", "getContextFromEntry", "levels", "LogLevel", "ERROR", "console", "error", "WARN", "warn", "DEBUG", "log", "safariCheck", "length", "join", "level", "C", "TEST_BROWSER_PROCESSOR", "path", "BROWSER_PROCESSOR", "appendFileSync", "mkdirSync", "openSync", "dirname", "jsonify", "createFileProcessor", "pathOrFd", "levels", "filters", "fd", "config", "entry", "length", "includes", "level", "shouldLog", "mkdirSync", "dirname", "openSync", "record", "timestamp", "Date", "now", "meta", "file", "F", "line", "L", "context", "jsonify", "getContextFromEntry", "appendFileSync", "JSON", "stringify", "logFilePath", "getLogFilePath", "process", "env", "LOG_FILE", "HOME", "toISOString", "undefined", "FILE_PROCESSOR", "LogLevel", "ERROR", "WARN", "INFO", "TRACE", "processors", "LogProcessorType", "CONSOLE", "CONSOLE_PROCESSOR", "BROWSER", "BROWSER_PROCESSOR", "DEBUG", "DEBUG_PROCESSOR", "IS_BROWSER", "window", "navigator", "DEFAULT_PROCESSORS", "parseFilter", "filter", "level", "parseLogLevel", "defValue", "LogLevel", "WARN", "levels", "toLowerCase", "lines", "split", "map", "pattern", "getConfig", "options", "nodeOptions", "globalThis", "file", "process", "env", "LOG_CONFIG", "LOG_FILTER", "processor", "LOG_PROCESSOR", "undefined", "mergedOptions", "defaultsDeep", "loadOptions", "filters", "INFO", "captureFilters", "captureFilter", "prefix", "createLog", "log", "params", "processLog", "LogLevel", "DEBUG", "_config", "getConfig", "Object", "defineProperty", "get", "addProcessor", "processor", "DEFAULT_PROCESSORS", "filter", "p", "length", "push", "processors", "config", "options", "trace", "TRACE", "debug", "info", "INFO", "warn", "WARN", "error", "ERROR", "catch", "context", "meta", "message", "break", "stack", "getFormattedStackTrace", "method", "createMethodLogDecorator", "level", "forEach", "globalThis", "dx_log", "Error", "split", "slice", "join", "inspect", "kOwnershipScope", "Symbol", "kCurrentOwnershipScope", "kDebugInfoProperties", "OwnershipScope", "constructor", "constr", "parent", "getInfo", "instance", "props", "prototype", "info", "prop", "inspect", "custom", "className", "name", "getCurrentOwnershipScope", "thisRef"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/log/src/config.ts":{"bytes":3536,"imports":[],"format":"esm"},"packages/common/log/src/scope.ts":{"bytes":3852,"imports":[],"format":"esm"},"packages/common/log/src/context.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/log/src/config.ts":{"bytes":3536,"imports":[],"format":"esm"},"packages/common/log/src/scope.ts":{"bytes":3852,"imports":[],"format":"esm"},"packages/common/log/src/context.ts":{"bytes":6618,"imports":[{"path":"packages/common/log/src/scope.ts","kind":"import-statement","original":"./scope"}],"format":"esm"},"packages/common/log/src/decorators.ts":{"bytes":13956,"imports":[{"path":"chalk","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/log/src/platform/browser/index.ts":{"bytes":2848,"imports":[],"format":"esm"},"packages/common/log/src/platform/index.ts":{"bytes":460,"imports":[{"path":"packages/common/log/src/platform/browser/index.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"packages/common/log/src/processors/console-stub.ts":{"bytes":828,"imports":[],"format":"esm"},"packages/common/log/src/processors/debug-processor.ts":{"bytes":1070,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/log/src/processors/browser-processor.ts":{"bytes":14794,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"packages/common/log/src/processors/file-processor.ts":{"bytes":6675,"imports":[{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"packages/common/log/src/processors/index.ts":{"bytes":817,"imports":[{"path":"packages/common/log/src/processors/console-stub.ts","kind":"import-statement","original":"./console-processor"},{"path":"packages/common/log/src/processors/debug-processor.ts","kind":"import-statement","original":"./debug-processor"},{"path":"packages/common/log/src/processors/browser-processor.ts","kind":"import-statement","original":"./browser-processor"},{"path":"packages/common/log/src/processors/file-processor.ts","kind":"import-statement","original":"./file-processor"}],"format":"esm"},"packages/common/log/src/options.ts":{"bytes":7558,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/platform/index.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/log/src/processors/index.ts","kind":"import-statement","original":"./processors"}],"format":"esm"},"packages/common/log/src/log.ts":{"bytes":10313,"imports":[{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/decorators.ts","kind":"import-statement","original":"./decorators"},{"path":"packages/common/log/src/options.ts","kind":"import-statement","original":"./options"}],"format":"esm"},"packages/common/log/src/meta.ts":{"bytes":1625,"imports":[],"format":"esm"},"packages/common/log/src/experimental/ownership.ts":{"bytes":9286,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/log/src/index.ts":{"bytes":1663,"imports":[{"path":"lodash.omit","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/log/src/log.ts","kind":"import-statement","original":"./log"},{"path":"packages/common/log/src/options.ts","kind":"import-statement","original":"./options"},{"path":"packages/common/log/src/processors/index.ts","kind":"import-statement","original":"./processors"},{"path":"packages/common/log/src/scope.ts","kind":"import-statement","original":"./scope"},{"path":"packages/common/log/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/common/log/src/experimental/ownership.ts","kind":"import-statement","original":"./experimental/ownership"}],"format":"esm"}},"outputs":{"packages/common/log/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":41152},"packages/common/log/dist/lib/browser/index.mjs":{"imports":[{"path":"lodash.omit","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"chalk","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"exports":["BROWSER_PROCESSOR","CONSOLE_PROCESSOR","DEBUG_PROCESSOR","FILE_PROCESSOR","LogLevel","LogProcessorType","createFileProcessor","gatherLogInfoFromScope","getContextFromEntry","getCurrentOwnershipScope","levels","log","logInfo","omit","parseFilter","pick","shortLevelName","shouldLog"],"entryPoint":"packages/common/log/src/index.ts","inputs":{"packages/common/log/src/index.ts":{"bytesInOutput":64},"packages/common/log/src/config.ts":{"bytesInOutput":703},"packages/common/log/src/scope.ts":{"bytesInOutput":571},"packages/common/log/src/context.ts":{"bytesInOutput":1153},"packages/common/log/src/decorators.ts":{"bytesInOutput":3148},"packages/common/log/src/options.ts":{"bytesInOutput":1542},"packages/common/log/src/platform/browser/index.ts":{"bytesInOutput":424},"packages/common/log/src/platform/index.ts":{"bytesInOutput":0},"packages/common/log/src/processors/console-stub.ts":{"bytesInOutput":35},"packages/common/log/src/processors/index.ts":{"bytesInOutput":0},"packages/common/log/src/processors/debug-processor.ts":{"bytesInOutput":156},"packages/common/log/src/processors/browser-processor.ts":{"bytesInOutput":2759},"packages/common/log/src/processors/file-processor.ts":{"bytesInOutput":1262},"packages/common/log/src/log.ts":{"bytesInOutput":1930},"packages/common/log/src/experimental/ownership.ts":{"bytesInOutput":792}},"bytes":15529}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -53,11 +53,12 @@ __export(node_exports, {
|
|
|
53
53
|
module.exports = __toCommonJS(node_exports);
|
|
54
54
|
var import_lodash = __toESM(require("lodash.omit"));
|
|
55
55
|
var import_lodash2 = __toESM(require("lodash.pick"));
|
|
56
|
+
var import_chalk = __toESM(require("chalk"));
|
|
56
57
|
var import_node_util = require("node:util");
|
|
57
58
|
var import_lodash3 = __toESM(require("lodash.defaultsdeep"));
|
|
58
59
|
var import_js_yaml = __toESM(require("js-yaml"));
|
|
59
60
|
var import_node_fs = __toESM(require("node:fs"));
|
|
60
|
-
var
|
|
61
|
+
var import_chalk2 = __toESM(require("chalk"));
|
|
61
62
|
var import_lodash4 = __toESM(require("lodash.pickby"));
|
|
62
63
|
var import_node_util2 = require("node:util");
|
|
63
64
|
var import_util = require("@dxos/util");
|
|
@@ -147,7 +148,7 @@ var getContextFromEntry = (entry) => {
|
|
|
147
148
|
if (entry.error) {
|
|
148
149
|
const errorContext = entry.error.context;
|
|
149
150
|
context = Object.assign(context ?? {}, {
|
|
150
|
-
error: entry.error
|
|
151
|
+
error: entry.error,
|
|
151
152
|
...errorContext
|
|
152
153
|
});
|
|
153
154
|
}
|
|
@@ -156,6 +157,7 @@ var getContextFromEntry = (entry) => {
|
|
|
156
157
|
var nextPromiseId = 0;
|
|
157
158
|
var createMethodLogDecorator = (log2) => (arg0, arg1, meta) => (target, propertyKey, descriptor) => {
|
|
158
159
|
const method = descriptor.value;
|
|
160
|
+
const methodName = propertyKey;
|
|
159
161
|
descriptor.value = function(...args) {
|
|
160
162
|
const combinedMeta = {
|
|
161
163
|
...meta ?? {},
|
|
@@ -167,30 +169,54 @@ var createMethodLogDecorator = (log2) => (arg0, arg1, meta) => (target, property
|
|
|
167
169
|
const result = method.apply(this, args);
|
|
168
170
|
if (isThenable(result)) {
|
|
169
171
|
const id = nextPromiseId++;
|
|
170
|
-
log2
|
|
172
|
+
logAsyncBegin(log2, methodName, formattedArgs, id, combinedMeta);
|
|
171
173
|
result.then((resolvedValue) => {
|
|
172
|
-
|
|
173
|
-
log2.info(`\u2705 resolve #${id} ${(performance.now() - startTime).toFixed(0)}ms => ${(0, import_node_util.inspect)(resolvedValue, false, 1, true)}`, {}, combinedMeta);
|
|
174
|
-
} else {
|
|
175
|
-
log2.info(`\u2705 resolve #${id} ${(performance.now() - startTime).toFixed(0)}ms`, {}, combinedMeta);
|
|
176
|
-
}
|
|
174
|
+
logAsyncResolved(log2, methodName, resolvedValue, id, startTime, combinedMeta);
|
|
177
175
|
}, (err) => {
|
|
178
|
-
log2
|
|
176
|
+
logAsyncRejected(log2, methodName, err, id, startTime, combinedMeta);
|
|
179
177
|
});
|
|
180
178
|
} else {
|
|
181
|
-
log2
|
|
179
|
+
logSyncCall(log2, methodName, formattedArgs, result, combinedMeta);
|
|
182
180
|
}
|
|
183
181
|
return result;
|
|
184
182
|
} catch (err) {
|
|
185
|
-
log2
|
|
183
|
+
logSyncError(log2, methodName, formattedArgs, err, combinedMeta);
|
|
186
184
|
throw err;
|
|
187
185
|
}
|
|
188
186
|
};
|
|
189
187
|
Object.defineProperty(descriptor.value, "name", {
|
|
190
|
-
value:
|
|
188
|
+
value: methodName + "$log"
|
|
191
189
|
});
|
|
192
190
|
};
|
|
193
191
|
var isThenable = (obj) => obj && typeof obj.then === "function";
|
|
192
|
+
var logSyncCall = (log2, methodName, formattedArgs, result, combinedMeta) => {
|
|
193
|
+
log2.info(`.${formatFunction(methodName)} (${formattedArgs}) ${import_chalk.default.gray("resolve")} ${(0, import_node_util.inspect)(result, false, 1, true)}`, {}, combinedMeta);
|
|
194
|
+
};
|
|
195
|
+
var logSyncError = (log2, methodName, formattedArgs, err, combinedMeta) => {
|
|
196
|
+
log2.error(`.${formatFunction(methodName)} (${formattedArgs}) \u{1F525} ${err}`, {}, combinedMeta);
|
|
197
|
+
};
|
|
198
|
+
var logAsyncBegin = (log2, methodName, formattedArgs, promiseId, combinedMeta) => {
|
|
199
|
+
log2.info(`.${formatFunction(methodName)} \u21B4 (${formattedArgs}) ${import_chalk.default.gray("=>")} ${formatPromise(promiseId)}`, {}, combinedMeta);
|
|
200
|
+
};
|
|
201
|
+
var logAsyncResolved = (log2, methodName, resolvedValue, promiseId, startTime, combinedMeta) => {
|
|
202
|
+
if (resolvedValue !== void 0) {
|
|
203
|
+
log2.info(`.${formatFunction(methodName)} \u21B2 ${greenCheck} ${import_chalk.default.gray("resolve")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${import_chalk.default.gray("=>")} ${(0, import_node_util.inspect)(resolvedValue, false, 1, true)}`, {}, combinedMeta);
|
|
204
|
+
} else {
|
|
205
|
+
log2.info(`.${formatFunction(methodName)} \u21B2 ${greenCheck} ${import_chalk.default.gray("resolve")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)}`, {}, combinedMeta);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
var logAsyncRejected = (log2, methodName, err, promiseId, startTime, combinedMeta) => {
|
|
209
|
+
log2.info(`.${formatFunction(methodName)} \u21B2 \u{1F525} ${import_chalk.default.gray("reject")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${import_chalk.default.gray("=>")} ${err}`, {}, combinedMeta);
|
|
210
|
+
};
|
|
211
|
+
var greenCheck = import_chalk.default.green("\u2714");
|
|
212
|
+
var formatTimeElapsed = (startTime) => import_chalk.default.gray(`${(performance.now() - startTime).toFixed(0)}ms`);
|
|
213
|
+
var COLOR_FUNCTION = [
|
|
214
|
+
220,
|
|
215
|
+
220,
|
|
216
|
+
170
|
|
217
|
+
];
|
|
218
|
+
var formatFunction = (name) => import_chalk.default.bold(import_chalk.default.rgb(...COLOR_FUNCTION)(name));
|
|
219
|
+
var formatPromise = (id) => import_chalk.default.blue(`Promise#${id}`);
|
|
194
220
|
var loadOptions = (filepath) => {
|
|
195
221
|
if (filepath) {
|
|
196
222
|
try {
|
|
@@ -222,17 +248,17 @@ var getRelativeFilename = (filename) => {
|
|
|
222
248
|
}
|
|
223
249
|
return filename;
|
|
224
250
|
};
|
|
225
|
-
var DEFAULT_FORMATTER = (config, { path, line,
|
|
251
|
+
var DEFAULT_FORMATTER = (config, { path, line, level, message, context, error, scope }) => {
|
|
226
252
|
const column = config.options?.formatter?.column;
|
|
227
|
-
const filepath = path !== void 0 && line !== void 0 ?
|
|
253
|
+
const filepath = path !== void 0 && line !== void 0 ? import_chalk2.default.grey(`${path}:${line}`) : void 0;
|
|
228
254
|
let instance;
|
|
229
255
|
if (scope) {
|
|
230
256
|
const prototype = Object.getPrototypeOf(scope);
|
|
231
257
|
const id = (0, import_util.getPrototypeSpecificInstanceId)(scope);
|
|
232
|
-
instance =
|
|
258
|
+
instance = import_chalk2.default.magentaBright(`${prototype.constructor.name}#${id}`);
|
|
233
259
|
}
|
|
234
260
|
const formattedTimestamp = config.options?.formatter?.timestamp ? (/* @__PURE__ */ new Date()).toISOString() : void 0;
|
|
235
|
-
const formattedLevel =
|
|
261
|
+
const formattedLevel = import_chalk2.default[LEVEL_COLORS[level]](column ? shortLevelName[level] : LogLevel[level]);
|
|
236
262
|
const padding = column && filepath ? "".padStart(column - filepath.length) : void 0;
|
|
237
263
|
return config.options?.formatter?.timestampFirst ? [
|
|
238
264
|
formattedTimestamp,
|
|
@@ -256,11 +282,13 @@ var DEFAULT_FORMATTER = (config, { path, line, timestamp, level, message, contex
|
|
|
256
282
|
error
|
|
257
283
|
];
|
|
258
284
|
};
|
|
259
|
-
var SHORT_FORMATTER = (config, { path, level, message }) =>
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
285
|
+
var SHORT_FORMATTER = (config, { path, level, message }) => {
|
|
286
|
+
return [
|
|
287
|
+
import_chalk2.default.grey(truncate(path, 16, true)),
|
|
288
|
+
import_chalk2.default[LEVEL_COLORS[level]](shortLevelName[level]),
|
|
289
|
+
message
|
|
290
|
+
];
|
|
291
|
+
};
|
|
264
292
|
var formatter = DEFAULT_FORMATTER;
|
|
265
293
|
var CONSOLE_PROCESSOR = (config, entry) => {
|
|
266
294
|
const { level, message, meta, error } = entry;
|
|
@@ -395,18 +423,23 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
395
423
|
}
|
|
396
424
|
};
|
|
397
425
|
var BROWSER_PROCESSOR = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;
|
|
398
|
-
var createFileProcessor = ({
|
|
426
|
+
var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
|
|
399
427
|
let fd;
|
|
400
428
|
return (config, entry) => {
|
|
401
|
-
if (!levels2.includes(entry.level)) {
|
|
429
|
+
if (levels2.length > 0 && !levels2.includes(entry.level)) {
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
if (!shouldLog(entry, filters)) {
|
|
402
433
|
return;
|
|
403
434
|
}
|
|
404
|
-
if (
|
|
435
|
+
if (typeof pathOrFd === "number") {
|
|
436
|
+
fd = pathOrFd;
|
|
437
|
+
} else {
|
|
405
438
|
try {
|
|
406
|
-
(0, import_node_fs2.mkdirSync)((0, import_node_path.dirname)(
|
|
439
|
+
(0, import_node_fs2.mkdirSync)((0, import_node_path.dirname)(pathOrFd));
|
|
407
440
|
} catch {
|
|
408
441
|
}
|
|
409
|
-
fd = (0, import_node_fs2.openSync)(
|
|
442
|
+
fd = (0, import_node_fs2.openSync)(pathOrFd, "w");
|
|
410
443
|
}
|
|
411
444
|
const record = {
|
|
412
445
|
...entry,
|
|
@@ -426,7 +459,7 @@ var getLogFilePath = () => {
|
|
|
426
459
|
return logFilePath;
|
|
427
460
|
};
|
|
428
461
|
var FILE_PROCESSOR = createFileProcessor({
|
|
429
|
-
|
|
462
|
+
pathOrFd: getLogFilePath(),
|
|
430
463
|
levels: [
|
|
431
464
|
LogLevel.ERROR,
|
|
432
465
|
LogLevel.WARN,
|
|
@@ -502,7 +535,7 @@ var createLog = () => {
|
|
|
502
535
|
log2.info = (...params) => processLog(LogLevel.INFO, ...params);
|
|
503
536
|
log2.warn = (...params) => processLog(LogLevel.WARN, ...params);
|
|
504
537
|
log2.error = (...params) => processLog(LogLevel.ERROR, ...params);
|
|
505
|
-
log2.catch = (error, context, meta) => processLog(LogLevel.ERROR, error.
|
|
538
|
+
log2.catch = (error, context, meta) => processLog(LogLevel.ERROR, error.message, context, meta, error);
|
|
506
539
|
log2.break = () => log2.info("\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014");
|
|
507
540
|
log2.stack = (message, context, meta) => processLog(LogLevel.INFO, `${message ?? "Stack Dump"}
|
|
508
541
|
${getFormattedStackTrace()}`, context, meta);
|