@dxos/log 0.8.4-main.fcfe5033a5 → 0.8.4-main.fdfb99ef29

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 (62) hide show
  1. package/dist/lib/browser/chunk-V7FYKT4H.mjs +311 -0
  2. package/dist/lib/browser/chunk-V7FYKT4H.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +171 -62
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/platform/node/index.mjs.map +2 -2
  7. package/dist/lib/browser/processors/console-processor.mjs +5 -10
  8. package/dist/lib/browser/processors/console-processor.mjs.map +3 -3
  9. package/dist/lib/node-esm/chunk-5TBDXMQF.mjs +313 -0
  10. package/dist/lib/node-esm/chunk-5TBDXMQF.mjs.map +7 -0
  11. package/dist/lib/node-esm/index.mjs +171 -62
  12. package/dist/lib/node-esm/index.mjs.map +4 -4
  13. package/dist/lib/node-esm/meta.json +1 -1
  14. package/dist/lib/node-esm/platform/node/index.mjs.map +2 -2
  15. package/dist/lib/node-esm/processors/console-processor.mjs +5 -10
  16. package/dist/lib/node-esm/processors/console-processor.mjs.map +3 -3
  17. package/dist/types/src/context.d.ts +78 -2
  18. package/dist/types/src/context.d.ts.map +1 -1
  19. package/dist/types/src/decorators.d.ts.map +1 -1
  20. package/dist/types/src/environment.d.ts +24 -0
  21. package/dist/types/src/environment.d.ts.map +1 -0
  22. package/dist/types/src/environment.test.d.ts +2 -0
  23. package/dist/types/src/environment.test.d.ts.map +1 -0
  24. package/dist/types/src/experimental/ownership.d.ts.map +1 -1
  25. package/dist/types/src/index.d.ts +4 -1
  26. package/dist/types/src/index.d.ts.map +1 -1
  27. package/dist/types/src/jsonl.d.ts +53 -0
  28. package/dist/types/src/jsonl.d.ts.map +1 -0
  29. package/dist/types/src/jsonl.test.d.ts +2 -0
  30. package/dist/types/src/jsonl.test.d.ts.map +1 -0
  31. package/dist/types/src/log-buffer.d.ts +0 -20
  32. package/dist/types/src/log-buffer.d.ts.map +1 -1
  33. package/dist/types/src/log.d.ts +41 -0
  34. package/dist/types/src/log.d.ts.map +1 -1
  35. package/dist/types/src/meta.d.ts +20 -1
  36. package/dist/types/src/meta.d.ts.map +1 -1
  37. package/dist/types/src/platform/browser/index.d.ts.map +1 -1
  38. package/dist/types/src/platform/node/index.d.ts.map +1 -1
  39. package/dist/types/src/processors/browser-processor.d.ts.map +1 -1
  40. package/dist/types/src/processors/common.d.ts.map +1 -1
  41. package/dist/types/src/processors/console-processor.d.ts.map +1 -1
  42. package/dist/types/src/processors/file-processor.d.ts.map +1 -1
  43. package/dist/types/src/scope.d.ts.map +1 -1
  44. package/dist/types/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +3 -6
  46. package/src/context.ts +242 -2
  47. package/src/environment.test.ts +222 -0
  48. package/src/environment.ts +129 -0
  49. package/src/index.ts +4 -1
  50. package/src/jsonl.test.ts +121 -0
  51. package/src/jsonl.ts +104 -0
  52. package/src/log-buffer.test.ts +10 -7
  53. package/src/log-buffer.ts +21 -49
  54. package/src/log.ts +52 -10
  55. package/src/meta.ts +29 -1
  56. package/src/processors/browser-processor.ts +27 -28
  57. package/src/processors/console-processor.ts +4 -10
  58. package/src/processors/file-processor.ts +7 -8
  59. package/dist/lib/browser/chunk-M2YHSBML.mjs +0 -133
  60. package/dist/lib/browser/chunk-M2YHSBML.mjs.map +0 -7
  61. package/dist/lib/node-esm/chunk-62VKC2WQ.mjs +0 -135
  62. package/dist/lib/node-esm/chunk-62VKC2WQ.mjs.map +0 -7
@@ -1,5 +1,6 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
+ LogEntry,
3
4
  LogLevel,
4
5
  LogProcessorType,
5
6
  gatherLogInfoFromScope,
@@ -9,7 +10,7 @@ import {
9
10
  logInfo,
10
11
  shortLevelName,
11
12
  shouldLog
12
- } from "./chunk-62VKC2WQ.mjs";
13
+ } from "./chunk-5TBDXMQF.mjs";
13
14
  import {
14
15
  __export,
15
16
  __reExport
@@ -21,7 +22,9 @@ __export(index_exports, {
21
22
  BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
22
23
  DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
23
24
  FILE_PROCESSOR: () => FILE_PROCESSOR,
25
+ LOG_META_MARKER: () => LOG_META_MARKER,
24
26
  LogBuffer: () => LogBuffer,
27
+ LogEntry: () => LogEntry,
25
28
  LogLevel: () => LogLevel,
26
29
  LogProcessorType: () => LogProcessorType,
27
30
  createFileProcessor: () => createFileProcessor,
@@ -32,17 +35,123 @@ __export(index_exports, {
32
35
  getContextFromEntry: () => getContextFromEntry,
33
36
  getCurrentOwnershipScope: () => getCurrentOwnershipScope,
34
37
  getRelativeFilename: () => getRelativeFilename,
38
+ inferEnvironmentName: () => inferEnvironmentName,
39
+ isLogMeta: () => isLogMeta,
35
40
  levels: () => levels,
36
41
  log: () => log,
37
42
  logInfo: () => logInfo,
38
43
  omit: () => omit,
39
44
  parseFilter: () => parseFilter,
40
45
  pick: () => pick,
46
+ serializeToJsonl: () => serializeToJsonl,
41
47
  shortLevelName: () => shortLevelName,
42
48
  shouldLog: () => shouldLog
43
49
  });
44
50
  import { omit, pick } from "@dxos/util";
45
51
 
52
+ // src/environment.ts
53
+ var TAB_SUFFIX_STORAGE_KEY = "@dxos/log:env-suffix";
54
+ var SUFFIX_LENGTH = 6;
55
+ var randomSuffix = () => {
56
+ const cryptoRef = globalThis.crypto;
57
+ if (cryptoRef?.getRandomValues) {
58
+ const bytes = new Uint8Array(SUFFIX_LENGTH);
59
+ cryptoRef.getRandomValues(bytes);
60
+ let suffix = "";
61
+ for (const byte of bytes) {
62
+ suffix += (byte % 36).toString(36);
63
+ }
64
+ return suffix;
65
+ }
66
+ return Math.random().toString(36).slice(2, 2 + SUFFIX_LENGTH).padEnd(SUFFIX_LENGTH, "0");
67
+ };
68
+ var getOrCreateTabSuffix = (session) => {
69
+ if (!session) {
70
+ return randomSuffix();
71
+ }
72
+ try {
73
+ const existing = session.getItem(TAB_SUFFIX_STORAGE_KEY);
74
+ if (existing && existing.length > 0) {
75
+ return existing;
76
+ }
77
+ const suffix = randomSuffix();
78
+ session.setItem(TAB_SUFFIX_STORAGE_KEY, suffix);
79
+ return suffix;
80
+ } catch {
81
+ return randomSuffix();
82
+ }
83
+ };
84
+ var isInstanceOf = (scope, ctorName) => {
85
+ const ctor = scope?.[ctorName];
86
+ return typeof ctor === "function" && scope instanceof ctor;
87
+ };
88
+ var CF_WORKER_USER_AGENT = "Cloudflare-Workers";
89
+ var inferEnvironmentName = (options = {}) => {
90
+ const scope = options.scope ?? globalThis;
91
+ if (scope.navigator?.userAgent === CF_WORKER_USER_AGENT) {
92
+ return `cf-worker::${randomSuffix()}`;
93
+ }
94
+ if (isInstanceOf(scope, "SharedWorkerGlobalScope")) {
95
+ return `shared-worker:${scope.name ?? ""}:${randomSuffix()}`;
96
+ }
97
+ if (isInstanceOf(scope, "ServiceWorkerGlobalScope")) {
98
+ return `service-worker::${randomSuffix()}`;
99
+ }
100
+ if (isInstanceOf(scope, "DedicatedWorkerGlobalScope")) {
101
+ return `dedicated-worker:${scope.name ?? ""}:${randomSuffix()}`;
102
+ }
103
+ if (scope.window !== void 0 && scope.window === scope) {
104
+ const origin = scope.location?.origin ?? "";
105
+ return `tab:${origin}:${getOrCreateTabSuffix(scope.sessionStorage)}`;
106
+ }
107
+ const proc = scope.process;
108
+ if (proc && typeof proc === "object" && proc.versions?.node) {
109
+ const pid = typeof proc.pid === "number" ? String(proc.pid) : "";
110
+ return `node:${pid}:${randomSuffix()}`;
111
+ }
112
+ return `unknown::${randomSuffix()}`;
113
+ };
114
+
115
+ // src/jsonl.ts
116
+ var serializeToJsonl = (entry, opts = {}) => {
117
+ if (entry.level <= LogLevel.TRACE) {
118
+ return void 0;
119
+ }
120
+ const { filename, line, context: scopeName } = entry.computedMeta;
121
+ const record = {
122
+ t: new Date(entry.timestamp).toISOString(),
123
+ l: shortLevelName[entry.level] ?? "?",
124
+ m: entry.message ?? ""
125
+ };
126
+ if (filename !== void 0) {
127
+ record.f = filename;
128
+ }
129
+ if (line !== void 0) {
130
+ record.n = line;
131
+ }
132
+ if (scopeName !== void 0) {
133
+ record.o = scopeName;
134
+ }
135
+ if (entry.computedError !== void 0) {
136
+ record.e = entry.computedError;
137
+ }
138
+ if (opts.env !== void 0) {
139
+ record.i = opts.env;
140
+ }
141
+ const computedContext = entry.computedContext;
142
+ if (Object.keys(computedContext).length > 0) {
143
+ try {
144
+ record.c = JSON.stringify(computedContext);
145
+ } catch {
146
+ }
147
+ }
148
+ try {
149
+ return JSON.stringify(record);
150
+ } catch {
151
+ return void 0;
152
+ }
153
+ };
154
+
46
155
  // src/decorators.ts
47
156
  import chalk from "chalk";
48
157
  import { inspect } from "node:util";
@@ -171,15 +280,7 @@ __export(processors_exports, {
171
280
  });
172
281
 
173
282
  // src/processors/browser-processor.ts
174
- import { getDebugName, safariCheck } from "@dxos/util";
175
- var getRelativeFilename2 = (filename) => {
176
- const match = filename.match(/.+\/(packages\/.+\/.+)/);
177
- if (match) {
178
- const [, filePath] = match;
179
- return filePath;
180
- }
181
- return filename;
182
- };
283
+ import { safariCheck } from "@dxos/util";
183
284
  var CONFIG = {
184
285
  useTestProcessor: false,
185
286
  printFileLinks: false
@@ -190,18 +291,20 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
190
291
  }
191
292
  const LOG_BROWSER_PREFIX = config.prefix ?? "https://vscode.dev/github.com/dxos/dxos/blob/main/";
192
293
  const LOG_BROWSER_CSS = [];
294
+ const { filename, line: lineNumber, context: scopeDebugName } = entry.computedMeta;
193
295
  let link = "";
194
- if (entry.meta) {
195
- const filename = getRelativeFilename2(entry.meta.F);
296
+ if (filename !== void 0 && lineNumber !== void 0) {
196
297
  const filepath = `${LOG_BROWSER_PREFIX.replace(/\/$/, "")}/${filename}`;
197
- link = `${filepath}#L${entry.meta.L}`;
298
+ link = `${filepath}#L${lineNumber}`;
198
299
  }
199
300
  let args = [];
200
- if (entry.meta?.S) {
201
- const scope = entry.meta?.S;
202
- const scopeName = scope.name || getDebugName(scope);
203
- const processPrefix = entry.meta.S?.hostSessionId ? "[worker] " : "";
204
- args.push(`%c${processPrefix}${scopeName}`, "color:#C026D3;font-weight:bold");
301
+ const scope = entry.meta?.S;
302
+ if (scope) {
303
+ const scopeName = scope.name || scopeDebugName;
304
+ if (scopeName) {
305
+ const processPrefix = scope.hostSessionId ? "[worker] " : "";
306
+ args.push(`%c${processPrefix}${scopeName}`, "color:#C026D3;font-weight:bold");
307
+ }
205
308
  }
206
309
  if (entry.message) {
207
310
  args.push(entry.message);
@@ -209,9 +312,9 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
209
312
  const context = getContextFromEntry(entry);
210
313
  if (context) {
211
314
  if (Object.keys(context).length === 1 && "error" in context) {
212
- args.push(context.error);
315
+ args.push(unwrapEffectError(context.error));
213
316
  } else if (Object.keys(context).length === 1 && "err" in context) {
214
- args.push(context.err);
317
+ args.push(unwrapEffectError(context.err));
215
318
  } else {
216
319
  args.push(context);
217
320
  }
@@ -246,10 +349,8 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
246
349
  if (!shouldLog(entry, config.filters)) {
247
350
  return;
248
351
  }
249
- let path = "";
250
- if (entry.meta) {
251
- path = `${getRelativeFilename2(entry.meta.F)}:${entry.meta.L}`;
252
- }
352
+ const { filename, line: lineNumber } = entry.computedMeta;
353
+ const path = filename !== void 0 && lineNumber !== void 0 ? `${filename}:${lineNumber}` : "";
253
354
  let args = [];
254
355
  const processPrefix = entry.meta?.S?.hostSessionId ? "[worker] " : "";
255
356
  args.push(`${processPrefix}${entry.message}`);
@@ -276,6 +377,13 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
276
377
  }
277
378
  };
278
379
  var BROWSER_PROCESSOR = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;
380
+ var originalSymbol = /* @__PURE__ */ Symbol.for("effect/OriginalAnnotation");
381
+ var unwrapEffectError = (error) => {
382
+ if (typeof error === "object" && error !== null && originalSymbol in error) {
383
+ return error[originalSymbol];
384
+ }
385
+ return error;
386
+ };
279
387
 
280
388
  // src/processors/index.ts
281
389
  __reExport(processors_exports, console_processor_star);
@@ -290,7 +398,6 @@ var DEBUG_PROCESSOR = (config, entry) => {
290
398
  // src/processors/file-processor.ts
291
399
  import { appendFileSync, mkdirSync, openSync } from "node:fs";
292
400
  import { dirname } from "node:path";
293
- import { jsonlogify } from "@dxos/util";
294
401
  var EAGAIN_MAX_DURATION = 1e3;
295
402
  var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
296
403
  let fd;
@@ -311,15 +418,12 @@ var createFileProcessor = ({ pathOrFd, levels: levels2, filters }) => {
311
418
  fd = openSync(pathOrFd, "a");
312
419
  }
313
420
  const record = {
314
- ...entry,
315
- timestamp: Date.now(),
316
- ...entry.meta ? {
317
- meta: {
318
- file: getRelativeFilename(entry.meta.F),
319
- line: entry.meta.L
320
- }
321
- } : {},
322
- context: jsonlogify(getContextFromEntry(entry))
421
+ level: entry.level,
422
+ message: entry.message,
423
+ timestamp: entry.timestamp,
424
+ meta: entry.computedMeta,
425
+ context: entry.computedContext,
426
+ error: entry.computedError
323
427
  };
324
428
  let retryTS = 0;
325
429
  while (true) {
@@ -418,13 +522,14 @@ var createLog = () => {
418
522
  get: () => log2._config
419
523
  });
420
524
  const processLog = (level, message, context = {}, meta, error) => {
421
- log2._config.processors.forEach((processor) => processor(log2._config, {
525
+ const entry = new LogEntry({
422
526
  level,
423
527
  message,
424
528
  context,
425
529
  meta,
426
530
  error
427
- }));
531
+ });
532
+ log2._config.processors.forEach((processor) => processor(log2._config, entry));
428
533
  };
429
534
  Object.assign(log2, {
430
535
  /**
@@ -489,6 +594,12 @@ var getFormattedStackTrace = () => new Error().stack.split("\n").slice(3).join("
489
594
  // src/index.ts
490
595
  __reExport(index_exports, processors_exports);
491
596
 
597
+ // src/meta.ts
598
+ var LOG_META_MARKER = "~LogMeta";
599
+ var isLogMeta = (value) => {
600
+ return value != null && typeof value === "object" && value[LOG_META_MARKER] === LOG_META_MARKER;
601
+ };
602
+
492
603
  // src/dbg.ts
493
604
  var dbg = (arg, meta) => {
494
605
  if (meta?.A) {
@@ -500,7 +611,7 @@ var dbg = (arg, meta) => {
500
611
  };
501
612
 
502
613
  // src/log-buffer.ts
503
- import { CircularBuffer, getDebugName as getDebugName2 } from "@dxos/util";
614
+ import { CircularBuffer } from "@dxos/util";
504
615
  var DEFAULT_BUFFER_SIZE = 2e3;
505
616
  var MAX_CONTEXT_LENGTH = 500;
506
617
  var LogBuffer = class {
@@ -516,35 +627,35 @@ var LogBuffer = class {
516
627
  if (entry.level <= LogLevel.TRACE) {
517
628
  return;
518
629
  }
630
+ const { filename, line, context: scopeName } = entry.computedMeta;
519
631
  const record = {
520
- t: (/* @__PURE__ */ new Date()).toISOString(),
632
+ t: new Date(entry.timestamp).toISOString(),
521
633
  l: shortLevelName[entry.level] ?? "?",
522
634
  m: entry.message ?? ""
523
635
  };
524
- if (entry.meta) {
525
- record.f = getRelativeFilename3(entry.meta.F);
526
- record.n = entry.meta.L;
636
+ if (filename !== void 0) {
637
+ record.f = filename;
638
+ }
639
+ if (line !== void 0) {
640
+ record.n = line;
527
641
  }
528
- if (entry.error) {
529
- record.e = entry.error.stack ?? entry.error.message;
642
+ if (scopeName !== void 0) {
643
+ record.o = scopeName;
530
644
  }
531
- if (entry.context != null) {
645
+ if (entry.computedError !== void 0) {
646
+ record.e = entry.computedError;
647
+ }
648
+ const computedContext = entry.computedContext;
649
+ if (Object.keys(computedContext).length > 0) {
532
650
  try {
533
- const ctx = typeof entry.context === "function" ? entry.context() : entry.context;
534
- if (ctx != null && !(ctx instanceof Error)) {
535
- let json = JSON.stringify(ctx);
536
- if (json.length > MAX_CONTEXT_LENGTH) {
537
- json = json.slice(0, MAX_CONTEXT_LENGTH);
538
- }
539
- record.c = json;
651
+ let json = JSON.stringify(computedContext);
652
+ if (json.length > MAX_CONTEXT_LENGTH) {
653
+ json = json.slice(0, MAX_CONTEXT_LENGTH);
540
654
  }
655
+ record.c = json;
541
656
  } catch {
542
657
  }
543
658
  }
544
- const scope = entry.meta?.S;
545
- if (typeof scope === "object" && scope !== null && Object.getPrototypeOf(scope) !== Object.prototype) {
546
- record.o = getDebugName2(scope);
547
- }
548
659
  this._buffer.push(record);
549
660
  };
550
661
  /** Number of entries currently in the buffer. */
@@ -564,13 +675,6 @@ var LogBuffer = class {
564
675
  return lines.join("\n");
565
676
  }
566
677
  };
567
- var getRelativeFilename3 = (filename) => {
568
- const match = filename.match(/.+\/(packages\/.+\/.+)/);
569
- if (match) {
570
- return match[1];
571
- }
572
- return filename;
573
- };
574
678
 
575
679
  // src/experimental/ownership.ts
576
680
  import { inspect as inspect3 } from "node:util";
@@ -607,7 +711,9 @@ export {
607
711
  BROWSER_PROCESSOR,
608
712
  DEBUG_PROCESSOR,
609
713
  FILE_PROCESSOR,
714
+ LOG_META_MARKER,
610
715
  LogBuffer,
716
+ LogEntry,
611
717
  LogLevel,
612
718
  LogProcessorType,
613
719
  createFileProcessor,
@@ -618,12 +724,15 @@ export {
618
724
  getContextFromEntry,
619
725
  getCurrentOwnershipScope,
620
726
  getRelativeFilename,
727
+ inferEnvironmentName,
728
+ isLogMeta,
621
729
  levels,
622
730
  log,
623
731
  logInfo,
624
732
  omit,
625
733
  parseFilter,
626
734
  pick,
735
+ serializeToJsonl,
627
736
  shortLevelName,
628
737
  shouldLog
629
738
  };