@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.
Files changed (65) hide show
  1. package/dist/lib/browser/chunk-IEP6GGEX.mjs +23 -0
  2. package/dist/lib/browser/chunk-IEP6GGEX.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-M2YHSBML.mjs +133 -0
  4. package/dist/lib/browser/chunk-M2YHSBML.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +165 -169
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/platform/browser/index.mjs +26 -0
  9. package/dist/lib/browser/platform/browser/index.mjs.map +7 -0
  10. package/dist/lib/browser/platform/node/index.mjs +21 -0
  11. package/dist/lib/browser/platform/node/index.mjs.map +7 -0
  12. package/dist/lib/browser/processors/console-processor.mjs +107 -0
  13. package/dist/lib/browser/processors/console-processor.mjs.map +7 -0
  14. package/dist/lib/browser/processors/console-stub.mjs +9 -0
  15. package/dist/lib/browser/processors/console-stub.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +24 -0
  17. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +7 -0
  18. package/dist/lib/node-esm/chunk-62VKC2WQ.mjs +135 -0
  19. package/dist/lib/node-esm/chunk-62VKC2WQ.mjs.map +7 -0
  20. package/dist/lib/node-esm/index.mjs +162 -253
  21. package/dist/lib/node-esm/index.mjs.map +4 -4
  22. package/dist/lib/node-esm/meta.json +1 -1
  23. package/dist/lib/node-esm/platform/browser/index.mjs +27 -0
  24. package/dist/lib/node-esm/platform/browser/index.mjs.map +7 -0
  25. package/dist/lib/node-esm/platform/node/index.mjs +22 -0
  26. package/dist/lib/node-esm/platform/node/index.mjs.map +7 -0
  27. package/dist/lib/node-esm/processors/console-processor.mjs +108 -0
  28. package/dist/lib/node-esm/processors/console-processor.mjs.map +7 -0
  29. package/dist/lib/node-esm/processors/console-stub.mjs +10 -0
  30. package/dist/lib/node-esm/processors/console-stub.mjs.map +7 -0
  31. package/dist/types/src/dbg.d.ts +23 -0
  32. package/dist/types/src/dbg.d.ts.map +1 -0
  33. package/dist/types/src/decorators.d.ts.map +1 -1
  34. package/dist/types/src/index.d.ts +3 -2
  35. package/dist/types/src/index.d.ts.map +1 -1
  36. package/dist/types/src/log-buffer.d.ts +40 -0
  37. package/dist/types/src/log-buffer.d.ts.map +1 -0
  38. package/dist/types/src/log-buffer.test.d.ts +2 -0
  39. package/dist/types/src/log-buffer.test.d.ts.map +1 -0
  40. package/dist/types/src/log.d.ts +3 -1
  41. package/dist/types/src/log.d.ts.map +1 -1
  42. package/dist/types/src/options.d.ts.map +1 -1
  43. package/dist/types/src/platform/index.d.ts +1 -1
  44. package/dist/types/src/platform/index.d.ts.map +1 -1
  45. package/dist/types/src/platform/node/index.d.ts.map +1 -1
  46. package/dist/types/src/processors/console-processor.d.ts.map +1 -1
  47. package/dist/types/src/processors/file-processor.d.ts.map +1 -1
  48. package/dist/types/src/processors/index.d.ts +3 -3
  49. package/dist/types/src/processors/index.d.ts.map +1 -1
  50. package/dist/types/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +30 -12
  52. package/src/dbg.ts +34 -0
  53. package/src/decorators.ts +1 -2
  54. package/src/experimental/classes.test.ts +0 -1
  55. package/src/index.ts +3 -3
  56. package/src/log-buffer.test.ts +155 -0
  57. package/src/log-buffer.ts +117 -0
  58. package/src/log.test.ts +0 -1
  59. package/src/log.ts +4 -2
  60. package/src/options.ts +3 -1
  61. package/src/platform/index.ts +1 -1
  62. package/src/platform/node/index.ts +1 -2
  63. package/src/processors/console-processor.ts +1 -3
  64. package/src/processors/file-processor.ts +0 -1
  65. 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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -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
- // src/index.ts
2
- import omit from "lodash.omit";
3
- import { pick } from "@dxos/util";
4
-
5
- // src/config.ts
6
- var LogLevel = /* @__PURE__ */ (function(LogLevel2) {
7
- LogLevel2[LogLevel2["TRACE"] = 5] = "TRACE";
8
- LogLevel2[LogLevel2["DEBUG"] = 10] = "DEBUG";
9
- LogLevel2[LogLevel2["VERBOSE"] = 11] = "VERBOSE";
10
- LogLevel2[LogLevel2["INFO"] = 12] = "INFO";
11
- LogLevel2[LogLevel2["WARN"] = 13] = "WARN";
12
- LogLevel2[LogLevel2["ERROR"] = 14] = "ERROR";
13
- return LogLevel2;
14
- })({});
15
- var levels = {
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/context.ts
62
- var matchFilter = (filter, level, path) => {
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
- }
80
- };
81
- var shouldLog = (entry, filters) => {
82
- if (filters === void 0) {
83
- return false;
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);
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/browser/index.ts
229
- var loadOptions = (filepath) => {
230
- try {
231
- let dxlog;
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/console-stub.ts
250
- var CONSOLE_PROCESSOR = () => {
251
- };
252
-
253
- // src/processors/debug-processor.ts
254
- import { inspect as inspect2 } from "@dxos/node-std/util";
255
- var DEBUG_PROCESSOR = (config, entry) => {
256
- console.log(inspect2(entry, false, null, true));
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 getRelativeFilename = (filename) => {
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 = getRelativeFilename(entry.meta.F);
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 = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;
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/file-processor.ts
367
- import { appendFileSync, mkdirSync, openSync } from "@dxos/node-std/fs";
368
- import { dirname } from "@dxos/node-std/path";
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/common.ts
372
- var getRelativeFilename2 = (filename) => {
373
- const match = filename.match(/.+\/(packages\/.+\/.+)/);
374
- if (match) {
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: getRelativeFilename2(entry.meta.F),
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 kOwnershipScope = Symbol("kOwnershipScope");
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
- getRelativeFilename2 as getRelativeFilename,
619
+ getRelativeFilename,
624
620
  levels,
625
621
  log,
626
622
  logInfo,