@dxos/log 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0
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/chunk-IEP6GGEX.mjs +23 -0
- package/dist/lib/browser/chunk-IEP6GGEX.mjs.map +7 -0
- package/dist/lib/browser/chunk-M2YHSBML.mjs +133 -0
- package/dist/lib/browser/chunk-M2YHSBML.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +165 -169
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/platform/browser/index.mjs +26 -0
- package/dist/lib/browser/platform/browser/index.mjs.map +7 -0
- package/dist/lib/browser/platform/node/index.mjs +21 -0
- package/dist/lib/browser/platform/node/index.mjs.map +7 -0
- package/dist/lib/browser/processors/console-processor.mjs +107 -0
- package/dist/lib/browser/processors/console-processor.mjs.map +7 -0
- package/dist/lib/browser/processors/console-stub.mjs +9 -0
- package/dist/lib/browser/processors/console-stub.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +24 -0
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-62VKC2WQ.mjs +135 -0
- package/dist/lib/node-esm/chunk-62VKC2WQ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +162 -253
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/platform/browser/index.mjs +27 -0
- package/dist/lib/node-esm/platform/browser/index.mjs.map +7 -0
- package/dist/lib/node-esm/platform/node/index.mjs +22 -0
- package/dist/lib/node-esm/platform/node/index.mjs.map +7 -0
- package/dist/lib/node-esm/processors/console-processor.mjs +108 -0
- package/dist/lib/node-esm/processors/console-processor.mjs.map +7 -0
- package/dist/lib/node-esm/processors/console-stub.mjs +10 -0
- package/dist/lib/node-esm/processors/console-stub.mjs.map +7 -0
- package/dist/types/src/dbg.d.ts +23 -0
- package/dist/types/src/dbg.d.ts.map +1 -0
- package/dist/types/src/decorators.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/log-buffer.d.ts +40 -0
- package/dist/types/src/log-buffer.d.ts.map +1 -0
- package/dist/types/src/log-buffer.test.d.ts +2 -0
- package/dist/types/src/log-buffer.test.d.ts.map +1 -0
- package/dist/types/src/log.d.ts +3 -1
- package/dist/types/src/log.d.ts.map +1 -1
- package/dist/types/src/options.d.ts.map +1 -1
- package/dist/types/src/platform/index.d.ts +1 -1
- package/dist/types/src/platform/index.d.ts.map +1 -1
- package/dist/types/src/platform/node/index.d.ts.map +1 -1
- package/dist/types/src/processors/console-processor.d.ts.map +1 -1
- package/dist/types/src/processors/file-processor.d.ts.map +1 -1
- package/dist/types/src/processors/index.d.ts +3 -3
- package/dist/types/src/processors/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -12
- package/src/dbg.ts +34 -0
- package/src/decorators.ts +1 -2
- package/src/experimental/classes.test.ts +0 -1
- package/src/index.ts +3 -3
- package/src/log-buffer.test.ts +155 -0
- package/src/log-buffer.ts +117 -0
- package/src/log.test.ts +0 -1
- package/src/log.ts +4 -2
- package/src/options.ts +3 -1
- package/src/platform/index.ts +1 -1
- package/src/platform/node/index.ts +1 -2
- package/src/processors/console-processor.ts +1 -3
- package/src/processors/file-processor.ts +0 -1
- package/src/processors/index.ts +3 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
__export,
|
|
21
|
+
__reExport
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-IEP6GGEX.mjs.map
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// src/config.ts
|
|
2
|
+
var LogLevel = /* @__PURE__ */ (function(LogLevel2) {
|
|
3
|
+
LogLevel2[LogLevel2["TRACE"] = 5] = "TRACE";
|
|
4
|
+
LogLevel2[LogLevel2["DEBUG"] = 10] = "DEBUG";
|
|
5
|
+
LogLevel2[LogLevel2["VERBOSE"] = 11] = "VERBOSE";
|
|
6
|
+
LogLevel2[LogLevel2["INFO"] = 12] = "INFO";
|
|
7
|
+
LogLevel2[LogLevel2["WARN"] = 13] = "WARN";
|
|
8
|
+
LogLevel2[LogLevel2["ERROR"] = 14] = "ERROR";
|
|
9
|
+
return LogLevel2;
|
|
10
|
+
})({});
|
|
11
|
+
var levels = {
|
|
12
|
+
"*": 5,
|
|
13
|
+
trace: 5,
|
|
14
|
+
debug: 10,
|
|
15
|
+
verbose: 11,
|
|
16
|
+
info: 12,
|
|
17
|
+
warn: 13,
|
|
18
|
+
error: 14
|
|
19
|
+
};
|
|
20
|
+
var shortLevelName = {
|
|
21
|
+
[5]: "T",
|
|
22
|
+
[10]: "D",
|
|
23
|
+
[11]: "V",
|
|
24
|
+
[12]: "I",
|
|
25
|
+
[13]: "W",
|
|
26
|
+
[14]: "E"
|
|
27
|
+
};
|
|
28
|
+
var LogProcessorType = /* @__PURE__ */ (function(LogProcessorType2) {
|
|
29
|
+
LogProcessorType2["CONSOLE"] = "console";
|
|
30
|
+
LogProcessorType2["BROWSER"] = "browser";
|
|
31
|
+
LogProcessorType2["DEBUG"] = "debug";
|
|
32
|
+
return LogProcessorType2;
|
|
33
|
+
})({});
|
|
34
|
+
|
|
35
|
+
// src/scope.ts
|
|
36
|
+
var logInfoProperties = /* @__PURE__ */ Symbol("logInfoProperties");
|
|
37
|
+
var logInfo = (target, propertyKey, descriptor) => {
|
|
38
|
+
(target[logInfoProperties] ??= []).push(propertyKey);
|
|
39
|
+
};
|
|
40
|
+
var gatherLogInfoFromScope = (scope) => {
|
|
41
|
+
if (!scope) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
const res = {};
|
|
45
|
+
const prototype = Object.getPrototypeOf(scope);
|
|
46
|
+
const infoProps = (typeof prototype === "object" && prototype !== null ? prototype[logInfoProperties] : []) ?? [];
|
|
47
|
+
for (const prop of infoProps) {
|
|
48
|
+
try {
|
|
49
|
+
res[prop] = typeof scope[prop] === "function" ? scope[prop]() : scope[prop];
|
|
50
|
+
} catch (err) {
|
|
51
|
+
res[prop] = err.message;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return res;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// src/context.ts
|
|
58
|
+
var matchFilter = (filter, level, path) => {
|
|
59
|
+
if (filter.pattern?.startsWith("-")) {
|
|
60
|
+
if (path?.includes(filter.pattern.slice(1))) {
|
|
61
|
+
if (level >= filter.level) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
if (filter.pattern?.length) {
|
|
67
|
+
if (path?.includes(filter.pattern)) {
|
|
68
|
+
return level >= filter.level;
|
|
69
|
+
}
|
|
70
|
+
} else {
|
|
71
|
+
if (level >= filter.level) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
var shouldLog = (entry, filters) => {
|
|
78
|
+
if (filters === void 0) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const results = filters.map((filter) => matchFilter(filter, entry.level, entry.meta?.F)).filter((result) => result !== void 0);
|
|
82
|
+
return results.length > 0 && !results.some((results2) => results2 === false);
|
|
83
|
+
};
|
|
84
|
+
var getContextFromEntry = (entry) => {
|
|
85
|
+
let context;
|
|
86
|
+
if (entry.meta) {
|
|
87
|
+
const scopeInfo = gatherLogInfoFromScope(entry.meta.S);
|
|
88
|
+
if (Object.keys(scopeInfo).length > 0) {
|
|
89
|
+
context = Object.assign(context ?? {}, scopeInfo);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const entryContext = typeof entry.context === "function" ? entry.context() : entry.context;
|
|
93
|
+
if (entryContext) {
|
|
94
|
+
if (entryContext instanceof Error) {
|
|
95
|
+
const c = entryContext.context;
|
|
96
|
+
context = Object.assign(context ?? {}, {
|
|
97
|
+
error: entryContext.stack,
|
|
98
|
+
...c
|
|
99
|
+
});
|
|
100
|
+
} else if (typeof entryContext === "object") {
|
|
101
|
+
context = Object.assign(context ?? {}, entryContext);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (entry.error) {
|
|
105
|
+
context = Object.assign(context ?? {}, {
|
|
106
|
+
error: entry.error
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return context && Object.keys(context).length > 0 ? context : void 0;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// src/processors/common.ts
|
|
113
|
+
var getRelativeFilename = (filename) => {
|
|
114
|
+
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
115
|
+
if (match) {
|
|
116
|
+
const [, filePath] = match;
|
|
117
|
+
return filePath;
|
|
118
|
+
}
|
|
119
|
+
return filename;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export {
|
|
123
|
+
LogLevel,
|
|
124
|
+
levels,
|
|
125
|
+
shortLevelName,
|
|
126
|
+
LogProcessorType,
|
|
127
|
+
logInfo,
|
|
128
|
+
gatherLogInfoFromScope,
|
|
129
|
+
shouldLog,
|
|
130
|
+
getContextFromEntry,
|
|
131
|
+
getRelativeFilename
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=chunk-M2YHSBML.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/config.ts", "../../../src/scope.ts", "../../../src/context.ts", "../../../src/processors/common.ts"],
|
|
4
|
+
"sourcesContent": ["//\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 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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["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", "getRelativeFilename", "filename", "match", "filePath"]
|
|
7
|
+
}
|
|
@@ -1,121 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"*": 5,
|
|
17
|
-
trace: 5,
|
|
18
|
-
debug: 10,
|
|
19
|
-
verbose: 11,
|
|
20
|
-
info: 12,
|
|
21
|
-
warn: 13,
|
|
22
|
-
error: 14
|
|
23
|
-
};
|
|
24
|
-
var shortLevelName = {
|
|
25
|
-
[5]: "T",
|
|
26
|
-
[10]: "D",
|
|
27
|
-
[11]: "V",
|
|
28
|
-
[12]: "I",
|
|
29
|
-
[13]: "W",
|
|
30
|
-
[14]: "E"
|
|
31
|
-
};
|
|
32
|
-
var LogProcessorType = /* @__PURE__ */ (function(LogProcessorType2) {
|
|
33
|
-
LogProcessorType2["CONSOLE"] = "console";
|
|
34
|
-
LogProcessorType2["BROWSER"] = "browser";
|
|
35
|
-
LogProcessorType2["DEBUG"] = "debug";
|
|
36
|
-
return LogProcessorType2;
|
|
37
|
-
})({});
|
|
38
|
-
|
|
39
|
-
// src/scope.ts
|
|
40
|
-
var logInfoProperties = Symbol("logInfoProperties");
|
|
41
|
-
var logInfo = (target, propertyKey, descriptor) => {
|
|
42
|
-
(target[logInfoProperties] ??= []).push(propertyKey);
|
|
43
|
-
};
|
|
44
|
-
var gatherLogInfoFromScope = (scope) => {
|
|
45
|
-
if (!scope) {
|
|
46
|
-
return {};
|
|
47
|
-
}
|
|
48
|
-
const res = {};
|
|
49
|
-
const prototype = Object.getPrototypeOf(scope);
|
|
50
|
-
const infoProps = (typeof prototype === "object" && prototype !== null ? prototype[logInfoProperties] : []) ?? [];
|
|
51
|
-
for (const prop of infoProps) {
|
|
52
|
-
try {
|
|
53
|
-
res[prop] = typeof scope[prop] === "function" ? scope[prop]() : scope[prop];
|
|
54
|
-
} catch (err) {
|
|
55
|
-
res[prop] = err.message;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return res;
|
|
59
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
LogLevel,
|
|
3
|
+
LogProcessorType,
|
|
4
|
+
gatherLogInfoFromScope,
|
|
5
|
+
getContextFromEntry,
|
|
6
|
+
getRelativeFilename,
|
|
7
|
+
levels,
|
|
8
|
+
logInfo,
|
|
9
|
+
shortLevelName,
|
|
10
|
+
shouldLog
|
|
11
|
+
} from "./chunk-M2YHSBML.mjs";
|
|
12
|
+
import {
|
|
13
|
+
__export,
|
|
14
|
+
__reExport
|
|
15
|
+
} from "./chunk-IEP6GGEX.mjs";
|
|
60
16
|
|
|
61
|
-
// src/
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
};
|
|
88
|
-
var getContextFromEntry = (entry) => {
|
|
89
|
-
let context;
|
|
90
|
-
if (entry.meta) {
|
|
91
|
-
const scopeInfo = gatherLogInfoFromScope(entry.meta.S);
|
|
92
|
-
if (Object.keys(scopeInfo).length > 0) {
|
|
93
|
-
context = Object.assign(context ?? {}, scopeInfo);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const entryContext = typeof entry.context === "function" ? entry.context() : entry.context;
|
|
97
|
-
if (entryContext) {
|
|
98
|
-
if (entryContext instanceof Error) {
|
|
99
|
-
const c = entryContext.context;
|
|
100
|
-
context = Object.assign(context ?? {}, {
|
|
101
|
-
error: entryContext.stack,
|
|
102
|
-
...c
|
|
103
|
-
});
|
|
104
|
-
} else if (typeof entryContext === "object") {
|
|
105
|
-
context = Object.assign(context ?? {}, entryContext);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (entry.error) {
|
|
109
|
-
context = Object.assign(context ?? {}, {
|
|
110
|
-
error: entry.error
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
return context && Object.keys(context).length > 0 ? context : void 0;
|
|
114
|
-
};
|
|
17
|
+
// src/index.ts
|
|
18
|
+
var index_exports = {};
|
|
19
|
+
__export(index_exports, {
|
|
20
|
+
BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
|
|
21
|
+
DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
|
|
22
|
+
FILE_PROCESSOR: () => FILE_PROCESSOR,
|
|
23
|
+
LogBuffer: () => LogBuffer,
|
|
24
|
+
LogLevel: () => LogLevel,
|
|
25
|
+
LogProcessorType: () => LogProcessorType,
|
|
26
|
+
createFileProcessor: () => createFileProcessor,
|
|
27
|
+
createLog: () => createLog,
|
|
28
|
+
dbg: () => dbg,
|
|
29
|
+
debug: () => debug,
|
|
30
|
+
gatherLogInfoFromScope: () => gatherLogInfoFromScope,
|
|
31
|
+
getContextFromEntry: () => getContextFromEntry,
|
|
32
|
+
getCurrentOwnershipScope: () => getCurrentOwnershipScope,
|
|
33
|
+
getRelativeFilename: () => getRelativeFilename,
|
|
34
|
+
levels: () => levels,
|
|
35
|
+
log: () => log,
|
|
36
|
+
logInfo: () => logInfo,
|
|
37
|
+
omit: () => omit,
|
|
38
|
+
parseFilter: () => parseFilter,
|
|
39
|
+
pick: () => pick,
|
|
40
|
+
shortLevelName: () => shortLevelName,
|
|
41
|
+
shouldLog: () => shouldLog
|
|
42
|
+
});
|
|
43
|
+
import { omit, pick } from "@dxos/util";
|
|
115
44
|
|
|
116
45
|
// src/decorators.ts
|
|
117
|
-
import { inspect } from "@dxos/node-std/util";
|
|
118
46
|
import chalk from "chalk";
|
|
47
|
+
import { inspect } from "@dxos/node-std/util";
|
|
119
48
|
var nextPromiseId = 0;
|
|
120
49
|
var createMethodLogDecorator = (log2) => (arg0, arg1, meta) => (target, propertyKey, descriptor) => {
|
|
121
50
|
const method = descriptor.value;
|
|
@@ -225,40 +154,24 @@ var formatPromise = (id) => chalk.blue(`Promise#${id}`);
|
|
|
225
154
|
// src/options.ts
|
|
226
155
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
227
156
|
|
|
228
|
-
// src/platform/
|
|
229
|
-
var
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
if (typeof localStorage === "undefined") {
|
|
233
|
-
if (globalThis.localStorage_dxlog) {
|
|
234
|
-
dxlog = globalThis.localStorage_dxlog;
|
|
235
|
-
}
|
|
236
|
-
} else {
|
|
237
|
-
dxlog = localStorage.getItem("dxlog") ?? void 0;
|
|
238
|
-
}
|
|
239
|
-
if (!dxlog) {
|
|
240
|
-
return void 0;
|
|
241
|
-
}
|
|
242
|
-
return JSON.parse(dxlog);
|
|
243
|
-
} catch (err) {
|
|
244
|
-
console.info("can't parse dxlog config", err);
|
|
245
|
-
return void 0;
|
|
246
|
-
}
|
|
247
|
-
};
|
|
157
|
+
// src/platform/index.ts
|
|
158
|
+
var platform_exports = {};
|
|
159
|
+
__reExport(platform_exports, platform_star);
|
|
160
|
+
import * as platform_star from "#platform";
|
|
248
161
|
|
|
249
|
-
// src/processors/
|
|
250
|
-
var
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
};
|
|
162
|
+
// src/processors/index.ts
|
|
163
|
+
var processors_exports = {};
|
|
164
|
+
__export(processors_exports, {
|
|
165
|
+
BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
|
|
166
|
+
DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
|
|
167
|
+
FILE_PROCESSOR: () => FILE_PROCESSOR,
|
|
168
|
+
createFileProcessor: () => createFileProcessor,
|
|
169
|
+
getRelativeFilename: () => getRelativeFilename
|
|
170
|
+
});
|
|
258
171
|
|
|
259
172
|
// src/processors/browser-processor.ts
|
|
260
173
|
import { getDebugName, safariCheck } from "@dxos/util";
|
|
261
|
-
var
|
|
174
|
+
var getRelativeFilename2 = (filename) => {
|
|
262
175
|
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
263
176
|
if (match) {
|
|
264
177
|
const [, filePath] = match;
|
|
@@ -278,7 +191,7 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
278
191
|
const LOG_BROWSER_CSS = [];
|
|
279
192
|
let link = "";
|
|
280
193
|
if (entry.meta) {
|
|
281
|
-
const filename =
|
|
194
|
+
const filename = getRelativeFilename2(entry.meta.F);
|
|
282
195
|
const filepath = `${LOG_BROWSER_PREFIX.replace(/\/$/, "")}/${filename}`;
|
|
283
196
|
link = `${filepath}#L${entry.meta.L}`;
|
|
284
197
|
}
|
|
@@ -334,7 +247,7 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
334
247
|
}
|
|
335
248
|
let path = "";
|
|
336
249
|
if (entry.meta) {
|
|
337
|
-
path = `${
|
|
250
|
+
path = `${getRelativeFilename2(entry.meta.F)}:${entry.meta.L}`;
|
|
338
251
|
}
|
|
339
252
|
let args = [];
|
|
340
253
|
const processPrefix = entry.meta?.S?.hostSessionId ? "[worker] " : "";
|
|
@@ -363,22 +276,20 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
363
276
|
};
|
|
364
277
|
var BROWSER_PROCESSOR = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;
|
|
365
278
|
|
|
366
|
-
// src/processors/
|
|
367
|
-
|
|
368
|
-
import
|
|
369
|
-
import { jsonlogify } from "@dxos/util";
|
|
279
|
+
// src/processors/index.ts
|
|
280
|
+
__reExport(processors_exports, console_processor_star);
|
|
281
|
+
import * as console_processor_star from "#console-processor";
|
|
370
282
|
|
|
371
|
-
// src/processors/
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
const [, filePath] = match;
|
|
376
|
-
return filePath;
|
|
377
|
-
}
|
|
378
|
-
return filename;
|
|
283
|
+
// src/processors/debug-processor.ts
|
|
284
|
+
import { inspect as inspect2 } from "@dxos/node-std/util";
|
|
285
|
+
var DEBUG_PROCESSOR = (config, entry) => {
|
|
286
|
+
console.log(inspect2(entry, false, null, true));
|
|
379
287
|
};
|
|
380
288
|
|
|
381
289
|
// src/processors/file-processor.ts
|
|
290
|
+
import { appendFileSync, mkdirSync, openSync } from "@dxos/node-std/fs";
|
|
291
|
+
import { dirname } from "@dxos/node-std/path";
|
|
292
|
+
import { jsonlogify } from "@dxos/util";
|
|
382
293
|
var EAGAIN_MAX_DURATION = 1e3;
|
|
383
294
|
var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
|
|
384
295
|
let fd;
|
|
@@ -403,7 +314,7 @@ var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
|
|
|
403
314
|
timestamp: Date.now(),
|
|
404
315
|
...entry.meta ? {
|
|
405
316
|
meta: {
|
|
406
|
-
file:
|
|
317
|
+
file: getRelativeFilename(entry.meta.F),
|
|
407
318
|
line: entry.meta.L
|
|
408
319
|
}
|
|
409
320
|
} : {},
|
|
@@ -446,13 +357,13 @@ var FILE_PROCESSOR = createFileProcessor({
|
|
|
446
357
|
|
|
447
358
|
// src/options.ts
|
|
448
359
|
var processors = {
|
|
449
|
-
[LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,
|
|
360
|
+
[LogProcessorType.CONSOLE]: processors_exports.CONSOLE_PROCESSOR,
|
|
450
361
|
[LogProcessorType.BROWSER]: BROWSER_PROCESSOR,
|
|
451
362
|
[LogProcessorType.DEBUG]: DEBUG_PROCESSOR
|
|
452
363
|
};
|
|
453
|
-
var browser = typeof window !== "undefined" || typeof navigator !== "undefined";
|
|
364
|
+
var browser = (typeof window !== "undefined" || typeof navigator !== "undefined") && !(typeof process !== "undefined" && process?.env?.VITEST);
|
|
454
365
|
var DEFAULT_PROCESSORS = [
|
|
455
|
-
browser ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR
|
|
366
|
+
browser ? BROWSER_PROCESSOR : processors_exports.CONSOLE_PROCESSOR
|
|
456
367
|
];
|
|
457
368
|
var parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
|
|
458
369
|
var parseFilter = (filter) => {
|
|
@@ -480,7 +391,7 @@ var createConfig = (options) => {
|
|
|
480
391
|
filter: process.env.LOG_FILTER,
|
|
481
392
|
processor: process.env.LOG_PROCESSOR
|
|
482
393
|
} : void 0;
|
|
483
|
-
const mergedOptions = defaultsDeep({}, loadOptions(envOptions?.file), envOptions, options);
|
|
394
|
+
const mergedOptions = defaultsDeep({}, (0, platform_exports.loadOptions)(envOptions?.file), envOptions, options);
|
|
484
395
|
return {
|
|
485
396
|
options: mergedOptions,
|
|
486
397
|
filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),
|
|
@@ -520,7 +431,7 @@ var createLog = () => {
|
|
|
520
431
|
* NOTE: Preserves any processors that were already added to this logger instance
|
|
521
432
|
* unless an explicit processor option is provided.
|
|
522
433
|
*/
|
|
523
|
-
config: ({ processor, ...options }) => {
|
|
434
|
+
config: ({ processor, ...options } = {}) => {
|
|
524
435
|
const config = createConfig(options);
|
|
525
436
|
const processors2 = processor ? config.processors : log2._config.processors;
|
|
526
437
|
log2._config = {
|
|
@@ -574,11 +485,95 @@ var debug = (label, args) => {
|
|
|
574
485
|
};
|
|
575
486
|
var getFormattedStackTrace = () => new Error().stack.split("\n").slice(3).join("\n");
|
|
576
487
|
|
|
488
|
+
// src/index.ts
|
|
489
|
+
__reExport(index_exports, processors_exports);
|
|
490
|
+
|
|
491
|
+
// src/dbg.ts
|
|
492
|
+
var dbg = (arg, meta) => {
|
|
493
|
+
if (meta?.A) {
|
|
494
|
+
console.log(`${meta.A[0]} =`, arg);
|
|
495
|
+
} else {
|
|
496
|
+
console.log(arg);
|
|
497
|
+
}
|
|
498
|
+
return arg;
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
// src/log-buffer.ts
|
|
502
|
+
import { CircularBuffer, getDebugName as getDebugName2 } from "@dxos/util";
|
|
503
|
+
var DEFAULT_BUFFER_SIZE = 2e3;
|
|
504
|
+
var MAX_CONTEXT_LENGTH = 500;
|
|
505
|
+
var LogBuffer = class {
|
|
506
|
+
_buffer;
|
|
507
|
+
constructor(size = DEFAULT_BUFFER_SIZE) {
|
|
508
|
+
this._buffer = new CircularBuffer(size);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Log processor that can be registered with `log.runtimeConfig.processors`.
|
|
512
|
+
* Captures every level except TRACE (does not apply `shouldLog` / filter; use for full debug dumps).
|
|
513
|
+
*/
|
|
514
|
+
logProcessor = (_config, entry) => {
|
|
515
|
+
if (entry.level <= LogLevel.TRACE) {
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
const record = {
|
|
519
|
+
t: (/* @__PURE__ */ new Date()).toISOString(),
|
|
520
|
+
l: shortLevelName[entry.level] ?? "?",
|
|
521
|
+
m: entry.message ?? ""
|
|
522
|
+
};
|
|
523
|
+
if (entry.meta) {
|
|
524
|
+
record.f = getRelativeFilename3(entry.meta.F);
|
|
525
|
+
record.n = entry.meta.L;
|
|
526
|
+
}
|
|
527
|
+
if (entry.error) {
|
|
528
|
+
record.e = entry.error.stack ?? entry.error.message;
|
|
529
|
+
}
|
|
530
|
+
if (entry.context != null) {
|
|
531
|
+
try {
|
|
532
|
+
const ctx = typeof entry.context === "function" ? entry.context() : entry.context;
|
|
533
|
+
if (ctx != null && !(ctx instanceof Error)) {
|
|
534
|
+
let json = JSON.stringify(ctx);
|
|
535
|
+
if (json.length > MAX_CONTEXT_LENGTH) {
|
|
536
|
+
json = json.slice(0, MAX_CONTEXT_LENGTH);
|
|
537
|
+
}
|
|
538
|
+
record.c = json;
|
|
539
|
+
}
|
|
540
|
+
} catch {
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
const scope = entry.meta?.S;
|
|
544
|
+
if (typeof scope === "object" && scope !== null && Object.getPrototypeOf(scope) !== Object.prototype) {
|
|
545
|
+
record.o = getDebugName2(scope);
|
|
546
|
+
}
|
|
547
|
+
this._buffer.push(record);
|
|
548
|
+
};
|
|
549
|
+
/** Number of entries currently in the buffer. */
|
|
550
|
+
get size() {
|
|
551
|
+
return this._buffer.elementCount;
|
|
552
|
+
}
|
|
553
|
+
/** Discard all buffered entries. */
|
|
554
|
+
clear() {
|
|
555
|
+
this._buffer.clear();
|
|
556
|
+
}
|
|
557
|
+
/** Serialize buffer contents as NDJSON (newline-delimited JSON). */
|
|
558
|
+
serialize() {
|
|
559
|
+
const lines = [];
|
|
560
|
+
for (const record of this._buffer) {
|
|
561
|
+
lines.push(JSON.stringify(record));
|
|
562
|
+
}
|
|
563
|
+
return lines.join("\n");
|
|
564
|
+
}
|
|
565
|
+
};
|
|
566
|
+
var getRelativeFilename3 = (filename) => {
|
|
567
|
+
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
568
|
+
if (match) {
|
|
569
|
+
return match[1];
|
|
570
|
+
}
|
|
571
|
+
return filename;
|
|
572
|
+
};
|
|
573
|
+
|
|
577
574
|
// src/experimental/ownership.ts
|
|
578
575
|
import { inspect as inspect3 } from "@dxos/node-std/util";
|
|
579
|
-
var
|
|
580
|
-
var kCurrentOwnershipScope = Symbol("kCurrentOwnershipScope");
|
|
581
|
-
var kDebugInfoProperties = Symbol("kDebugInfoProperties");
|
|
576
|
+
var kDebugInfoProperties = /* @__PURE__ */ Symbol("kDebugInfoProperties");
|
|
582
577
|
var OwnershipScope = class {
|
|
583
578
|
constr;
|
|
584
579
|
parent;
|
|
@@ -609,18 +604,19 @@ var OwnershipScope = class {
|
|
|
609
604
|
var getCurrentOwnershipScope = (thisRef) => thisRef;
|
|
610
605
|
export {
|
|
611
606
|
BROWSER_PROCESSOR,
|
|
612
|
-
CONSOLE_PROCESSOR,
|
|
613
607
|
DEBUG_PROCESSOR,
|
|
614
608
|
FILE_PROCESSOR,
|
|
609
|
+
LogBuffer,
|
|
615
610
|
LogLevel,
|
|
616
611
|
LogProcessorType,
|
|
617
612
|
createFileProcessor,
|
|
618
613
|
createLog,
|
|
614
|
+
dbg,
|
|
619
615
|
debug,
|
|
620
616
|
gatherLogInfoFromScope,
|
|
621
617
|
getContextFromEntry,
|
|
622
618
|
getCurrentOwnershipScope,
|
|
623
|
-
|
|
619
|
+
getRelativeFilename,
|
|
624
620
|
levels,
|
|
625
621
|
log,
|
|
626
622
|
logInfo,
|