@dxos/log 0.1.56-main.f3d4052 → 0.1.56-next.71eb10c

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.
@@ -1,3 +1,7 @@
1
+ // packages/common/log/src/index.ts
2
+ import omit from "lodash.omit";
3
+ import pick from "lodash.pick";
4
+
1
5
  // packages/common/log/src/config.ts
2
6
  var LogLevel;
3
7
  (function(LogLevel2) {
@@ -31,17 +35,15 @@ var LogProcessorType;
31
35
  // packages/common/log/src/scope.ts
32
36
  var logInfoProperties = Symbol("logInfoProperties");
33
37
  var logInfo = (target, propertyKey, descriptor) => {
34
- var _a2;
35
- ((_a2 = target[logInfoProperties]) != null ? _a2 : target[logInfoProperties] = []).push(propertyKey);
38
+ (target[logInfoProperties] ??= []).push(propertyKey);
36
39
  };
37
40
  var gatherLogInfoFromScope = (scope) => {
38
- var _a2;
39
41
  if (!scope) {
40
42
  return {};
41
43
  }
42
44
  const res = {};
43
45
  const prototype = Object.getPrototypeOf(scope);
44
- const infoProps = (_a2 = prototype[logInfoProperties]) != null ? _a2 : [];
46
+ const infoProps = prototype[logInfoProperties] ?? [];
45
47
  for (const prop of infoProps) {
46
48
  try {
47
49
  res[prop] = typeof scope[prop] === "function" ? scope[prop]() : scope[prop];
@@ -60,10 +62,7 @@ var shouldLog = (entry, filters) => {
60
62
  if (filters === void 0) {
61
63
  return true;
62
64
  } else {
63
- return filters.some((filter) => {
64
- var _a2, _b;
65
- return matchFilter(filter, entry.level, (_b = (_a2 = entry.meta) == null ? void 0 : _a2.F) != null ? _b : "");
66
- });
65
+ return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ""));
67
66
  }
68
67
  };
69
68
  var getContextFromEntry = (entry) => {
@@ -71,18 +70,18 @@ var getContextFromEntry = (entry) => {
71
70
  if (entry.meta) {
72
71
  const scopeInfo = gatherLogInfoFromScope(entry.meta.S);
73
72
  if (Object.keys(scopeInfo).length > 0) {
74
- context = Object.assign(context != null ? context : {}, scopeInfo);
73
+ context = Object.assign(context ?? {}, scopeInfo);
75
74
  }
76
75
  }
77
76
  if (entry.context) {
78
77
  if (entry.context instanceof Error) {
79
78
  const c = entry.context.context;
80
- context = Object.assign(context != null ? context : {}, {
79
+ context = Object.assign(context ?? {}, {
81
80
  error: entry.context.stack,
82
81
  ...c
83
82
  });
84
83
  } else if (typeof entry.context === "object") {
85
- context = Object.assign(context != null ? context : {}, entry.context);
84
+ context = Object.assign(context ?? {}, entry.context);
86
85
  }
87
86
  }
88
87
  return context && Object.keys(context).length > 0 ? context : void 0;
@@ -127,11 +126,10 @@ var CONFIG = typeof mochaExecutor !== "undefined" ? {
127
126
  printFileLinks: false
128
127
  };
129
128
  var APP_BROWSER_PROCESSOR = (config, entry) => {
130
- var _a2, _b, _c;
131
129
  if (!shouldLog(entry, config.filters)) {
132
130
  return;
133
131
  }
134
- const LOG_BROWSER_PREFIX = (_a2 = config.prefix) != null ? _a2 : "https://vscode.dev/github.com/dxos/dxos/blob/main/";
132
+ const LOG_BROWSER_PREFIX = config.prefix ?? "https://vscode.dev/github.com/dxos/dxos/blob/main/";
135
133
  const LOG_BROWSER_CSS = [];
136
134
  let link = "";
137
135
  if (entry.meta) {
@@ -151,7 +149,7 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
151
149
  [LogLevel.DEBUG]: console.log
152
150
  };
153
151
  if (CONFIG.printFileLinks) {
154
- if (LOG_BROWSER_CSS == null ? void 0 : LOG_BROWSER_CSS.length) {
152
+ if (LOG_BROWSER_CSS?.length) {
155
153
  args = [
156
154
  `%c${link}
157
155
  %c${args.join(" ")}`,
@@ -164,15 +162,14 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
164
162
  ];
165
163
  }
166
164
  }
167
- const level = (_b = levels2[entry.level]) != null ? _b : console.log;
168
- if (typeof ((_c = entry.meta) == null ? void 0 : _c.C) === "function") {
165
+ const level = levels2[entry.level] ?? console.log;
166
+ if (typeof entry.meta?.C === "function") {
169
167
  entry.meta.C(level, args);
170
168
  } else {
171
169
  level(...args);
172
170
  }
173
171
  };
174
172
  var TEST_BROWSER_PROCESSOR = (config, entry) => {
175
- var _a2, _b;
176
173
  if (!shouldLog(entry, config.filters)) {
177
174
  return;
178
175
  }
@@ -197,8 +194,8 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
197
194
  ...args
198
195
  ];
199
196
  }
200
- const level = (_a2 = levels2[entry.level]) != null ? _a2 : console.log;
201
- if (typeof ((_b = entry.meta) == null ? void 0 : _b.C) === "function") {
197
+ const level = levels2[entry.level] ?? console.log;
198
+ if (typeof entry.meta?.C === "function") {
202
199
  entry.meta.C(level, args);
203
200
  } else {
204
201
  level(...args);
@@ -213,14 +210,13 @@ import { jsonify } from "@dxos/util";
213
210
  var createFileProcessor = ({ path, levels: levels2 }) => {
214
211
  let fd;
215
212
  return (config, entry) => {
216
- var _a2, _b;
217
213
  if (!levels2.includes(entry.level)) {
218
214
  return;
219
215
  }
220
216
  if (!fd) {
221
217
  try {
222
218
  mkdirSync(dirname(path));
223
- } catch (e) {
219
+ } catch {
224
220
  }
225
221
  fd = openSync(path, "w");
226
222
  }
@@ -228,8 +224,8 @@ var createFileProcessor = ({ path, levels: levels2 }) => {
228
224
  ...entry,
229
225
  timestamp: Date.now(),
230
226
  meta: {
231
- file: (_a2 = entry.meta) == null ? void 0 : _a2.F,
232
- line: (_b = entry.meta) == null ? void 0 : _b.L
227
+ file: entry.meta?.F,
228
+ line: entry.meta?.L
233
229
  },
234
230
  context: jsonify(getContextFromEntry(entry))
235
231
  };
@@ -238,8 +234,7 @@ var createFileProcessor = ({ path, levels: levels2 }) => {
238
234
  };
239
235
  var logFilePath;
240
236
  var getLogFilePath = () => {
241
- var _a2;
242
- logFilePath != null ? logFilePath : logFilePath = (_a2 = process.env.LOG_FILE) != null ? _a2 : process.env.HOME ? `${process.env.HOME}/.dxlog/${new Date().toISOString()}.log` : void 0;
237
+ logFilePath ??= process.env.LOG_FILE ?? (process.env.HOME ? `${process.env.HOME}/.dxlog/${(/* @__PURE__ */ new Date()).toISOString()}.log` : void 0);
243
238
  return logFilePath;
244
239
  };
245
240
  var FILE_PROCESSOR = createFileProcessor({
@@ -270,10 +265,7 @@ var parseFilter = (filter) => {
270
265
  }
271
266
  ];
272
267
  }
273
- const parseLogLevel = (level, defValue = LogLevel.WARN) => {
274
- var _a2;
275
- return (_a2 = levels[level.toLowerCase()]) != null ? _a2 : defValue;
276
- };
268
+ const parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
277
269
  const lines = typeof filter === "string" ? filter.split(/,\s*/) : filter;
278
270
  return lines.map((filter2) => {
279
271
  const [pattern, level] = filter2.split(":");
@@ -285,22 +277,20 @@ var parseFilter = (filter) => {
285
277
  };
286
278
  });
287
279
  };
288
- var getConfig = (_options) => {
289
- var _a2, _b, _c, _d;
290
- let options = defaultsDeep({}, _options, "process" in globalThis && {
291
- // TODO(burdon): Node only.
292
- file: (_a2 = process.env) == null ? void 0 : _a2.LOG_CONFIG,
293
- filter: (_b = process.env) == null ? void 0 : _b.LOG_FILTER,
294
- processor: (_c = process.env) == null ? void 0 : _c.LOG_PROCESSOR
295
- });
296
- options = defaultsDeep({}, loadOptions(options.file), options);
280
+ var getConfig = (options) => {
281
+ const nodeOptions = "process" in globalThis ? {
282
+ file: process.env.LOG_CONFIG,
283
+ filter: process.env.LOG_FILTER,
284
+ processor: process.env.LOG_PROCESSOR
285
+ } : void 0;
286
+ const mergedOptions = defaultsDeep({}, options, nodeOptions && loadOptions(nodeOptions.file), nodeOptions);
297
287
  return {
298
- options,
299
- filters: parseFilter((_d = options.filter) != null ? _d : LogLevel.INFO),
300
- processors: options.processor ? [
301
- processors[options.processor]
288
+ options: mergedOptions,
289
+ filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),
290
+ processors: mergedOptions.processor ? [
291
+ processors[mergedOptions.processor]
302
292
  ] : DEFAULT_PROCESSORS,
303
- prefix: options.prefix
293
+ prefix: mergedOptions.prefix
304
294
  };
305
295
  };
306
296
 
@@ -340,32 +330,7 @@ var createLog = () => {
340
330
  };
341
331
  return log2;
342
332
  };
343
- var _a;
344
- var log = (_a = globalThis.dx_log) != null ? _a : globalThis.dx_log = createLog();
345
-
346
- // packages/common/log/src/invariant.ts
347
- var invariant = (condition, message, meta) => {
348
- if (condition) {
349
- return;
350
- }
351
- let errorMessage = "invariant violation";
352
- if (message) {
353
- errorMessage += `: ${message}`;
354
- }
355
- if (meta == null ? void 0 : meta.A) {
356
- errorMessage += ` [${meta.A[0]}]`;
357
- }
358
- if (meta == null ? void 0 : meta.F) {
359
- errorMessage += ` at ${meta.F}:${meta.L}`;
360
- }
361
- throw new InvariantViolation(errorMessage);
362
- };
363
- var InvariantViolation = class extends Error {
364
- constructor(message) {
365
- super(message);
366
- Object.setPrototypeOf(this, new.target.prototype);
367
- }
368
- };
333
+ var log = globalThis.dx_log ??= createLog();
369
334
 
370
335
  // packages/common/log/src/experimental/ownership.ts
371
336
  import { inspect as inspect2 } from "@dxos/node-std/util";
@@ -378,11 +343,10 @@ var OwnershipScope = class {
378
343
  this.parent = parent;
379
344
  }
380
345
  getInfo() {
381
- var _a2;
382
346
  if (!this.instance) {
383
347
  return {};
384
348
  }
385
- const props = (_a2 = this.constr.prototype[kDebugInfoProperties]) != null ? _a2 : [];
349
+ const props = this.constr.prototype[kDebugInfoProperties] ?? [];
386
350
  const info = {};
387
351
  for (const prop of props) {
388
352
  info[prop] = this.instance[prop];
@@ -403,18 +367,18 @@ export {
403
367
  CONSOLE_PROCESSOR,
404
368
  DEBUG_PROCESSOR,
405
369
  FILE_PROCESSOR,
406
- InvariantViolation,
407
370
  LogLevel,
408
371
  LogProcessorType,
409
372
  createFileProcessor,
410
373
  gatherLogInfoFromScope,
411
374
  getContextFromEntry,
412
375
  getCurrentOwnershipScope,
413
- invariant,
414
376
  levels,
415
377
  log,
416
378
  logInfo,
379
+ omit,
417
380
  parseFilter,
381
+ pick,
418
382
  shortLevelName,
419
383
  shouldLog
420
384
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/config.ts", "../../../src/scope.ts", "../../../src/context.ts", "../../../src/options.ts", "../../../src/platform/browser/index.ts", "../../../src/processors/console-stub.ts", "../../../src/processors/debug-processor.ts", "../../../src/processors/browser-processor.ts", "../../../src/processors/file-processor.ts", "../../../src/log.ts", "../../../src/invariant.ts", "../../../src/experimental/ownership.ts"],
4
- "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogProcessor } from './context';\n\n/**\n * Standard levels.\n */\n// NOTE: Keep aligned with LogLevel in @dxos/protocols.\nexport enum LogLevel {\n TRACE = 5,\n DEBUG = 10,\n INFO = 11,\n WARN = 12,\n ERROR = 13,\n}\n\nexport const levels: { [index: string]: LogLevel } = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\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.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 depth?: number; // Context object depth.\n processor?: string | LogProcessorType;\n formatter?: {\n column: number;\n };\n prefix?: string;\n};\n\n/**\n * Runtime config.\n */\nexport interface LogConfig {\n options: LogOptions;\n filters?: 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 = 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 { LogConfig, LogFilter, LogLevel } from './config';\nimport { CallMetadata } from './meta';\nimport { gatherLogInfoFromScope } from './scope';\n\n/**\n * Optional object passed to the logging API.\n */\nexport type LogContext = Record<string, any> | Error | any;\n\n/**\n * Record for current log line.\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n context?: LogContext;\n meta?: CallMetadata;\n error?: Error;\n}\n\n/**\n * Processes (e.g., prints, forwards) log entries.\n */\nexport type LogProcessor = (config: LogConfig, entry: LogEntry) => void;\n\nconst matchFilter = (filter: LogFilter, level: LogLevel, path: string) => {\n return level >= filter.level && (!filter.pattern || path.includes(filter.pattern));\n};\n\n/**\n * Determines if the current line should be logged (called by the processor).\n */\nexport const shouldLog = (entry: LogEntry, filters?: LogFilter[]): boolean => {\n if (filters === undefined) {\n return true;\n } else {\n return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ''));\n }\n};\n\nexport const getContextFromEntry = (entry: LogEntry): Record<string, any> | undefined => {\n let context;\n if (entry.meta) {\n const scopeInfo = gatherLogInfoFromScope(entry.meta.S);\n if (Object.keys(scopeInfo).length > 0) {\n context = Object.assign(context ?? {}, scopeInfo);\n }\n }\n\n if (entry.context) {\n if (entry.context instanceof Error) {\n // Additional context from Error.\n const c = (entry.context as any).context;\n // If ERROR then show stacktrace.\n context = Object.assign(context ?? {}, { error: entry.context.stack, ...c });\n } else if (typeof entry.context === 'object') {\n context = Object.assign(context ?? {}, entry.context);\n }\n }\n\n return context && Object.keys(context).length > 0 ? context : undefined;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport defaultsDeep from 'lodash.defaultsdeep';\n\nimport { LogConfig, LogFilter, LogLevel, LogOptions, LogProcessorType, levels } from './config';\nimport { LogProcessor } from './context';\nimport { loadOptions } from './platform';\nimport { CONSOLE_PROCESSOR, DEBUG_PROCESSOR, BROWSER_PROCESSOR } from './processors';\n\n/**\n * Processor variants.\n */\nexport const processors: { [index: string]: LogProcessor } = {\n [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,\n [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,\n [LogProcessorType.DEBUG]: DEBUG_PROCESSOR,\n};\n\nconst IS_BROWSER = typeof window !== 'undefined' || typeof navigator !== 'undefined';\n\nexport const DEFAULT_PROCESSORS = [IS_BROWSER ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];\n\nexport const parseFilter = (filter: string | string[] | LogLevel): LogFilter[] => {\n if (typeof filter === 'number') {\n return [{ level: filter }];\n }\n\n const parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;\n\n const lines = typeof filter === 'string' ? filter.split(/,\\s*/) : filter;\n return lines.map((filter) => {\n const [pattern, level] = filter.split(':');\n return level ? { level: parseLogLevel(level), pattern } : { level: parseLogLevel(pattern) };\n });\n};\n\nexport const getConfig = (_options?: LogOptions): LogConfig => {\n let options: LogOptions = defaultsDeep(\n {},\n _options,\n 'process' in globalThis && {\n // TODO(burdon): Node only.\n file: process!.env?.LOG_CONFIG,\n filter: process!.env?.LOG_FILTER,\n processor: process!.env?.LOG_PROCESSOR,\n },\n );\n\n // TODO(burdon): Verbose option.\n // console.log(JSON.stringify(options, undefined, 2));\n options = defaultsDeep({}, loadOptions(options.file), options);\n return {\n options,\n filters: parseFilter(options.filter ?? LogLevel.INFO),\n processors: options.processor ? [processors[options.processor]] : DEFAULT_PROCESSORS,\n prefix: options.prefix,\n };\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogOptions } from '../../config';\n\n// NOTE: Implementation for the browser. See `package.json`.\nexport const loadOptions = (filepath?: string): LogOptions | undefined => {\n try {\n return JSON.parse(localStorage.getItem('dxlog')!);\n } catch (err) {\n return undefined;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(wittjosiah): Consider mapping console processor directly to browser processor in the browser.\nexport const CONSOLE_PROCESSOR = () => {};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { LogProcessor } from '../context';\n\nexport const DEBUG_PROCESSOR: LogProcessor = (config, entry) => {\n console.log(inspect(entry, false, null, true));\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogLevel } from '../config';\nimport { getContextFromEntry, LogProcessor, shouldLog } from '../context';\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n\ntype Config = {\n useTestProcessor: boolean;\n printFileLinks: boolean;\n};\n\nconst CONFIG: Config =\n typeof mochaExecutor !== 'undefined'\n ? {\n useTestProcessor: true,\n printFileLinks: true,\n }\n : {\n useTestProcessor: false,\n printFileLinks: false,\n };\n\n/**\n * For running apps in the browser normally.\n */\nconst APP_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n // Example local editor prefix: 'vscode://file/Users/burdon/Code/dxos/dxos/'.\n const LOG_BROWSER_PREFIX = config.prefix ?? 'https://vscode.dev/github.com/dxos/dxos/blob/main/';\n\n // TODO(burdon): CSS breaks formatting (e.g., [Object] rather than expandable property).\n // TODO(burdon): Consider custom formatters.\n // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n // NOTE: Cannot change color of link (from bright white).\n // const LOG_BROWSER_CSS = ['color:gray; font-size:10px; padding-bottom: 4px', 'color:#B97852; font-size:14px;'];\n const LOG_BROWSER_CSS: string[] = [];\n\n let link = '';\n if (entry.meta) {\n const filename = getRelativeFilename(entry.meta.F);\n const filepath = `${LOG_BROWSER_PREFIX.replace(/\\/$/, '')}/${filename}`;\n // TODO(burdon): Line numbers not working for app link, even with colons.\n // https://stackoverflow.com/a/54459820/2804332\n link = `${filepath}#L${entry.meta.L}`;\n }\n\n let args = [];\n args.push(entry.message);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n if (CONFIG.printFileLinks) {\n if (LOG_BROWSER_CSS?.length) {\n args = [`%c${link}\\n%c${args.join(' ')}`, ...LOG_BROWSER_CSS];\n } else {\n args = [link + '\\n', ...args];\n }\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\n/**\n * For running unit tests in the headless browser.\n */\nconst TEST_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n let path = '';\n if (entry.meta) {\n path = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;\n }\n\n let args = [];\n args.push(entry.message);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n if (CONFIG.printFileLinks) {\n args = [path, ...args];\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\nexport const BROWSER_PROCESSOR: LogProcessor = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { appendFileSync, mkdirSync, openSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { jsonify } from '@dxos/util';\n\nimport { LogLevel } from '../config';\nimport { LogProcessor, getContextFromEntry } from '../context';\n\nexport const createFileProcessor = ({ path, levels }: { path: string; levels: LogLevel[] }): LogProcessor => {\n let fd: number | undefined;\n\n return (config, entry) => {\n if (!levels.includes(entry.level)) {\n return;\n }\n if (!fd) {\n try {\n mkdirSync(dirname(path));\n } catch {}\n fd = openSync(path, 'w');\n }\n\n const record = {\n ...entry,\n timestamp: Date.now(),\n meta: {\n file: entry.meta?.F,\n line: entry.meta?.L,\n },\n context: jsonify(getContextFromEntry(entry)),\n };\n appendFileSync(fd, JSON.stringify(record) + '\\n');\n };\n};\n\nlet logFilePath: string | undefined;\nconst getLogFilePath = () => {\n logFilePath ??=\n process.env.LOG_FILE ??\n (process.env.HOME ? `${process.env.HOME}/.dxlog/${new Date().toISOString()}.log` : undefined);\n\n return logFilePath!;\n};\n\nexport const FILE_PROCESSOR: LogProcessor = createFileProcessor({\n path: getLogFilePath(),\n levels: [LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO, LogLevel.TRACE],\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogConfig, LogLevel, LogOptions } from './config';\nimport { LogContext, LogProcessor } from './context';\nimport { CallMetadata } from './meta';\nimport { getConfig, DEFAULT_PROCESSORS } from './options';\n\n/**\n * Logging function.\n */\ntype LogFunction = (message: string, context?: LogContext, meta?: CallMetadata) => void;\n\n/**\n * Logging methods.\n */\ninterface LogMethods {\n trace: LogFunction;\n debug: LogFunction;\n info: LogFunction;\n warn: LogFunction;\n error: LogFunction;\n catch: (error: Error | any, context?: LogContext, meta?: CallMetadata) => void;\n break: () => void;\n}\n\n/**\n * Properties accessible on the logging function.\n */\ninterface Log extends LogMethods, LogFunction {\n config: (options: LogOptions) => void;\n addProcessor: (processor: LogProcessor) => void;\n runtimeConfig: LogConfig;\n}\n\ninterface LogImp extends Log {\n _config: LogConfig;\n}\n\nconst createLog = (): LogImp => {\n const log: LogImp = ((...params) => processLog(LogLevel.DEBUG, ...params)) as LogImp;\n\n log._config = getConfig();\n Object.defineProperty(log, 'runtimeConfig', { get: () => log._config });\n\n log.addProcessor = (processor: LogProcessor) => {\n if (DEFAULT_PROCESSORS.filter((p) => p === processor).length === 0) {\n DEFAULT_PROCESSORS.push(processor);\n }\n if (log._config.processors.filter((p) => p === processor).length === 0) {\n log._config.processors.push(processor);\n }\n };\n\n // Set config.\n log.config = (options: LogOptions) => {\n log._config = getConfig(options);\n };\n\n // TODO(burdon): API to set context and separate error object.\n // E.g., log.warn('failed', { key: 123 }, err);\n\n log.trace = (...params) => processLog(LogLevel.TRACE, ...params);\n log.debug = (...params) => processLog(LogLevel.DEBUG, ...params);\n log.info = (...params) => processLog(LogLevel.INFO, ...params);\n log.warn = (...params) => processLog(LogLevel.WARN, ...params);\n log.error = (...params) => processLog(LogLevel.ERROR, ...params);\n\n // Catch only shows error message, not stacktrace.\n log.catch = (error: Error | any, context, meta) => processLog(LogLevel.ERROR, error.stack, context, meta);\n\n // Show break.\n log.break = () => log.info('——————————————————————————————————————————————————');\n\n /**\n * Process the current log call.\n */\n const processLog = (\n level: LogLevel,\n message: string,\n context: LogContext = {},\n meta?: CallMetadata,\n error?: Error,\n ) => {\n log._config.processors.forEach((processor) => processor(log._config, { level, message, context, meta, error }));\n };\n\n return log;\n};\n\n/**\n * Global logging function.\n */\nexport const log: Log = ((globalThis as any).dx_log ??= createLog());\n\n/**\n * Accessible from browser console.\n */\ndeclare global {\n // eslint-disable-next-line camelcase\n const dx_log: Log;\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CallMetadata } from './meta';\n\nexport type InvariantFn = (condition: unknown, message?: string, meta?: CallMetadata) => asserts condition;\n\n/**\n * Asserts that the condition is true.\n *\n * @param message Optional message.\n */\nexport const invariant: InvariantFn = (\n condition: unknown,\n message?: string,\n meta?: CallMetadata,\n): asserts condition => {\n if (condition) {\n return;\n }\n\n let errorMessage = 'invariant violation';\n\n if (message) {\n errorMessage += `: ${message}`;\n }\n\n if (meta?.A) {\n errorMessage += ` [${meta.A[0]}]`;\n }\n\n if (meta?.F) {\n errorMessage += ` at ${meta.F}:${meta.L}`;\n }\n\n throw new InvariantViolation(errorMessage);\n};\n\nexport class InvariantViolation extends Error {\n constructor(message: string) {\n super(message);\n // NOTE: Restores prototype chain (https://stackoverflow.com/a/48342359).\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nconst kOwnershipScope = Symbol('kOwnershipScope');\nconst kCurrentOwnershipScope = Symbol('kCurrentOwnershipScope');\nconst kDebugInfoProperties = Symbol('kDebugInfoProperties');\n\n/**\n *\n */\n// TODO(burdon): Document.\nexport class OwnershipScope {\n public instance: any;\n\n constructor(public constr: any, public parent?: OwnershipScope) {}\n\n getInfo() {\n if (!this.instance) {\n return {};\n }\n const props = this.constr.prototype[kDebugInfoProperties] ?? [];\n const info: any = {};\n for (const prop of props) {\n info[prop] = this.instance[prop];\n }\n return info;\n }\n\n [inspect.custom]() {\n return {\n className: this.constr.name,\n info: this.getInfo(),\n parent: this.parent,\n };\n }\n}\n\nfunction decorateMethodWeakReturnOwnership(prototype: any, key: string) {\n const original = prototype[key];\n prototype[key] = function (...args: any) {\n const res = original.apply(this, ...args);\n\n if (res && typeof res.then === 'function') {\n res.then((value: any) => {\n if (kOwnershipScope in value) {\n value[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n });\n } else {\n if (res && kOwnershipScope in res) {\n res[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n }\n\n return res;\n };\n}\n\nexport function ownershipClass<T extends { new (...args: any[]): {} }>(constr: T) {\n for (const key of Object.getOwnPropertyNames(constr.prototype)) {\n if (key !== 'constructor' && typeof constr.prototype[key] === 'function') {\n decorateMethodWeakReturnOwnership(constr.prototype, key);\n }\n }\n\n return class extends constr {\n constructor(...args: any[]) {\n const currentCausality = (globalThis as any)[kCurrentOwnershipScope];\n (globalThis as any)[kCurrentOwnershipScope] = new OwnershipScope(constr, currentCausality);\n super(...args);\n (this as any)[kOwnershipScope] = (globalThis as any)[kCurrentOwnershipScope];\n (this as any)[kOwnershipScope].instance = this;\n (globalThis as any)[kCurrentOwnershipScope] = currentCausality;\n }\n };\n}\n\nexport const debugInfo = (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n // console.log(target, propertyKey, descriptor);\n (target[kDebugInfoProperties] ??= []).push(propertyKey);\n};\n\nexport const getCurrentOwnershipScope = (thisRef: any) => thisRef;\n"],
5
- "mappings": "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",
6
- "names": ["LogLevel", "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "levels", "trace", "debug", "info", "warn", "error", "shortLevelName", "LogProcessorType", "CONSOLE", "BROWSER", "logInfoProperties", "Symbol", "logInfo", "target", "propertyKey", "descriptor", "_a", "push", "gatherLogInfoFromScope", "scope", "res", "prototype", "Object", "getPrototypeOf", "infoProps", "prop", "err", "message", "matchFilter", "filter", "level", "path", "pattern", "includes", "shouldLog", "entry", "filters", "undefined", "some", "_a", "meta", "F", "getContextFromEntry", "context", "scopeInfo", "gatherLogInfoFromScope", "S", "Object", "keys", "length", "assign", "Error", "c", "error", "stack", "defaultsDeep", "loadOptions", "filepath", "JSON", "parse", "localStorage", "getItem", "err", "undefined", "CONSOLE_PROCESSOR", "inspect", "DEBUG_PROCESSOR", "config", "entry", "console", "log", "inspect", "getRelativeFilename", "filename", "match", "filePath", "CONFIG", "mochaExecutor", "useTestProcessor", "printFileLinks", "APP_BROWSER_PROCESSOR", "config", "entry", "_a", "shouldLog", "filters", "LOG_BROWSER_PREFIX", "prefix", "LOG_BROWSER_CSS", "link", "meta", "F", "filepath", "replace", "L", "args", "push", "message", "context", "getContextFromEntry", "levels", "LogLevel", "ERROR", "console", "error", "WARN", "warn", "DEBUG", "log", "length", "join", "level", "C", "TEST_BROWSER_PROCESSOR", "path", "BROWSER_PROCESSOR", "appendFileSync", "mkdirSync", "openSync", "dirname", "jsonify", "createFileProcessor", "path", "levels", "fd", "config", "entry", "_a", "includes", "level", "mkdirSync", "dirname", "openSync", "record", "timestamp", "Date", "now", "meta", "file", "F", "line", "L", "context", "jsonify", "getContextFromEntry", "appendFileSync", "JSON", "stringify", "logFilePath", "getLogFilePath", "process", "env", "LOG_FILE", "HOME", "toISOString", "undefined", "FILE_PROCESSOR", "LogLevel", "ERROR", "WARN", "INFO", "TRACE", "processors", "LogProcessorType", "CONSOLE", "CONSOLE_PROCESSOR", "BROWSER", "BROWSER_PROCESSOR", "DEBUG", "DEBUG_PROCESSOR", "IS_BROWSER", "window", "navigator", "DEFAULT_PROCESSORS", "parseFilter", "filter", "level", "parseLogLevel", "defValue", "LogLevel", "WARN", "_a", "levels", "toLowerCase", "lines", "split", "map", "pattern", "getConfig", "_options", "options", "defaultsDeep", "globalThis", "file", "process", "env", "LOG_CONFIG", "LOG_FILTER", "processor", "LOG_PROCESSOR", "loadOptions", "filters", "INFO", "prefix", "createLog", "log", "params", "processLog", "LogLevel", "DEBUG", "_config", "getConfig", "Object", "defineProperty", "get", "addProcessor", "processor", "DEFAULT_PROCESSORS", "filter", "p", "length", "push", "processors", "config", "options", "trace", "TRACE", "debug", "info", "INFO", "warn", "WARN", "error", "ERROR", "catch", "context", "meta", "stack", "break", "level", "message", "forEach", "globalThis", "dx_log", "invariant", "condition", "message", "meta", "errorMessage", "A", "F", "L", "InvariantViolation", "Error", "constructor", "Object", "setPrototypeOf", "prototype", "inspect", "kOwnershipScope", "Symbol", "kCurrentOwnershipScope", "kDebugInfoProperties", "OwnershipScope", "constructor", "constr", "parent", "getInfo", "_a", "instance", "props", "prototype", "info", "prop", "inspect", "custom", "className", "name", "getCurrentOwnershipScope", "thisRef"]
3
+ "sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/scope.ts", "../../../src/context.ts", "../../../src/options.ts", "../../../src/platform/browser/index.ts", "../../../src/processors/console-stub.ts", "../../../src/processors/debug-processor.ts", "../../../src/processors/browser-processor.ts", "../../../src/processors/file-processor.ts", "../../../src/log.ts", "../../../src/experimental/ownership.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\n// Message helpers.\nimport omit from 'lodash.omit';\nimport pick from 'lodash.pick';\n\nexport { omit, pick };\n\nexport * from './config';\nexport * from './context';\nexport * from './log';\nexport { parseFilter } from './options';\nexport * from './processors';\nexport * from './scope';\nexport * from './meta';\n\nexport { getCurrentOwnershipScope } from './experimental/ownership';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogProcessor } from './context';\n\n/**\n * Standard levels.\n */\n// NOTE: Keep aligned with LogLevel in @dxos/protocols.\n// TODO(burdon): Update numbers?\nexport enum LogLevel {\n TRACE = 5,\n DEBUG = 10,\n INFO = 11,\n WARN = 12,\n ERROR = 13,\n}\n\nexport const levels: { [index: string]: LogLevel } = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\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.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 depth?: number; // Context object depth.\n processor?: string | LogProcessorType;\n formatter?: {\n column: number;\n };\n prefix?: string;\n};\n\n/**\n * Runtime config.\n */\nexport interface LogConfig {\n options: LogOptions;\n filters?: 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 = 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 { LogConfig, LogFilter, LogLevel } from './config';\nimport { CallMetadata } from './meta';\nimport { gatherLogInfoFromScope } from './scope';\n\n/**\n * Optional object passed to the logging API.\n */\nexport type LogContext = Record<string, any> | Error | any;\n\n/**\n * Record for current log line.\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n context?: LogContext;\n meta?: CallMetadata;\n error?: Error;\n}\n\n/**\n * Processes (e.g., prints, forwards) log entries.\n */\nexport type LogProcessor = (config: LogConfig, entry: LogEntry) => void;\n\nconst matchFilter = (filter: LogFilter, level: LogLevel, path: string) => {\n return level >= filter.level && (!filter.pattern || path.includes(filter.pattern));\n};\n\n/**\n * Determines if the current line should be logged (called by the processor).\n */\nexport const shouldLog = (entry: LogEntry, filters?: LogFilter[]): boolean => {\n if (filters === undefined) {\n return true;\n } else {\n return filters.some((filter) => matchFilter(filter, entry.level, entry.meta?.F ?? ''));\n }\n};\n\nexport const getContextFromEntry = (entry: LogEntry): Record<string, any> | undefined => {\n let context;\n if (entry.meta) {\n const scopeInfo = gatherLogInfoFromScope(entry.meta.S);\n if (Object.keys(scopeInfo).length > 0) {\n context = Object.assign(context ?? {}, scopeInfo);\n }\n }\n\n if (entry.context) {\n if (entry.context instanceof Error) {\n // Additional context from Error.\n const c = (entry.context as any).context;\n // If ERROR then show stacktrace.\n context = Object.assign(context ?? {}, { error: entry.context.stack, ...c });\n } else if (typeof entry.context === 'object') {\n context = Object.assign(context ?? {}, entry.context);\n }\n }\n\n return context && Object.keys(context).length > 0 ? context : undefined;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport defaultsDeep from 'lodash.defaultsdeep';\n\nimport { LogConfig, LogFilter, LogLevel, LogOptions, LogProcessorType, levels } from './config';\nimport { LogProcessor } from './context';\nimport { loadOptions } from './platform';\nimport { CONSOLE_PROCESSOR, DEBUG_PROCESSOR, BROWSER_PROCESSOR } from './processors';\n\n/**\n * Processor variants.\n */\nexport const processors: { [index: string]: LogProcessor } = {\n [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,\n [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,\n [LogProcessorType.DEBUG]: DEBUG_PROCESSOR,\n};\n\nconst IS_BROWSER = typeof window !== 'undefined' || typeof navigator !== 'undefined';\n\nexport const DEFAULT_PROCESSORS = [IS_BROWSER ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];\n\nexport const parseFilter = (filter: string | string[] | LogLevel): LogFilter[] => {\n if (typeof filter === 'number') {\n return [{ level: filter }];\n }\n\n const parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;\n\n const lines = typeof filter === 'string' ? filter.split(/,\\s*/) : filter;\n return lines.map((filter) => {\n const [pattern, level] = filter.split(':');\n return level ? { level: parseLogLevel(level), pattern } : { level: parseLogLevel(pattern) };\n });\n};\n\nexport const getConfig = (options?: LogOptions): LogConfig => {\n const nodeOptions: LogOptions | undefined =\n 'process' in globalThis\n ? {\n file: process!.env.LOG_CONFIG,\n filter: process!.env.LOG_FILTER,\n processor: process!.env.LOG_PROCESSOR,\n }\n : undefined;\n\n const mergedOptions: LogOptions = defaultsDeep(\n {},\n options,\n nodeOptions && loadOptions(nodeOptions.file),\n nodeOptions,\n );\n\n return {\n options: mergedOptions,\n filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),\n processors: mergedOptions.processor ? [processors[mergedOptions.processor]] : DEFAULT_PROCESSORS,\n prefix: mergedOptions.prefix,\n };\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogOptions } from '../../config';\n\n// NOTE: Implementation for the browser. See `package.json`.\nexport const loadOptions = (filepath?: string): LogOptions | undefined => {\n try {\n return JSON.parse(localStorage.getItem('dxlog')!);\n } catch (err) {\n return undefined;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(wittjosiah): Consider mapping console processor directly to browser processor in the browser.\nexport const CONSOLE_PROCESSOR = () => {};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { LogProcessor } from '../context';\n\nexport const DEBUG_PROCESSOR: LogProcessor = (config, entry) => {\n console.log(inspect(entry, false, null, true));\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogLevel } from '../config';\nimport { getContextFromEntry, LogProcessor, shouldLog } from '../context';\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n\ntype Config = {\n useTestProcessor: boolean;\n printFileLinks: boolean;\n};\n\nconst CONFIG: Config =\n typeof mochaExecutor !== 'undefined'\n ? {\n useTestProcessor: true,\n printFileLinks: true,\n }\n : {\n useTestProcessor: false,\n printFileLinks: false,\n };\n\n/**\n * For running apps in the browser normally.\n */\nconst APP_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n // Example local editor prefix: 'vscode://file/Users/burdon/Code/dxos/dxos/'.\n const LOG_BROWSER_PREFIX = config.prefix ?? 'https://vscode.dev/github.com/dxos/dxos/blob/main/';\n\n // TODO(burdon): CSS breaks formatting (e.g., [Object] rather than expandable property).\n // TODO(burdon): Consider custom formatters.\n // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n // NOTE: Cannot change color of link (from bright white).\n // const LOG_BROWSER_CSS = ['color:gray; font-size:10px; padding-bottom: 4px', 'color:#B97852; font-size:14px;'];\n const LOG_BROWSER_CSS: string[] = [];\n\n let link = '';\n if (entry.meta) {\n const filename = getRelativeFilename(entry.meta.F);\n const filepath = `${LOG_BROWSER_PREFIX.replace(/\\/$/, '')}/${filename}`;\n // TODO(burdon): Line numbers not working for app link, even with colons.\n // https://stackoverflow.com/a/54459820/2804332\n link = `${filepath}#L${entry.meta.L}`;\n }\n\n let args = [];\n args.push(entry.message);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n if (CONFIG.printFileLinks) {\n if (LOG_BROWSER_CSS?.length) {\n args = [`%c${link}\\n%c${args.join(' ')}`, ...LOG_BROWSER_CSS];\n } else {\n args = [link + '\\n', ...args];\n }\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\n/**\n * For running unit tests in the headless browser.\n */\nconst TEST_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n let path = '';\n if (entry.meta) {\n path = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;\n }\n\n let args = [];\n args.push(entry.message);\n\n const context = getContextFromEntry(entry);\n if (context) {\n args.push(context);\n }\n\n const levels: any = {\n [LogLevel.ERROR]: console.error,\n [LogLevel.WARN]: console.warn,\n [LogLevel.DEBUG]: console.log,\n };\n\n if (CONFIG.printFileLinks) {\n args = [path, ...args];\n }\n\n const level = levels[entry.level] ?? console.log;\n if (typeof entry.meta?.C === 'function') {\n entry.meta.C(level, args);\n } else {\n level(...args);\n }\n};\n\nexport const BROWSER_PROCESSOR: LogProcessor = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { appendFileSync, mkdirSync, openSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { jsonify } from '@dxos/util';\n\nimport { LogLevel } from '../config';\nimport { LogProcessor, getContextFromEntry } from '../context';\n\nexport const createFileProcessor = ({ path, levels }: { path: string; levels: LogLevel[] }): LogProcessor => {\n let fd: number | undefined;\n\n return (config, entry) => {\n if (!levels.includes(entry.level)) {\n return;\n }\n if (!fd) {\n try {\n mkdirSync(dirname(path));\n } catch {}\n fd = openSync(path, 'w');\n }\n\n const record = {\n ...entry,\n timestamp: Date.now(),\n meta: {\n file: entry.meta?.F,\n line: entry.meta?.L,\n },\n context: jsonify(getContextFromEntry(entry)),\n };\n appendFileSync(fd, JSON.stringify(record) + '\\n');\n };\n};\n\nlet logFilePath: string | undefined;\nconst getLogFilePath = () => {\n logFilePath ??=\n process.env.LOG_FILE ??\n (process.env.HOME ? `${process.env.HOME}/.dxlog/${new Date().toISOString()}.log` : undefined);\n\n return logFilePath!;\n};\n\nexport const FILE_PROCESSOR: LogProcessor = createFileProcessor({\n path: getLogFilePath(),\n levels: [LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO, LogLevel.TRACE],\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { LogConfig, LogLevel, LogOptions } from './config';\nimport { LogContext, LogProcessor } from './context';\nimport { CallMetadata } from './meta';\nimport { getConfig, DEFAULT_PROCESSORS } from './options';\n\n/**\n * Logging function.\n */\ntype LogFunction = (message: string, context?: LogContext, meta?: CallMetadata) => void;\n\n/**\n * Logging methods.\n */\ninterface LogMethods {\n trace: LogFunction;\n debug: LogFunction;\n info: LogFunction;\n warn: LogFunction;\n error: LogFunction;\n catch: (error: Error | any, context?: LogContext, meta?: CallMetadata) => void;\n break: () => void;\n}\n\n/**\n * Properties accessible on the logging function.\n */\ninterface Log extends LogMethods, LogFunction {\n config: (options: LogOptions) => void;\n addProcessor: (processor: LogProcessor) => void;\n runtimeConfig: LogConfig;\n}\n\ninterface LogImp extends Log {\n _config: LogConfig;\n}\n\nconst createLog = (): LogImp => {\n const log: LogImp = ((...params) => processLog(LogLevel.DEBUG, ...params)) as LogImp;\n\n log._config = getConfig();\n Object.defineProperty(log, 'runtimeConfig', { get: () => log._config });\n\n log.addProcessor = (processor: LogProcessor) => {\n if (DEFAULT_PROCESSORS.filter((p) => p === processor).length === 0) {\n DEFAULT_PROCESSORS.push(processor);\n }\n if (log._config.processors.filter((p) => p === processor).length === 0) {\n log._config.processors.push(processor);\n }\n };\n\n // Set config.\n log.config = (options: LogOptions) => {\n log._config = getConfig(options);\n };\n\n // TODO(burdon): API to set context and separate error object.\n // E.g., log.warn('failed', { key: 123 }, err);\n\n log.trace = (...params) => processLog(LogLevel.TRACE, ...params);\n log.debug = (...params) => processLog(LogLevel.DEBUG, ...params);\n log.info = (...params) => processLog(LogLevel.INFO, ...params);\n log.warn = (...params) => processLog(LogLevel.WARN, ...params);\n log.error = (...params) => processLog(LogLevel.ERROR, ...params);\n\n // Catch only shows error message, not stacktrace.\n log.catch = (error: Error | any, context, meta) => processLog(LogLevel.ERROR, error.stack, context, meta);\n\n // Show break.\n log.break = () => log.info('——————————————————————————————————————————————————');\n\n /**\n * Process the current log call.\n */\n const processLog = (\n level: LogLevel,\n message: string,\n context: LogContext = {},\n meta?: CallMetadata,\n error?: Error,\n ) => {\n log._config.processors.forEach((processor) => processor(log._config, { level, message, context, meta, error }));\n };\n\n return log;\n};\n\n/**\n * Global logging function.\n */\nexport const log: Log = ((globalThis as any).dx_log ??= createLog());\n\n/**\n * Accessible from browser console.\n */\ndeclare global {\n // eslint-disable-next-line camelcase\n const dx_log: Log;\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nconst kOwnershipScope = Symbol('kOwnershipScope');\nconst kCurrentOwnershipScope = Symbol('kCurrentOwnershipScope');\nconst kDebugInfoProperties = Symbol('kDebugInfoProperties');\n\n/**\n *\n */\n// TODO(burdon): Document.\nexport class OwnershipScope {\n public instance: any;\n\n constructor(public constr: any, public parent?: OwnershipScope) {}\n\n getInfo() {\n if (!this.instance) {\n return {};\n }\n const props = this.constr.prototype[kDebugInfoProperties] ?? [];\n const info: any = {};\n for (const prop of props) {\n info[prop] = this.instance[prop];\n }\n return info;\n }\n\n [inspect.custom]() {\n return {\n className: this.constr.name,\n info: this.getInfo(),\n parent: this.parent,\n };\n }\n}\n\nfunction decorateMethodWeakReturnOwnership(prototype: any, key: string) {\n const original = prototype[key];\n prototype[key] = function (...args: any) {\n const res = original.apply(this, ...args);\n\n if (res && typeof res.then === 'function') {\n res.then((value: any) => {\n if (kOwnershipScope in value) {\n value[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n });\n } else {\n if (res && kOwnershipScope in res) {\n res[kOwnershipScope].parent ??= this[kOwnershipScope];\n }\n }\n\n return res;\n };\n}\n\nexport function ownershipClass<T extends { new (...args: any[]): {} }>(constr: T) {\n for (const key of Object.getOwnPropertyNames(constr.prototype)) {\n if (key !== 'constructor' && typeof constr.prototype[key] === 'function') {\n decorateMethodWeakReturnOwnership(constr.prototype, key);\n }\n }\n\n return class extends constr {\n constructor(...args: any[]) {\n const currentCausality = (globalThis as any)[kCurrentOwnershipScope];\n (globalThis as any)[kCurrentOwnershipScope] = new OwnershipScope(constr, currentCausality);\n super(...args);\n (this as any)[kOwnershipScope] = (globalThis as any)[kCurrentOwnershipScope];\n (this as any)[kOwnershipScope].instance = this;\n (globalThis as any)[kCurrentOwnershipScope] = currentCausality;\n }\n };\n}\n\nexport const debugInfo = (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n // console.log(target, propertyKey, descriptor);\n (target[kDebugInfoProperties] ??= []).push(propertyKey);\n};\n\nexport const getCurrentOwnershipScope = (thisRef: any) => thisRef;\n"],
5
+ "mappings": "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",
6
+ "names": ["omit", "pick", "LogLevel", "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "levels", "trace", "debug", "info", "warn", "error", "shortLevelName", "LogProcessorType", "CONSOLE", "BROWSER", "logInfoProperties", "Symbol", "logInfo", "target", "propertyKey", "descriptor", "push", "gatherLogInfoFromScope", "scope", "res", "prototype", "Object", "getPrototypeOf", "infoProps", "prop", "err", "message", "matchFilter", "filter", "level", "path", "pattern", "includes", "shouldLog", "entry", "filters", "undefined", "some", "meta", "F", "getContextFromEntry", "context", "scopeInfo", "gatherLogInfoFromScope", "S", "Object", "keys", "length", "assign", "Error", "c", "error", "stack", "defaultsDeep", "loadOptions", "filepath", "JSON", "parse", "localStorage", "getItem", "err", "undefined", "CONSOLE_PROCESSOR", "inspect", "DEBUG_PROCESSOR", "config", "entry", "console", "log", "inspect", "getRelativeFilename", "filename", "match", "filePath", "CONFIG", "mochaExecutor", "useTestProcessor", "printFileLinks", "APP_BROWSER_PROCESSOR", "config", "entry", "shouldLog", "filters", "LOG_BROWSER_PREFIX", "prefix", "LOG_BROWSER_CSS", "link", "meta", "F", "filepath", "replace", "L", "args", "push", "message", "context", "getContextFromEntry", "levels", "LogLevel", "ERROR", "console", "error", "WARN", "warn", "DEBUG", "log", "length", "join", "level", "C", "TEST_BROWSER_PROCESSOR", "path", "BROWSER_PROCESSOR", "appendFileSync", "mkdirSync", "openSync", "dirname", "jsonify", "createFileProcessor", "path", "levels", "fd", "config", "entry", "includes", "level", "mkdirSync", "dirname", "openSync", "record", "timestamp", "Date", "now", "meta", "file", "F", "line", "L", "context", "jsonify", "getContextFromEntry", "appendFileSync", "JSON", "stringify", "logFilePath", "getLogFilePath", "process", "env", "LOG_FILE", "HOME", "toISOString", "undefined", "FILE_PROCESSOR", "LogLevel", "ERROR", "WARN", "INFO", "TRACE", "processors", "LogProcessorType", "CONSOLE", "CONSOLE_PROCESSOR", "BROWSER", "BROWSER_PROCESSOR", "DEBUG", "DEBUG_PROCESSOR", "IS_BROWSER", "window", "navigator", "DEFAULT_PROCESSORS", "parseFilter", "filter", "level", "parseLogLevel", "defValue", "LogLevel", "WARN", "levels", "toLowerCase", "lines", "split", "map", "pattern", "getConfig", "options", "nodeOptions", "globalThis", "file", "process", "env", "LOG_CONFIG", "LOG_FILTER", "processor", "LOG_PROCESSOR", "undefined", "mergedOptions", "defaultsDeep", "loadOptions", "filters", "INFO", "prefix", "createLog", "log", "params", "processLog", "LogLevel", "DEBUG", "_config", "getConfig", "Object", "defineProperty", "get", "addProcessor", "processor", "DEFAULT_PROCESSORS", "filter", "p", "length", "push", "processors", "config", "options", "trace", "TRACE", "debug", "info", "INFO", "warn", "WARN", "error", "ERROR", "catch", "context", "meta", "stack", "break", "level", "message", "forEach", "globalThis", "dx_log", "inspect", "kOwnershipScope", "Symbol", "kCurrentOwnershipScope", "kDebugInfoProperties", "OwnershipScope", "constructor", "constr", "parent", "getInfo", "instance", "props", "prototype", "info", "prop", "inspect", "custom", "className", "name", "getCurrentOwnershipScope", "thisRef"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/log/src/config.ts":{"bytes":3974,"imports":[]},"packages/common/log/src/scope.ts":{"bytes":3852,"imports":[]},"packages/common/log/src/context.ts":{"bytes":5914,"imports":[{"path":"packages/common/log/src/scope.ts","kind":"import-statement","original":"./scope"}]},"packages/common/log/src/platform/browser/index.ts":{"bytes":1317,"imports":[]},"packages/common/log/src/platform/index.ts":{"bytes":460,"imports":[{"path":"packages/common/log/src/platform/browser/index.ts","kind":"import-statement","original":"./node"}]},"packages/common/log/src/processors/console-stub.ts":{"bytes":828,"imports":[]},"packages/common/log/src/processors/debug-processor.ts":{"bytes":1066,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}]},"packages/common/log/src/processors/browser-processor.ts":{"bytes":12682,"imports":[{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"../context"}]},"packages/common/log/src/processors/file-processor.ts":{"bytes":5318,"imports":[{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"../context"}]},"packages/common/log/src/processors/index.ts":{"bytes":817,"imports":[{"path":"packages/common/log/src/processors/console-stub.ts","kind":"import-statement","original":"./console-processor"},{"path":"packages/common/log/src/processors/debug-processor.ts","kind":"import-statement","original":"./debug-processor"},{"path":"packages/common/log/src/processors/browser-processor.ts","kind":"import-statement","original":"./browser-processor"},{"path":"packages/common/log/src/processors/file-processor.ts","kind":"import-statement","original":"./file-processor"}]},"packages/common/log/src/options.ts":{"bytes":7349,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/platform/index.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/log/src/processors/index.ts","kind":"import-statement","original":"./processors"}]},"packages/common/log/src/log.ts":{"bytes":8730,"imports":[{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/options.ts","kind":"import-statement","original":"./options"}]},"packages/common/log/src/invariant.ts":{"bytes":3304,"imports":[]},"packages/common/log/src/meta.ts":{"bytes":1625,"imports":[]},"packages/common/log/src/experimental/ownership.ts":{"bytes":9246,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}]},"packages/common/log/src/index.ts":{"bytes":1353,"imports":[{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/log/src/log.ts","kind":"import-statement","original":"./log"},{"path":"packages/common/log/src/options.ts","kind":"import-statement","original":"./options"},{"path":"packages/common/log/src/processors/index.ts","kind":"import-statement","original":"./processors"},{"path":"packages/common/log/src/scope.ts","kind":"import-statement","original":"./scope"},{"path":"packages/common/log/src/invariant.ts","kind":"import-statement","original":"./invariant"},{"path":"packages/common/log/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/common/log/src/experimental/ownership.ts","kind":"import-statement","original":"./experimental/ownership"}]}},"outputs":{"packages/common/log/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":31453},"packages/common/log/dist/lib/browser/index.mjs":{"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"exports":["BROWSER_PROCESSOR","CONSOLE_PROCESSOR","DEBUG_PROCESSOR","FILE_PROCESSOR","InvariantViolation","LogLevel","LogProcessorType","createFileProcessor","gatherLogInfoFromScope","getContextFromEntry","getCurrentOwnershipScope","invariant","levels","log","logInfo","parseFilter","shortLevelName","shouldLog"],"entryPoint":"packages/common/log/src/index.ts","inputs":{"packages/common/log/src/config.ts":{"bytesInOutput":821},"packages/common/log/src/index.ts":{"bytesInOutput":0},"packages/common/log/src/scope.ts":{"bytesInOutput":662},"packages/common/log/src/context.ts":{"bytesInOutput":1122},"packages/common/log/src/options.ts":{"bytesInOutput":1624},"packages/common/log/src/platform/browser/index.ts":{"bytesInOutput":140},"packages/common/log/src/platform/index.ts":{"bytesInOutput":0},"packages/common/log/src/processors/console-stub.ts":{"bytesInOutput":35},"packages/common/log/src/processors/index.ts":{"bytesInOutput":0},"packages/common/log/src/processors/debug-processor.ts":{"bytesInOutput":143},"packages/common/log/src/processors/browser-processor.ts":{"bytesInOutput":2507},"packages/common/log/src/processors/file-processor.ts":{"bytesInOutput":1223},"packages/common/log/src/log.ts":{"bytesInOutput":1690},"packages/common/log/src/invariant.ts":{"bytesInOutput":561},"packages/common/log/src/experimental/ownership.ts":{"bytesInOutput":826}},"bytes":12325}}}
1
+ {"inputs":{"packages/common/log/src/config.ts":{"bytes":4022,"imports":[],"format":"esm"},"packages/common/log/src/scope.ts":{"bytes":3852,"imports":[],"format":"esm"},"packages/common/log/src/context.ts":{"bytes":5914,"imports":[{"path":"packages/common/log/src/scope.ts","kind":"import-statement","original":"./scope"}],"format":"esm"},"packages/common/log/src/platform/browser/index.ts":{"bytes":1317,"imports":[],"format":"esm"},"packages/common/log/src/platform/index.ts":{"bytes":460,"imports":[{"path":"packages/common/log/src/platform/browser/index.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"packages/common/log/src/processors/console-stub.ts":{"bytes":828,"imports":[],"format":"esm"},"packages/common/log/src/processors/debug-processor.ts":{"bytes":1066,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/log/src/processors/browser-processor.ts":{"bytes":12682,"imports":[{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"packages/common/log/src/processors/file-processor.ts":{"bytes":5318,"imports":[{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"../context"}],"format":"esm"},"packages/common/log/src/processors/index.ts":{"bytes":817,"imports":[{"path":"packages/common/log/src/processors/console-stub.ts","kind":"import-statement","original":"./console-processor"},{"path":"packages/common/log/src/processors/debug-processor.ts","kind":"import-statement","original":"./debug-processor"},{"path":"packages/common/log/src/processors/browser-processor.ts","kind":"import-statement","original":"./browser-processor"},{"path":"packages/common/log/src/processors/file-processor.ts","kind":"import-statement","original":"./file-processor"}],"format":"esm"},"packages/common/log/src/options.ts":{"bytes":7313,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/platform/index.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/log/src/processors/index.ts","kind":"import-statement","original":"./processors"}],"format":"esm"},"packages/common/log/src/log.ts":{"bytes":8730,"imports":[{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/options.ts","kind":"import-statement","original":"./options"}],"format":"esm"},"packages/common/log/src/meta.ts":{"bytes":1625,"imports":[],"format":"esm"},"packages/common/log/src/experimental/ownership.ts":{"bytes":9246,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/log/src/index.ts":{"bytes":1663,"imports":[{"path":"lodash.omit","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"packages/common/log/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/common/log/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/log/src/log.ts","kind":"import-statement","original":"./log"},{"path":"packages/common/log/src/options.ts","kind":"import-statement","original":"./options"},{"path":"packages/common/log/src/processors/index.ts","kind":"import-statement","original":"./processors"},{"path":"packages/common/log/src/scope.ts","kind":"import-statement","original":"./scope"},{"path":"packages/common/log/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/common/log/src/experimental/ownership.ts","kind":"import-statement","original":"./experimental/ownership"}],"format":"esm"}},"outputs":{"packages/common/log/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29986},"packages/common/log/dist/lib/browser/index.mjs":{"imports":[{"path":"lodash.omit","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true}],"exports":["BROWSER_PROCESSOR","CONSOLE_PROCESSOR","DEBUG_PROCESSOR","FILE_PROCESSOR","LogLevel","LogProcessorType","createFileProcessor","gatherLogInfoFromScope","getContextFromEntry","getCurrentOwnershipScope","levels","log","logInfo","omit","parseFilter","pick","shortLevelName","shouldLog"],"entryPoint":"packages/common/log/src/index.ts","inputs":{"packages/common/log/src/index.ts":{"bytesInOutput":64},"packages/common/log/src/config.ts":{"bytesInOutput":821},"packages/common/log/src/scope.ts":{"bytesInOutput":571},"packages/common/log/src/context.ts":{"bytesInOutput":981},"packages/common/log/src/options.ts":{"bytesInOutput":1477},"packages/common/log/src/platform/browser/index.ts":{"bytesInOutput":140},"packages/common/log/src/platform/index.ts":{"bytesInOutput":0},"packages/common/log/src/processors/console-stub.ts":{"bytesInOutput":35},"packages/common/log/src/processors/index.ts":{"bytesInOutput":0},"packages/common/log/src/processors/debug-processor.ts":{"bytesInOutput":143},"packages/common/log/src/processors/browser-processor.ts":{"bytesInOutput":2318},"packages/common/log/src/processors/file-processor.ts":{"bytesInOutput":1098},"packages/common/log/src/log.ts":{"bytesInOutput":1644},"packages/common/log/src/experimental/ownership.ts":{"bytesInOutput":792}},"bytes":11032}}}