@dxos/log 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d
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 +90 -64
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +90 -64
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/config.d.ts.map +1 -1
- package/dist/types/src/context.d.ts.map +1 -1
- package/dist/types/src/decorators.d.ts +1 -1
- package/dist/types/src/decorators.d.ts.map +1 -1
- package/dist/types/src/log.d.ts +12 -18
- package/dist/types/src/log.d.ts.map +1 -1
- package/dist/types/src/options.d.ts +1 -6
- package/dist/types/src/options.d.ts.map +1 -1
- package/dist/types/src/processors/file-processor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/config.ts +1 -0
- package/src/context.ts +36 -5
- package/src/decorators.ts +3 -3
- package/src/log.test.ts +48 -18
- package/src/log.ts +101 -57
- package/src/options.ts +24 -10
- package/src/processors/file-processor.ts +2 -0
|
@@ -13,6 +13,7 @@ var LogLevel = /* @__PURE__ */ (function(LogLevel2) {
|
|
|
13
13
|
return LogLevel2;
|
|
14
14
|
})({});
|
|
15
15
|
var levels = {
|
|
16
|
+
"*": 5,
|
|
16
17
|
trace: 5,
|
|
17
18
|
debug: 10,
|
|
18
19
|
verbose: 11,
|
|
@@ -38,8 +39,7 @@ var LogProcessorType = /* @__PURE__ */ (function(LogProcessorType2) {
|
|
|
38
39
|
// src/scope.ts
|
|
39
40
|
var logInfoProperties = Symbol("logInfoProperties");
|
|
40
41
|
var logInfo = (target, propertyKey, descriptor) => {
|
|
41
|
-
|
|
42
|
-
((_target = target)[_logInfoProperties = logInfoProperties] ?? (_target[_logInfoProperties] = [])).push(propertyKey);
|
|
42
|
+
(target[logInfoProperties] ??= []).push(propertyKey);
|
|
43
43
|
};
|
|
44
44
|
var gatherLogInfoFromScope = (scope) => {
|
|
45
45
|
if (!scope) {
|
|
@@ -60,14 +60,30 @@ var gatherLogInfoFromScope = (scope) => {
|
|
|
60
60
|
|
|
61
61
|
// src/context.ts
|
|
62
62
|
var matchFilter = (filter, level, path) => {
|
|
63
|
-
|
|
63
|
+
if (filter.pattern?.startsWith("-")) {
|
|
64
|
+
if (path?.includes(filter.pattern.slice(1))) {
|
|
65
|
+
if (level >= filter.level) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
if (filter.pattern?.length) {
|
|
71
|
+
if (path?.includes(filter.pattern)) {
|
|
72
|
+
return level >= filter.level;
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
if (level >= filter.level) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
64
80
|
};
|
|
65
81
|
var shouldLog = (entry, filters) => {
|
|
66
82
|
if (filters === void 0) {
|
|
67
|
-
return
|
|
68
|
-
} else {
|
|
69
|
-
return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ""));
|
|
83
|
+
return false;
|
|
70
84
|
}
|
|
85
|
+
const results = filters.map((filter) => matchFilter(filter, entry.level, entry.meta?.F)).filter((result) => result !== void 0);
|
|
86
|
+
return results.length > 0 && !results.some((results2) => results2 === false);
|
|
71
87
|
};
|
|
72
88
|
var getContextFromEntry = (entry) => {
|
|
73
89
|
let context;
|
|
@@ -196,13 +212,13 @@ var logAsyncResolved = (log2, methodName, resolvedValue, promiseId, startTime, c
|
|
|
196
212
|
var logAsyncRejected = (log2, methodName, err, promiseId, startTime, combinedMeta) => {
|
|
197
213
|
log2.info(`.${formatFunction(methodName)} \u21B2 \u{1F525} ${chalk.gray("reject")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${chalk.gray("=>")} ${err}`, {}, combinedMeta);
|
|
198
214
|
};
|
|
199
|
-
var greenCheck = typeof chalk.green === "function" ? chalk.green("\u2714") : "\u2714";
|
|
200
|
-
var formatTimeElapsed = (startTime) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);
|
|
201
215
|
var COLOR_FUNCTION = [
|
|
202
216
|
220,
|
|
203
217
|
220,
|
|
204
218
|
170
|
|
205
219
|
];
|
|
220
|
+
var greenCheck = typeof chalk.green === "function" ? chalk.green("\u2714") : "\u2714";
|
|
221
|
+
var formatTimeElapsed = (startTime) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);
|
|
206
222
|
var formatFunction = (name) => chalk.bold(chalk.rgb(...COLOR_FUNCTION)(name));
|
|
207
223
|
var formatPromise = (id) => chalk.blue(`Promise#${id}`);
|
|
208
224
|
|
|
@@ -415,7 +431,7 @@ var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
|
|
|
415
431
|
};
|
|
416
432
|
var logFilePath;
|
|
417
433
|
var getLogFilePath = () => {
|
|
418
|
-
logFilePath
|
|
434
|
+
logFilePath ??= process.env.LOG_FILE ?? (process.env.HOME ? `${process.env.HOME}/.dxlog/${(/* @__PURE__ */ new Date()).toISOString()}.log` : void 0);
|
|
419
435
|
return logFilePath;
|
|
420
436
|
};
|
|
421
437
|
var FILE_PROCESSOR = createFileProcessor({
|
|
@@ -434,10 +450,11 @@ var processors = {
|
|
|
434
450
|
[LogProcessorType.BROWSER]: BROWSER_PROCESSOR,
|
|
435
451
|
[LogProcessorType.DEBUG]: DEBUG_PROCESSOR
|
|
436
452
|
};
|
|
437
|
-
var
|
|
453
|
+
var browser = typeof window !== "undefined" || typeof navigator !== "undefined";
|
|
438
454
|
var DEFAULT_PROCESSORS = [
|
|
439
|
-
|
|
455
|
+
browser ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR
|
|
440
456
|
];
|
|
457
|
+
var parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
|
|
441
458
|
var parseFilter = (filter) => {
|
|
442
459
|
if (typeof filter === "number") {
|
|
443
460
|
return [
|
|
@@ -446,7 +463,6 @@ var parseFilter = (filter) => {
|
|
|
446
463
|
}
|
|
447
464
|
];
|
|
448
465
|
}
|
|
449
|
-
const parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
|
|
450
466
|
const lines = typeof filter === "string" ? filter.split(/,\s*/) : filter;
|
|
451
467
|
return lines.map((filter2) => {
|
|
452
468
|
const [pattern, level] = filter2.split(":");
|
|
@@ -458,55 +474,37 @@ var parseFilter = (filter) => {
|
|
|
458
474
|
};
|
|
459
475
|
});
|
|
460
476
|
};
|
|
461
|
-
var
|
|
462
|
-
const
|
|
477
|
+
var createConfig = (options) => {
|
|
478
|
+
const envOptions = "process" in globalThis ? {
|
|
463
479
|
file: process.env.LOG_CONFIG,
|
|
464
480
|
filter: process.env.LOG_FILTER,
|
|
465
481
|
processor: process.env.LOG_PROCESSOR
|
|
466
482
|
} : void 0;
|
|
467
|
-
const mergedOptions = defaultsDeep({}, loadOptions(
|
|
483
|
+
const mergedOptions = defaultsDeep({}, loadOptions(envOptions?.file), envOptions, options);
|
|
468
484
|
return {
|
|
469
485
|
options: mergedOptions,
|
|
470
486
|
filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),
|
|
471
487
|
captureFilters: parseFilter(mergedOptions.captureFilter ?? LogLevel.WARN),
|
|
472
488
|
processors: mergedOptions.processor ? [
|
|
473
489
|
processors[mergedOptions.processor]
|
|
474
|
-
] :
|
|
490
|
+
] : [
|
|
491
|
+
...DEFAULT_PROCESSORS
|
|
492
|
+
],
|
|
475
493
|
prefix: mergedOptions.prefix
|
|
476
494
|
};
|
|
477
495
|
};
|
|
478
496
|
|
|
479
497
|
// src/log.ts
|
|
480
|
-
var
|
|
498
|
+
var logCount = 0;
|
|
481
499
|
var createLog = () => {
|
|
482
500
|
const log2 = (...params) => processLog(LogLevel.DEBUG, ...params);
|
|
483
|
-
log2
|
|
501
|
+
Object.assign(log2, {
|
|
502
|
+
_id: `log-${++logCount}`,
|
|
503
|
+
_config: createConfig()
|
|
504
|
+
});
|
|
484
505
|
Object.defineProperty(log2, "runtimeConfig", {
|
|
485
506
|
get: () => log2._config
|
|
486
507
|
});
|
|
487
|
-
log2.addProcessor = (processor) => {
|
|
488
|
-
if (DEFAULT_PROCESSORS.filter((p) => p === processor).length === 0) {
|
|
489
|
-
DEFAULT_PROCESSORS.push(processor);
|
|
490
|
-
}
|
|
491
|
-
if (log2._config.processors.filter((p) => p === processor).length === 0) {
|
|
492
|
-
log2._config.processors.push(processor);
|
|
493
|
-
}
|
|
494
|
-
};
|
|
495
|
-
log2.config = (options) => {
|
|
496
|
-
log2._config = getConfig(options);
|
|
497
|
-
};
|
|
498
|
-
log2.trace = (...params) => processLog(LogLevel.TRACE, ...params);
|
|
499
|
-
log2.debug = (...params) => processLog(LogLevel.DEBUG, ...params);
|
|
500
|
-
log2.verbose = (...params) => processLog(LogLevel.VERBOSE, ...params);
|
|
501
|
-
log2.info = (...params) => processLog(LogLevel.INFO, ...params);
|
|
502
|
-
log2.warn = (...params) => processLog(LogLevel.WARN, ...params);
|
|
503
|
-
log2.error = (...params) => processLog(LogLevel.ERROR, ...params);
|
|
504
|
-
log2.catch = (error, context, meta) => processLog(LogLevel.ERROR, void 0, context, meta, error);
|
|
505
|
-
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");
|
|
506
|
-
log2.stack = (message, context, meta) => processLog(LogLevel.INFO, `${message ?? "Stack Dump"}
|
|
507
|
-
${getFormattedStackTrace()}`, context, meta);
|
|
508
|
-
log2.method = createMethodLogDecorator(log2);
|
|
509
|
-
log2.func = createFunctionLogDecorator(log2);
|
|
510
508
|
const processLog = (level, message, context = {}, meta, error) => {
|
|
511
509
|
log2._config.processors.forEach((processor) => processor(log2._config, {
|
|
512
510
|
level,
|
|
@@ -516,9 +514,50 @@ ${getFormattedStackTrace()}`, context, meta);
|
|
|
516
514
|
error
|
|
517
515
|
}));
|
|
518
516
|
};
|
|
517
|
+
Object.assign(log2, {
|
|
518
|
+
/**
|
|
519
|
+
* Update config.
|
|
520
|
+
* NOTE: Preserves any processors that were already added to this logger instance
|
|
521
|
+
* unless an explicit processor option is provided.
|
|
522
|
+
*/
|
|
523
|
+
config: ({ processor, ...options }) => {
|
|
524
|
+
const config = createConfig(options);
|
|
525
|
+
const processors2 = processor ? config.processors : log2._config.processors;
|
|
526
|
+
log2._config = {
|
|
527
|
+
...config,
|
|
528
|
+
processors: processors2
|
|
529
|
+
};
|
|
530
|
+
return log2;
|
|
531
|
+
},
|
|
532
|
+
/**
|
|
533
|
+
* Adds a processor to the logger.
|
|
534
|
+
*/
|
|
535
|
+
addProcessor: (processor) => {
|
|
536
|
+
if (log2._config.processors.filter((p) => p === processor).length === 0) {
|
|
537
|
+
log2._config.processors.push(processor);
|
|
538
|
+
}
|
|
539
|
+
return () => {
|
|
540
|
+
log2._config.processors = log2._config.processors.filter((p) => p !== processor);
|
|
541
|
+
};
|
|
542
|
+
},
|
|
543
|
+
trace: (...params) => processLog(LogLevel.TRACE, ...params),
|
|
544
|
+
debug: (...params) => processLog(LogLevel.DEBUG, ...params),
|
|
545
|
+
verbose: (...params) => processLog(LogLevel.VERBOSE, ...params),
|
|
546
|
+
info: (...params) => processLog(LogLevel.INFO, ...params),
|
|
547
|
+
warn: (...params) => processLog(LogLevel.WARN, ...params),
|
|
548
|
+
error: (...params) => processLog(LogLevel.ERROR, ...params),
|
|
549
|
+
catch: (error, context, meta) => processLog(LogLevel.ERROR, void 0, context, meta, error),
|
|
550
|
+
method: createMethodLogDecorator(log2),
|
|
551
|
+
function: createFunctionLogDecorator(log2),
|
|
552
|
+
break: () => log2.info("-".repeat(80)),
|
|
553
|
+
stack: (message, context, meta) => {
|
|
554
|
+
return processLog(LogLevel.INFO, `${message ?? "Stack Dump"}
|
|
555
|
+
${getFormattedStackTrace()}`, context, meta);
|
|
556
|
+
}
|
|
557
|
+
});
|
|
519
558
|
return log2;
|
|
520
559
|
};
|
|
521
|
-
var log =
|
|
560
|
+
var log = globalThis.DX_LOG ??= createLog();
|
|
522
561
|
var start = Date.now();
|
|
523
562
|
var last = start;
|
|
524
563
|
var debug = (label, args) => {
|
|
@@ -537,24 +576,17 @@ var getFormattedStackTrace = () => new Error().stack.split("\n").slice(3).join("
|
|
|
537
576
|
|
|
538
577
|
// src/experimental/ownership.ts
|
|
539
578
|
import { inspect as inspect3 } from "@dxos/node-std/util";
|
|
540
|
-
function _define_property(obj, key, value) {
|
|
541
|
-
if (key in obj) {
|
|
542
|
-
Object.defineProperty(obj, key, {
|
|
543
|
-
value,
|
|
544
|
-
enumerable: true,
|
|
545
|
-
configurable: true,
|
|
546
|
-
writable: true
|
|
547
|
-
});
|
|
548
|
-
} else {
|
|
549
|
-
obj[key] = value;
|
|
550
|
-
}
|
|
551
|
-
return obj;
|
|
552
|
-
}
|
|
553
579
|
var kOwnershipScope = Symbol("kOwnershipScope");
|
|
554
580
|
var kCurrentOwnershipScope = Symbol("kCurrentOwnershipScope");
|
|
555
581
|
var kDebugInfoProperties = Symbol("kDebugInfoProperties");
|
|
556
|
-
var _inspect_custom = inspect3.custom;
|
|
557
582
|
var OwnershipScope = class {
|
|
583
|
+
constr;
|
|
584
|
+
parent;
|
|
585
|
+
instance;
|
|
586
|
+
constructor(constr, parent) {
|
|
587
|
+
this.constr = constr;
|
|
588
|
+
this.parent = parent;
|
|
589
|
+
}
|
|
558
590
|
getInfo() {
|
|
559
591
|
if (!this.instance) {
|
|
560
592
|
return {};
|
|
@@ -566,20 +598,13 @@ var OwnershipScope = class {
|
|
|
566
598
|
}
|
|
567
599
|
return info;
|
|
568
600
|
}
|
|
569
|
-
[
|
|
601
|
+
[inspect3.custom]() {
|
|
570
602
|
return {
|
|
571
603
|
className: this.constr.name,
|
|
572
604
|
info: this.getInfo(),
|
|
573
605
|
parent: this.parent
|
|
574
606
|
};
|
|
575
607
|
}
|
|
576
|
-
constructor(constr, parent) {
|
|
577
|
-
_define_property(this, "constr", void 0);
|
|
578
|
-
_define_property(this, "parent", void 0);
|
|
579
|
-
_define_property(this, "instance", void 0);
|
|
580
|
-
this.constr = constr;
|
|
581
|
-
this.parent = parent;
|
|
582
|
-
}
|
|
583
608
|
};
|
|
584
609
|
var getCurrentOwnershipScope = (thisRef) => thisRef;
|
|
585
610
|
export {
|
|
@@ -590,6 +615,7 @@ export {
|
|
|
590
615
|
LogLevel,
|
|
591
616
|
LogProcessorType,
|
|
592
617
|
createFileProcessor,
|
|
618
|
+
createLog,
|
|
593
619
|
debug,
|
|
594
620
|
gatherLogInfoFromScope,
|
|
595
621
|
getContextFromEntry,
|
|
@@ -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/processors/common.ts", "../../../src/log.ts", "../../../src/experimental/ownership.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport omit from 'lodash.omit';\n\nimport { pick } from '@dxos/util';\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 type * 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 * NOTE: Keep aligned with LogLevel in @dxos/protocols.\n */\n// TODO(burdon): Update numbers?\nexport enum LogLevel {\n TRACE = 5,\n DEBUG = 10,\n VERBOSE = 11,\n INFO = 12,\n WARN = 13,\n ERROR = 14,\n}\n\nexport const levels: Record<string, LogLevel> = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\n verbose: LogLevel.VERBOSE,\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.VERBOSE]: 'V',\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 = (typeof prototype === 'object' && prototype !== null ? 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 const entryContext = typeof entry.context === 'function' ? entry.context() : entry.context;\n if (entryContext) {\n if (entryContext instanceof Error) {\n // Additional context from Error.\n const c = (entryContext as any).context;\n // If ERROR then show stacktrace.\n context = Object.assign(context ?? {}, { error: entryContext.stack, ...c });\n } else if (typeof entryContext === 'object') {\n context = Object.assign(context ?? {}, entryContext);\n }\n }\n\n if (entry.error) {\n context = Object.assign(context ?? {}, { error: entry.error });\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 chalk from 'chalk';\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 F: '',\n L: 0,\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\nexport const createFunctionLogDecorator =\n (log: LogMethods) =>\n <F extends (...args: any[]) => any>(\n name: string,\n fn: F,\n opts: { transformOutput?: (result: ReturnType<F>) => Promise<any> | any } = {},\n ): F => {\n const decoratedFn = function (this: any, ...args: any) {\n const combinedMeta = {\n F: '',\n L: 0,\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 = fn.apply(this, args);\n\n let transformedResult = result;\n if (opts.transformOutput) {\n if (isThenable(result)) {\n transformedResult = result.then(opts.transformOutput as any);\n } else {\n transformedResult = opts.transformOutput(result);\n }\n }\n\n if (isThenable(transformedResult)) {\n const id = nextPromiseId++;\n logAsyncBegin(log, name, formattedArgs, id, combinedMeta);\n transformedResult.then(\n (resolvedValue) => {\n logAsyncResolved(log, name, resolvedValue, id, startTime, combinedMeta);\n },\n (err) => {\n logAsyncRejected(log, name, err, id, startTime, combinedMeta);\n },\n );\n } else {\n logSyncCall(log, name, formattedArgs, transformedResult, combinedMeta);\n }\n\n return result;\n } catch (err: any) {\n logSyncError(log, name, formattedArgs, err, combinedMeta);\n throw err;\n }\n };\n Object.defineProperty(decoratedFn, 'name', { value: name + '$log' });\n return decoratedFn as F;\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('=>')} ${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\n// https://github.com/dxos/dxos/issues/7286\nconst greenCheck = typeof chalk.green === 'function' ? 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 { BROWSER_PROCESSOR, CONSOLE_PROCESSOR, DEBUG_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 try {\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 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 { type LogProcessor, getContextFromEntry, 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 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 if (entry.message) {\n args.push(entry.message);\n }\n\n const context = getContextFromEntry(entry);\n if (context) {\n if (Object.keys(context).length === 1 && 'error' in context) {\n args.push(context.error);\n } else if (Object.keys(context).length === 1 && 'err' in context) {\n args.push(context.err);\n } else {\n args.push(context);\n }\n }\n\n // https://github.com/cloudflare/workers-sdk/issues/5591\n const levels: any = {\n [LogLevel.ERROR]: console.error.bind(console),\n [LogLevel.WARN]: console.warn.bind(console),\n [LogLevel.DEBUG]: console.log.bind(console),\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 // https://github.com/cloudflare/workers-sdk/issues/5591\n const level = levels[entry.level] ?? console.log.bind(console);\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 { jsonlogify } from '@dxos/util';\n\nimport { type LogFilter, LogLevel } from '../config';\nimport { type LogProcessor, getContextFromEntry, shouldLog } from '../context';\n\nimport { getRelativeFilename } from './common';\n\n// Amount of time to retry writing after encountering EAGAIN before giving up.\nconst EAGAIN_MAX_DURATION = 1000;\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, 'a');\n }\n\n const record = {\n ...entry,\n timestamp: Date.now(),\n ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),\n context: jsonlogify(getContextFromEntry(entry)),\n };\n let retryTS: number = 0;\n\n // Retry writing if EAGAIN is encountered.\n //\n // Node may set stdout and stderr to non-blocking. https://github.com/nodejs/node/issues/42826\n // This can cause EAGAIN errors when writing to them.\n // In order to not drop logs, make log methods asynchronous, or deal with buffering/delayed writes, spin until write succeeds.\n\n while (true) {\n try {\n return appendFileSync(fd, JSON.stringify(record) + '\\n');\n } catch (err: any) {\n if (err.code !== 'EAGAIN') {\n throw err;\n }\n if (retryTS === 0) {\n retryTS = performance.now();\n } else {\n if (performance.now() - retryTS > EAGAIN_MAX_DURATION) {\n console.log(`could not write after ${EAGAIN_MAX_DURATION}ms of EAGAIN failures, giving up`);\n throw err;\n }\n }\n }\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 2024 DXOS.org\n//\n\nexport const 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", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogConfig, LogLevel, type LogOptions } from './config';\nimport { type LogContext, type LogProcessor } from './context';\nimport { createFunctionLogDecorator, createMethodLogDecorator } from './decorators';\nimport { type CallMetadata } from './meta';\nimport { DEFAULT_PROCESSORS, getConfig } 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 verbose: 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 func: <F extends (...args: any[]) => any>(\n name: string,\n fn: F,\n opts?: { transformOutput?: (result: ReturnType<F>) => Promise<any> | any },\n ) => F;\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.verbose = (...params) => processLog(LogLevel.VERBOSE, ...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, undefined, 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 log.func = createFunctionLogDecorator(log);\n\n /**\n * Process the current log call.\n */\n const processLog = (\n level: LogLevel,\n message: string | undefined,\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\nconst start = Date.now();\nlet last = start;\n\n/**\n * Log debug stack.\n */\nexport const debug = (label?: any, args?: any) => {\n const now = Date.now();\n const err = new Error();\n console.group(\n `DEBUG[${label}]`,\n JSON.stringify({ t: Number(now - start).toLocaleString(), dt: Number(now - last).toLocaleString(), ...args }),\n );\n console.warn(err.stack);\n console.groupEnd();\n last = Date.now();\n};\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": ";AAIA,OAAOA,UAAU;AAEjB,SAASC,YAAY;;;ACKd,IAAKC,WAAAA,0BAAAA,WAAAA;;;;;;;SAAAA;;AASL,IAAMC,SAAmC;EAC9CC,OAAK;EACLC,OAAK;EACLC,SAAO;EACPC,MAAI;EACJC,MAAI;EACJC,OAAK;AACP;AAEO,IAAMC,iBAAiB;EAC5B,CAAA,CAAA,GAAkB;EAClB,CAAA,EAAA,GAAkB;EAClB,CAAA,EAAA,GAAoB;EACpB,CAAA,EAAA,GAAiB;EACjB,CAAA,EAAA,GAAiB;EACjB,CAAA,EAAA,GAAkB;AACpB;AAEO,IAAKC,mBAAAA,0BAAAA,mBAAAA;;;;SAAAA;;;;AClCZ,IAAMC,oBAAoBC,OAAO,mBAAA;AAc1B,IAAMC,UAAU,CAACC,QAAaC,aAAqBC,eAAAA;MAEvDF,SAAOH;AAAPG,IAAAA,UAAAA,QAAOH,qBAAAA,iBAAAA,MAAPG,QAAOH,kBAAAA,IAAuB,CAAA,IAAIM,KAAKF,WAAAA;AAC1C;AAMO,IAAMG,yBAAyB,CAACC,UAAAA;AACrC,MAAI,CAACA,OAAO;AACV,WAAO,CAAC;EACV;AAEA,QAAMC,MAA2B,CAAC;AAElC,QAAMC,YAAYC,OAAOC,eAAeJ,KAAAA;AACxC,QAAMK,aAAa,OAAOH,cAAc,YAAYA,cAAc,OAAOA,UAAUV,iBAAAA,IAAqB,CAAA,MAAO,CAAA;AAC/G,aAAWc,QAAQD,WAAW;AAC5B,QAAI;AACFJ,UAAIK,IAAAA,IAAQ,OAAON,MAAMM,IAAAA,MAAU,aAAaN,MAAMM,IAAAA,EAAK,IAAKN,MAAMM,IAAAA;IACxE,SAASC,KAAU;AACjBN,UAAIK,IAAAA,IAAQC,IAAIC;IAClB;EACF;AAEA,SAAOP;AACT;;;AChBA,IAAMQ,cAAc,CAACC,QAAmBC,OAAiBC,SAAAA;AACvD,SAAOD,SAASD,OAAOC,UAAU,CAACD,OAAOG,WAAWD,KAAKE,SAASJ,OAAOG,OAAO;AAClF;AAKO,IAAME,YAAY,CAACC,OAAiBC,YAAAA;AACzC,MAAIA,YAAYC,QAAW;AACzB,WAAO;EACT,OAAO;AACL,WAAOD,QAAQE,KAAK,CAACT,WAAWD,YAAYC,QAAQM,MAAML,OAAOK,MAAMI,MAAMC,KAAK,EAAA,CAAA;EACpF;AACF;AAEO,IAAMC,sBAAsB,CAACN,UAAAA;AAClC,MAAIO;AACJ,MAAIP,MAAMI,MAAM;AACd,UAAMI,YAAYC,uBAAuBT,MAAMI,KAAKM,CAAC;AACrD,QAAIC,OAAOC,KAAKJ,SAAAA,EAAWK,SAAS,GAAG;AACrCN,gBAAUI,OAAOG,OAAOP,WAAW,CAAC,GAAGC,SAAAA;IACzC;EACF;AAEA,QAAMO,eAAe,OAAOf,MAAMO,YAAY,aAAaP,MAAMO,QAAO,IAAKP,MAAMO;AACnF,MAAIQ,cAAc;AAChB,QAAIA,wBAAwBC,OAAO;AAEjC,YAAMC,IAAKF,aAAqBR;AAEhCA,gBAAUI,OAAOG,OAAOP,WAAW,CAAC,GAAG;QAAEW,OAAOH,aAAaI;QAAO,GAAGF;MAAE,CAAA;IAC3E,WAAW,OAAOF,iBAAiB,UAAU;AAC3CR,gBAAUI,OAAOG,OAAOP,WAAW,CAAC,GAAGQ,YAAAA;IACzC;EACF;AAEA,MAAIf,MAAMkB,OAAO;AACfX,cAAUI,OAAOG,OAAOP,WAAW,CAAC,GAAG;MAAEW,OAAOlB,MAAMkB;IAAM,CAAA;EAC9D;AAEA,SAAOX,WAAWI,OAAOC,KAAKL,OAAAA,EAASM,SAAS,IAAIN,UAAUL;AAChE;;;AClEA,SAASkB,eAAe;AAExB,OAAOC,WAAW;AAKlB,IAAIC,gBAAgB;AAEb,IAAMC,2BACX,CAACC,SACD,CAACC,MAAcC,MAAcC,SAC7B,CAACC,QAAaC,aAA8BC,eAAAA;AAC1C,QAAMC,SAASD,WAAWE;AAC1B,QAAMC,aAAaJ;AACnBC,aAAWE,QAAQ,YAAwBE,MAAS;AAClD,UAAMC,eAAe;MACnBC,GAAG;MACHC,GAAG;MACH,GAAIV,QAAQ,CAAC;MACbW,GAAG;IACL;AAEA,UAAMC,gBAAgBL,KAAKM,IAAI,CAACC,QAAaC,QAAQD,KAAK,OAAO,GAAG,IAAA,CAAA,EAAOE,KAAK,IAAA;AAEhF,QAAI;AACF,YAAMC,YAAYC,YAAYC,IAAG;AACjC,YAAMC,SAAShB,OAAOiB,MAAM,MAAMd,IAAAA;AAElC,UAAIe,WAAWF,MAAAA,GAAS;AACtB,cAAMG,KAAK5B;AACX6B,sBAAc3B,MAAKS,YAAYM,eAAeW,IAAIf,YAAAA;AAClDY,eAAOK,KACL,CAACC,kBAAAA;AACCC,2BAAiB9B,MAAKS,YAAYoB,eAAeH,IAAIN,WAAWT,YAAAA;QAClE,GACA,CAACoB,QAAAA;AACCC,2BAAiBhC,MAAKS,YAAYsB,KAAKL,IAAIN,WAAWT,YAAAA;QACxD,CAAA;MAEJ,OAAO;AACLsB,oBAAYjC,MAAKS,YAAYM,eAAeQ,QAAQZ,YAAAA;MACtD;AAEA,aAAOY;IACT,SAASQ,KAAU;AACjBG,mBAAalC,MAAKS,YAAYM,eAAegB,KAAKpB,YAAAA;AAClD,YAAMoB;IACR;EACF;AACAI,SAAOC,eAAe9B,WAAWE,OAAO,QAAQ;IAAEA,OAAOC,aAAa;EAAO,CAAA;AAC/E;AAEK,IAAM4B,6BACX,CAACrC,SACD,CACEsC,MACAC,IACAC,OAA4E,CAAC,MAAC;AAE9E,QAAMC,cAAc,YAAwB/B,MAAS;AACnD,UAAMC,eAAe;MACnBC,GAAG;MACHC,GAAG;IACL;AAEA,UAAME,gBAAgBL,KAAKM,IAAI,CAACC,QAAaC,QAAQD,KAAK,OAAO,GAAG,IAAA,CAAA,EAAOE,KAAK,IAAA;AAEhF,QAAI;AACF,YAAMC,YAAYC,YAAYC,IAAG;AACjC,YAAMC,SAASgB,GAAGf,MAAM,MAAMd,IAAAA;AAE9B,UAAIgC,oBAAoBnB;AACxB,UAAIiB,KAAKG,iBAAiB;AACxB,YAAIlB,WAAWF,MAAAA,GAAS;AACtBmB,8BAAoBnB,OAAOK,KAAKY,KAAKG,eAAe;QACtD,OAAO;AACLD,8BAAoBF,KAAKG,gBAAgBpB,MAAAA;QAC3C;MACF;AAEA,UAAIE,WAAWiB,iBAAAA,GAAoB;AACjC,cAAMhB,KAAK5B;AACX6B,sBAAc3B,MAAKsC,MAAMvB,eAAeW,IAAIf,YAAAA;AAC5C+B,0BAAkBd,KAChB,CAACC,kBAAAA;AACCC,2BAAiB9B,MAAKsC,MAAMT,eAAeH,IAAIN,WAAWT,YAAAA;QAC5D,GACA,CAACoB,QAAAA;AACCC,2BAAiBhC,MAAKsC,MAAMP,KAAKL,IAAIN,WAAWT,YAAAA;QAClD,CAAA;MAEJ,OAAO;AACLsB,oBAAYjC,MAAKsC,MAAMvB,eAAe2B,mBAAmB/B,YAAAA;MAC3D;AAEA,aAAOY;IACT,SAASQ,KAAU;AACjBG,mBAAalC,MAAKsC,MAAMvB,eAAegB,KAAKpB,YAAAA;AAC5C,YAAMoB;IACR;EACF;AACAI,SAAOC,eAAeK,aAAa,QAAQ;IAAEjC,OAAO8B,OAAO;EAAO,CAAA;AAClE,SAAOG;AACT;AAEF,IAAMhB,aAAa,CAACmB,QAAsCA,OAAO,OAAOA,IAAIhB,SAAS;AAErF,IAAMK,cAAc,CAClBjC,MACAS,YACAM,eACAQ,QACAZ,iBAAAA;AAEAX,EAAAA,KAAI6C,KACF,IAAIC,eAAerC,UAAAA,CAAAA,KAAgBM,aAAAA,KAAkBgC,MAAMC,KAAK,IAAA,CAAA,IAAS9B,QAAQK,QAAQ,OAAO,GAAG,IAAA,CAAA,IACnG,CAAC,GACDZ,YAAAA;AAEJ;AAEA,IAAMuB,eAAe,CACnBlC,MACAS,YACAM,eACAgB,KACApB,iBAAAA;AAEAX,EAAAA,KAAIiD,MAAM,IAAIH,eAAerC,UAAAA,CAAAA,KAAgBM,aAAAA,eAAqBgB,GAAAA,IAAO,CAAC,GAAGpB,YAAAA;AAC/E;AAEA,IAAMgB,gBAAgB,CACpB3B,MACAS,YACAM,eACAmC,WACAvC,iBAAAA;AAEAX,EAAAA,KAAI6C,KACF,IAAIC,eAAerC,UAAAA,CAAAA,YAAkBM,aAAAA,KAAkBgC,MAAMC,KAAK,IAAA,CAAA,IAASG,cAAcD,SAAAA,CAAAA,IACzF,CAAC,GACDvC,YAAAA;AAEJ;AAEA,IAAMmB,mBAAmB,CACvB9B,MACAS,YACAoB,eACAqB,WACA9B,WACAT,iBAAAA;AAEA,MAAIkB,kBAAkBuB,QAAW;AAC/BpD,IAAAA,KAAI6C,KACF,IAAIC,eAAerC,UAAAA,CAAAA,WAAiB4C,UAAAA,IAAcN,MAAMC,KAAK,SAAA,CAAA,IAAcG,cAAcD,SAAAA,CAAAA,IAAcI,kBAAkBlC,SAAAA,CAAAA,IAAc2B,MAAMC,KAAK,IAAA,CAAA,IAAS9B,QACzJW,eACA,OACA,GACA,IAAA,CAAA,IAEF,CAAC,GACDlB,YAAAA;EAEJ,OAAO;AACLX,IAAAA,KAAI6C,KACF,IAAIC,eAAerC,UAAAA,CAAAA,WAAiB4C,UAAAA,IAAcN,MAAMC,KAAK,SAAA,CAAA,IAAcG,cAAcD,SAAAA,CAAAA,IAAcI,kBAAkBlC,SAAAA,CAAAA,IACzH,CAAC,GACDT,YAAAA;EAEJ;AACF;AAEA,IAAMqB,mBAAmB,CACvBhC,MACAS,YACAsB,KACAmB,WACA9B,WACAT,iBAAAA;AAEAX,EAAAA,KAAI6C,KACF,IAAIC,eAAerC,UAAAA,CAAAA,qBAAoBsC,MAAMC,KAAK,QAAA,CAAA,IAAaG,cAAcD,SAAAA,CAAAA,IAAcI,kBAAkBlC,SAAAA,CAAAA,IAAc2B,MAAMC,KAAK,IAAA,CAAA,IAASjB,GAAAA,IAC/I,CAAC,GACDpB,YAAAA;AAEJ;AAGA,IAAM0C,aAAa,OAAON,MAAMQ,UAAU,aAAaR,MAAMQ,MAAM,QAAA,IAAO;AAE1E,IAAMD,oBAAoB,CAAClC,cAAsB2B,MAAMC,KAAK,IAAI3B,YAAYC,IAAG,IAAKF,WAAWoC,QAAQ,CAAA,CAAA,IAAM;AAE7G,IAAMC,iBAAiB;EAAC;EAAK;EAAK;;AAElC,IAAMX,iBAAiB,CAACR,SAAiBS,MAAMW,KAAKX,MAAMY,IAAG,GAAIF,cAAAA,EAAgBnB,IAAAA,CAAAA;AAEjF,IAAMa,gBAAgB,CAACzB,OAAeqB,MAAMa,KAAK,WAAWlC,EAAAA,EAAI;;;ACtMhE,OAAOmC,kBAAkB;;;ACGlB,IAAMC,cAAc,CAACC,aAAAA;AAC1B,MAAI;AACF,QAAIC;AAGJ,QAAI,OAAOC,iBAAiB,aAAa;AACvC,UAAKC,WAAmBC,oBAAoB;AAC1CH,gBAASE,WAAmBC;MAC9B;IACF,OAAO;AACLH,cAAQC,aAAaG,QAAQ,OAAA,KAAYC;IAC3C;AACA,QAAI,CAACL,OAAO;AACV,aAAOK;IACT;AACA,WAAOC,KAAKC,MAAMP,KAAAA;EACpB,SAASQ,KAAK;AACZC,YAAQC,KAAK,4BAA4BF,GAAAA;AACzC,WAAOH;EACT;AACF;;;ACtBO,IAAMM,oBAAoB,MAAA;AAAO;;;ACDxC,SAASC,WAAAA,gBAAe;AAIjB,IAAMC,kBAAgC,CAACC,QAAQC,UAAAA;AACpDC,UAAQC,IAAIC,SAAQH,OAAO,OAAO,MAAM,IAAA,CAAA;AAC1C;;;ACNA,SAASI,cAAcC,mBAAmB;AAK1C,IAAMC,sBAAsB,CAACC,aAAAA;AAG3B,QAAMC,QAAQD,SAASC,MAAM,wBAAA;AAC7B,MAAIA,OAAO;AACT,UAAM,CAAA,EAAGC,QAAAA,IAAYD;AACrB,WAAOC;EACT;AAEA,SAAOF;AACT;AAOA,IAAMG,SAAiB;EACrBC,kBAAkB;EAClBC,gBAAgB;AAClB;AAKA,IAAMC,wBAAsC,CAACC,QAAQC,UAAAA;AACnD,MAAI,CAACC,UAAUD,OAAOD,OAAOG,OAAO,GAAG;AACrC;EACF;AAGA,QAAMC,qBAAqBJ,OAAOK,UAAU;AAO5C,QAAMC,kBAA4B,CAAA;AAElC,MAAIC,OAAO;AACX,MAAIN,MAAMO,MAAM;AACd,UAAMf,WAAWD,oBAAoBS,MAAMO,KAAKC,CAAC;AACjD,UAAMC,WAAW,GAAGN,mBAAmBO,QAAQ,OAAO,EAAA,CAAA,IAAOlB,QAAAA;AAG7Dc,WAAO,GAAGG,QAAAA,KAAaT,MAAMO,KAAKI,CAAC;EACrC;AAEA,MAAIC,OAAO,CAAA;AAEX,MAAIZ,MAAMO,MAAMM,GAAG;AACjB,UAAMC,QAAQd,MAAMO,MAAMM;AAC1B,UAAME,YAAYD,MAAME,QAAQC,aAAaH,KAAAA;AAC7C,UAAMI,gBAAgBlB,MAAMO,KAAKM,GAAGM,gBAAgB,cAAc;AAElEP,SAAKQ,KAAK,KAAKF,aAAAA,GAAgBH,SAAAA,IAAa,gCAAA;EAC9C;AAEA,MAAIf,MAAMqB,SAAS;AACjBT,SAAKQ,KAAKpB,MAAMqB,OAAO;EACzB;AAEA,QAAMC,UAAUC,oBAAoBvB,KAAAA;AACpC,MAAIsB,SAAS;AACX,QAAIE,OAAOC,KAAKH,OAAAA,EAASI,WAAW,KAAK,WAAWJ,SAAS;AAC3DV,WAAKQ,KAAKE,QAAQK,KAAK;IACzB,WAAWH,OAAOC,KAAKH,OAAAA,EAASI,WAAW,KAAK,SAASJ,SAAS;AAChEV,WAAKQ,KAAKE,QAAQM,GAAG;IACvB,OAAO;AACLhB,WAAKQ,KAAKE,OAAAA;IACZ;EACF;AAGA,QAAMO,UAAc;IAClB,CAACC,SAASC,KAAK,GAAGC,QAAQL,MAAMM,KAAKD,OAAAA;IACrC,CAACF,SAASI,IAAI,GAAGF,QAAQG,KAAKF,KAAKD,OAAAA;IACnC,CAACF,SAASM,KAAK,GAAGJ,QAAQK,IAAIJ,KAAKD,OAAAA;EACrC;AAGA,MAAIrC,OAAOE,kBAAkByC,YAAAA,GAAe;AAC1C,QAAIjC,iBAAiBqB,QAAQ;AAC3Bd,aAAO;QAAC,KAAKN,IAAAA;IAAWM,KAAK2B,KAAK,GAAA,CAAA;WAAWlC;;IAC/C,OAAO;AACLO,aAAO;QAACN,OAAO;WAASM;;IAC1B;EACF;AAGA,QAAM4B,QAAQX,QAAO7B,MAAMwC,KAAK,KAAKR,QAAQK,IAAIJ,KAAKD,OAAAA;AACtD,MAAI,OAAOhC,MAAMO,MAAMkC,MAAM,YAAY;AACvCzC,UAAMO,KAAKkC,EAAED,OAAO5B,IAAAA;EACtB,OAAO;AACL4B,UAAAA,GAAS5B,IAAAA;EACX;AACF;AAKA,IAAM8B,yBAAuC,CAAC3C,QAAQC,UAAAA;AACpD,MAAI,CAACC,UAAUD,OAAOD,OAAOG,OAAO,GAAG;AACrC;EACF;AAEA,MAAIyC,OAAO;AACX,MAAI3C,MAAMO,MAAM;AACdoC,WAAO,GAAGpD,oBAAoBS,MAAMO,KAAKC,CAAC,CAAA,IAAKR,MAAMO,KAAKI,CAAC;EAC7D;AAEA,MAAIC,OAAO,CAAA;AAEX,QAAMM,gBAAgBlB,MAAMO,MAAMM,GAAGM,gBAAgB,cAAc;AACnEP,OAAKQ,KAAK,GAAGF,aAAAA,GAAgBlB,MAAMqB,OAAO,EAAE;AAE5C,QAAMC,UAAUC,oBAAoBvB,KAAAA;AACpC,MAAIsB,SAAS;AACXV,SAAKQ,KAAKE,OAAAA;EACZ;AAEA,QAAMO,UAAc;IAClB,CAACC,SAASC,KAAK,GAAGC,QAAQL;IAC1B,CAACG,SAASI,IAAI,GAAGF,QAAQG;IACzB,CAACL,SAASM,KAAK,GAAGJ,QAAQK;EAC5B;AAEA,MAAI1C,OAAOE,gBAAgB;AACzBe,WAAO;MAAC+B;SAAS/B;;EACnB;AAEA,QAAM4B,QAAQX,QAAO7B,MAAMwC,KAAK,KAAKR,QAAQK;AAC7C,MAAI,OAAOrC,MAAMO,MAAMkC,MAAM,YAAY;AACvCzC,UAAMO,KAAKkC,EAAED,OAAO5B,IAAAA;EACtB,OAAO;AACL4B,UAAAA,GAAS5B,IAAAA;EACX;AACF;AAEO,IAAMgC,oBAAkCjD,OAAOC,mBAAmB8C,yBAAyB5C;;;ACjJlG,SAAS+C,gBAAgBC,WAAWC,gBAAgB;AACpD,SAASC,eAAe;AAExB,SAASC,kBAAkB;;;ACHpB,IAAMC,uBAAsB,CAACC,aAAAA;AAGlC,QAAMC,QAAQD,SAASC,MAAM,wBAAA;AAC7B,MAAIA,OAAO;AACT,UAAM,CAAA,EAAGC,QAAAA,IAAYD;AACrB,WAAOC;EACT;AAEA,SAAOF;AACT;;;ADCA,IAAMG,sBAAsB;AAOrB,IAAMC,sBAAsB,CAAC,EAClCC,UACAC,QAAAA,SACAC,QAAO,MAKR;AACC,MAAIC;AAEJ,SAAO,CAACC,QAAQC,UAAAA;AACd,QAAIJ,QAAOK,SAAS,KAAK,CAACL,QAAOM,SAASF,MAAMG,KAAK,GAAG;AACtD;IACF;AACA,QAAI,CAACC,UAAUJ,OAAOH,OAAAA,GAAU;AAC9B;IACF;AACA,QAAI,OAAOF,aAAa,UAAU;AAChCG,WAAKH;IACP,OAAO;AACL,UAAI;AACFU,kBAAUC,QAAQX,QAAAA,CAAAA;MACpB,QAAQ;MAAC;AACTG,WAAKS,SAASZ,UAAU,GAAA;IAC1B;AAEA,UAAMa,SAAS;MACb,GAAGR;MACHS,WAAWC,KAAKC,IAAG;MACnB,GAAIX,MAAMY,OAAO;QAAEA,MAAM;UAAEC,MAAMC,qBAAoBd,MAAMY,KAAKG,CAAC;UAAGC,MAAMhB,MAAMY,KAAKK;QAAE;MAAE,IAAI,CAAC;MAC9FC,SAASC,WAAWC,oBAAoBpB,KAAAA,CAAAA;IAC1C;AACA,QAAIqB,UAAkB;AAQtB,WAAO,MAAM;AACX,UAAI;AACF,eAAOC,eAAexB,IAAIyB,KAAKC,UAAUhB,MAAAA,IAAU,IAAA;MACrD,SAASiB,KAAU;AACjB,YAAIA,IAAIC,SAAS,UAAU;AACzB,gBAAMD;QACR;AACA,YAAIJ,YAAY,GAAG;AACjBA,oBAAUM,YAAYhB,IAAG;QAC3B,OAAO;AACL,cAAIgB,YAAYhB,IAAG,IAAKU,UAAU5B,qBAAqB;AACrDmC,oBAAQC,IAAI,yBAAyBpC,mBAAAA,kCAAqD;AAC1F,kBAAMgC;UACR;QACF;MACF;IACF;EACF;AACF;AAEA,IAAIK;AACJ,IAAMC,iBAAiB,MAAA;AACrBD,kBAAAA,cACEE,QAAQC,IAAIC,aACXF,QAAQC,IAAIE,OAAO,GAAGH,QAAQC,IAAIE,IAAI,YAAW,oBAAIzB,KAAAA,GAAO0B,YAAW,CAAA,SAAWC;AAErF,SAAOP;AACT;AAEO,IAAMQ,iBAA+B5C,oBAAoB;EAC9DC,UAAUoC,eAAAA;EACVnC,QAAQ;IAAC2C,SAASC;IAAOD,SAASE;IAAMF,SAASG;IAAMH,SAASI;;AAClE,CAAA;;;ALjFO,IAAMC,aAAgD;EAC3D,CAACC,iBAAiBC,OAAO,GAAGC;EAC5B,CAACF,iBAAiBG,OAAO,GAAGC;EAC5B,CAACJ,iBAAiBK,KAAK,GAAGC;AAC5B;AAEA,IAAMC,aAAa,OAAOC,WAAW,eAAe,OAAOC,cAAc;AAElE,IAAMC,qBAAqB;EAACH,aAAaH,oBAAoBF;;AAE7D,IAAMS,cAAc,CAACC,WAAAA;AAC1B,MAAI,OAAOA,WAAW,UAAU;AAC9B,WAAO;MAAC;QAAEC,OAAOD;MAAO;;EAC1B;AAEA,QAAME,gBAAgB,CAACD,OAAeE,WAAWC,SAASC,SAASC,OAAOL,MAAMM,YAAW,CAAA,KAAOJ;AAElG,QAAMK,QAAQ,OAAOR,WAAW,WAAWA,OAAOS,MAAM,MAAA,IAAUT;AAClE,SAAOQ,MAAME,IAAI,CAACV,YAAAA;AAChB,UAAM,CAACW,SAASV,KAAAA,IAASD,QAAOS,MAAM,GAAA;AACtC,WAAOR,QAAQ;MAAEA,OAAOC,cAAcD,KAAAA;MAAQU;IAAQ,IAAI;MAAEV,OAAOC,cAAcS,OAAAA;IAAS;EAC5F,CAAA;AACF;AAEO,IAAMC,YAAY,CAACC,YAAAA;AACxB,QAAMC,cACJ,aAAaC,aACT;IACEC,MAAMC,QAASC,IAAIC;IACnBnB,QAAQiB,QAASC,IAAIE;IACrBC,WAAWJ,QAASC,IAAII;EAC1B,IACAC;AAEN,QAAMC,gBAA4BC,aAAa,CAAC,GAAGC,YAAYZ,aAAaE,IAAAA,GAAOF,aAAaD,OAAAA;AAChG,SAAO;IACLA,SAASW;IACTG,SAAS5B,YAAYyB,cAAcxB,UAAUI,SAASwB,IAAI;IAC1DC,gBAAgB9B,YAAYyB,cAAcM,iBAAiB1B,SAASC,IAAI;IACxElB,YAAYqC,cAAcH,YAAY;MAAClC,WAAWqC,cAAcH,SAAS;QAAKvB;IAC9EiC,QAAQP,cAAcO;EACxB;AACF;;;IOsD0BC;AA7D1B,IAAMC,YAAY,MAAA;AAChB,QAAMC,OAAe,IAAIC,WAAWC,WAAWC,SAASC,OAAK,GAAKH,MAAAA;AAElED,EAAAA,KAAIK,UAAUC,UAAAA;AACdC,SAAOC,eAAeR,MAAK,iBAAiB;IAAES,KAAK,MAAMT,KAAIK;EAAQ,CAAA;AAErEL,EAAAA,KAAIU,eAAe,CAACC,cAAAA;AAClB,QAAIC,mBAAmBC,OAAO,CAACC,MAAMA,MAAMH,SAAAA,EAAWI,WAAW,GAAG;AAClEH,yBAAmBI,KAAKL,SAAAA;IAC1B;AACA,QAAIX,KAAIK,QAAQY,WAAWJ,OAAO,CAACC,MAAMA,MAAMH,SAAAA,EAAWI,WAAW,GAAG;AACtEf,MAAAA,KAAIK,QAAQY,WAAWD,KAAKL,SAAAA;IAC9B;EACF;AAGAX,EAAAA,KAAIkB,SAAS,CAACC,YAAAA;AACZnB,IAAAA,KAAIK,UAAUC,UAAUa,OAAAA;EAC1B;AAKAnB,EAAAA,KAAIoB,QAAQ,IAAInB,WAAWC,WAAWC,SAASkB,OAAK,GAAKpB,MAAAA;AACzDD,EAAAA,KAAIsB,QAAQ,IAAIrB,WAAWC,WAAWC,SAASC,OAAK,GAAKH,MAAAA;AACzDD,EAAAA,KAAIuB,UAAU,IAAItB,WAAWC,WAAWC,SAASqB,SAAO,GAAKvB,MAAAA;AAC7DD,EAAAA,KAAIyB,OAAO,IAAIxB,WAAWC,WAAWC,SAASuB,MAAI,GAAKzB,MAAAA;AACvDD,EAAAA,KAAI2B,OAAO,IAAI1B,WAAWC,WAAWC,SAASyB,MAAI,GAAK3B,MAAAA;AACvDD,EAAAA,KAAI6B,QAAQ,IAAI5B,WAAWC,WAAWC,SAAS2B,OAAK,GAAK7B,MAAAA;AAGzDD,EAAAA,KAAI+B,QAAQ,CAACF,OAAoBG,SAASC,SAAS/B,WAAWC,SAAS2B,OAAOI,QAAWF,SAASC,MAAMJ,KAAAA;AAGxG7B,EAAAA,KAAImC,QAAQ,MAAMnC,KAAIyB,KAAK,8SAAA;AAE3BzB,EAAAA,KAAIoC,QAAQ,CAACC,SAASL,SAASC,SAC7B/B,WAAWC,SAASuB,MAAM,GAAGW,WAAW,YAAA;EAAiBC,uBAAAA,CAAAA,IAA4BN,SAASC,IAAAA;AAEhGjC,EAAAA,KAAIuC,SAASC,yBAAyBxC,IAAAA;AACtCA,EAAAA,KAAIyC,OAAOC,2BAA2B1C,IAAAA;AAKtC,QAAME,aAAa,CACjByC,OACAN,SACAL,UAAsB,CAAC,GACvBC,MACAJ,UAAAA;AAEA7B,IAAAA,KAAIK,QAAQY,WAAW2B,QAAQ,CAACjC,cAAcA,UAAUX,KAAIK,SAAS;MAAEsC;MAAON;MAASL;MAASC;MAAMJ;IAAM,CAAA,CAAA;EAC9G;AAEA,SAAO7B;AACT;AAKO,IAAMA,OAAa6C,cAAAA,YAAmBC,WAAnBD,YAAmBC,SAAW/C,UAAAA;AAExD,IAAMgD,QAAQC,KAAKC,IAAG;AACtB,IAAIC,OAAOH;AAKJ,IAAMzB,QAAQ,CAAC6B,OAAaC,SAAAA;AACjC,QAAMH,MAAMD,KAAKC,IAAG;AACpB,QAAMI,MAAM,IAAIC,MAAAA;AAChBC,UAAQC,MACN,SAASL,KAAAA,KACTM,KAAKC,UAAU;IAAEC,GAAGC,OAAOX,MAAMF,KAAAA,EAAOc,eAAc;IAAIC,IAAIF,OAAOX,MAAMC,IAAAA,EAAMW,eAAc;IAAI,GAAGT;EAAK,CAAA,CAAA;AAE7GG,UAAQ5B,KAAK0B,IAAIjB,KAAK;AACtBmB,UAAQQ,SAAQ;AAChBb,SAAOF,KAAKC,IAAG;AACjB;AAUA,IAAMX,yBAAyB,MAAM,IAAIgB,MAAAA,EAAQlB,MAAO4B,MAAM,IAAA,EAAMC,MAAM,CAAA,EAAGC,KAAK,IAAA;;;ACtIlF,SAASC,WAAAA,gBAAe;;;;;;;;;;;;;;AAExB,IAAMC,kBAAkBC,OAAO,iBAAA;AAC/B,IAAMC,yBAAyBD,OAAO,wBAAA;AACtC,IAAME,uBAAuBF,OAAO,sBAAA;IA0BjCG,kBAAAA,SAAQC;AApBJ,IAAMC,iBAAN,MAAMA;EAQXC,UAAU;AACR,QAAI,CAAC,KAAKC,UAAU;AAClB,aAAO,CAAC;IACV;AACA,UAAMC,QAAQ,KAAKC,OAAOC,UAAUR,oBAAAA,KAAyB,CAAA;AAC7D,UAAMS,OAAY,CAAC;AACnB,eAAWC,QAAQJ,OAAO;AACxBG,WAAKC,IAAAA,IAAQ,KAAKL,SAASK,IAAAA;IAC7B;AACA,WAAOD;EACT;EAEA,CAACR,eAAAA,IAAkB;AACjB,WAAO;MACLU,WAAW,KAAKJ,OAAOK;MACvBH,MAAM,KAAKL,QAAO;MAClBS,QAAQ,KAAKA;IACf;EACF;EAvBA,YACSN,QACAM,QACP;;;AALF,qBAAA,MAAOR,YAAP,MAAA;SAGSE,SAAAA;SACAM,SAAAA;EACN;AAqBL;AA+CO,IAAMC,2BAA2B,CAACC,YAAiBA;",
|
|
6
|
-
"names": ["omit", "pick", "LogLevel", "levels", "trace", "debug", "verbose", "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", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport omit from 'lodash.omit';\n\nimport { pick } from '@dxos/util';\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 type * 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 * NOTE: Keep aligned with LogLevel in @dxos/protocols.\n */\n// TODO(burdon): Update numbers?\nexport enum LogLevel {\n TRACE = 5,\n DEBUG = 10,\n VERBOSE = 11,\n INFO = 12,\n WARN = 13,\n ERROR = 14,\n}\n\nexport const levels: Record<string, LogLevel> = {\n '*': LogLevel.TRACE,\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\n verbose: LogLevel.VERBOSE,\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.VERBOSE]: 'V',\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 = (typeof prototype === 'object' && prototype !== null ? 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\n/**\n * Returns:\n * true if the log entry matches the filter,\n * false if should be excluded, or\n * undefined if it the filter doesn't match the level.\n */\nconst matchFilter = (filter: LogFilter, level: LogLevel, path?: string): boolean | undefined => {\n // TODO(burdon): Support regexp.\n if (filter.pattern?.startsWith('-')) {\n // Exclude.\n if (path?.includes(filter.pattern.slice(1))) {\n if (level >= filter.level) {\n return false;\n }\n }\n } else {\n // Include.\n if (filter.pattern?.length) {\n if (path?.includes(filter.pattern)) {\n return level >= filter.level;\n }\n } else {\n if (level >= filter.level) {\n return true;\n }\n }\n }\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 false;\n }\n\n const results = filters\n .map((filter) => matchFilter(filter, entry.level, entry.meta?.F))\n .filter((result): result is boolean => result !== undefined);\n\n // Skip if any are explicitely false.\n // console.log({ level: entry.level, path: entry.meta?.F }, filters, results, results.length);\n return results.length > 0 && !results.some((results) => results === false);\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 const entryContext = typeof entry.context === 'function' ? entry.context() : entry.context;\n if (entryContext) {\n if (entryContext instanceof Error) {\n // Additional context from Error.\n const c = (entryContext as any).context;\n // If ERROR then show stacktrace.\n context = Object.assign(context ?? {}, { error: entryContext.stack, ...c });\n } else if (typeof entryContext === 'object') {\n context = Object.assign(context ?? {}, entryContext);\n }\n }\n\n if (entry.error) {\n context = Object.assign(context ?? {}, { error: entry.error });\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 chalk from 'chalk';\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 F: '',\n L: 0,\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\nexport const createFunctionLogDecorator =\n (log: LogMethods) =>\n <F extends (...args: any[]) => any>(\n name: string,\n fn: F,\n opts: { transformOutput?: (result: ReturnType<F>) => Promise<any> | any } = {},\n ): F => {\n const decoratedFn = function (this: any, ...args: any) {\n const combinedMeta = {\n F: '',\n L: 0,\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 = fn.apply(this, args);\n\n let transformedResult = result;\n if (opts.transformOutput) {\n if (isThenable(result)) {\n transformedResult = result.then(opts.transformOutput as any);\n } else {\n transformedResult = opts.transformOutput(result);\n }\n }\n\n if (isThenable(transformedResult)) {\n const id = nextPromiseId++;\n logAsyncBegin(log, name, formattedArgs, id, combinedMeta);\n transformedResult.then(\n (resolvedValue) => {\n logAsyncResolved(log, name, resolvedValue, id, startTime, combinedMeta);\n },\n (err) => {\n logAsyncRejected(log, name, err, id, startTime, combinedMeta);\n },\n );\n } else {\n logSyncCall(log, name, formattedArgs, transformedResult, combinedMeta);\n }\n\n return result;\n } catch (err: any) {\n logSyncError(log, name, formattedArgs, err, combinedMeta);\n throw err;\n }\n };\n Object.defineProperty(decoratedFn, 'name', { value: name + '$log' });\n return decoratedFn as F;\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('=>')} ${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 COLOR_FUNCTION = [220, 220, 170] as const;\n\n// https://github.com/dxos/dxos/issues/7286\nconst greenCheck = typeof chalk.green === 'function' ? chalk.green('✔') : '✔';\n\nconst formatTimeElapsed = (startTime: number) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);\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 { BROWSER_PROCESSOR, CONSOLE_PROCESSOR, DEBUG_PROCESSOR } from './processors';\n\n/**\n * Processor variants.\n */\nexport const processors: Record<string, LogProcessor> = {\n [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,\n [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,\n [LogProcessorType.DEBUG]: DEBUG_PROCESSOR,\n};\n\nconst browser = typeof window !== 'undefined' || typeof navigator !== 'undefined';\n\nexport const DEFAULT_PROCESSORS = [browser ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];\n\nconst parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;\n\n/**\n * @internal\n */\nexport const parseFilter = (filter: string | string[] | LogLevel): LogFilter[] => {\n if (typeof filter === 'number') {\n return [{ level: filter }];\n }\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\n ? {\n level: parseLogLevel(level),\n pattern,\n }\n : {\n level: parseLogLevel(pattern),\n };\n });\n};\n\n/**\n * @internal\n */\nexport const createConfig = (options?: LogOptions): LogConfig => {\n // Node only.\n const envOptions: 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(envOptions?.file), envOptions, 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 try {\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 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 { type LogProcessor, getContextFromEntry, 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 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 if (entry.message) {\n args.push(entry.message);\n }\n\n const context = getContextFromEntry(entry);\n if (context) {\n if (Object.keys(context).length === 1 && 'error' in context) {\n args.push(context.error);\n } else if (Object.keys(context).length === 1 && 'err' in context) {\n args.push(context.err);\n } else {\n args.push(context);\n }\n }\n\n // https://github.com/cloudflare/workers-sdk/issues/5591\n const levels: any = {\n [LogLevel.ERROR]: console.error.bind(console),\n [LogLevel.WARN]: console.warn.bind(console),\n [LogLevel.DEBUG]: console.log.bind(console),\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 // https://github.com/cloudflare/workers-sdk/issues/5591\n const level = levels[entry.level] ?? console.log.bind(console);\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 { jsonlogify } from '@dxos/util';\n\nimport { type LogFilter, LogLevel } from '../config';\nimport { type LogProcessor, getContextFromEntry, shouldLog } from '../context';\n\nimport { getRelativeFilename } from './common';\n\n// Amount of time to retry writing after encountering EAGAIN before giving up.\nconst EAGAIN_MAX_DURATION = 1000;\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\n if (typeof pathOrFd === 'number') {\n fd = pathOrFd;\n } else {\n try {\n mkdirSync(dirname(pathOrFd));\n } catch {}\n fd = openSync(pathOrFd, 'a');\n }\n\n const record = {\n ...entry,\n timestamp: Date.now(),\n ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),\n context: jsonlogify(getContextFromEntry(entry)),\n };\n let retryTS: number = 0;\n\n // Retry writing if EAGAIN is encountered.\n //\n // Node may set stdout and stderr to non-blocking. https://github.com/nodejs/node/issues/42826\n // This can cause EAGAIN errors when writing to them.\n // In order to not drop logs, make log methods asynchronous, or deal with buffering/delayed writes, spin until write succeeds.\n\n while (true) {\n try {\n return appendFileSync(fd, JSON.stringify(record) + '\\n');\n } catch (err: any) {\n if (err.code !== 'EAGAIN') {\n throw err;\n }\n if (retryTS === 0) {\n retryTS = performance.now();\n } else {\n if (performance.now() - retryTS > EAGAIN_MAX_DURATION) {\n console.log(`could not write after ${EAGAIN_MAX_DURATION}ms of EAGAIN failures, giving up`);\n throw err;\n }\n }\n }\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 2024 DXOS.org\n//\n\nexport const 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", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type LogConfig, LogLevel, type LogOptions } from './config';\nimport { type LogContext, type LogProcessor } from './context';\nimport { createFunctionLogDecorator, createMethodLogDecorator } from './decorators';\nimport { type CallMetadata } from './meta';\nimport { createConfig } from './options';\n\n/**\n * Accessible from browser console.\n */\ndeclare global {\n const DX_LOG: Log;\n}\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 config: (options: LogOptions) => Log;\n addProcessor: (processor: LogProcessor, addDefault?: boolean) => () => void;\n\n trace: LogFunction;\n debug: LogFunction;\n verbose: LogFunction;\n info: LogFunction;\n warn: LogFunction;\n error: LogFunction;\n catch: (error: Error | any, context?: LogContext, meta?: CallMetadata) => void;\n\n method: (arg0?: never, arg1?: never, meta?: CallMetadata) => MethodDecorator;\n function: <F extends (...args: any[]) => any>(\n name: string,\n fn: F,\n opts?: {\n transformOutput?: (result: ReturnType<F>) => Promise<any> | any;\n },\n ) => F;\n\n break: () => void;\n stack: (message?: string, context?: never, meta?: CallMetadata) => void;\n}\n\n/**\n * Properties accessible on the logging function.\n * @internal\n */\nexport interface Log extends LogFunction, LogMethods {\n readonly runtimeConfig: LogConfig;\n}\n\n/**\n * @internal\n */\ninterface LogImp extends Log {\n _id: string;\n _config: LogConfig;\n}\n\nlet logCount = 0;\n\n/**\n * Create a logging function with properties.\n * @internal\n */\nexport const createLog = (): LogImp => {\n // Default function.\n const log: LogImp = ((...params) => processLog(LogLevel.DEBUG, ...params)) as LogImp;\n\n // Add private properties.\n Object.assign<LogImp, Partial<LogImp>>(log, {\n _id: `log-${++logCount}`,\n _config: createConfig(),\n });\n\n // TODO(burdon): Document.\n Object.defineProperty(log, 'runtimeConfig', {\n get: () => log._config,\n });\n\n /**\n * Process the current log call.\n */\n const processLog = (\n level: LogLevel,\n message: string | undefined,\n context: LogContext = {},\n meta?: CallMetadata,\n error?: Error,\n ) => {\n // TODO(burdon): Do the filter matching upstream (here) rather than in each processor?\n log._config.processors.forEach((processor) =>\n processor(log._config, {\n level,\n message,\n context,\n meta,\n error,\n }),\n );\n };\n\n /**\n * API.\n */\n Object.assign<Log, LogMethods>(log, {\n /**\n * Update config.\n * NOTE: Preserves any processors that were already added to this logger instance\n * unless an explicit processor option is provided.\n */\n config: ({ processor, ...options }) => {\n const config = createConfig(options);\n // TODO(burdon): This could be buggy since the behavior is not reentrant.\n const processors = processor ? config.processors : log._config.processors;\n log._config = { ...config, processors };\n return log;\n },\n\n /**\n * Adds a processor to the logger.\n */\n addProcessor: (processor) => {\n if (log._config.processors.filter((p) => p === processor).length === 0) {\n log._config.processors.push(processor);\n }\n\n return () => {\n log._config.processors = log._config.processors.filter((p) => p !== processor);\n };\n },\n\n trace: (...params) => processLog(LogLevel.TRACE, ...params),\n debug: (...params) => processLog(LogLevel.DEBUG, ...params),\n verbose: (...params) => processLog(LogLevel.VERBOSE, ...params),\n info: (...params) => processLog(LogLevel.INFO, ...params),\n warn: (...params) => processLog(LogLevel.WARN, ...params),\n error: (...params) => processLog(LogLevel.ERROR, ...params),\n catch: (error, context, meta) => processLog(LogLevel.ERROR, undefined, context, meta, error),\n\n method: createMethodLogDecorator(log),\n function: createFunctionLogDecorator(log),\n\n break: () => log.info('-'.repeat(80)),\n stack: (message, context, meta) => {\n return processLog(LogLevel.INFO, `${message ?? 'Stack Dump'}\\n${getFormattedStackTrace()}`, context, meta);\n },\n });\n\n return log;\n};\n\n/**\n * Global logging function.\n */\nexport const log: Log = ((globalThis as any).DX_LOG ??= createLog());\n\nconst start = Date.now();\nlet last = start;\n\n/**\n * Log debug stack.\n */\nexport const debug = (label?: any, args?: any) => {\n const now = Date.now();\n const err = new Error();\n console.group(\n `DEBUG[${label}]`,\n JSON.stringify({ t: Number(now - start).toLocaleString(), dt: Number(now - last).toLocaleString(), ...args }),\n );\n console.warn(err.stack);\n console.groupEnd();\n last = Date.now();\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", "verbose", "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", "startsWith", "includes", "slice", "length", "shouldLog", "entry", "filters", "undefined", "results", "map", "meta", "F", "result", "some", "getContextFromEntry", "context", "scopeInfo", "gatherLogInfoFromScope", "S", "Object", "keys", "assign", "entryContext", "Error", "c", "error", "stack", "inspect", "chalk", "nextPromiseId", "createMethodLogDecorator", "log", "arg0", "arg1", "meta", "target", "propertyKey", "descriptor", "method", "value", "methodName", "args", "combinedMeta", "F", "L", "S", "formattedArgs", "map", "arg", "inspect", "join", "startTime", "performance", "now", "result", "apply", "isThenable", "id", "logAsyncBegin", "then", "resolvedValue", "logAsyncResolved", "err", "logAsyncRejected", "logSyncCall", "logSyncError", "Object", "defineProperty", "createFunctionLogDecorator", "name", "fn", "opts", "decoratedFn", "transformedResult", "transformOutput", "obj", "info", "formatFunction", "chalk", "gray", "error", "promiseId", "formatPromise", "undefined", "greenCheck", "formatTimeElapsed", "COLOR_FUNCTION", "green", "toFixed", "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", "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", "Object", "keys", "length", "error", "err", "levels", "LogLevel", "ERROR", "console", "bind", "WARN", "warn", "DEBUG", "log", "safariCheck", "join", "level", "C", "TEST_BROWSER_PROCESSOR", "path", "BROWSER_PROCESSOR", "appendFileSync", "mkdirSync", "openSync", "dirname", "jsonlogify", "getRelativeFilename", "filename", "match", "filePath", "EAGAIN_MAX_DURATION", "createFileProcessor", "pathOrFd", "levels", "filters", "fd", "config", "entry", "length", "includes", "level", "shouldLog", "mkdirSync", "dirname", "openSync", "record", "timestamp", "Date", "now", "meta", "file", "getRelativeFilename", "F", "line", "L", "context", "jsonlogify", "getContextFromEntry", "retryTS", "appendFileSync", "JSON", "stringify", "err", "code", "performance", "console", "log", "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", "browser", "window", "navigator", "DEFAULT_PROCESSORS", "parseLogLevel", "level", "defValue", "LogLevel", "WARN", "levels", "toLowerCase", "parseFilter", "filter", "lines", "split", "map", "pattern", "createConfig", "options", "envOptions", "globalThis", "file", "process", "env", "LOG_CONFIG", "LOG_FILTER", "processor", "LOG_PROCESSOR", "undefined", "mergedOptions", "defaultsDeep", "loadOptions", "filters", "INFO", "captureFilters", "captureFilter", "prefix", "logCount", "createLog", "log", "params", "processLog", "LogLevel", "DEBUG", "Object", "assign", "_id", "_config", "createConfig", "defineProperty", "get", "level", "message", "context", "meta", "error", "processors", "forEach", "processor", "config", "options", "addProcessor", "filter", "p", "length", "push", "trace", "TRACE", "debug", "verbose", "VERBOSE", "info", "INFO", "warn", "WARN", "ERROR", "catch", "undefined", "method", "createMethodLogDecorator", "function", "createFunctionLogDecorator", "break", "repeat", "stack", "getFormattedStackTrace", "globalThis", "DX_LOG", "start", "Date", "now", "last", "label", "args", "err", "Error", "console", "group", "JSON", "stringify", "t", "Number", "toLocaleString", "dt", "groupEnd", "split", "slice", "join", "inspect", "kOwnershipScope", "Symbol", "kCurrentOwnershipScope", "kDebugInfoProperties", "OwnershipScope", "instance", "constr", "parent", "getInfo", "props", "prototype", "info", "prop", "inspect", "custom", "className", "name", "getCurrentOwnershipScope", "thisRef"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/config.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/config.ts":{"bytes":4022,"imports":[],"format":"esm"},"src/scope.ts":{"bytes":4052,"imports":[],"format":"esm"},"src/context.ts":{"bytes":9183,"imports":[{"path":"src/scope.ts","kind":"import-statement","original":"./scope"}],"format":"esm"},"src/decorators.ts":{"bytes":19783,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"chalk","kind":"import-statement","external":true}],"format":"esm"},"src/platform/browser/index.ts":{"bytes":2923,"imports":[],"format":"esm"},"src/platform/index.ts":{"bytes":447,"imports":[{"path":"src/platform/browser/index.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"src/processors/console-stub.ts":{"bytes":815,"imports":[],"format":"esm"},"src/processors/debug-processor.ts":{"bytes":1057,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"src/processors/browser-processor.ts":{"bytes":15856,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"../config"},{"path":"src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"src/processors/common.ts":{"bytes":1609,"imports":[],"format":"esm"},"src/processors/file-processor.ts":{"bytes":10092,"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":"src/config.ts","kind":"import-statement","original":"../config"},{"path":"src/context.ts","kind":"import-statement","original":"../context"},{"path":"src/processors/common.ts","kind":"import-statement","original":"./common"}],"format":"esm"},"src/processors/index.ts":{"bytes":890,"imports":[{"path":"src/processors/console-stub.ts","kind":"import-statement","original":"./console-processor"},{"path":"src/processors/debug-processor.ts","kind":"import-statement","original":"./debug-processor"},{"path":"src/processors/browser-processor.ts","kind":"import-statement","original":"./browser-processor"},{"path":"src/processors/file-processor.ts","kind":"import-statement","original":"./file-processor"},{"path":"src/processors/common.ts","kind":"import-statement","original":"./common"}],"format":"esm"},"src/options.ts":{"bytes":7842,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"./config"},{"path":"src/platform/index.ts","kind":"import-statement","original":"./platform"},{"path":"src/processors/index.ts","kind":"import-statement","original":"./processors"}],"format":"esm"},"src/log.ts":{"bytes":14639,"imports":[{"path":"src/config.ts","kind":"import-statement","original":"./config"},{"path":"src/decorators.ts","kind":"import-statement","original":"./decorators"},{"path":"src/options.ts","kind":"import-statement","original":"./options"}],"format":"esm"},"src/experimental/ownership.ts":{"bytes":9249,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":1561,"imports":[{"path":"lodash.omit","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"./config"},{"path":"src/context.ts","kind":"import-statement","original":"./context"},{"path":"src/log.ts","kind":"import-statement","original":"./log"},{"path":"src/options.ts","kind":"import-statement","original":"./options"},{"path":"src/processors/index.ts","kind":"import-statement","original":"./processors"},{"path":"src/scope.ts","kind":"import-statement","original":"./scope"},{"path":"src/experimental/ownership.ts","kind":"import-statement","original":"./experimental/ownership"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":50823},"dist/lib/browser/index.mjs":{"imports":[{"path":"lodash.omit","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"chalk","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","createLog","debug","gatherLogInfoFromScope","getContextFromEntry","getCurrentOwnershipScope","getRelativeFilename","levels","log","logInfo","omit","parseFilter","pick","shortLevelName","shouldLog"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":67},"src/config.ts":{"bytesInOutput":809},"src/scope.ts":{"bytesInOutput":632},"src/context.ts":{"bytesInOutput":1579},"src/decorators.ts":{"bytesInOutput":4566},"src/options.ts":{"bytesInOutput":1549},"src/platform/browser/index.ts":{"bytesInOutput":446},"src/platform/index.ts":{"bytesInOutput":0},"src/processors/console-stub.ts":{"bytesInOutput":35},"src/processors/index.ts":{"bytesInOutput":0},"src/processors/debug-processor.ts":{"bytesInOutput":156},"src/processors/browser-processor.ts":{"bytesInOutput":2972},"src/processors/file-processor.ts":{"bytesInOutput":1833},"src/processors/common.ts":{"bytesInOutput":195},"src/log.ts":{"bytesInOutput":2640},"src/experimental/ownership.ts":{"bytesInOutput":824}},"bytes":19148}}}
|