@dxos/log 0.8.3 → 0.8.4-main.1068cf700f

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 (74) hide show
  1. package/dist/lib/browser/chunk-GPOFUMLO.mjs +133 -0
  2. package/dist/lib/browser/chunk-GPOFUMLO.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-IEP6GGEX.mjs +23 -0
  4. package/dist/lib/browser/chunk-IEP6GGEX.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +159 -188
  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-QPYJZ4SO.mjs +135 -0
  19. package/dist/lib/node-esm/chunk-QPYJZ4SO.mjs.map +7 -0
  20. package/dist/lib/node-esm/index.mjs +156 -270
  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 +2 -3
  32. package/dist/types/src/config.d.ts.map +1 -1
  33. package/dist/types/src/context.d.ts +1 -1
  34. package/dist/types/src/context.d.ts.map +1 -1
  35. package/dist/types/src/dbg.d.ts +23 -0
  36. package/dist/types/src/dbg.d.ts.map +1 -0
  37. package/dist/types/src/decorators.d.ts +1 -1
  38. package/dist/types/src/decorators.d.ts.map +1 -1
  39. package/dist/types/src/index.d.ts +2 -1
  40. package/dist/types/src/index.d.ts.map +1 -1
  41. package/dist/types/src/log.d.ts +12 -18
  42. package/dist/types/src/log.d.ts.map +1 -1
  43. package/dist/types/src/options.d.ts +1 -6
  44. package/dist/types/src/options.d.ts.map +1 -1
  45. package/dist/types/src/platform/index.d.ts +1 -1
  46. package/dist/types/src/platform/index.d.ts.map +1 -1
  47. package/dist/types/src/platform/node/index.d.ts.map +1 -1
  48. package/dist/types/src/processors/browser-processor.d.ts.map +1 -1
  49. package/dist/types/src/processors/console-processor.d.ts +1 -1
  50. package/dist/types/src/processors/console-processor.d.ts.map +1 -1
  51. package/dist/types/src/processors/file-processor.d.ts.map +1 -1
  52. package/dist/types/src/processors/index.d.ts +3 -3
  53. package/dist/types/src/processors/index.d.ts.map +1 -1
  54. package/dist/types/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +31 -11
  56. package/src/config.ts +3 -2
  57. package/src/context.ts +38 -8
  58. package/src/dbg.ts +35 -0
  59. package/src/decorators.ts +5 -4
  60. package/src/experimental/classes.test.ts +2 -1
  61. package/src/index.ts +2 -1
  62. package/src/log.test.ts +59 -23
  63. package/src/log.ts +102 -59
  64. package/src/options.ts +27 -11
  65. package/src/platform/index.ts +1 -1
  66. package/src/platform/node/index.ts +2 -1
  67. package/src/processors/browser-processor.ts +6 -2
  68. package/src/processors/console-processor.ts +11 -7
  69. package/src/processors/file-processor.ts +4 -1
  70. package/src/processors/index.ts +3 -3
  71. package/src/scope.ts +1 -1
  72. package/dist/lib/node/index.cjs +0 -695
  73. package/dist/lib/node/index.cjs.map +0 -7
  74. package/dist/lib/node/meta.json +0 -1
package/src/options.ts CHANGED
@@ -7,37 +7,53 @@ import defaultsDeep from 'lodash.defaultsdeep';
7
7
  import { type LogConfig, type LogFilter, LogLevel, type LogOptions, LogProcessorType, levels } from './config';
8
8
  import { type LogProcessor } from './context';
9
9
  import { loadOptions } from './platform';
10
- import { CONSOLE_PROCESSOR, DEBUG_PROCESSOR, BROWSER_PROCESSOR } from './processors';
10
+ import { BROWSER_PROCESSOR, CONSOLE_PROCESSOR, DEBUG_PROCESSOR } from './processors';
11
11
 
12
12
  /**
13
13
  * Processor variants.
14
14
  */
15
- export const processors: { [index: string]: LogProcessor } = {
15
+ export const processors: Record<string, LogProcessor> = {
16
16
  [LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,
17
17
  [LogProcessorType.BROWSER]: BROWSER_PROCESSOR,
18
18
  [LogProcessorType.DEBUG]: DEBUG_PROCESSOR,
19
19
  };
20
20
 
21
- const IS_BROWSER = typeof window !== 'undefined' || typeof navigator !== 'undefined';
21
+ const browser =
22
+ (typeof window !== 'undefined' || typeof navigator !== 'undefined') &&
23
+ !(typeof process !== 'undefined' && process?.env?.VITEST);
22
24
 
23
- export const DEFAULT_PROCESSORS = [IS_BROWSER ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];
25
+ export const DEFAULT_PROCESSORS = [browser ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR];
24
26
 
27
+ const parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
28
+
29
+ /**
30
+ * @internal
31
+ */
25
32
  export const parseFilter = (filter: string | string[] | LogLevel): LogFilter[] => {
26
33
  if (typeof filter === 'number') {
27
34
  return [{ level: filter }];
28
35
  }
29
36
 
30
- const parseLogLevel = (level: string, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
31
-
32
37
  const lines = typeof filter === 'string' ? filter.split(/,\s*/) : filter;
33
38
  return lines.map((filter) => {
34
39
  const [pattern, level] = filter.split(':');
35
- return level ? { level: parseLogLevel(level), pattern } : { level: parseLogLevel(pattern) };
40
+ return level
41
+ ? {
42
+ level: parseLogLevel(level),
43
+ pattern,
44
+ }
45
+ : {
46
+ level: parseLogLevel(pattern),
47
+ };
36
48
  });
37
49
  };
38
50
 
39
- export const getConfig = (options?: LogOptions): LogConfig => {
40
- const nodeOptions: LogOptions | undefined =
51
+ /**
52
+ * @internal
53
+ */
54
+ export const createConfig = (options?: LogOptions): LogConfig => {
55
+ // Node only.
56
+ const envOptions: LogOptions | undefined =
41
57
  'process' in globalThis
42
58
  ? {
43
59
  file: process!.env.LOG_CONFIG,
@@ -46,12 +62,12 @@ export const getConfig = (options?: LogOptions): LogConfig => {
46
62
  }
47
63
  : undefined;
48
64
 
49
- const mergedOptions: LogOptions = defaultsDeep({}, loadOptions(nodeOptions?.file), nodeOptions, options);
65
+ const mergedOptions: LogOptions = defaultsDeep({}, loadOptions(envOptions?.file), envOptions, options);
50
66
  return {
51
67
  options: mergedOptions,
52
68
  filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),
53
69
  captureFilters: parseFilter(mergedOptions.captureFilter ?? LogLevel.WARN),
54
- processors: mergedOptions.processor ? [processors[mergedOptions.processor]] : DEFAULT_PROCESSORS,
70
+ processors: mergedOptions.processor ? [processors[mergedOptions.processor]] : [...DEFAULT_PROCESSORS],
55
71
  prefix: mergedOptions.prefix,
56
72
  };
57
73
  };
@@ -2,4 +2,4 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- export * from './node';
5
+ export * from '#platform';
@@ -2,9 +2,10 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import yaml from 'js-yaml';
6
5
  import fs from 'node:fs';
7
6
 
7
+ import yaml from 'js-yaml';
8
+
8
9
  import { type LogOptions } from '../../config';
9
10
 
10
11
  /**
@@ -5,7 +5,7 @@
5
5
  import { getDebugName, safariCheck } from '@dxos/util';
6
6
 
7
7
  import { LogLevel } from '../config';
8
- import { getContextFromEntry, type LogProcessor, shouldLog } from '../context';
8
+ import { type LogProcessor, getContextFromEntry, shouldLog } from '../context';
9
9
 
10
10
  const getRelativeFilename = (filename: string) => {
11
11
  // TODO(burdon): Hack uses "packages" as an anchor (pre-parse NX?)
@@ -66,12 +66,16 @@ const APP_BROWSER_PROCESSOR: LogProcessor = (config, entry) => {
66
66
  args.push(`%c${processPrefix}${scopeName}`, 'color:#C026D3;font-weight:bold');
67
67
  }
68
68
 
69
- args.push(entry.message);
69
+ if (entry.message) {
70
+ args.push(entry.message);
71
+ }
70
72
 
71
73
  const context = getContextFromEntry(entry);
72
74
  if (context) {
73
75
  if (Object.keys(context).length === 1 && 'error' in context) {
74
76
  args.push(context.error);
77
+ } else if (Object.keys(context).length === 1 && 'err' in context) {
78
+ args.push(context.err);
75
79
  } else {
76
80
  args.push(context);
77
81
  }
@@ -2,14 +2,16 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import chalk from 'chalk';
6
5
  import { inspect } from 'node:util';
7
6
 
7
+ import chalk from 'chalk';
8
+
8
9
  import { getPrototypeSpecificInstanceId, pickBy } from '@dxos/util';
9
10
 
10
- import { getRelativeFilename } from './common';
11
11
  import { type LogConfig, LogLevel, shortLevelName } from '../config';
12
- import { getContextFromEntry, type LogProcessor, shouldLog } from '../context';
12
+ import { type LogProcessor, getContextFromEntry, shouldLog } from '../context';
13
+
14
+ import { getRelativeFilename } from './common';
13
15
 
14
16
  const LEVEL_COLORS: Record<LogLevel, typeof chalk.ForegroundColor> = {
15
17
  [LogLevel.TRACE]: 'gray',
@@ -21,7 +23,7 @@ const LEVEL_COLORS: Record<LogLevel, typeof chalk.ForegroundColor> = {
21
23
  };
22
24
 
23
25
  export const truncate = (text?: string, length = 0, right = false) => {
24
- const str = text && length ? (right ? text.slice(-length) : text.substring(0, length)) : text ?? '';
26
+ const str = text && length ? (right ? text.slice(-length) : text.substring(0, length)) : (text ?? '');
25
27
  return right ? str.padStart(length, ' ') : str.padEnd(length, ' ');
26
28
  };
27
29
 
@@ -32,7 +34,7 @@ export type FormatParts = {
32
34
  line?: number;
33
35
  timestamp?: string;
34
36
  level: LogLevel;
35
- message: string;
37
+ message?: string;
36
38
  context?: any;
37
39
  error?: Error;
38
40
  scope?: any;
@@ -50,8 +52,10 @@ export const DEFAULT_FORMATTER: Formatter = (
50
52
  let instance;
51
53
  if (scope) {
52
54
  const prototype = Object.getPrototypeOf(scope);
53
- const id = getPrototypeSpecificInstanceId(scope);
54
- instance = chalk.magentaBright(`${prototype.constructor.name}#${id}`);
55
+ if (prototype !== null) {
56
+ const id = getPrototypeSpecificInstanceId(scope);
57
+ instance = chalk.magentaBright(`${prototype.constructor.name}#${id}`);
58
+ }
55
59
  }
56
60
 
57
61
  const formattedTimestamp = config.options?.formatter?.timestamp ? new Date().toISOString() : undefined;
@@ -7,12 +7,14 @@ import { dirname } from 'node:path';
7
7
 
8
8
  import { jsonlogify } from '@dxos/util';
9
9
 
10
- import { getRelativeFilename } from './common';
11
10
  import { type LogFilter, LogLevel } from '../config';
12
11
  import { type LogProcessor, getContextFromEntry, shouldLog } from '../context';
13
12
 
13
+ import { getRelativeFilename } from './common';
14
+
14
15
  // Amount of time to retry writing after encountering EAGAIN before giving up.
15
16
  const EAGAIN_MAX_DURATION = 1000;
17
+
16
18
  /**
17
19
  * Create a file processor.
18
20
  * @param path - Path to log file to create or append to, or existing open file descriptor e.g. stdout.
@@ -37,6 +39,7 @@ export const createFileProcessor = ({
37
39
  if (!shouldLog(entry, filters)) {
38
40
  return;
39
41
  }
42
+
40
43
  if (typeof pathOrFd === 'number') {
41
44
  fd = pathOrFd;
42
45
  } else {
@@ -2,8 +2,8 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- export * from './console-processor';
6
- export * from './debug-processor';
7
5
  export * from './browser-processor';
8
- export * from './file-processor';
9
6
  export * from './common';
7
+ export * from '#console-processor';
8
+ export * from './debug-processor';
9
+ export * from './file-processor';
package/src/scope.ts CHANGED
@@ -33,7 +33,7 @@ export const gatherLogInfoFromScope = (scope: any): Record<string, any> => {
33
33
  const res: Record<string, any> = {};
34
34
 
35
35
  const prototype = Object.getPrototypeOf(scope);
36
- const infoProps = prototype[logInfoProperties] ?? [];
36
+ const infoProps = (typeof prototype === 'object' && prototype !== null ? prototype[logInfoProperties] : []) ?? [];
37
37
  for (const prop of infoProps) {
38
38
  try {
39
39
  res[prop] = typeof scope[prop] === 'function' ? scope[prop]() : scope[prop];