@dxos/log 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8
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.
- package/LICENSE +102 -5
- package/dist/lib/browser/chunk-IEP6GGEX.mjs +23 -0
- package/dist/lib/browser/chunk-IEP6GGEX.mjs.map +7 -0
- package/dist/lib/browser/chunk-V7FYKT4H.mjs +311 -0
- package/dist/lib/browser/chunk-V7FYKT4H.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +278 -244
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/platform/browser/index.mjs +26 -0
- package/dist/lib/browser/platform/browser/index.mjs.map +7 -0
- package/dist/lib/browser/platform/node/index.mjs +21 -0
- package/dist/lib/browser/platform/node/index.mjs.map +7 -0
- package/dist/lib/browser/processors/console-processor.mjs +102 -0
- package/dist/lib/browser/processors/console-processor.mjs.map +7 -0
- package/dist/lib/browser/processors/console-stub.mjs +9 -0
- package/dist/lib/browser/processors/console-stub.mjs.map +7 -0
- package/dist/lib/browser/processors/file-processor.mjs +75 -0
- package/dist/lib/browser/processors/file-processor.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +24 -0
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-5TBDXMQF.mjs +313 -0
- package/dist/lib/node-esm/chunk-5TBDXMQF.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +280 -333
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/platform/browser/index.mjs +27 -0
- package/dist/lib/node-esm/platform/browser/index.mjs.map +7 -0
- package/dist/lib/node-esm/platform/node/index.mjs +22 -0
- package/dist/lib/node-esm/platform/node/index.mjs.map +7 -0
- package/dist/lib/node-esm/processors/console-processor.mjs +103 -0
- package/dist/lib/node-esm/processors/console-processor.mjs.map +7 -0
- package/dist/lib/node-esm/processors/console-stub.mjs +10 -0
- package/dist/lib/node-esm/processors/console-stub.mjs.map +7 -0
- package/dist/lib/node-esm/processors/file-processor.mjs +76 -0
- package/dist/lib/node-esm/processors/file-processor.mjs.map +7 -0
- package/dist/types/src/context.d.ts +78 -2
- package/dist/types/src/context.d.ts.map +1 -1
- package/dist/types/src/dbg.d.ts +23 -0
- package/dist/types/src/dbg.d.ts.map +1 -0
- package/dist/types/src/decorators.d.ts.map +1 -1
- package/dist/types/src/environment.d.ts +24 -0
- package/dist/types/src/environment.d.ts.map +1 -0
- package/dist/types/src/environment.test.d.ts +2 -0
- package/dist/types/src/environment.test.d.ts.map +1 -0
- package/dist/types/src/experimental/ownership.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +7 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/jsonl.d.ts +53 -0
- package/dist/types/src/jsonl.d.ts.map +1 -0
- package/dist/types/src/jsonl.test.d.ts +2 -0
- package/dist/types/src/jsonl.test.d.ts.map +1 -0
- package/dist/types/src/log-buffer.d.ts +20 -0
- package/dist/types/src/log-buffer.d.ts.map +1 -0
- package/dist/types/src/log-buffer.test.d.ts +2 -0
- package/dist/types/src/log-buffer.test.d.ts.map +1 -0
- package/dist/types/src/log.d.ts +44 -1
- package/dist/types/src/log.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +20 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/options.d.ts.map +1 -1
- package/dist/types/src/platform/browser/index.d.ts.map +1 -1
- package/dist/types/src/platform/index.d.ts +1 -1
- package/dist/types/src/platform/index.d.ts.map +1 -1
- package/dist/types/src/platform/node/index.d.ts.map +1 -1
- package/dist/types/src/processors/browser-processor.d.ts.map +1 -1
- package/dist/types/src/processors/common.d.ts.map +1 -1
- package/dist/types/src/processors/console-processor.d.ts.map +1 -1
- package/dist/types/src/processors/file-processor.d.ts.map +1 -1
- package/dist/types/src/processors/index.d.ts +2 -3
- package/dist/types/src/processors/index.d.ts.map +1 -1
- package/dist/types/src/scope.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -17
- package/src/context.ts +242 -2
- package/src/dbg.ts +34 -0
- package/src/decorators.ts +1 -2
- package/src/environment.test.ts +222 -0
- package/src/environment.ts +129 -0
- package/src/experimental/classes.test.ts +0 -1
- package/src/index.ts +7 -4
- package/src/jsonl.test.ts +121 -0
- package/src/jsonl.ts +104 -0
- package/src/log-buffer.test.ts +158 -0
- package/src/log-buffer.ts +89 -0
- package/src/log.test.ts +0 -1
- package/src/log.ts +56 -12
- package/src/meta.ts +29 -1
- package/src/options.ts +3 -1
- package/src/platform/index.ts +1 -1
- package/src/platform/node/index.ts +1 -2
- package/src/processors/browser-processor.ts +27 -28
- package/src/processors/console-processor.ts +5 -13
- package/src/processors/file-processor.ts +7 -9
- package/src/processors/index.ts +2 -3
|
@@ -1,121 +1,157 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
LogEntry,
|
|
3
|
+
LogLevel,
|
|
4
|
+
LogProcessorType,
|
|
5
|
+
gatherLogInfoFromScope,
|
|
6
|
+
getContextFromEntry,
|
|
7
|
+
getRelativeFilename,
|
|
8
|
+
levels,
|
|
9
|
+
logInfo,
|
|
10
|
+
shortLevelName,
|
|
11
|
+
shouldLog
|
|
12
|
+
} from "./chunk-V7FYKT4H.mjs";
|
|
13
|
+
import {
|
|
14
|
+
__export,
|
|
15
|
+
__reExport
|
|
16
|
+
} from "./chunk-IEP6GGEX.mjs";
|
|
4
17
|
|
|
5
|
-
// src/
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
LogProcessorType2["DEBUG"] = "debug";
|
|
36
|
-
return LogProcessorType2;
|
|
37
|
-
})({});
|
|
18
|
+
// src/index.ts
|
|
19
|
+
var index_exports = {};
|
|
20
|
+
__export(index_exports, {
|
|
21
|
+
BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
|
|
22
|
+
DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
|
|
23
|
+
LOG_META_MARKER: () => LOG_META_MARKER,
|
|
24
|
+
LogBuffer: () => LogBuffer,
|
|
25
|
+
LogEntry: () => LogEntry,
|
|
26
|
+
LogLevel: () => LogLevel,
|
|
27
|
+
LogProcessorType: () => LogProcessorType,
|
|
28
|
+
createLog: () => createLog,
|
|
29
|
+
dbg: () => dbg,
|
|
30
|
+
debug: () => debug,
|
|
31
|
+
gatherLogInfoFromScope: () => gatherLogInfoFromScope,
|
|
32
|
+
getContextFromEntry: () => getContextFromEntry,
|
|
33
|
+
getCurrentOwnershipScope: () => getCurrentOwnershipScope,
|
|
34
|
+
getRelativeFilename: () => getRelativeFilename,
|
|
35
|
+
inferEnvironmentName: () => inferEnvironmentName,
|
|
36
|
+
isLogMeta: () => isLogMeta,
|
|
37
|
+
levels: () => levels,
|
|
38
|
+
log: () => log,
|
|
39
|
+
logInfo: () => logInfo,
|
|
40
|
+
omit: () => omit,
|
|
41
|
+
parseFilter: () => parseFilter,
|
|
42
|
+
pick: () => pick,
|
|
43
|
+
serializeToJsonl: () => serializeToJsonl,
|
|
44
|
+
shortLevelName: () => shortLevelName,
|
|
45
|
+
shouldLog: () => shouldLog
|
|
46
|
+
});
|
|
47
|
+
import { omit, pick } from "@dxos/util";
|
|
38
48
|
|
|
39
|
-
// src/
|
|
40
|
-
var
|
|
41
|
-
var
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const infoProps = (typeof prototype === "object" && prototype !== null ? prototype[logInfoProperties] : []) ?? [];
|
|
51
|
-
for (const prop of infoProps) {
|
|
52
|
-
try {
|
|
53
|
-
res[prop] = typeof scope[prop] === "function" ? scope[prop]() : scope[prop];
|
|
54
|
-
} catch (err) {
|
|
55
|
-
res[prop] = err.message;
|
|
49
|
+
// src/environment.ts
|
|
50
|
+
var TAB_SUFFIX_STORAGE_KEY = "@dxos/log:env-suffix";
|
|
51
|
+
var SUFFIX_LENGTH = 6;
|
|
52
|
+
var randomSuffix = () => {
|
|
53
|
+
const cryptoRef = globalThis.crypto;
|
|
54
|
+
if (cryptoRef?.getRandomValues) {
|
|
55
|
+
const bytes = new Uint8Array(SUFFIX_LENGTH);
|
|
56
|
+
cryptoRef.getRandomValues(bytes);
|
|
57
|
+
let suffix = "";
|
|
58
|
+
for (const byte of bytes) {
|
|
59
|
+
suffix += (byte % 36).toString(36);
|
|
56
60
|
}
|
|
61
|
+
return suffix;
|
|
57
62
|
}
|
|
58
|
-
return
|
|
63
|
+
return Math.random().toString(36).slice(2, 2 + SUFFIX_LENGTH).padEnd(SUFFIX_LENGTH, "0");
|
|
59
64
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
if (filter.pattern?.length) {
|
|
71
|
-
if (path?.includes(filter.pattern)) {
|
|
72
|
-
return level >= filter.level;
|
|
73
|
-
}
|
|
74
|
-
} else {
|
|
75
|
-
if (level >= filter.level) {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
65
|
+
var getOrCreateTabSuffix = (session) => {
|
|
66
|
+
if (!session) {
|
|
67
|
+
return randomSuffix();
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const existing = session.getItem(TAB_SUFFIX_STORAGE_KEY);
|
|
71
|
+
if (existing && existing.length > 0) {
|
|
72
|
+
return existing;
|
|
78
73
|
}
|
|
74
|
+
const suffix = randomSuffix();
|
|
75
|
+
session.setItem(TAB_SUFFIX_STORAGE_KEY, suffix);
|
|
76
|
+
return suffix;
|
|
77
|
+
} catch {
|
|
78
|
+
return randomSuffix();
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
-
var
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
var isInstanceOf = (scope, ctorName) => {
|
|
82
|
+
const ctor = scope?.[ctorName];
|
|
83
|
+
return typeof ctor === "function" && scope instanceof ctor;
|
|
84
|
+
};
|
|
85
|
+
var CF_WORKER_USER_AGENT = "Cloudflare-Workers";
|
|
86
|
+
var inferEnvironmentName = (options = {}) => {
|
|
87
|
+
const scope = options.scope ?? globalThis;
|
|
88
|
+
if (scope.navigator?.userAgent === CF_WORKER_USER_AGENT) {
|
|
89
|
+
return `cf-worker::${randomSuffix()}`;
|
|
90
|
+
}
|
|
91
|
+
if (isInstanceOf(scope, "SharedWorkerGlobalScope")) {
|
|
92
|
+
return `shared-worker:${scope.name ?? ""}:${randomSuffix()}`;
|
|
93
|
+
}
|
|
94
|
+
if (isInstanceOf(scope, "ServiceWorkerGlobalScope")) {
|
|
95
|
+
return `service-worker::${randomSuffix()}`;
|
|
96
|
+
}
|
|
97
|
+
if (isInstanceOf(scope, "DedicatedWorkerGlobalScope")) {
|
|
98
|
+
return `dedicated-worker:${scope.name ?? ""}:${randomSuffix()}`;
|
|
99
|
+
}
|
|
100
|
+
if (scope.window !== void 0 && scope.window === scope) {
|
|
101
|
+
const origin = scope.location?.origin ?? "";
|
|
102
|
+
return `tab:${origin}:${getOrCreateTabSuffix(scope.sessionStorage)}`;
|
|
103
|
+
}
|
|
104
|
+
const proc = scope.process;
|
|
105
|
+
if (proc && typeof proc === "object" && proc.versions?.node) {
|
|
106
|
+
const pid = typeof proc.pid === "number" ? String(proc.pid) : "";
|
|
107
|
+
return `node:${pid}:${randomSuffix()}`;
|
|
84
108
|
}
|
|
85
|
-
|
|
86
|
-
return results.length > 0 && !results.some((results2) => results2 === false);
|
|
109
|
+
return `unknown::${randomSuffix()}`;
|
|
87
110
|
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
|
|
112
|
+
// src/jsonl.ts
|
|
113
|
+
var serializeToJsonl = (entry, opts = {}) => {
|
|
114
|
+
if (entry.level <= LogLevel.TRACE) {
|
|
115
|
+
return void 0;
|
|
116
|
+
}
|
|
117
|
+
const { filename, line, context: scopeName } = entry.computedMeta;
|
|
118
|
+
const record = {
|
|
119
|
+
t: new Date(entry.timestamp).toISOString(),
|
|
120
|
+
l: shortLevelName[entry.level] ?? "?",
|
|
121
|
+
m: entry.message ?? ""
|
|
122
|
+
};
|
|
123
|
+
if (filename !== void 0) {
|
|
124
|
+
record.f = filename;
|
|
125
|
+
}
|
|
126
|
+
if (line !== void 0) {
|
|
127
|
+
record.n = line;
|
|
128
|
+
}
|
|
129
|
+
if (scopeName !== void 0) {
|
|
130
|
+
record.o = scopeName;
|
|
131
|
+
}
|
|
132
|
+
if (entry.computedError !== void 0) {
|
|
133
|
+
record.e = entry.computedError;
|
|
95
134
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
} else if (typeof entryContext === "object") {
|
|
105
|
-
context = Object.assign(context ?? {}, entryContext);
|
|
135
|
+
if (opts.env !== void 0) {
|
|
136
|
+
record.i = opts.env;
|
|
137
|
+
}
|
|
138
|
+
const computedContext = entry.computedContext;
|
|
139
|
+
if (Object.keys(computedContext).length > 0) {
|
|
140
|
+
try {
|
|
141
|
+
record.c = JSON.stringify(computedContext);
|
|
142
|
+
} catch {
|
|
106
143
|
}
|
|
107
144
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
145
|
+
try {
|
|
146
|
+
return JSON.stringify(record);
|
|
147
|
+
} catch {
|
|
148
|
+
return void 0;
|
|
112
149
|
}
|
|
113
|
-
return context && Object.keys(context).length > 0 ? context : void 0;
|
|
114
150
|
};
|
|
115
151
|
|
|
116
152
|
// src/decorators.ts
|
|
117
|
-
import { inspect } from "@dxos/node-std/util";
|
|
118
153
|
import chalk from "chalk";
|
|
154
|
+
import { inspect } from "@dxos/node-std/util";
|
|
119
155
|
var nextPromiseId = 0;
|
|
120
156
|
var createMethodLogDecorator = (log2) => (arg0, arg1, meta) => (target, propertyKey, descriptor) => {
|
|
121
157
|
const method = descriptor.value;
|
|
@@ -225,47 +261,21 @@ var formatPromise = (id) => chalk.blue(`Promise#${id}`);
|
|
|
225
261
|
// src/options.ts
|
|
226
262
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
227
263
|
|
|
228
|
-
// src/platform/
|
|
229
|
-
var
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
if (typeof localStorage === "undefined") {
|
|
233
|
-
if (globalThis.localStorage_dxlog) {
|
|
234
|
-
dxlog = globalThis.localStorage_dxlog;
|
|
235
|
-
}
|
|
236
|
-
} else {
|
|
237
|
-
dxlog = localStorage.getItem("dxlog") ?? void 0;
|
|
238
|
-
}
|
|
239
|
-
if (!dxlog) {
|
|
240
|
-
return void 0;
|
|
241
|
-
}
|
|
242
|
-
return JSON.parse(dxlog);
|
|
243
|
-
} catch (err) {
|
|
244
|
-
console.info("can't parse dxlog config", err);
|
|
245
|
-
return void 0;
|
|
246
|
-
}
|
|
247
|
-
};
|
|
264
|
+
// src/platform/index.ts
|
|
265
|
+
var platform_exports = {};
|
|
266
|
+
__reExport(platform_exports, platform_star);
|
|
267
|
+
import * as platform_star from "#platform";
|
|
248
268
|
|
|
249
|
-
// src/processors/
|
|
250
|
-
var
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
console.log(inspect2(entry, false, null, true));
|
|
257
|
-
};
|
|
269
|
+
// src/processors/index.ts
|
|
270
|
+
var processors_exports = {};
|
|
271
|
+
__export(processors_exports, {
|
|
272
|
+
BROWSER_PROCESSOR: () => BROWSER_PROCESSOR,
|
|
273
|
+
DEBUG_PROCESSOR: () => DEBUG_PROCESSOR,
|
|
274
|
+
getRelativeFilename: () => getRelativeFilename
|
|
275
|
+
});
|
|
258
276
|
|
|
259
277
|
// src/processors/browser-processor.ts
|
|
260
|
-
import {
|
|
261
|
-
var getRelativeFilename = (filename) => {
|
|
262
|
-
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
263
|
-
if (match) {
|
|
264
|
-
const [, filePath] = match;
|
|
265
|
-
return filePath;
|
|
266
|
-
}
|
|
267
|
-
return filename;
|
|
268
|
-
};
|
|
278
|
+
import { safariCheck } from "@dxos/util";
|
|
269
279
|
var CONFIG = {
|
|
270
280
|
useTestProcessor: false,
|
|
271
281
|
printFileLinks: false
|
|
@@ -276,18 +286,20 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
276
286
|
}
|
|
277
287
|
const LOG_BROWSER_PREFIX = config.prefix ?? "https://vscode.dev/github.com/dxos/dxos/blob/main/";
|
|
278
288
|
const LOG_BROWSER_CSS = [];
|
|
289
|
+
const { filename, line: lineNumber, context: scopeDebugName } = entry.computedMeta;
|
|
279
290
|
let link = "";
|
|
280
|
-
if (
|
|
281
|
-
const filename = getRelativeFilename(entry.meta.F);
|
|
291
|
+
if (filename !== void 0 && lineNumber !== void 0) {
|
|
282
292
|
const filepath = `${LOG_BROWSER_PREFIX.replace(/\/$/, "")}/${filename}`;
|
|
283
|
-
link = `${filepath}#L${
|
|
293
|
+
link = `${filepath}#L${lineNumber}`;
|
|
284
294
|
}
|
|
285
295
|
let args = [];
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
const scopeName = scope.name ||
|
|
289
|
-
|
|
290
|
-
|
|
296
|
+
const scope = entry.meta?.S;
|
|
297
|
+
if (scope) {
|
|
298
|
+
const scopeName = scope.name || scopeDebugName;
|
|
299
|
+
if (scopeName) {
|
|
300
|
+
const processPrefix = scope.hostSessionId ? "[worker] " : "";
|
|
301
|
+
args.push(`%c${processPrefix}${scopeName}`, "color:#C026D3;font-weight:bold");
|
|
302
|
+
}
|
|
291
303
|
}
|
|
292
304
|
if (entry.message) {
|
|
293
305
|
args.push(entry.message);
|
|
@@ -295,9 +307,9 @@ var APP_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
295
307
|
const context = getContextFromEntry(entry);
|
|
296
308
|
if (context) {
|
|
297
309
|
if (Object.keys(context).length === 1 && "error" in context) {
|
|
298
|
-
args.push(context.error);
|
|
310
|
+
args.push(unwrapEffectError(context.error));
|
|
299
311
|
} else if (Object.keys(context).length === 1 && "err" in context) {
|
|
300
|
-
args.push(context.err);
|
|
312
|
+
args.push(unwrapEffectError(context.err));
|
|
301
313
|
} else {
|
|
302
314
|
args.push(context);
|
|
303
315
|
}
|
|
@@ -332,10 +344,8 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
332
344
|
if (!shouldLog(entry, config.filters)) {
|
|
333
345
|
return;
|
|
334
346
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
path = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;
|
|
338
|
-
}
|
|
347
|
+
const { filename, line: lineNumber } = entry.computedMeta;
|
|
348
|
+
const path = filename !== void 0 && lineNumber !== void 0 ? `${filename}:${lineNumber}` : "";
|
|
339
349
|
let args = [];
|
|
340
350
|
const processPrefix = entry.meta?.S?.hostSessionId ? "[worker] " : "";
|
|
341
351
|
args.push(`${processPrefix}${entry.message}`);
|
|
@@ -362,97 +372,33 @@ var TEST_BROWSER_PROCESSOR = (config, entry) => {
|
|
|
362
372
|
}
|
|
363
373
|
};
|
|
364
374
|
var BROWSER_PROCESSOR = CONFIG.useTestProcessor ? TEST_BROWSER_PROCESSOR : APP_BROWSER_PROCESSOR;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
// src/processors/common.ts
|
|
372
|
-
var getRelativeFilename2 = (filename) => {
|
|
373
|
-
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
374
|
-
if (match) {
|
|
375
|
-
const [, filePath] = match;
|
|
376
|
-
return filePath;
|
|
377
|
-
}
|
|
378
|
-
return filename;
|
|
375
|
+
var originalSymbol = /* @__PURE__ */ Symbol.for("effect/OriginalAnnotation");
|
|
376
|
+
var unwrapEffectError = (error) => {
|
|
377
|
+
if (typeof error === "object" && error !== null && originalSymbol in error) {
|
|
378
|
+
return error[originalSymbol];
|
|
379
|
+
}
|
|
380
|
+
return error;
|
|
379
381
|
};
|
|
380
382
|
|
|
381
|
-
// src/processors/
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
if (!shouldLog(entry, filters)) {
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
|
-
if (typeof pathOrFd === "number") {
|
|
393
|
-
fd = pathOrFd;
|
|
394
|
-
} else {
|
|
395
|
-
try {
|
|
396
|
-
mkdirSync(dirname(pathOrFd));
|
|
397
|
-
} catch {
|
|
398
|
-
}
|
|
399
|
-
fd = openSync(pathOrFd, "a");
|
|
400
|
-
}
|
|
401
|
-
const record = {
|
|
402
|
-
...entry,
|
|
403
|
-
timestamp: Date.now(),
|
|
404
|
-
...entry.meta ? {
|
|
405
|
-
meta: {
|
|
406
|
-
file: getRelativeFilename2(entry.meta.F),
|
|
407
|
-
line: entry.meta.L
|
|
408
|
-
}
|
|
409
|
-
} : {},
|
|
410
|
-
context: jsonlogify(getContextFromEntry(entry))
|
|
411
|
-
};
|
|
412
|
-
let retryTS = 0;
|
|
413
|
-
while (true) {
|
|
414
|
-
try {
|
|
415
|
-
return appendFileSync(fd, JSON.stringify(record) + "\n");
|
|
416
|
-
} catch (err) {
|
|
417
|
-
if (err.code !== "EAGAIN") {
|
|
418
|
-
throw err;
|
|
419
|
-
}
|
|
420
|
-
if (retryTS === 0) {
|
|
421
|
-
retryTS = performance.now();
|
|
422
|
-
} else {
|
|
423
|
-
if (performance.now() - retryTS > EAGAIN_MAX_DURATION) {
|
|
424
|
-
console.log(`could not write after ${EAGAIN_MAX_DURATION}ms of EAGAIN failures, giving up`);
|
|
425
|
-
throw err;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
};
|
|
431
|
-
};
|
|
432
|
-
var logFilePath;
|
|
433
|
-
var getLogFilePath = () => {
|
|
434
|
-
logFilePath ??= process.env.LOG_FILE ?? (process.env.HOME ? `${process.env.HOME}/.dxlog/${(/* @__PURE__ */ new Date()).toISOString()}.log` : void 0);
|
|
435
|
-
return logFilePath;
|
|
383
|
+
// src/processors/index.ts
|
|
384
|
+
__reExport(processors_exports, console_processor_star);
|
|
385
|
+
import * as console_processor_star from "#console-processor";
|
|
386
|
+
|
|
387
|
+
// src/processors/debug-processor.ts
|
|
388
|
+
import { inspect as inspect2 } from "@dxos/node-std/util";
|
|
389
|
+
var DEBUG_PROCESSOR = (config, entry) => {
|
|
390
|
+
console.log(inspect2(entry, false, null, true));
|
|
436
391
|
};
|
|
437
|
-
var FILE_PROCESSOR = createFileProcessor({
|
|
438
|
-
pathOrFd: getLogFilePath(),
|
|
439
|
-
levels: [
|
|
440
|
-
LogLevel.ERROR,
|
|
441
|
-
LogLevel.WARN,
|
|
442
|
-
LogLevel.INFO,
|
|
443
|
-
LogLevel.TRACE
|
|
444
|
-
]
|
|
445
|
-
});
|
|
446
392
|
|
|
447
393
|
// src/options.ts
|
|
448
394
|
var processors = {
|
|
449
|
-
[LogProcessorType.CONSOLE]: CONSOLE_PROCESSOR,
|
|
395
|
+
[LogProcessorType.CONSOLE]: processors_exports.CONSOLE_PROCESSOR,
|
|
450
396
|
[LogProcessorType.BROWSER]: BROWSER_PROCESSOR,
|
|
451
397
|
[LogProcessorType.DEBUG]: DEBUG_PROCESSOR
|
|
452
398
|
};
|
|
453
|
-
var browser = typeof window !== "undefined" || typeof navigator !== "undefined";
|
|
399
|
+
var browser = (typeof window !== "undefined" || typeof navigator !== "undefined") && !(typeof process !== "undefined" && process?.env?.VITEST);
|
|
454
400
|
var DEFAULT_PROCESSORS = [
|
|
455
|
-
browser ? BROWSER_PROCESSOR : CONSOLE_PROCESSOR
|
|
401
|
+
browser ? BROWSER_PROCESSOR : processors_exports.CONSOLE_PROCESSOR
|
|
456
402
|
];
|
|
457
403
|
var parseLogLevel = (level, defValue = LogLevel.WARN) => levels[level.toLowerCase()] ?? defValue;
|
|
458
404
|
var parseFilter = (filter) => {
|
|
@@ -480,7 +426,7 @@ var createConfig = (options) => {
|
|
|
480
426
|
filter: process.env.LOG_FILTER,
|
|
481
427
|
processor: process.env.LOG_PROCESSOR
|
|
482
428
|
} : void 0;
|
|
483
|
-
const mergedOptions = defaultsDeep({}, loadOptions(envOptions?.file), envOptions, options);
|
|
429
|
+
const mergedOptions = defaultsDeep({}, (0, platform_exports.loadOptions)(envOptions?.file), envOptions, options);
|
|
484
430
|
return {
|
|
485
431
|
options: mergedOptions,
|
|
486
432
|
filters: parseFilter(mergedOptions.filter ?? LogLevel.INFO),
|
|
@@ -506,13 +452,14 @@ var createLog = () => {
|
|
|
506
452
|
get: () => log2._config
|
|
507
453
|
});
|
|
508
454
|
const processLog = (level, message, context = {}, meta, error) => {
|
|
509
|
-
|
|
455
|
+
const entry = new LogEntry({
|
|
510
456
|
level,
|
|
511
457
|
message,
|
|
512
458
|
context,
|
|
513
459
|
meta,
|
|
514
460
|
error
|
|
515
|
-
})
|
|
461
|
+
});
|
|
462
|
+
log2._config.processors.forEach((processor) => processor(log2._config, entry));
|
|
516
463
|
};
|
|
517
464
|
Object.assign(log2, {
|
|
518
465
|
/**
|
|
@@ -520,7 +467,7 @@ var createLog = () => {
|
|
|
520
467
|
* NOTE: Preserves any processors that were already added to this logger instance
|
|
521
468
|
* unless an explicit processor option is provided.
|
|
522
469
|
*/
|
|
523
|
-
config: ({ processor, ...options }) => {
|
|
470
|
+
config: ({ processor, ...options } = {}) => {
|
|
524
471
|
const config = createConfig(options);
|
|
525
472
|
const processors2 = processor ? config.processors : log2._config.processors;
|
|
526
473
|
log2._config = {
|
|
@@ -574,11 +521,94 @@ var debug = (label, args) => {
|
|
|
574
521
|
};
|
|
575
522
|
var getFormattedStackTrace = () => new Error().stack.split("\n").slice(3).join("\n");
|
|
576
523
|
|
|
524
|
+
// src/index.ts
|
|
525
|
+
__reExport(index_exports, processors_exports);
|
|
526
|
+
|
|
527
|
+
// src/meta.ts
|
|
528
|
+
var LOG_META_MARKER = "~LogMeta";
|
|
529
|
+
var isLogMeta = (value) => {
|
|
530
|
+
return value != null && typeof value === "object" && value[LOG_META_MARKER] === LOG_META_MARKER;
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
// src/dbg.ts
|
|
534
|
+
var dbg = (arg, meta) => {
|
|
535
|
+
if (meta?.A) {
|
|
536
|
+
console.log(`${meta.A[0]} =`, arg);
|
|
537
|
+
} else {
|
|
538
|
+
console.log(arg);
|
|
539
|
+
}
|
|
540
|
+
return arg;
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
// src/log-buffer.ts
|
|
544
|
+
import { CircularBuffer } from "@dxos/util";
|
|
545
|
+
var DEFAULT_BUFFER_SIZE = 2e3;
|
|
546
|
+
var MAX_CONTEXT_LENGTH = 500;
|
|
547
|
+
var LogBuffer = class {
|
|
548
|
+
_buffer;
|
|
549
|
+
constructor(size = DEFAULT_BUFFER_SIZE) {
|
|
550
|
+
this._buffer = new CircularBuffer(size);
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Log processor that can be registered with `log.runtimeConfig.processors`.
|
|
554
|
+
* Captures every level except TRACE (does not apply `shouldLog` / filter; use for full debug dumps).
|
|
555
|
+
*/
|
|
556
|
+
logProcessor = (_config, entry) => {
|
|
557
|
+
if (entry.level <= LogLevel.TRACE) {
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
const { filename, line, context: scopeName } = entry.computedMeta;
|
|
561
|
+
const record = {
|
|
562
|
+
t: new Date(entry.timestamp).toISOString(),
|
|
563
|
+
l: shortLevelName[entry.level] ?? "?",
|
|
564
|
+
m: entry.message ?? ""
|
|
565
|
+
};
|
|
566
|
+
if (filename !== void 0) {
|
|
567
|
+
record.f = filename;
|
|
568
|
+
}
|
|
569
|
+
if (line !== void 0) {
|
|
570
|
+
record.n = line;
|
|
571
|
+
}
|
|
572
|
+
if (scopeName !== void 0) {
|
|
573
|
+
record.o = scopeName;
|
|
574
|
+
}
|
|
575
|
+
if (entry.computedError !== void 0) {
|
|
576
|
+
record.e = entry.computedError;
|
|
577
|
+
}
|
|
578
|
+
const computedContext = entry.computedContext;
|
|
579
|
+
if (Object.keys(computedContext).length > 0) {
|
|
580
|
+
try {
|
|
581
|
+
let json = JSON.stringify(computedContext);
|
|
582
|
+
if (json.length > MAX_CONTEXT_LENGTH) {
|
|
583
|
+
json = json.slice(0, MAX_CONTEXT_LENGTH);
|
|
584
|
+
}
|
|
585
|
+
record.c = json;
|
|
586
|
+
} catch {
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
this._buffer.push(record);
|
|
590
|
+
};
|
|
591
|
+
/** Number of entries currently in the buffer. */
|
|
592
|
+
get size() {
|
|
593
|
+
return this._buffer.elementCount;
|
|
594
|
+
}
|
|
595
|
+
/** Discard all buffered entries. */
|
|
596
|
+
clear() {
|
|
597
|
+
this._buffer.clear();
|
|
598
|
+
}
|
|
599
|
+
/** Serialize buffer contents as NDJSON (newline-delimited JSON). */
|
|
600
|
+
serialize() {
|
|
601
|
+
const lines = [];
|
|
602
|
+
for (const record of this._buffer) {
|
|
603
|
+
lines.push(JSON.stringify(record));
|
|
604
|
+
}
|
|
605
|
+
return lines.join("\n");
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
|
|
577
609
|
// src/experimental/ownership.ts
|
|
578
610
|
import { inspect as inspect3 } from "@dxos/node-std/util";
|
|
579
|
-
var
|
|
580
|
-
var kCurrentOwnershipScope = Symbol("kCurrentOwnershipScope");
|
|
581
|
-
var kDebugInfoProperties = Symbol("kDebugInfoProperties");
|
|
611
|
+
var kDebugInfoProperties = /* @__PURE__ */ Symbol("kDebugInfoProperties");
|
|
582
612
|
var OwnershipScope = class {
|
|
583
613
|
constr;
|
|
584
614
|
parent;
|
|
@@ -609,24 +639,28 @@ var OwnershipScope = class {
|
|
|
609
639
|
var getCurrentOwnershipScope = (thisRef) => thisRef;
|
|
610
640
|
export {
|
|
611
641
|
BROWSER_PROCESSOR,
|
|
612
|
-
CONSOLE_PROCESSOR,
|
|
613
642
|
DEBUG_PROCESSOR,
|
|
614
|
-
|
|
643
|
+
LOG_META_MARKER,
|
|
644
|
+
LogBuffer,
|
|
645
|
+
LogEntry,
|
|
615
646
|
LogLevel,
|
|
616
647
|
LogProcessorType,
|
|
617
|
-
createFileProcessor,
|
|
618
648
|
createLog,
|
|
649
|
+
dbg,
|
|
619
650
|
debug,
|
|
620
651
|
gatherLogInfoFromScope,
|
|
621
652
|
getContextFromEntry,
|
|
622
653
|
getCurrentOwnershipScope,
|
|
623
|
-
|
|
654
|
+
getRelativeFilename,
|
|
655
|
+
inferEnvironmentName,
|
|
656
|
+
isLogMeta,
|
|
624
657
|
levels,
|
|
625
658
|
log,
|
|
626
659
|
logInfo,
|
|
627
660
|
omit,
|
|
628
661
|
parseFilter,
|
|
629
662
|
pick,
|
|
663
|
+
serializeToJsonl,
|
|
630
664
|
shortLevelName,
|
|
631
665
|
shouldLog
|
|
632
666
|
};
|