@bazariodev/docket 0.0.0-stage → 1.0.0
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/CHANGELOG.md +37 -0
- package/LICENSE +21 -0
- package/README.md +985 -2
- package/dist/browser/constants.d.cts +14 -0
- package/dist/browser/constants.d.ts +14 -0
- package/dist/browser/index.cjs +192 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +29 -0
- package/dist/browser/index.d.ts +29 -0
- package/dist/browser/index.js +187 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/chunk-7ld72rnl.js +376 -0
- package/dist/chunk-7ld72rnl.js.map +1 -0
- package/dist/chunk-BLf-eCDO.cjs +53 -0
- package/dist/chunk-BLf-eCDO.cjs.map +1 -0
- package/dist/chunk-CEhpwtwJ.cjs +379 -0
- package/dist/chunk-CEhpwtwJ.cjs.map +1 -0
- package/dist/chunk-CSS3f4_M.js +46 -0
- package/dist/chunk-CSS3f4_M.js.map +1 -0
- package/dist/chunk-CXZYNALm.cjs +124 -0
- package/dist/chunk-CXZYNALm.cjs.map +1 -0
- package/dist/chunk-DYcNnkOV.js +50 -0
- package/dist/chunk-DYcNnkOV.js.map +1 -0
- package/dist/chunk-DkvWLziD.js +437 -0
- package/dist/chunk-DkvWLziD.js.map +1 -0
- package/dist/chunk-DqK_3eFr.cjs +53 -0
- package/dist/chunk-DqK_3eFr.cjs.map +1 -0
- package/dist/chunk-LRCHwVuE.js +110 -0
- package/dist/chunk-LRCHwVuE.js.map +1 -0
- package/dist/chunk-ieB8yTEn.cjs +439 -0
- package/dist/chunk-ieB8yTEn.cjs.map +1 -0
- package/dist/client/index.cjs +167 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +40 -0
- package/dist/client/index.d.ts +40 -0
- package/dist/client/index.js +165 -0
- package/dist/client/index.js.map +1 -0
- package/dist/constants.d.cts +4 -0
- package/dist/constants.d.ts +4 -0
- package/dist/core/constants.d.cts +43 -0
- package/dist/core/constants.d.ts +43 -0
- package/dist/devtools/index.cjs +37 -0
- package/dist/devtools/index.cjs.map +1 -0
- package/dist/devtools/index.d.cts +11 -0
- package/dist/devtools/index.d.ts +11 -0
- package/dist/devtools/index.js +35 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/export/index.cjs +139 -0
- package/dist/export/index.cjs.map +1 -0
- package/dist/export/index.d.cts +49 -0
- package/dist/export/index.d.ts +49 -0
- package/dist/export/index.js +137 -0
- package/dist/export/index.js.map +1 -0
- package/dist/history/index.cjs +30 -0
- package/dist/history/index.cjs.map +1 -0
- package/dist/history/index.d.cts +11 -0
- package/dist/history/index.d.ts +11 -0
- package/dist/history/index.js +28 -0
- package/dist/history/index.js.map +1 -0
- package/dist/index.cjs +14 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +159 -0
- package/dist/index.d.ts +159 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/indexeddb/index.cjs +26 -0
- package/dist/indexeddb/index.cjs.map +1 -0
- package/dist/indexeddb/index.d.cts +61 -0
- package/dist/indexeddb/index.d.ts +61 -0
- package/dist/indexeddb/index.js +23 -0
- package/dist/indexeddb/index.js.map +1 -0
- package/dist/redaction/index.cjs +154 -0
- package/dist/redaction/index.cjs.map +1 -0
- package/dist/redaction/index.d.cts +70 -0
- package/dist/redaction/index.d.ts +70 -0
- package/dist/redaction/index.js +152 -0
- package/dist/redaction/index.js.map +1 -0
- package/dist/sip/index.cjs +336 -0
- package/dist/sip/index.cjs.map +1 -0
- package/dist/sip/index.d.cts +34 -0
- package/dist/sip/index.d.ts +34 -0
- package/dist/sip/index.js +333 -0
- package/dist/sip/index.js.map +1 -0
- package/dist/storage/constants.d.cts +11 -0
- package/dist/storage/constants.d.ts +11 -0
- package/dist/storage/contracts.d.cts +31 -0
- package/dist/storage/contracts.d.ts +31 -0
- package/dist/upload/constants.d.cts +17 -0
- package/dist/upload/constants.d.ts +17 -0
- package/dist/upload/index.cjs +246 -0
- package/dist/upload/index.cjs.map +1 -0
- package/dist/upload/index.d.cts +51 -0
- package/dist/upload/index.d.ts +51 -0
- package/dist/upload/index.js +244 -0
- package/dist/upload/index.js.map +1 -0
- package/package.json +150 -3
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { a as assertLevel, l as levelRank } from './chunk-LRCHwVuE.js';
|
|
2
|
+
|
|
3
|
+
function escapeText(value) {
|
|
4
|
+
return String(value).replace(
|
|
5
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: Escape record control characters.
|
|
6
|
+
/[\u0000-\u001f\u007f-\u009f\u2028\u2029\u202a-\u202e\u2066-\u2069]/g,
|
|
7
|
+
(character) =>
|
|
8
|
+
`\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`,
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function quote(value) {
|
|
13
|
+
const text = escapeText(value);
|
|
14
|
+
return /[\s="\\]/.test(text) ? JSON.stringify(text) : text;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function formatRecord(record) {
|
|
18
|
+
const { at, level, area, scope, message, runId, context, fields, error } =
|
|
19
|
+
record;
|
|
20
|
+
let header = `${new Date(at).toISOString()} ${level.toUpperCase()} area=${quote(area)} scope=${quote(scope)} message=${quote(message)} runId=${quote(runId)}`;
|
|
21
|
+
for (const values of [context, fields])
|
|
22
|
+
for (const [key, value] of Object.entries(values ?? {}))
|
|
23
|
+
header += ` ${quote(key)}=${quote(typeof value === 'object' ? JSON.stringify(value) : value)}`;
|
|
24
|
+
if (error)
|
|
25
|
+
header += `\n ${escapeText(error.name)}: ${escapeText(error.message)}${
|
|
26
|
+
error.stack
|
|
27
|
+
? `\n${error.stack
|
|
28
|
+
.split(/\r?\n/)
|
|
29
|
+
.map((line) => ` ${escapeText(line)}`)
|
|
30
|
+
.join('\n')}`
|
|
31
|
+
: ''
|
|
32
|
+
}${error.cause ? `\n cause=${escapeText(JSON.stringify(error.cause))}` : ''}${error.errors ? `\n errors=${escapeText(JSON.stringify(error.errors))}` : ''}${error.fields ? `\n fields=${escapeText(JSON.stringify(error.fields))}` : ''}`;
|
|
33
|
+
return header;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function createConsoleSink({
|
|
37
|
+
level = 'debug',
|
|
38
|
+
console: output = globalThis.console,
|
|
39
|
+
} = {}) {
|
|
40
|
+
assertLevel(level);
|
|
41
|
+
return Object.freeze({
|
|
42
|
+
write(record) {
|
|
43
|
+
if (levelRank(record.level) >= levelRank(level))
|
|
44
|
+
output[record.level](formatRecord(record));
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { createConsoleSink as c, formatRecord as f };
|
|
50
|
+
//# sourceMappingURL=chunk-DYcNnkOV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-DYcNnkOV.js","sources":["../src/core/format.js"],"sourcesContent":["import { assertLevel, levelRank } from './common.js';\n\nfunction escapeText(value) {\n return String(value).replace(\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Escape record control characters.\n /[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029\\u202a-\\u202e\\u2066-\\u2069]/g,\n (character) =>\n `\\\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`,\n );\n}\n\nfunction quote(value) {\n const text = escapeText(value);\n return /[\\s=\"\\\\]/.test(text) ? JSON.stringify(text) : text;\n}\n\nexport function formatRecord(record) {\n const { at, level, area, scope, message, runId, context, fields, error } =\n record;\n let header = `${new Date(at).toISOString()} ${level.toUpperCase()} area=${quote(area)} scope=${quote(scope)} message=${quote(message)} runId=${quote(runId)}`;\n for (const values of [context, fields])\n for (const [key, value] of Object.entries(values ?? {}))\n header += ` ${quote(key)}=${quote(typeof value === 'object' ? JSON.stringify(value) : value)}`;\n if (error)\n header += `\\n ${escapeText(error.name)}: ${escapeText(error.message)}${\n error.stack\n ? `\\n${error.stack\n .split(/\\r?\\n/)\n .map((line) => ` ${escapeText(line)}`)\n .join('\\n')}`\n : ''\n }${error.cause ? `\\n cause=${escapeText(JSON.stringify(error.cause))}` : ''}${error.errors ? `\\n errors=${escapeText(JSON.stringify(error.errors))}` : ''}${error.fields ? `\\n fields=${escapeText(JSON.stringify(error.fields))}` : ''}`;\n return header;\n}\n\nexport function createConsoleSink({\n level = 'debug',\n console: output = globalThis.console,\n} = {}) {\n assertLevel(level);\n return Object.freeze({\n write(record) {\n if (levelRank(record.level) >= levelRank(level))\n output[record.level](formatRecord(record));\n },\n });\n}\n"],"names":[],"mappings":";;AAEA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO;AAC9B;AACA,IAAI,qEAAqE;AACzE,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,GAAG;AACH;;AAEA,SAAS,KAAK,CAAC,KAAK,EAAE;AACtB,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAChC,EAAE,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;AAC5D;;AAEO,SAAS,YAAY,CAAC,MAAM,EAAE;AACrC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AAC1E,IAAI,MAAM;AACV,EAAE,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/J,EAAE,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACxC,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AAC3D,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACpG,EAAE,IAAI,KAAK;AACX,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5E,MAAM,KAAK,CAAC;AACZ,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC;AACrB,aAAa,KAAK,CAAC,OAAO;AAC1B,aAAa,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,UAAU;AACV,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACtP,EAAE,OAAO,MAAM;AACf;;AAEO,SAAS,iBAAiB,CAAC;AAClC,EAAE,KAAK,GAAG,OAAO;AACjB,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO;AACtC,CAAC,GAAG,EAAE,EAAE;AACR,EAAE,WAAW,CAAC,KAAK,CAAC;AACpB,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,IAAI,KAAK,CAAC,MAAM,EAAE;AAClB,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC;AACrD,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAClD,IAAI,CAAC;AACL,GAAG,CAAC;AACJ;;"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import { p as positive, a as assertLevel, l as levelRank, d as define, s as scheduler, r as resolveLimits, c as assertStormLimit, e as randomHex, f as copyBindings, b as report } from './chunk-LRCHwVuE.js';
|
|
2
|
+
import { b as LOGGING_ERROR_CODES, c as LOGGING_LIMITS, d as LOGGING_ERROR_SOURCES, L as LEVELS } from './chunk-CSS3f4_M.js';
|
|
3
|
+
import { a as ownRecord } from './chunk-7ld72rnl.js';
|
|
4
|
+
|
|
5
|
+
const LOGGING_ERRORS = /* @__PURE__ */ Object.freeze({
|
|
6
|
+
[LOGGING_ERROR_CODES.RECURSIVE_LOGGING]: 'Recursive logging is rejected',
|
|
7
|
+
[LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT]:
|
|
8
|
+
'Root logger cache exceeds 1000 pairs',
|
|
9
|
+
[LOGGING_ERROR_CODES.STOPPED]: 'Logging is stopped',
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
function loggingError(code) {
|
|
13
|
+
return Object.assign(new Error(LOGGING_ERRORS[code]), { code });
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function createLevels(options, reportError) {
|
|
17
|
+
const { now, scheduler, levelStorage, areas } = options;
|
|
18
|
+
const maxDuration = positive(
|
|
19
|
+
options.maxOverrideMs ?? LOGGING_LIMITS.DEFAULT_LEVEL_OVERRIDE_MS,
|
|
20
|
+
'maxOverrideMs',
|
|
21
|
+
);
|
|
22
|
+
const states = new Map();
|
|
23
|
+
let stopped = false;
|
|
24
|
+
for (const { id, level = 'info' } of areas) {
|
|
25
|
+
assertLevel(level);
|
|
26
|
+
if (typeof id !== 'string' || !id || states.has(id))
|
|
27
|
+
throw new TypeError('Areas must have unique non-empty IDs');
|
|
28
|
+
states.set(id, {
|
|
29
|
+
level,
|
|
30
|
+
defaultLevel: level,
|
|
31
|
+
rank: levelRank(level),
|
|
32
|
+
until: undefined,
|
|
33
|
+
timer: undefined,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const requireArea = (area) => {
|
|
37
|
+
const state = states.get(area);
|
|
38
|
+
if (!state) throw new TypeError('Unknown log area');
|
|
39
|
+
return state;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function save() {
|
|
43
|
+
if (!levelStorage || stopped) return;
|
|
44
|
+
const overrides = {};
|
|
45
|
+
for (const [id, state] of states)
|
|
46
|
+
if (state.until)
|
|
47
|
+
define(overrides, id, { level: state.level, until: state.until });
|
|
48
|
+
try {
|
|
49
|
+
levelStorage.storage.setItem(levelStorage.key, JSON.stringify(overrides));
|
|
50
|
+
} catch (error) {
|
|
51
|
+
reportError(error, LOGGING_ERROR_SOURCES.STORAGE);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function reset(state) {
|
|
56
|
+
scheduler.clearTimeout(state.timer);
|
|
57
|
+
state.timer = undefined;
|
|
58
|
+
state.until = undefined;
|
|
59
|
+
state.level = state.defaultLevel;
|
|
60
|
+
state.rank = levelRank(state.level);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function apply(state, level, until) {
|
|
64
|
+
reset(state);
|
|
65
|
+
state.level = level;
|
|
66
|
+
state.rank = levelRank(level);
|
|
67
|
+
state.until = until;
|
|
68
|
+
state.timer = scheduler.setTimeout(
|
|
69
|
+
() => {
|
|
70
|
+
if (stopped) return;
|
|
71
|
+
if (until > now()) {
|
|
72
|
+
apply(state, level, until);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
reset(state);
|
|
76
|
+
save();
|
|
77
|
+
},
|
|
78
|
+
Math.min(LOGGING_LIMITS.MAX_TIMER_DELAY_MS, Math.max(0, until - now())),
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function reloadLevels() {
|
|
83
|
+
if (stopped) return;
|
|
84
|
+
for (const state of states.values()) reset(state);
|
|
85
|
+
if (!levelStorage) return;
|
|
86
|
+
try {
|
|
87
|
+
const saved = JSON.parse(
|
|
88
|
+
levelStorage.storage.getItem(levelStorage.key) ?? '{}',
|
|
89
|
+
);
|
|
90
|
+
if (!saved || typeof saved !== 'object') return;
|
|
91
|
+
const time = now();
|
|
92
|
+
for (const [id, state] of states) {
|
|
93
|
+
const override = Object.hasOwn(saved, id) && saved[id];
|
|
94
|
+
if (
|
|
95
|
+
override &&
|
|
96
|
+
levelRank(override.level) >= 0 &&
|
|
97
|
+
Number.isFinite(override.until) &&
|
|
98
|
+
override.until > time
|
|
99
|
+
)
|
|
100
|
+
apply(
|
|
101
|
+
state,
|
|
102
|
+
override.level,
|
|
103
|
+
Math.min(override.until, time + maxDuration),
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
} catch (error) {
|
|
107
|
+
reportError(error, LOGGING_ERROR_SOURCES.STORAGE);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
reloadLevels();
|
|
111
|
+
return {
|
|
112
|
+
requireArea,
|
|
113
|
+
enabled(area, level) {
|
|
114
|
+
const state = requireArea(area);
|
|
115
|
+
if (state.until && state.until <= now()) {
|
|
116
|
+
reset(state);
|
|
117
|
+
save();
|
|
118
|
+
}
|
|
119
|
+
return levelRank(level) >= state.rank;
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
setLevel(area, level, { durationMs = maxDuration } = {}) {
|
|
123
|
+
assertLevel(level);
|
|
124
|
+
positive(durationMs, 'durationMs');
|
|
125
|
+
const state = requireArea(area);
|
|
126
|
+
if (stopped) return;
|
|
127
|
+
apply(state, level, now() + Math.min(durationMs, maxDuration));
|
|
128
|
+
save();
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
resetLevel(area) {
|
|
132
|
+
if (stopped) return;
|
|
133
|
+
if (area !== undefined) reset(requireArea(area));
|
|
134
|
+
else for (const state of states.values()) reset(state);
|
|
135
|
+
save();
|
|
136
|
+
},
|
|
137
|
+
reloadLevels,
|
|
138
|
+
getLevels() {
|
|
139
|
+
const result = {};
|
|
140
|
+
for (const [id, state] of states) {
|
|
141
|
+
if (state.until && state.until <= now()) {
|
|
142
|
+
reset(state);
|
|
143
|
+
save();
|
|
144
|
+
}
|
|
145
|
+
define(
|
|
146
|
+
result,
|
|
147
|
+
id,
|
|
148
|
+
Object.freeze({
|
|
149
|
+
level: state.level,
|
|
150
|
+
defaultLevel: state.defaultLevel,
|
|
151
|
+
...(state.until ? { until: state.until } : {}),
|
|
152
|
+
}),
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
return Object.freeze(result);
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
stop() {
|
|
159
|
+
stopped = true;
|
|
160
|
+
for (const state of states.values()) scheduler.clearTimeout(state.timer);
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function createLogging(options) {
|
|
166
|
+
if (
|
|
167
|
+
!Array.isArray(options?.areas) ||
|
|
168
|
+
!options.redactor ||
|
|
169
|
+
typeof options.redactor.redact !== 'function'
|
|
170
|
+
)
|
|
171
|
+
throw new TypeError('Areas and an explicit redactor are required');
|
|
172
|
+
const {
|
|
173
|
+
redactor,
|
|
174
|
+
now = Date.now,
|
|
175
|
+
monotonicNow = () => globalThis.performance?.now() ?? Date.now(),
|
|
176
|
+
scheduler: scheduler$1 = scheduler,
|
|
177
|
+
stormLimit = LOGGING_LIMITS.DEFAULT_STORM_LIMIT,
|
|
178
|
+
} = options;
|
|
179
|
+
const limits = resolveLimits(redactor.limits);
|
|
180
|
+
if (
|
|
181
|
+
!redactor.limits ||
|
|
182
|
+
Object.keys(limits).some((key) => !Object.hasOwn(redactor.limits, key))
|
|
183
|
+
)
|
|
184
|
+
throw new TypeError('Redactor limits are required');
|
|
185
|
+
assertStormLimit(stormLimit);
|
|
186
|
+
const runId = options.createRunId?.() ?? randomHex(16);
|
|
187
|
+
if (typeof runId !== 'string' || !runId)
|
|
188
|
+
throw new TypeError('Invalid run ID');
|
|
189
|
+
const sinks = new Set();
|
|
190
|
+
const roots = new Map();
|
|
191
|
+
const storms = new Map();
|
|
192
|
+
let context = copyBindings(options.context);
|
|
193
|
+
let seq = 0;
|
|
194
|
+
let closed = false;
|
|
195
|
+
let busy = false;
|
|
196
|
+
let scopeReported = false;
|
|
197
|
+
let reporting = false;
|
|
198
|
+
let stormTimer;
|
|
199
|
+
let stopPromise;
|
|
200
|
+
|
|
201
|
+
function onError(error, source) {
|
|
202
|
+
if (reporting) return;
|
|
203
|
+
reporting = true;
|
|
204
|
+
const wasBusy = busy;
|
|
205
|
+
busy = true;
|
|
206
|
+
report(options.onError, error, source);
|
|
207
|
+
busy = wasBusy;
|
|
208
|
+
reporting = false;
|
|
209
|
+
}
|
|
210
|
+
for (const sink of options.sinks ?? []) addSink(sink);
|
|
211
|
+
const levels = createLevels({ ...options, now, scheduler: scheduler$1 }, onError);
|
|
212
|
+
|
|
213
|
+
function emit(area, scope, binding, level, message, data, bypass = false) {
|
|
214
|
+
try {
|
|
215
|
+
if (busy) {
|
|
216
|
+
onError(
|
|
217
|
+
loggingError(LOGGING_ERROR_CODES.RECURSIVE_LOGGING),
|
|
218
|
+
LOGGING_ERROR_SOURCES.REENTRY,
|
|
219
|
+
);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (
|
|
223
|
+
closed ||
|
|
224
|
+
options.isActive?.() === false ||
|
|
225
|
+
sinks.size === 0 ||
|
|
226
|
+
(!bypass && !levels.enabled(area, level))
|
|
227
|
+
)
|
|
228
|
+
return;
|
|
229
|
+
if (!bypass && stormLimit !== false) {
|
|
230
|
+
const key = JSON.stringify([area, scope]);
|
|
231
|
+
let counter = storms.get(key);
|
|
232
|
+
if (!counter) {
|
|
233
|
+
const cacheKey =
|
|
234
|
+
storms.size < LOGGING_LIMITS.STORM_SCOPE_PAIRS ? key : 'overflow';
|
|
235
|
+
counter = storms.get(cacheKey);
|
|
236
|
+
if (!counter) {
|
|
237
|
+
counter = {
|
|
238
|
+
area,
|
|
239
|
+
scope,
|
|
240
|
+
start: monotonicNow(),
|
|
241
|
+
count: 0,
|
|
242
|
+
dropped: 0,
|
|
243
|
+
};
|
|
244
|
+
storms.set(cacheKey, counter);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const time = monotonicNow();
|
|
248
|
+
if (
|
|
249
|
+
time - counter.start >= LOGGING_LIMITS.STORM_WINDOW_MS ||
|
|
250
|
+
time < counter.start
|
|
251
|
+
) {
|
|
252
|
+
counter.start = time;
|
|
253
|
+
counter.count = 0;
|
|
254
|
+
}
|
|
255
|
+
if (counter.count++ >= stormLimit) {
|
|
256
|
+
counter.dropped++;
|
|
257
|
+
if (stormTimer === undefined)
|
|
258
|
+
stormTimer = scheduler$1.setTimeout(
|
|
259
|
+
summarize,
|
|
260
|
+
LOGGING_LIMITS.STORM_SUMMARY_DELAY_MS,
|
|
261
|
+
);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const registrations = Array.from(sinks);
|
|
266
|
+
busy = true;
|
|
267
|
+
try {
|
|
268
|
+
let value;
|
|
269
|
+
try {
|
|
270
|
+
value = typeof data === 'function' ? data() : data;
|
|
271
|
+
} catch (error) {
|
|
272
|
+
onError(error, LOGGING_ERROR_SOURCES.DATA);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
if (options.isActive?.() === false || sinks.size === 0) return;
|
|
276
|
+
let record;
|
|
277
|
+
try {
|
|
278
|
+
record = ownRecord(
|
|
279
|
+
redactor.redact({
|
|
280
|
+
runId,
|
|
281
|
+
seq: ++seq,
|
|
282
|
+
at: now(),
|
|
283
|
+
area,
|
|
284
|
+
scope,
|
|
285
|
+
level,
|
|
286
|
+
message,
|
|
287
|
+
context: { ...context, ...binding },
|
|
288
|
+
data: value,
|
|
289
|
+
}),
|
|
290
|
+
limits,
|
|
291
|
+
);
|
|
292
|
+
} catch (error) {
|
|
293
|
+
onError(error, LOGGING_ERROR_SOURCES.REDACTOR);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (options.isActive?.() === false) return;
|
|
297
|
+
for (const registration of registrations) {
|
|
298
|
+
if (options.isActive?.() === false || !sinks.has(registration))
|
|
299
|
+
continue;
|
|
300
|
+
try {
|
|
301
|
+
registration.sink.write(record);
|
|
302
|
+
} catch (error) {
|
|
303
|
+
onError(error, LOGGING_ERROR_SOURCES.SINK);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
} finally {
|
|
307
|
+
busy = false;
|
|
308
|
+
}
|
|
309
|
+
} catch (error) {
|
|
310
|
+
busy = false;
|
|
311
|
+
onError(error, LOGGING_ERROR_SOURCES.DATA);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function summarize() {
|
|
316
|
+
stormTimer = undefined;
|
|
317
|
+
for (const counter of storms.values()) {
|
|
318
|
+
if (!counter.dropped) continue;
|
|
319
|
+
const dropped = counter.dropped;
|
|
320
|
+
counter.dropped = 0;
|
|
321
|
+
emit(
|
|
322
|
+
counter.area,
|
|
323
|
+
counter.scope,
|
|
324
|
+
{},
|
|
325
|
+
'warn',
|
|
326
|
+
'logging.suppressed',
|
|
327
|
+
{ scope: counter.scope, dropped },
|
|
328
|
+
true,
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
function logger(area, scope, binding = {}) {
|
|
334
|
+
const result = {};
|
|
335
|
+
for (const level of Object.values(LEVELS))
|
|
336
|
+
result[level] = (message, data) =>
|
|
337
|
+
emit(area, scope, binding, level, message, data);
|
|
338
|
+
result.child = ({
|
|
339
|
+
scope: childScope = scope,
|
|
340
|
+
context: childContext = {},
|
|
341
|
+
} = {}) =>
|
|
342
|
+
logger(area, childScope, { ...binding, ...copyBindings(childContext) });
|
|
343
|
+
return Object.freeze(result);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function addSink(sink) {
|
|
347
|
+
if (!sink || typeof sink.write !== 'function')
|
|
348
|
+
throw new TypeError('A sink must have write');
|
|
349
|
+
if (closed) throw loggingError(LOGGING_ERROR_CODES.STOPPED);
|
|
350
|
+
const registration = { sink };
|
|
351
|
+
sinks.add(registration);
|
|
352
|
+
return () => {
|
|
353
|
+
sinks.delete(registration);
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
async function lifecycle(registrations, methods) {
|
|
358
|
+
const failures = [];
|
|
359
|
+
for (const method of methods) {
|
|
360
|
+
await Promise.all(
|
|
361
|
+
registrations.map(async ({ sink }) => {
|
|
362
|
+
try {
|
|
363
|
+
const previous = busy;
|
|
364
|
+
busy = true;
|
|
365
|
+
let result;
|
|
366
|
+
try {
|
|
367
|
+
result = sink[method]?.();
|
|
368
|
+
} finally {
|
|
369
|
+
busy = previous;
|
|
370
|
+
}
|
|
371
|
+
await result;
|
|
372
|
+
} catch (error) {
|
|
373
|
+
failures.push(error);
|
|
374
|
+
onError(error, LOGGING_ERROR_SOURCES.SINK);
|
|
375
|
+
}
|
|
376
|
+
}),
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
if (failures.length)
|
|
380
|
+
throw new AggregateError(failures, 'Logging lifecycle failed');
|
|
381
|
+
}
|
|
382
|
+
return Object.freeze({
|
|
383
|
+
runId,
|
|
384
|
+
getLogger(area, scope) {
|
|
385
|
+
levels.requireArea(area);
|
|
386
|
+
if (typeof scope !== 'string')
|
|
387
|
+
throw new TypeError('Scope must be a string');
|
|
388
|
+
const key = JSON.stringify([area, scope]);
|
|
389
|
+
const cached = roots.get(key);
|
|
390
|
+
if (cached) return cached;
|
|
391
|
+
const created = logger(area, scope);
|
|
392
|
+
if (roots.size < LOGGING_LIMITS.ROOT_LOGGER_CACHE_PAIRS) {
|
|
393
|
+
roots.set(key, created);
|
|
394
|
+
return created;
|
|
395
|
+
}
|
|
396
|
+
if (!scopeReported) {
|
|
397
|
+
scopeReported = true;
|
|
398
|
+
onError(
|
|
399
|
+
loggingError(LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT),
|
|
400
|
+
LOGGING_ERROR_SOURCES.SCOPE,
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
return created;
|
|
404
|
+
},
|
|
405
|
+
|
|
406
|
+
setContext(values) {
|
|
407
|
+
context = { ...context, ...copyBindings(values) };
|
|
408
|
+
for (const key of Object.keys(context))
|
|
409
|
+
if (context[key] === undefined) delete context[key];
|
|
410
|
+
},
|
|
411
|
+
setLevel: levels.setLevel,
|
|
412
|
+
resetLevel: levels.resetLevel,
|
|
413
|
+
reloadLevels: levels.reloadLevels,
|
|
414
|
+
getLevels: levels.getLevels,
|
|
415
|
+
addSink,
|
|
416
|
+
flush() {
|
|
417
|
+
const registrations = Array.from(sinks);
|
|
418
|
+
return Promise.resolve().then(() => lifecycle(registrations, ['flush']));
|
|
419
|
+
},
|
|
420
|
+
|
|
421
|
+
stop() {
|
|
422
|
+
if (!stopPromise) {
|
|
423
|
+
closed = true;
|
|
424
|
+
levels.stop();
|
|
425
|
+
scheduler$1.clearTimeout(stormTimer);
|
|
426
|
+
const registrations = Array.from(sinks);
|
|
427
|
+
stopPromise = Promise.resolve().then(() =>
|
|
428
|
+
lifecycle(registrations, ['flush', 'stop']),
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
return stopPromise;
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export { createLogging as c };
|
|
437
|
+
//# sourceMappingURL=chunk-DkvWLziD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-DkvWLziD.js","sources":["../src/core/errors.js","../src/core/levels.js","../src/core/hub.js"],"sourcesContent":["import { LOGGING_ERROR_CODES } from './constants.js';\n\nexport const LOGGING_ERRORS = /* @__PURE__ */ Object.freeze({\n [LOGGING_ERROR_CODES.RECURSIVE_LOGGING]: 'Recursive logging is rejected',\n [LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT]:\n 'Root logger cache exceeds 1000 pairs',\n [LOGGING_ERROR_CODES.STOPPED]: 'Logging is stopped',\n});\n\nexport function loggingError(code) {\n return Object.assign(new Error(LOGGING_ERRORS[code]), { code });\n}\n","import { assertLevel, define, levelRank, positive } from './common.js';\nimport { LOGGING_ERROR_SOURCES, LOGGING_LIMITS } from './constants.js';\n\nexport function createLevels(options, reportError) {\n const { now, scheduler, levelStorage, areas } = options;\n const maxDuration = positive(\n options.maxOverrideMs ?? LOGGING_LIMITS.DEFAULT_LEVEL_OVERRIDE_MS,\n 'maxOverrideMs',\n );\n const states = new Map();\n let stopped = false;\n for (const { id, level = 'info' } of areas) {\n assertLevel(level);\n if (typeof id !== 'string' || !id || states.has(id))\n throw new TypeError('Areas must have unique non-empty IDs');\n states.set(id, {\n level,\n defaultLevel: level,\n rank: levelRank(level),\n until: undefined,\n timer: undefined,\n });\n }\n const requireArea = (area) => {\n const state = states.get(area);\n if (!state) throw new TypeError('Unknown log area');\n return state;\n };\n\n function save() {\n if (!levelStorage || stopped) return;\n const overrides = {};\n for (const [id, state] of states)\n if (state.until)\n define(overrides, id, { level: state.level, until: state.until });\n try {\n levelStorage.storage.setItem(levelStorage.key, JSON.stringify(overrides));\n } catch (error) {\n reportError(error, LOGGING_ERROR_SOURCES.STORAGE);\n }\n }\n\n function reset(state) {\n scheduler.clearTimeout(state.timer);\n state.timer = undefined;\n state.until = undefined;\n state.level = state.defaultLevel;\n state.rank = levelRank(state.level);\n }\n\n function apply(state, level, until) {\n reset(state);\n state.level = level;\n state.rank = levelRank(level);\n state.until = until;\n state.timer = scheduler.setTimeout(\n () => {\n if (stopped) return;\n if (until > now()) {\n apply(state, level, until);\n return;\n }\n reset(state);\n save();\n },\n Math.min(LOGGING_LIMITS.MAX_TIMER_DELAY_MS, Math.max(0, until - now())),\n );\n }\n\n function reloadLevels() {\n if (stopped) return;\n for (const state of states.values()) reset(state);\n if (!levelStorage) return;\n try {\n const saved = JSON.parse(\n levelStorage.storage.getItem(levelStorage.key) ?? '{}',\n );\n if (!saved || typeof saved !== 'object') return;\n const time = now();\n for (const [id, state] of states) {\n const override = Object.hasOwn(saved, id) && saved[id];\n if (\n override &&\n levelRank(override.level) >= 0 &&\n Number.isFinite(override.until) &&\n override.until > time\n )\n apply(\n state,\n override.level,\n Math.min(override.until, time + maxDuration),\n );\n }\n } catch (error) {\n reportError(error, LOGGING_ERROR_SOURCES.STORAGE);\n }\n }\n reloadLevels();\n return {\n requireArea,\n enabled(area, level) {\n const state = requireArea(area);\n if (state.until && state.until <= now()) {\n reset(state);\n save();\n }\n return levelRank(level) >= state.rank;\n },\n\n setLevel(area, level, { durationMs = maxDuration } = {}) {\n assertLevel(level);\n positive(durationMs, 'durationMs');\n const state = requireArea(area);\n if (stopped) return;\n apply(state, level, now() + Math.min(durationMs, maxDuration));\n save();\n },\n\n resetLevel(area) {\n if (stopped) return;\n if (area !== undefined) reset(requireArea(area));\n else for (const state of states.values()) reset(state);\n save();\n },\n reloadLevels,\n getLevels() {\n const result = {};\n for (const [id, state] of states) {\n if (state.until && state.until <= now()) {\n reset(state);\n save();\n }\n define(\n result,\n id,\n Object.freeze({\n level: state.level,\n defaultLevel: state.defaultLevel,\n ...(state.until ? { until: state.until } : {}),\n }),\n );\n }\n return Object.freeze(result);\n },\n\n stop() {\n stopped = true;\n for (const state of states.values()) scheduler.clearTimeout(state.timer);\n },\n };\n}\n","import {\n assertStormLimit,\n copyBindings,\n scheduler as hostScheduler,\n randomHex,\n report,\n resolveLimits,\n} from './common.js';\nimport {\n LEVELS,\n LOGGING_ERROR_CODES,\n LOGGING_ERROR_SOURCES,\n LOGGING_LIMITS,\n} from './constants.js';\nimport { ownRecord } from './conversion.js';\nimport { loggingError } from './errors.js';\nimport { createLevels } from './levels.js';\n\nexport function createLogging(options) {\n if (\n !Array.isArray(options?.areas) ||\n !options.redactor ||\n typeof options.redactor.redact !== 'function'\n )\n throw new TypeError('Areas and an explicit redactor are required');\n const {\n redactor,\n now = Date.now,\n monotonicNow = () => globalThis.performance?.now() ?? Date.now(),\n scheduler = hostScheduler,\n stormLimit = LOGGING_LIMITS.DEFAULT_STORM_LIMIT,\n } = options;\n const limits = resolveLimits(redactor.limits);\n if (\n !redactor.limits ||\n Object.keys(limits).some((key) => !Object.hasOwn(redactor.limits, key))\n )\n throw new TypeError('Redactor limits are required');\n assertStormLimit(stormLimit);\n const runId = options.createRunId?.() ?? randomHex(16);\n if (typeof runId !== 'string' || !runId)\n throw new TypeError('Invalid run ID');\n const sinks = new Set();\n const roots = new Map();\n const storms = new Map();\n let context = copyBindings(options.context);\n let seq = 0;\n let closed = false;\n let busy = false;\n let scopeReported = false;\n let reporting = false;\n let stormTimer;\n let stopPromise;\n\n function onError(error, source) {\n if (reporting) return;\n reporting = true;\n const wasBusy = busy;\n busy = true;\n report(options.onError, error, source);\n busy = wasBusy;\n reporting = false;\n }\n for (const sink of options.sinks ?? []) addSink(sink);\n const levels = createLevels({ ...options, now, scheduler }, onError);\n\n function emit(area, scope, binding, level, message, data, bypass = false) {\n try {\n if (busy) {\n onError(\n loggingError(LOGGING_ERROR_CODES.RECURSIVE_LOGGING),\n LOGGING_ERROR_SOURCES.REENTRY,\n );\n return;\n }\n if (\n closed ||\n options.isActive?.() === false ||\n sinks.size === 0 ||\n (!bypass && !levels.enabled(area, level))\n )\n return;\n if (!bypass && stormLimit !== false) {\n const key = JSON.stringify([area, scope]);\n let counter = storms.get(key);\n if (!counter) {\n const cacheKey =\n storms.size < LOGGING_LIMITS.STORM_SCOPE_PAIRS ? key : 'overflow';\n counter = storms.get(cacheKey);\n if (!counter) {\n counter = {\n area,\n scope,\n start: monotonicNow(),\n count: 0,\n dropped: 0,\n };\n storms.set(cacheKey, counter);\n }\n }\n const time = monotonicNow();\n if (\n time - counter.start >= LOGGING_LIMITS.STORM_WINDOW_MS ||\n time < counter.start\n ) {\n counter.start = time;\n counter.count = 0;\n }\n if (counter.count++ >= stormLimit) {\n counter.dropped++;\n if (stormTimer === undefined)\n stormTimer = scheduler.setTimeout(\n summarize,\n LOGGING_LIMITS.STORM_SUMMARY_DELAY_MS,\n );\n return;\n }\n }\n const registrations = Array.from(sinks);\n busy = true;\n try {\n let value;\n try {\n value = typeof data === 'function' ? data() : data;\n } catch (error) {\n onError(error, LOGGING_ERROR_SOURCES.DATA);\n return;\n }\n if (options.isActive?.() === false || sinks.size === 0) return;\n let record;\n try {\n record = ownRecord(\n redactor.redact({\n runId,\n seq: ++seq,\n at: now(),\n area,\n scope,\n level,\n message,\n context: { ...context, ...binding },\n data: value,\n }),\n limits,\n );\n } catch (error) {\n onError(error, LOGGING_ERROR_SOURCES.REDACTOR);\n return;\n }\n if (options.isActive?.() === false) return;\n for (const registration of registrations) {\n if (options.isActive?.() === false || !sinks.has(registration))\n continue;\n try {\n registration.sink.write(record);\n } catch (error) {\n onError(error, LOGGING_ERROR_SOURCES.SINK);\n }\n }\n } finally {\n busy = false;\n }\n } catch (error) {\n busy = false;\n onError(error, LOGGING_ERROR_SOURCES.DATA);\n }\n }\n\n function summarize() {\n stormTimer = undefined;\n for (const counter of storms.values()) {\n if (!counter.dropped) continue;\n const dropped = counter.dropped;\n counter.dropped = 0;\n emit(\n counter.area,\n counter.scope,\n {},\n 'warn',\n 'logging.suppressed',\n { scope: counter.scope, dropped },\n true,\n );\n }\n }\n\n function logger(area, scope, binding = {}) {\n const result = {};\n for (const level of Object.values(LEVELS))\n result[level] = (message, data) =>\n emit(area, scope, binding, level, message, data);\n result.child = ({\n scope: childScope = scope,\n context: childContext = {},\n } = {}) =>\n logger(area, childScope, { ...binding, ...copyBindings(childContext) });\n return Object.freeze(result);\n }\n\n function addSink(sink) {\n if (!sink || typeof sink.write !== 'function')\n throw new TypeError('A sink must have write');\n if (closed) throw loggingError(LOGGING_ERROR_CODES.STOPPED);\n const registration = { sink };\n sinks.add(registration);\n return () => {\n sinks.delete(registration);\n };\n }\n\n async function lifecycle(registrations, methods) {\n const failures = [];\n for (const method of methods) {\n await Promise.all(\n registrations.map(async ({ sink }) => {\n try {\n const previous = busy;\n busy = true;\n let result;\n try {\n result = sink[method]?.();\n } finally {\n busy = previous;\n }\n await result;\n } catch (error) {\n failures.push(error);\n onError(error, LOGGING_ERROR_SOURCES.SINK);\n }\n }),\n );\n }\n if (failures.length)\n throw new AggregateError(failures, 'Logging lifecycle failed');\n }\n return Object.freeze({\n runId,\n getLogger(area, scope) {\n levels.requireArea(area);\n if (typeof scope !== 'string')\n throw new TypeError('Scope must be a string');\n const key = JSON.stringify([area, scope]);\n const cached = roots.get(key);\n if (cached) return cached;\n const created = logger(area, scope);\n if (roots.size < LOGGING_LIMITS.ROOT_LOGGER_CACHE_PAIRS) {\n roots.set(key, created);\n return created;\n }\n if (!scopeReported) {\n scopeReported = true;\n onError(\n loggingError(LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT),\n LOGGING_ERROR_SOURCES.SCOPE,\n );\n }\n return created;\n },\n\n setContext(values) {\n context = { ...context, ...copyBindings(values) };\n for (const key of Object.keys(context))\n if (context[key] === undefined) delete context[key];\n },\n setLevel: levels.setLevel,\n resetLevel: levels.resetLevel,\n reloadLevels: levels.reloadLevels,\n getLevels: levels.getLevels,\n addSink,\n flush() {\n const registrations = Array.from(sinks);\n return Promise.resolve().then(() => lifecycle(registrations, ['flush']));\n },\n\n stop() {\n if (!stopPromise) {\n closed = true;\n levels.stop();\n scheduler.clearTimeout(stormTimer);\n const registrations = Array.from(sinks);\n stopPromise = Promise.resolve().then(() =>\n lifecycle(registrations, ['flush', 'stop']),\n );\n }\n return stopPromise;\n },\n });\n}\n"],"names":["scheduler","hostScheduler"],"mappings":";;;;AAEO,MAAM,cAAc,mBAAmB,MAAM,CAAC,MAAM,CAAC;AAC5D,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,GAAG,+BAA+B;AAC1E,EAAE,CAAC,mBAAmB,CAAC,uBAAuB;AAC9C,IAAI,sCAAsC;AAC1C,EAAE,CAAC,mBAAmB,CAAC,OAAO,GAAG,oBAAoB;AACrD,CAAC,CAAC;;AAEK,SAAS,YAAY,CAAC,IAAI,EAAE;AACnC,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;AACjE;;ACRO,SAAS,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE;AACnD,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,OAAO;AACzD,EAAE,MAAM,WAAW,GAAG,QAAQ;AAC9B,IAAI,OAAO,CAAC,aAAa,IAAI,cAAc,CAAC,yBAAyB;AACrE,IAAI,eAAe;AACnB,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;AAC1B,EAAE,IAAI,OAAO,GAAG,KAAK;AACrB,EAAE,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,KAAK,EAAE;AAC9C,IAAI,WAAW,CAAC,KAAK,CAAC;AACtB,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACvD,MAAM,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC;AACjE,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;AACnB,MAAM,KAAK;AACX,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;AAC5B,MAAM,KAAK,EAAE,SAAS;AACtB,MAAM,KAAK,EAAE,SAAS;AACtB,KAAK,CAAC;AACN,EAAE;AACF,EAAE,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK;AAChC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC;AACvD,IAAI,OAAO,KAAK;AAChB,EAAE,CAAC;;AAEH,EAAE,SAAS,IAAI,GAAG;AAClB,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE;AAClC,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM;AACpC,MAAM,IAAI,KAAK,CAAC,KAAK;AACrB,QAAQ,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACzE,IAAI,IAAI;AACR,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC/E,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,WAAW,CAAC,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC;AACvD,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE;AACxB,IAAI,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AACvC,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS;AAC3B,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS;AAC3B,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY;AACpC,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AACvC,EAAE;;AAEF,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACtC,IAAI,KAAK,CAAC,KAAK,CAAC;AAChB,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK;AACvB,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;AACjC,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK;AACvB,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,UAAU;AACtC,MAAM,MAAM;AACZ,QAAQ,IAAI,OAAO,EAAE;AACrB,QAAQ,IAAI,KAAK,GAAG,GAAG,EAAE,EAAE;AAC3B,UAAU,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACpC,UAAU;AACV,QAAQ;AACR,QAAQ,KAAK,CAAC,KAAK,CAAC;AACpB,QAAQ,IAAI,EAAE;AACd,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;AAC7E,KAAK;AACL,EAAE;;AAEF,EAAE,SAAS,YAAY,GAAG;AAC1B,IAAI,IAAI,OAAO,EAAE;AACjB,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AACrD,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,IAAI,IAAI;AACR,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAC9B,QAAQ,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI;AAC9D,OAAO;AACP,MAAM,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC/C,MAAM,MAAM,IAAI,GAAG,GAAG,EAAE;AACxB,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;AACxC,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC9D,QAAQ;AACR,UAAU,QAAQ;AAClB,UAAU,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACxC,UAAU,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzC,UAAU,QAAQ,CAAC,KAAK,GAAG;AAC3B;AACA,UAAU,KAAK;AACf,YAAY,KAAK;AACjB,YAAY,QAAQ,CAAC,KAAK;AAC1B,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC;AACxD,WAAW;AACX,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,WAAW,CAAC,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC;AACvD,IAAI;AACJ,EAAE;AACF,EAAE,YAAY,EAAE;AAChB,EAAE,OAAO;AACT,IAAI,WAAW;AACf,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;AACzB,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE;AAC/C,QAAQ,KAAK,CAAC,KAAK,CAAC;AACpB,QAAQ,IAAI,EAAE;AACd,MAAM;AACN,MAAM,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI;AAC3C,IAAI,CAAC;;AAEL,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,GAAG,WAAW,EAAE,GAAG,EAAE,EAAE;AAC7D,MAAM,WAAW,CAAC,KAAK,CAAC;AACxB,MAAM,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;AACxC,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACrC,MAAM,IAAI,OAAO,EAAE;AACnB,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACpE,MAAM,IAAI,EAAE;AACZ,IAAI,CAAC;;AAEL,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,MAAM,IAAI,OAAO,EAAE;AACnB,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACtD,WAAW,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AAC5D,MAAM,IAAI,EAAE;AACZ,IAAI,CAAC;AACL,IAAI,YAAY;AAChB,IAAI,SAAS,GAAG;AAChB,MAAM,MAAM,MAAM,GAAG,EAAE;AACvB,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;AACxC,QAAQ,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE;AACjD,UAAU,KAAK,CAAC,KAAK,CAAC;AACtB,UAAU,IAAI,EAAE;AAChB,QAAQ;AACR,QAAQ,MAAM;AACd,UAAU,MAAM;AAChB,UAAU,EAAE;AACZ,UAAU,MAAM,CAAC,MAAM,CAAC;AACxB,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK;AAC9B,YAAY,YAAY,EAAE,KAAK,CAAC,YAAY;AAC5C,YAAY,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1D,WAAW,CAAC;AACZ,SAAS;AACT,MAAM;AACN,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,IAAI,CAAC;;AAEL,IAAI,IAAI,GAAG;AACX,MAAM,OAAO,GAAG,IAAI;AACpB,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9E,IAAI,CAAC;AACL,GAAG;AACH;;ACpIO,SAAS,aAAa,CAAC,OAAO,EAAE;AACvC,EAAE;AACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AAClC,IAAI,CAAC,OAAO,CAAC,QAAQ;AACrB,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK;AACvC;AACA,IAAI,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC;AACtE,EAAE,MAAM;AACR,IAAI,QAAQ;AACZ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG;AAClB,IAAI,YAAY,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;AACpE,eAAIA,WAAS,GAAGC,SAAa;AAC7B,IAAI,UAAU,GAAG,cAAc,CAAC,mBAAmB;AACnD,GAAG,GAAG,OAAO;AACb,EAAE,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/C,EAAE;AACF,IAAI,CAAC,QAAQ,CAAC,MAAM;AACpB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;AAC1E;AACA,IAAI,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC;AACvD,EAAE,gBAAgB,CAAC,UAAU,CAAC;AAC9B,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;AACxD,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK;AACzC,IAAI,MAAM,IAAI,SAAS,CAAC,gBAAgB,CAAC;AACzC,EAAE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;AACzB,EAAE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;AACzB,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;AAC1B,EAAE,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AAC7C,EAAE,IAAI,GAAG,GAAG,CAAC;AACb,EAAE,IAAI,MAAM,GAAG,KAAK;AACpB,EAAE,IAAI,IAAI,GAAG,KAAK;AAClB,EAAE,IAAI,aAAa,GAAG,KAAK;AAC3B,EAAE,IAAI,SAAS,GAAG,KAAK;AACvB,EAAE,IAAI,UAAU;AAChB,EAAE,IAAI,WAAW;;AAEjB,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AAClC,IAAI,IAAI,SAAS,EAAE;AACnB,IAAI,SAAS,GAAG,IAAI;AACpB,IAAI,MAAM,OAAO,GAAG,IAAI;AACxB,IAAI,IAAI,GAAG,IAAI;AACf,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;AAC1C,IAAI,IAAI,GAAG,OAAO;AAClB,IAAI,SAAS,GAAG,KAAK;AACrB,EAAE;AACF,EAAE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;AACvD,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,aAAED,WAAS,EAAE,EAAE,OAAO,CAAC;;AAEtE,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE;AAC5E,IAAI,IAAI;AACR,MAAM,IAAI,IAAI,EAAE;AAChB,QAAQ,OAAO;AACf,UAAU,YAAY,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;AAC7D,UAAU,qBAAqB,CAAC,OAAO;AACvC,SAAS;AACT,QAAQ;AACR,MAAM;AACN,MAAM;AACN,QAAQ,MAAM;AACd,QAAQ,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK;AACtC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC;AACxB,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;AAChD;AACA,QAAQ;AACR,MAAM,IAAI,CAAC,MAAM,IAAI,UAAU,KAAK,KAAK,EAAE;AAC3C,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjD,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,UAAU,MAAM,QAAQ;AACxB,YAAY,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,iBAAiB,GAAG,GAAG,GAAG,UAAU;AAC7E,UAAU,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxC,UAAU,IAAI,CAAC,OAAO,EAAE;AACxB,YAAY,OAAO,GAAG;AACtB,cAAc,IAAI;AAClB,cAAc,KAAK;AACnB,cAAc,KAAK,EAAE,YAAY,EAAE;AACnC,cAAc,KAAK,EAAE,CAAC;AACtB,cAAc,OAAO,EAAE,CAAC;AACxB,aAAa;AACb,YAAY,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AACzC,UAAU;AACV,QAAQ;AACR,QAAQ,MAAM,IAAI,GAAG,YAAY,EAAE;AACnC,QAAQ;AACR,UAAU,IAAI,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,eAAe;AAChE,UAAU,IAAI,GAAG,OAAO,CAAC;AACzB,UAAU;AACV,UAAU,OAAO,CAAC,KAAK,GAAG,IAAI;AAC9B,UAAU,OAAO,CAAC,KAAK,GAAG,CAAC;AAC3B,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,UAAU,EAAE;AAC3C,UAAU,OAAO,CAAC,OAAO,EAAE;AAC3B,UAAU,IAAI,UAAU,KAAK,SAAS;AACtC,YAAY,UAAU,GAAGA,WAAS,CAAC,UAAU;AAC7C,cAAc,SAAS;AACvB,cAAc,cAAc,CAAC,sBAAsB;AACnD,aAAa;AACb,UAAU;AACV,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,MAAM,IAAI,GAAG,IAAI;AACjB,MAAM,IAAI;AACV,QAAQ,IAAI,KAAK;AACjB,QAAQ,IAAI;AACZ,UAAU,KAAK,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI;AAC5D,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC;AACpD,UAAU;AACV,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AAChE,QAAQ,IAAI,MAAM;AAClB,QAAQ,IAAI;AACZ,UAAU,MAAM,GAAG,SAAS;AAC5B,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,cAAc,KAAK;AACnB,cAAc,GAAG,EAAE,EAAE,GAAG;AACxB,cAAc,EAAE,EAAE,GAAG,EAAE;AACvB,cAAc,IAAI;AAClB,cAAc,KAAK;AACnB,cAAc,KAAK;AACnB,cAAc,OAAO;AACrB,cAAc,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE;AACjD,cAAc,IAAI,EAAE,KAAK;AACzB,aAAa,CAAC;AACd,YAAY,MAAM;AAClB,WAAW;AACX,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,QAAQ,CAAC;AACxD,UAAU;AACV,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE;AAC5C,QAAQ,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AAClD,UAAU,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AACxE,YAAY;AACZ,UAAU,IAAI;AACd,YAAY,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3C,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC;AACtD,UAAU;AACV,QAAQ;AACR,MAAM,CAAC,SAAS;AAChB,QAAQ,IAAI,GAAG,KAAK;AACpB,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,GAAG,KAAK;AAClB,MAAM,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC;AAChD,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,SAAS,GAAG;AACvB,IAAI,UAAU,GAAG,SAAS;AAC1B,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC5B,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;AACrC,MAAM,OAAO,CAAC,OAAO,GAAG,CAAC;AACzB,MAAM,IAAI;AACV,QAAQ,OAAO,CAAC,IAAI;AACpB,QAAQ,OAAO,CAAC,KAAK;AACrB,QAAQ,EAAE;AACV,QAAQ,MAAM;AACd,QAAQ,oBAAoB;AAC5B,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AACzC,QAAQ,IAAI;AACZ,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AAC7C,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI;AACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AACxD,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC;AACpB,MAAM,KAAK,EAAE,UAAU,GAAG,KAAK;AAC/B,MAAM,OAAO,EAAE,YAAY,GAAG,EAAE;AAChC,KAAK,GAAG,EAAE;AACV,MAAM,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7E,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,EAAE;;AAEF,EAAE,SAAS,OAAO,CAAC,IAAI,EAAE;AACzB,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;AACjD,MAAM,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;AACnD,IAAI,IAAI,MAAM,EAAE,MAAM,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/D,IAAI,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE;AACjC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC3B,IAAI,OAAO,MAAM;AACjB,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;AAChC,IAAI,CAAC;AACL,EAAE;;AAEF,EAAE,eAAe,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE;AACnD,IAAI,MAAM,QAAQ,GAAG,EAAE;AACvB,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAClC,MAAM,MAAM,OAAO,CAAC,GAAG;AACvB,QAAQ,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK;AAC9C,UAAU,IAAI;AACd,YAAY,MAAM,QAAQ,GAAG,IAAI;AACjC,YAAY,IAAI,GAAG,IAAI;AACvB,YAAY,IAAI,MAAM;AACtB,YAAY,IAAI;AAChB,cAAc,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;AACvC,YAAY,CAAC,SAAS;AACtB,cAAc,IAAI,GAAG,QAAQ;AAC7B,YAAY;AACZ,YAAY,MAAM,MAAM;AACxB,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC;AACtD,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,OAAO;AACP,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,MAAM;AACvB,MAAM,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,0BAA0B,CAAC;AACpE,EAAE;AACF,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,IAAI,KAAK;AACT,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9B,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;AACnC,QAAQ,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;AACrD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/C,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC,MAAM,IAAI,MAAM,EAAE,OAAO,MAAM;AAC/B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC,uBAAuB,EAAE;AAC/D,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;AAC/B,QAAQ,OAAO,OAAO;AACtB,MAAM;AACN,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAQ,aAAa,GAAG,IAAI;AAC5B,QAAQ,OAAO;AACf,UAAU,YAAY,CAAC,mBAAmB,CAAC,uBAAuB,CAAC;AACnE,UAAU,qBAAqB,CAAC,KAAK;AACrC,SAAS;AACT,MAAM;AACN,MAAM,OAAO,OAAO;AACpB,IAAI,CAAC;;AAEL,IAAI,UAAU,CAAC,MAAM,EAAE;AACvB,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE;AACvD,MAAM,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5C,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;AAC3D,IAAI,CAAC;AACL,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,UAAU,EAAE,MAAM,CAAC,UAAU;AACjC,IAAI,YAAY,EAAE,MAAM,CAAC,YAAY;AACrC,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,OAAO;AACX,IAAI,KAAK,GAAG;AACZ,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,MAAM,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,IAAI,CAAC;;AAEL,IAAI,IAAI,GAAG;AACX,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAQ,MAAM,GAAG,IAAI;AACrB,QAAQ,MAAM,CAAC,IAAI,EAAE;AACrB,QAAQA,WAAS,CAAC,YAAY,CAAC,UAAU,CAAC;AAC1C,QAAQ,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/C,QAAQ,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;AAC7C,UAAU,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrD,SAAS;AACT,MAAM;AACN,MAAM,OAAO,WAAW;AACxB,IAAI,CAAC;AACL,GAAG,CAAC;AACJ;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var common = require('./chunk-CXZYNALm.cjs');
|
|
4
|
+
|
|
5
|
+
function escapeText(value) {
|
|
6
|
+
return String(value).replace(
|
|
7
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: Escape record control characters.
|
|
8
|
+
/[\u0000-\u001f\u007f-\u009f\u2028\u2029\u202a-\u202e\u2066-\u2069]/g,
|
|
9
|
+
(character) =>
|
|
10
|
+
`\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`,
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function quote(value) {
|
|
15
|
+
const text = escapeText(value);
|
|
16
|
+
return /[\s="\\]/.test(text) ? JSON.stringify(text) : text;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function formatRecord(record) {
|
|
20
|
+
const { at, level, area, scope, message, runId, context, fields, error } =
|
|
21
|
+
record;
|
|
22
|
+
let header = `${new Date(at).toISOString()} ${level.toUpperCase()} area=${quote(area)} scope=${quote(scope)} message=${quote(message)} runId=${quote(runId)}`;
|
|
23
|
+
for (const values of [context, fields])
|
|
24
|
+
for (const [key, value] of Object.entries(values ?? {}))
|
|
25
|
+
header += ` ${quote(key)}=${quote(typeof value === 'object' ? JSON.stringify(value) : value)}`;
|
|
26
|
+
if (error)
|
|
27
|
+
header += `\n ${escapeText(error.name)}: ${escapeText(error.message)}${
|
|
28
|
+
error.stack
|
|
29
|
+
? `\n${error.stack
|
|
30
|
+
.split(/\r?\n/)
|
|
31
|
+
.map((line) => ` ${escapeText(line)}`)
|
|
32
|
+
.join('\n')}`
|
|
33
|
+
: ''
|
|
34
|
+
}${error.cause ? `\n cause=${escapeText(JSON.stringify(error.cause))}` : ''}${error.errors ? `\n errors=${escapeText(JSON.stringify(error.errors))}` : ''}${error.fields ? `\n fields=${escapeText(JSON.stringify(error.fields))}` : ''}`;
|
|
35
|
+
return header;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function createConsoleSink({
|
|
39
|
+
level = 'debug',
|
|
40
|
+
console: output = globalThis.console,
|
|
41
|
+
} = {}) {
|
|
42
|
+
common.assertLevel(level);
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
write(record) {
|
|
45
|
+
if (common.levelRank(record.level) >= common.levelRank(level))
|
|
46
|
+
output[record.level](formatRecord(record));
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.createConsoleSink = createConsoleSink;
|
|
52
|
+
exports.formatRecord = formatRecord;
|
|
53
|
+
//# sourceMappingURL=chunk-DqK_3eFr.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-DqK_3eFr.cjs","sources":["../src/core/format.js"],"sourcesContent":["import { assertLevel, levelRank } from './common.js';\n\nfunction escapeText(value) {\n return String(value).replace(\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Escape record control characters.\n /[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029\\u202a-\\u202e\\u2066-\\u2069]/g,\n (character) =>\n `\\\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`,\n );\n}\n\nfunction quote(value) {\n const text = escapeText(value);\n return /[\\s=\"\\\\]/.test(text) ? JSON.stringify(text) : text;\n}\n\nexport function formatRecord(record) {\n const { at, level, area, scope, message, runId, context, fields, error } =\n record;\n let header = `${new Date(at).toISOString()} ${level.toUpperCase()} area=${quote(area)} scope=${quote(scope)} message=${quote(message)} runId=${quote(runId)}`;\n for (const values of [context, fields])\n for (const [key, value] of Object.entries(values ?? {}))\n header += ` ${quote(key)}=${quote(typeof value === 'object' ? JSON.stringify(value) : value)}`;\n if (error)\n header += `\\n ${escapeText(error.name)}: ${escapeText(error.message)}${\n error.stack\n ? `\\n${error.stack\n .split(/\\r?\\n/)\n .map((line) => ` ${escapeText(line)}`)\n .join('\\n')}`\n : ''\n }${error.cause ? `\\n cause=${escapeText(JSON.stringify(error.cause))}` : ''}${error.errors ? `\\n errors=${escapeText(JSON.stringify(error.errors))}` : ''}${error.fields ? `\\n fields=${escapeText(JSON.stringify(error.fields))}` : ''}`;\n return header;\n}\n\nexport function createConsoleSink({\n level = 'debug',\n console: output = globalThis.console,\n} = {}) {\n assertLevel(level);\n return Object.freeze({\n write(record) {\n if (levelRank(record.level) >= levelRank(level))\n output[record.level](formatRecord(record));\n },\n });\n}\n"],"names":["assertLevel","levelRank"],"mappings":"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"}
|