@dxos/log 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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 (66) 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 +221 -206
  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 +216 -288
  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/config.d.ts.map +1 -1
  32. package/dist/types/src/context.d.ts.map +1 -1
  33. package/dist/types/src/dbg.d.ts +23 -0
  34. package/dist/types/src/dbg.d.ts.map +1 -0
  35. package/dist/types/src/decorators.d.ts +1 -1
  36. package/dist/types/src/decorators.d.ts.map +1 -1
  37. package/dist/types/src/index.d.ts +3 -2
  38. package/dist/types/src/index.d.ts.map +1 -1
  39. package/dist/types/src/log-buffer.d.ts +36 -0
  40. package/dist/types/src/log-buffer.d.ts.map +1 -0
  41. package/dist/types/src/log-buffer.test.d.ts +2 -0
  42. package/dist/types/src/log-buffer.test.d.ts.map +1 -0
  43. package/dist/types/src/log.d.ts +14 -18
  44. package/dist/types/src/log.d.ts.map +1 -1
  45. package/dist/types/src/options.d.ts +1 -6
  46. package/dist/types/src/options.d.ts.map +1 -1
  47. package/dist/types/src/platform/index.d.ts +1 -1
  48. package/dist/types/src/platform/index.d.ts.map +1 -1
  49. package/dist/types/src/processors/file-processor.d.ts.map +1 -1
  50. package/dist/types/src/processors/index.d.ts +3 -3
  51. package/dist/types/src/processors/index.d.ts.map +1 -1
  52. package/dist/types/tsconfig.tsbuildinfo +1 -1
  53. package/package.json +30 -12
  54. package/src/config.ts +1 -0
  55. package/src/context.ts +36 -5
  56. package/src/dbg.ts +34 -0
  57. package/src/decorators.ts +3 -3
  58. package/src/index.ts +3 -3
  59. package/src/log-buffer.test.ts +156 -0
  60. package/src/log-buffer.ts +108 -0
  61. package/src/log.test.ts +48 -18
  62. package/src/log.ts +103 -57
  63. package/src/options.ts +26 -10
  64. package/src/platform/index.ts +1 -1
  65. package/src/processors/file-processor.ts +2 -0
  66. package/src/processors/index.ts +3 -3
@@ -1,103 +1,47 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ LogLevel,
4
+ LogProcessorType,
5
+ gatherLogInfoFromScope,
6
+ getContextFromEntry,
7
+ getRelativeFilename,
8
+ levels,
9
+ logInfo,
10
+ shortLevelName,
11
+ shouldLog
12
+ } from "./chunk-62VKC2WQ.mjs";
13
+ import {
14
+ __export,
15
+ __reExport
16
+ } from "./chunk-2SZHAWBN.mjs";
2
17
 
3
18
  // src/index.ts
4
- import omit from "lodash.omit";
5
- import { pick } from "@dxos/util";
6
-
7
- // src/config.ts
8
- var LogLevel = /* @__PURE__ */ (function(LogLevel2) {
9
- LogLevel2[LogLevel2["TRACE"] = 5] = "TRACE";
10
- LogLevel2[LogLevel2["DEBUG"] = 10] = "DEBUG";
11
- LogLevel2[LogLevel2["VERBOSE"] = 11] = "VERBOSE";
12
- LogLevel2[LogLevel2["INFO"] = 12] = "INFO";
13
- LogLevel2[LogLevel2["WARN"] = 13] = "WARN";
14
- LogLevel2[LogLevel2["ERROR"] = 14] = "ERROR";
15
- return LogLevel2;
16
- })({});
17
- var levels = {
18
- trace: 5,
19
- debug: 10,
20
- verbose: 11,
21
- info: 12,
22
- warn: 13,
23
- error: 14
24
- };
25
- var shortLevelName = {
26
- [5]: "T",
27
- [10]: "D",
28
- [11]: "V",
29
- [12]: "I",
30
- [13]: "W",
31
- [14]: "E"
32
- };
33
- var LogProcessorType = /* @__PURE__ */ (function(LogProcessorType2) {
34
- LogProcessorType2["CONSOLE"] = "console";
35
- LogProcessorType2["BROWSER"] = "browser";
36
- LogProcessorType2["DEBUG"] = "debug";
37
- return LogProcessorType2;
38
- })({});
39
-
40
- // src/scope.ts
41
- var logInfoProperties = Symbol("logInfoProperties");
42
- var logInfo = (target, propertyKey, descriptor) => {
43
- var _target, _logInfoProperties;
44
- ((_target = target)[_logInfoProperties = logInfoProperties] ?? (_target[_logInfoProperties] = [])).push(propertyKey);
45
- };
46
- var gatherLogInfoFromScope = (scope) => {
47
- if (!scope) {
48
- return {};
49
- }
50
- const res = {};
51
- const prototype = Object.getPrototypeOf(scope);
52
- const infoProps = (typeof prototype === "object" && prototype !== null ? prototype[logInfoProperties] : []) ?? [];
53
- for (const prop of infoProps) {
54
- try {
55
- res[prop] = typeof scope[prop] === "function" ? scope[prop]() : scope[prop];
56
- } catch (err) {
57
- res[prop] = err.message;
58
- }
59
- }
60
- return res;
61
- };
62
-
63
- // src/context.ts
64
- var matchFilter = (filter, level, path) => {
65
- return level >= filter.level && (!filter.pattern || path.includes(filter.pattern));
66
- };
67
- var shouldLog = (entry, filters) => {
68
- if (filters === void 0) {
69
- return true;
70
- } else {
71
- return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ""));
72
- }
73
- };
74
- var getContextFromEntry = (entry) => {
75
- let context;
76
- if (entry.meta) {
77
- const scopeInfo = gatherLogInfoFromScope(entry.meta.S);
78
- if (Object.keys(scopeInfo).length > 0) {
79
- context = Object.assign(context ?? {}, scopeInfo);
80
- }
81
- }
82
- const entryContext = typeof entry.context === "function" ? entry.context() : entry.context;
83
- if (entryContext) {
84
- if (entryContext instanceof Error) {
85
- const c = entryContext.context;
86
- context = Object.assign(context ?? {}, {
87
- error: entryContext.stack,
88
- ...c
89
- });
90
- } else if (typeof entryContext === "object") {
91
- context = Object.assign(context ?? {}, entryContext);
92
- }
93
- }
94
- if (entry.error) {
95
- context = Object.assign(context ?? {}, {
96
- error: entry.error
97
- });
98
- }
99
- return context && Object.keys(context).length > 0 ? context : void 0;
100
- };
19
+ var index_exports = {};
20
+ __export(index_exports, {
21
+ BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
22
+ DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
23
+ FILE_PROCESSOR: () => FILE_PROCESSOR,
24
+ LogBuffer: () => LogBuffer,
25
+ LogLevel: () => LogLevel,
26
+ LogProcessorType: () => LogProcessorType,
27
+ createFileProcessor: () => createFileProcessor,
28
+ createLog: () => createLog,
29
+ dbg: () => dbg,
30
+ debug: () => debug,
31
+ gatherLogInfoFromScope: () => gatherLogInfoFromScope,
32
+ getContextFromEntry: () => getContextFromEntry,
33
+ getCurrentOwnershipScope: () => getCurrentOwnershipScope,
34
+ getRelativeFilename: () => getRelativeFilename,
35
+ levels: () => levels,
36
+ log: () => log,
37
+ logInfo: () => logInfo,
38
+ omit: () => omit,
39
+ parseFilter: () => parseFilter,
40
+ pick: () => pick,
41
+ shortLevelName: () => shortLevelName,
42
+ shouldLog: () => shouldLog
43
+ });
44
+ import { omit, pick } from "@dxos/util";
101
45
 
102
46
  // src/decorators.ts
103
47
  import { inspect } from "node:util";
@@ -198,144 +142,33 @@ var logAsyncResolved = (log2, methodName, resolvedValue, promiseId, startTime, c
198
142
  var logAsyncRejected = (log2, methodName, err, promiseId, startTime, combinedMeta) => {
199
143
  log2.info(`.${formatFunction(methodName)} \u21B2 \u{1F525} ${chalk.gray("reject")} ${formatPromise(promiseId)} ${formatTimeElapsed(startTime)} ${chalk.gray("=>")} ${err}`, {}, combinedMeta);
200
144
  };
201
- var greenCheck = typeof chalk.green === "function" ? chalk.green("\u2714") : "\u2714";
202
- var formatTimeElapsed = (startTime) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);
203
145
  var COLOR_FUNCTION = [
204
146
  220,
205
147
  220,
206
148
  170
207
149
  ];
150
+ var greenCheck = typeof chalk.green === "function" ? chalk.green("\u2714") : "\u2714";
151
+ var formatTimeElapsed = (startTime) => chalk.gray(`${(performance.now() - startTime).toFixed(0)}ms`);
208
152
  var formatFunction = (name) => chalk.bold(chalk.rgb(...COLOR_FUNCTION)(name));
209
153
  var formatPromise = (id) => chalk.blue(`Promise#${id}`);
210
154
 
211
155
  // src/options.ts
212
156
  import defaultsDeep from "lodash.defaultsdeep";
213
157
 
214
- // src/platform/node/index.ts
215
- import fs from "node:fs";
216
- import yaml from "js-yaml";
217
- var loadOptions = (filepath) => {
218
- if (filepath) {
219
- try {
220
- const text = fs.readFileSync(filepath, "utf-8");
221
- if (text) {
222
- return yaml.load(text);
223
- }
224
- } catch (err) {
225
- console.warn(`Invalid log file: ${filepath}`);
226
- }
227
- }
228
- };
229
-
230
- // src/processors/console-processor.ts
231
- import { inspect as inspect2 } from "node:util";
232
- import chalk2 from "chalk";
233
- import { getPrototypeSpecificInstanceId, pickBy } from "@dxos/util";
234
-
235
- // src/processors/common.ts
236
- var getRelativeFilename = (filename) => {
237
- const match = filename.match(/.+\/(packages\/.+\/.+)/);
238
- if (match) {
239
- const [, filePath] = match;
240
- return filePath;
241
- }
242
- return filename;
243
- };
158
+ // src/platform/index.ts
159
+ var platform_exports = {};
160
+ __reExport(platform_exports, platform_star);
161
+ import * as platform_star from "#platform";
244
162
 
245
- // src/processors/console-processor.ts
246
- var LEVEL_COLORS = {
247
- [LogLevel.TRACE]: "gray",
248
- [LogLevel.DEBUG]: "gray",
249
- [LogLevel.VERBOSE]: "gray",
250
- [LogLevel.INFO]: "white",
251
- [LogLevel.WARN]: "yellow",
252
- [LogLevel.ERROR]: "red"
253
- };
254
- var truncate = (text, length = 0, right = false) => {
255
- const str = text && length ? right ? text.slice(-length) : text.substring(0, length) : text ?? "";
256
- return right ? str.padStart(length, " ") : str.padEnd(length, " ");
257
- };
258
- var DEFAULT_FORMATTER = (config, { path, line, level, message, context, error, scope }) => {
259
- const column = config.options?.formatter?.column;
260
- const filepath = path !== void 0 && line !== void 0 ? chalk2.grey(`${path}:${line}`) : void 0;
261
- let instance;
262
- if (scope) {
263
- const prototype = Object.getPrototypeOf(scope);
264
- if (prototype !== null) {
265
- const id = getPrototypeSpecificInstanceId(scope);
266
- instance = chalk2.magentaBright(`${prototype.constructor.name}#${id}`);
267
- }
268
- }
269
- const formattedTimestamp = config.options?.formatter?.timestamp ? (/* @__PURE__ */ new Date()).toISOString() : void 0;
270
- const formattedLevel = chalk2[LEVEL_COLORS[level]](column ? shortLevelName[level] : LogLevel[level]);
271
- const padding = column && filepath ? "".padStart(column - filepath.length) : void 0;
272
- return config.options?.formatter?.timestampFirst ? [
273
- formattedTimestamp,
274
- filepath,
275
- padding,
276
- formattedLevel,
277
- instance,
278
- message,
279
- context,
280
- error
281
- ] : [
282
- // NOTE: File path must come fist for console hyperlinks.
283
- // Must not truncate for terminal output.
284
- filepath,
285
- padding,
286
- formattedTimestamp,
287
- formattedLevel,
288
- instance,
289
- message,
290
- context,
291
- error
292
- ];
293
- };
294
- var SHORT_FORMATTER = (config, { path, level, message }) => {
295
- return [
296
- chalk2.grey(truncate(path, 16, true)),
297
- chalk2[LEVEL_COLORS[level]](shortLevelName[level]),
298
- message
299
- ];
300
- };
301
- var formatter = DEFAULT_FORMATTER;
302
- var CONSOLE_PROCESSOR = (config, entry) => {
303
- const { level, message, meta, error } = entry;
304
- if (!shouldLog(entry, config.filters)) {
305
- return;
306
- }
307
- const parts = {
308
- level,
309
- message,
310
- error,
311
- path: void 0,
312
- line: void 0,
313
- scope: void 0,
314
- context: void 0
315
- };
316
- if (meta) {
317
- parts.path = getRelativeFilename(meta.F);
318
- parts.line = meta.L;
319
- parts.scope = meta.S;
320
- }
321
- const context = getContextFromEntry(entry);
322
- if (context) {
323
- parts.context = inspect2(pickBy(context, (value) => value !== void 0), {
324
- depth: config.options.depth,
325
- colors: true,
326
- maxArrayLength: 8,
327
- sorted: false
328
- });
329
- }
330
- const line = formatter(config, parts).filter(Boolean).join(" ");
331
- console.log(line);
332
- };
333
-
334
- // src/processors/debug-processor.ts
335
- import { inspect as inspect3 } from "node:util";
336
- var DEBUG_PROCESSOR = (config, entry) => {
337
- console.log(inspect3(entry, false, null, true));
338
- };
163
+ // src/processors/index.ts
164
+ var processors_exports = {};
165
+ __export(processors_exports, {
166
+ BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
167
+ DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
168
+ FILE_PROCESSOR: () => FILE_PROCESSOR,
169
+ createFileProcessor: () => createFileProcessor,
170
+ getRelativeFilename: () => getRelativeFilename
171
+ });
339
172
 
340
173
  // src/processors/browser-processor.ts
341
174
  import { getDebugName, safariCheck } from "@dxos/util";
@@ -444,6 +277,16 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
444
277
  };
445
278
  var BROWSER_PROCESSOR = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;
446
279
 
280
+ // src/processors/index.ts
281
+ __reExport(processors_exports, console_processor_star);
282
+ import * as console_processor_star from "#console-processor";
283
+
284
+ // src/processors/debug-processor.ts
285
+ import { inspect as inspect2 } from "node:util";
286
+ var DEBUG_PROCESSOR = (config, entry) => {
287
+ console.log(inspect2(entry, false, null, true));
288
+ };
289
+
447
290
  // src/processors/file-processor.ts
448
291
  import { appendFileSync, mkdirSync, openSync } from "node:fs";
449
292
  import { dirname } from "node:path";
@@ -500,7 +343,7 @@ var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
500
343
  };
501
344
  var logFilePath;
502
345
  var getLogFilePath = () => {
503
- logFilePath ?? (logFilePath = process.env.LOG_FILE ?? (process.env.HOME ? `${process.env.HOME}/.dxlog/${(/* @__PURE__ */ new Date()).toISOString()}.log` : void 0));
346
+ logFilePath ??= process.env.LOG_FILE ?? (process.env.HOME ? `${process.env.HOME}/.dxlog/${(/* @__PURE__ */ new Date()).toISOString()}.log` : void 0);
504
347
  return logFilePath;
505
348
  };
506
349
  var FILE_PROCESSOR = createFileProcessor({
@@ -515,14 +358,15 @@ var FILE_PROCESSOR = createFileProcessor({
515
358
 
516
359
  // src/options.ts
517
360
  var processors = {
518
- [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,
361
+ [LogProcessorType.CONSOLE]: processors_exports.CONSOLE_PROCESSOR,
519
362
  [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,
520
363
  [LogProcessorType.DEBUG]: DEBUG_PROCESSOR
521
364
  };
522
- var IS_BROWSER = typeof window !== "undefined" || typeof navigator !== "undefined";
365
+ var browser = (typeof window !== "undefined" || typeof navigator !== "undefined") && !(typeof process !== "undefined" && process?.env?.VITEST);
523
366
  var DEFAULT_PROCESSORS = [
524
- IS_BROWSER ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR
367
+ browser ? BROWSER_PROCESSOR : processors_exports.CONSOLE_PROCESSOR
525
368
  ];
369
+ var parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
526
370
  var parseFilter = (filter) => {
527
371
  if (typeof filter === "number") {
528
372
  return [
@@ -531,7 +375,6 @@ var parseFilter = (filter) => {
531
375
  }
532
376
  ];
533
377
  }
534
- const parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
535
378
  const lines = typeof filter === "string" ? filter.split(/,\s*/) : filter;
536
379
  return lines.map((filter2) => {
537
380
  const [pattern, level] = filter2.split(":");
@@ -543,55 +386,37 @@ var parseFilter = (filter) => {
543
386
  };
544
387
  });
545
388
  };
546
- var getConfig = (options) => {
547
- const nodeOptions = "process" in globalThis ? {
389
+ var createConfig = (options) => {
390
+ const envOptions = "process" in globalThis ? {
548
391
  file: process.env.LOG_CONFIG,
549
392
  filter: process.env.LOG_FILTER,
550
393
  processor: process.env.LOG_PROCESSOR
551
394
  } : void 0;
552
- const mergedOptions = defaultsDeep({}, loadOptions(nodeOptions?.file), nodeOptions, options);
395
+ const mergedOptions = defaultsDeep({}, (0, platform_exports.loadOptions)(envOptions?.file), envOptions, options);
553
396
  return {
554
397
  options: mergedOptions,
555
398
  filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),
556
399
  captureFilters: parseFilter(mergedOptions.captureFilter ?? LogLevel.WARN),
557
400
  processors: mergedOptions.processor ? [
558
401
  processors[mergedOptions.processor]
559
- ] : DEFAULT_PROCESSORS,
402
+ ] : [
403
+ ...DEFAULT_PROCESSORS
404
+ ],
560
405
  prefix: mergedOptions.prefix
561
406
  };
562
407
  };
563
408
 
564
409
  // src/log.ts
565
- var _globalThis;
410
+ var logCount = 0;
566
411
  var createLog = () => {
567
412
  const log2 = (...params) => processLog(LogLevel.DEBUG, ...params);
568
- log2._config = getConfig();
413
+ Object.assign(log2, {
414
+ _id: `log-${++logCount}`,
415
+ _config: createConfig()
416
+ });
569
417
  Object.defineProperty(log2, "runtimeConfig", {
570
418
  get: () => log2._config
571
419
  });
572
- log2.addProcessor = (processor) => {
573
- if (DEFAULT_PROCESSORS.filter((p) => p === processor).length === 0) {
574
- DEFAULT_PROCESSORS.push(processor);
575
- }
576
- if (log2._config.processors.filter((p) => p === processor).length === 0) {
577
- log2._config.processors.push(processor);
578
- }
579
- };
580
- log2.config = (options) => {
581
- log2._config = getConfig(options);
582
- };
583
- log2.trace = (...params) => processLog(LogLevel.TRACE, ...params);
584
- log2.debug = (...params) => processLog(LogLevel.DEBUG, ...params);
585
- log2.verbose = (...params) => processLog(LogLevel.VERBOSE, ...params);
586
- log2.info = (...params) => processLog(LogLevel.INFO, ...params);
587
- log2.warn = (...params) => processLog(LogLevel.WARN, ...params);
588
- log2.error = (...params) => processLog(LogLevel.ERROR, ...params);
589
- log2.catch = (error, context, meta) => processLog(LogLevel.ERROR, void 0, context, meta, error);
590
- 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");
591
- log2.stack = (message, context, meta) => processLog(LogLevel.INFO, `${message ?? "Stack Dump"}
592
- ${getFormattedStackTrace()}`, context, meta);
593
- log2.method = createMethodLogDecorator(log2);
594
- log2.func = createFunctionLogDecorator(log2);
595
420
  const processLog = (level, message, context = {}, meta, error) => {
596
421
  log2._config.processors.forEach((processor) => processor(log2._config, {
597
422
  level,
@@ -601,9 +426,50 @@ ${getFormattedStackTrace()}`, context, meta);
601
426
  error
602
427
  }));
603
428
  };
429
+ Object.assign(log2, {
430
+ /**
431
+ * Update config.
432
+ * NOTE: Preserves any processors that were already added to this logger instance
433
+ * unless an explicit processor option is provided.
434
+ */
435
+ config: ({ processor, ...options } = {}) => {
436
+ const config = createConfig(options);
437
+ const processors2 = processor ? config.processors : log2._config.processors;
438
+ log2._config = {
439
+ ...config,
440
+ processors: processors2
441
+ };
442
+ return log2;
443
+ },
444
+ /**
445
+ * Adds a processor to the logger.
446
+ */
447
+ addProcessor: (processor) => {
448
+ if (log2._config.processors.filter((p) => p === processor).length === 0) {
449
+ log2._config.processors.push(processor);
450
+ }
451
+ return () => {
452
+ log2._config.processors = log2._config.processors.filter((p) => p !== processor);
453
+ };
454
+ },
455
+ trace: (...params) => processLog(LogLevel.TRACE, ...params),
456
+ debug: (...params) => processLog(LogLevel.DEBUG, ...params),
457
+ verbose: (...params) => processLog(LogLevel.VERBOSE, ...params),
458
+ info: (...params) => processLog(LogLevel.INFO, ...params),
459
+ warn: (...params) => processLog(LogLevel.WARN, ...params),
460
+ error: (...params) => processLog(LogLevel.ERROR, ...params),
461
+ catch: (error, context, meta) => processLog(LogLevel.ERROR, void 0, context, meta, error),
462
+ method: createMethodLogDecorator(log2),
463
+ function: createFunctionLogDecorator(log2),
464
+ break: () => log2.info("-".repeat(80)),
465
+ stack: (message, context, meta) => {
466
+ return processLog(LogLevel.INFO, `${message ?? "Stack Dump"}
467
+ ${getFormattedStackTrace()}`, context, meta);
468
+ }
469
+ });
604
470
  return log2;
605
471
  };
606
- var log = (_globalThis = globalThis).dx_log ?? (_globalThis.dx_log = createLog());
472
+ var log = globalThis.DX_LOG ??= createLog();
607
473
  var start = Date.now();
608
474
  var last = start;
609
475
  var debug = (label, args) => {
@@ -620,26 +486,96 @@ var debug = (label, args) => {
620
486
  };
621
487
  var getFormattedStackTrace = () => new Error().stack.split("\n").slice(3).join("\n");
622
488
 
623
- // src/experimental/ownership.ts
624
- import { inspect as inspect4 } from "node:util";
625
- function _define_property(obj, key, value) {
626
- if (key in obj) {
627
- Object.defineProperty(obj, key, {
628
- value,
629
- enumerable: true,
630
- configurable: true,
631
- writable: true
632
- });
489
+ // src/index.ts
490
+ __reExport(index_exports, processors_exports);
491
+
492
+ // src/dbg.ts
493
+ var dbg = (arg, meta) => {
494
+ if (meta?.A) {
495
+ console.log(`${meta.A[0]} =`, arg);
633
496
  } else {
634
- obj[key] = value;
497
+ console.log(arg);
498
+ }
499
+ return arg;
500
+ };
501
+
502
+ // src/log-buffer.ts
503
+ import { CircularBuffer } from "@dxos/util";
504
+ var DEFAULT_BUFFER_SIZE = 2e3;
505
+ var MAX_CONTEXT_LENGTH = 500;
506
+ var LogBuffer = class {
507
+ _buffer;
508
+ constructor(size = DEFAULT_BUFFER_SIZE) {
509
+ this._buffer = new CircularBuffer(size);
510
+ }
511
+ /** Log processor that can be registered with `log.runtimeConfig.processors`. */
512
+ logProcessor = (_config, entry) => {
513
+ if (entry.level <= LogLevel.TRACE) {
514
+ return;
515
+ }
516
+ const record = {
517
+ t: (/* @__PURE__ */ new Date()).toISOString(),
518
+ l: shortLevelName[entry.level] ?? "?",
519
+ m: entry.message ?? ""
520
+ };
521
+ if (entry.meta) {
522
+ record.f = getRelativeFilename3(entry.meta.F);
523
+ record.n = entry.meta.L;
524
+ }
525
+ if (entry.error) {
526
+ record.e = entry.error.stack ?? entry.error.message;
527
+ }
528
+ if (entry.context != null) {
529
+ try {
530
+ const ctx = typeof entry.context === "function" ? entry.context() : entry.context;
531
+ if (ctx != null && !(ctx instanceof Error)) {
532
+ let json = JSON.stringify(ctx);
533
+ if (json.length > MAX_CONTEXT_LENGTH) {
534
+ json = json.slice(0, MAX_CONTEXT_LENGTH);
535
+ }
536
+ record.c = json;
537
+ }
538
+ } catch {
539
+ }
540
+ }
541
+ this._buffer.push(record);
542
+ };
543
+ /** Number of entries currently in the buffer. */
544
+ get size() {
545
+ return this._buffer.elementCount;
546
+ }
547
+ /** Discard all buffered entries. */
548
+ clear() {
549
+ this._buffer.clear();
550
+ }
551
+ /** Serialize buffer contents as NDJSON (newline-delimited JSON). */
552
+ serialize() {
553
+ const lines = [];
554
+ for (const record of this._buffer) {
555
+ lines.push(JSON.stringify(record));
556
+ }
557
+ return lines.join("\n");
558
+ }
559
+ };
560
+ var getRelativeFilename3 = (filename) => {
561
+ const match = filename.match(/.+\/(packages\/.+\/.+)/);
562
+ if (match) {
563
+ return match[1];
635
564
  }
636
- return obj;
637
- }
638
- var kOwnershipScope = Symbol("kOwnershipScope");
639
- var kCurrentOwnershipScope = Symbol("kCurrentOwnershipScope");
640
- var kDebugInfoProperties = Symbol("kDebugInfoProperties");
641
- var _inspect_custom = inspect4.custom;
565
+ return filename;
566
+ };
567
+
568
+ // src/experimental/ownership.ts
569
+ import { inspect as inspect3 } from "node:util";
570
+ var kDebugInfoProperties = /* @__PURE__ */ Symbol("kDebugInfoProperties");
642
571
  var OwnershipScope = class {
572
+ constr;
573
+ parent;
574
+ instance;
575
+ constructor(constr, parent) {
576
+ this.constr = constr;
577
+ this.parent = parent;
578
+ }
643
579
  getInfo() {
644
580
  if (!this.instance) {
645
581
  return {};
@@ -651,32 +587,25 @@ var OwnershipScope = class {
651
587
  }
652
588
  return info;
653
589
  }
654
- [_inspect_custom]() {
590
+ [inspect3.custom]() {
655
591
  return {
656
592
  className: this.constr.name,
657
593
  info: this.getInfo(),
658
594
  parent: this.parent
659
595
  };
660
596
  }
661
- constructor(constr, parent) {
662
- _define_property(this, "constr", void 0);
663
- _define_property(this, "parent", void 0);
664
- _define_property(this, "instance", void 0);
665
- this.constr = constr;
666
- this.parent = parent;
667
- }
668
597
  };
669
598
  var getCurrentOwnershipScope = (thisRef) => thisRef;
670
599
  export {
671
600
  BROWSER_PROCESSOR,
672
- CONSOLE_PROCESSOR,
673
601
  DEBUG_PROCESSOR,
674
- DEFAULT_FORMATTER,
675
602
  FILE_PROCESSOR,
603
+ LogBuffer,
676
604
  LogLevel,
677
605
  LogProcessorType,
678
- SHORT_FORMATTER,
679
606
  createFileProcessor,
607
+ createLog,
608
+ dbg,
680
609
  debug,
681
610
  gatherLogInfoFromScope,
682
611
  getContextFromEntry,
@@ -689,7 +618,6 @@ export {
689
618
  parseFilter,
690
619
  pick,
691
620
  shortLevelName,
692
- shouldLog,
693
- truncate
621
+ shouldLog
694
622
  };
695
623
  //# sourceMappingURL=index.mjs.map