rivetkit 2.0.22-rc.2 → 2.0.23
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/dist/schemas/actor-persist/v2.ts +29 -26
- package/dist/tsup/{chunk-FLVL7RGH.js → chunk-3I6ZIJVJ.js} +3 -3
- package/dist/tsup/{chunk-GXIO5YOT.cjs → chunk-3JYSUFET.cjs} +24 -10
- package/dist/tsup/chunk-3JYSUFET.cjs.map +1 -0
- package/dist/tsup/{chunk-NDOG6IQ5.cjs → chunk-54DVMQPT.cjs} +6 -6
- package/dist/tsup/{chunk-NDOG6IQ5.cjs.map → chunk-54DVMQPT.cjs.map} +1 -1
- package/dist/tsup/{chunk-7RUROQAZ.js → chunk-5PKKNNNS.js} +279 -9
- package/dist/tsup/chunk-5PKKNNNS.js.map +1 -0
- package/dist/tsup/{chunk-F7WVJXPB.js → chunk-5UJQWWO3.js} +2 -2
- package/dist/tsup/{chunk-YUBR6XCJ.cjs → chunk-C56XVVV4.cjs} +280 -10
- package/dist/tsup/chunk-C56XVVV4.cjs.map +1 -0
- package/dist/tsup/{chunk-Q5CAVEKC.cjs → chunk-D6PCH7FR.cjs} +561 -487
- package/dist/tsup/chunk-D6PCH7FR.cjs.map +1 -0
- package/dist/tsup/{chunk-C4FPCW7T.js → chunk-DLYZKFRY.js} +2 -2
- package/dist/tsup/{chunk-AMK3AACS.js → chunk-FTQ62XTN.js} +373 -299
- package/dist/tsup/chunk-FTQ62XTN.js.map +1 -0
- package/dist/tsup/{chunk-LFP446KS.cjs → chunk-HNYF4T36.cjs} +14 -14
- package/dist/tsup/{chunk-LFP446KS.cjs.map → chunk-HNYF4T36.cjs.map} +1 -1
- package/dist/tsup/{chunk-5TRXLS6X.cjs → chunk-JMLTKMJ7.cjs} +48 -44
- package/dist/tsup/chunk-JMLTKMJ7.cjs.map +1 -0
- package/dist/tsup/{chunk-ZY4DKLMT.cjs → chunk-NCUALX2Q.cjs} +3 -3
- package/dist/tsup/{chunk-ZY4DKLMT.cjs.map → chunk-NCUALX2Q.cjs.map} +1 -1
- package/dist/tsup/{chunk-HLZT5C6A.js → chunk-NOZSCUPQ.js} +99 -50
- package/dist/tsup/chunk-NOZSCUPQ.js.map +1 -0
- package/dist/tsup/{chunk-CVLO2OOK.js → chunk-PHNIVSG5.js} +19 -5
- package/dist/tsup/chunk-PHNIVSG5.js.map +1 -0
- package/dist/tsup/{chunk-BHLQTKOD.js → chunk-RUTBXBRR.js} +27 -23
- package/dist/tsup/{chunk-BHLQTKOD.js.map → chunk-RUTBXBRR.js.map} +1 -1
- package/dist/tsup/{chunk-MQDXPGNE.js → chunk-RVVUS4X6.js} +6 -6
- package/dist/tsup/{chunk-UBMUBNS2.cjs → chunk-SN4KWTRA.cjs} +12 -12
- package/dist/tsup/{chunk-UBMUBNS2.cjs.map → chunk-SN4KWTRA.cjs.map} +1 -1
- package/dist/tsup/{chunk-ZL6NSKF2.cjs → chunk-XSDSNHSE.cjs} +3 -3
- package/dist/tsup/{chunk-ZL6NSKF2.cjs.map → chunk-XSDSNHSE.cjs.map} +1 -1
- package/dist/tsup/{chunk-YLWF6RFL.cjs → chunk-XYK5PY3B.cjs} +283 -234
- package/dist/tsup/chunk-XYK5PY3B.cjs.map +1 -0
- package/dist/tsup/{chunk-EJXZYQ3N.js → chunk-YAYNBR37.js} +2 -2
- package/dist/tsup/client/mod.cjs +8 -9
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +2 -2
- package/dist/tsup/client/mod.d.ts +2 -2
- package/dist/tsup/client/mod.js +7 -8
- package/dist/tsup/common/log.cjs +2 -3
- package/dist/tsup/common/log.cjs.map +1 -1
- package/dist/tsup/common/log.js +1 -2
- package/dist/tsup/common/websocket.cjs +3 -4
- package/dist/tsup/common/websocket.cjs.map +1 -1
- package/dist/tsup/common/websocket.js +2 -3
- package/dist/tsup/{conn-BYXlxnh0.d.ts → conn-B3Vhbgnd.d.ts} +5 -1
- package/dist/tsup/{conn-BiazosE_.d.cts → conn-DJWL3nGx.d.cts} +5 -1
- package/dist/tsup/driver-helpers/mod.cjs +4 -5
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +1 -1
- package/dist/tsup/driver-helpers/mod.d.ts +1 -1
- package/dist/tsup/driver-helpers/mod.js +3 -4
- package/dist/tsup/driver-test-suite/mod.cjs +70 -72
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +1 -1
- package/dist/tsup/driver-test-suite/mod.d.ts +1 -1
- package/dist/tsup/driver-test-suite/mod.js +11 -13
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +5 -6
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.d.cts +2 -2
- package/dist/tsup/inspector/mod.d.ts +2 -2
- package/dist/tsup/inspector/mod.js +4 -5
- package/dist/tsup/mod.cjs +9 -10
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +4 -4
- package/dist/tsup/mod.d.ts +4 -4
- package/dist/tsup/mod.js +8 -9
- package/dist/tsup/test/mod.cjs +10 -11
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +1 -1
- package/dist/tsup/test/mod.d.ts +1 -1
- package/dist/tsup/test/mod.js +9 -10
- package/dist/tsup/utils.cjs +2 -2
- package/dist/tsup/utils.js +1 -1
- package/package.json +2 -2
- package/src/actor/conn-drivers.ts +0 -32
- package/src/actor/conn-socket.ts +2 -0
- package/src/actor/conn.ts +13 -12
- package/src/actor/instance.ts +164 -36
- package/src/actor/persisted.ts +4 -1
- package/src/actor/router-endpoints.ts +14 -0
- package/src/actor/router.ts +2 -0
- package/src/actor/utils.test.ts +48 -0
- package/src/actor/utils.ts +23 -0
- package/src/drivers/engine/actor-driver.ts +97 -35
- package/src/drivers/file-system/manager.ts +4 -0
- package/src/schemas/actor-persist/versioned.ts +4 -0
- package/src/utils.ts +15 -6
- package/dist/tsup/chunk-5N6F5PXD.cjs +0 -269
- package/dist/tsup/chunk-5N6F5PXD.cjs.map +0 -1
- package/dist/tsup/chunk-5TRXLS6X.cjs.map +0 -1
- package/dist/tsup/chunk-7RUROQAZ.js.map +0 -1
- package/dist/tsup/chunk-AMK3AACS.js.map +0 -1
- package/dist/tsup/chunk-CVLO2OOK.js.map +0 -1
- package/dist/tsup/chunk-GXIO5YOT.cjs.map +0 -1
- package/dist/tsup/chunk-HLZT5C6A.js.map +0 -1
- package/dist/tsup/chunk-Q5CAVEKC.cjs.map +0 -1
- package/dist/tsup/chunk-VMFBKBJL.js +0 -269
- package/dist/tsup/chunk-VMFBKBJL.js.map +0 -1
- package/dist/tsup/chunk-YLWF6RFL.cjs.map +0 -1
- package/dist/tsup/chunk-YUBR6XCJ.cjs.map +0 -1
- /package/dist/tsup/{chunk-FLVL7RGH.js.map → chunk-3I6ZIJVJ.js.map} +0 -0
- /package/dist/tsup/{chunk-F7WVJXPB.js.map → chunk-5UJQWWO3.js.map} +0 -0
- /package/dist/tsup/{chunk-C4FPCW7T.js.map → chunk-DLYZKFRY.js.map} +0 -0
- /package/dist/tsup/{chunk-MQDXPGNE.js.map → chunk-RVVUS4X6.js.map} +0 -0
- /package/dist/tsup/{chunk-EJXZYQ3N.js.map → chunk-YAYNBR37.js.map} +0 -0
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getEnvUniversal
|
|
3
|
-
} from "./chunk-7RUROQAZ.js";
|
|
4
|
-
|
|
5
|
-
// src/common/log.ts
|
|
6
|
-
import {
|
|
7
|
-
pino,
|
|
8
|
-
stdTimeFunctions
|
|
9
|
-
} from "pino";
|
|
10
|
-
import { z } from "zod";
|
|
11
|
-
|
|
12
|
-
// src/common/log-levels.ts
|
|
13
|
-
var LogLevels = {
|
|
14
|
-
TRACE: 0,
|
|
15
|
-
DEBUG: 1,
|
|
16
|
-
INFO: 2,
|
|
17
|
-
WARN: 3,
|
|
18
|
-
ERROR: 4,
|
|
19
|
-
CRITICAL: 5
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
// src/common/logfmt.ts
|
|
23
|
-
var LOG_LEVEL_COLORS = {
|
|
24
|
-
[LogLevels.CRITICAL]: "\x1B[31m",
|
|
25
|
-
// Red
|
|
26
|
-
[LogLevels.ERROR]: "\x1B[31m",
|
|
27
|
-
// Red
|
|
28
|
-
[LogLevels.WARN]: "\x1B[33m",
|
|
29
|
-
// Yellow
|
|
30
|
-
[LogLevels.INFO]: "\x1B[32m",
|
|
31
|
-
// Green
|
|
32
|
-
[LogLevels.DEBUG]: "\x1B[36m",
|
|
33
|
-
// Cyan
|
|
34
|
-
[LogLevels.TRACE]: "\x1B[36m"
|
|
35
|
-
// Cyan
|
|
36
|
-
};
|
|
37
|
-
var RESET_COLOR = "\x1B[0m";
|
|
38
|
-
function stringify(data) {
|
|
39
|
-
let line = "";
|
|
40
|
-
const entries = Object.entries(data);
|
|
41
|
-
for (let i = 0; i < entries.length; i++) {
|
|
42
|
-
const [key, valueRaw] = entries[i];
|
|
43
|
-
let isNull = false;
|
|
44
|
-
let valueString;
|
|
45
|
-
if (valueRaw == null) {
|
|
46
|
-
isNull = true;
|
|
47
|
-
valueString = "";
|
|
48
|
-
} else {
|
|
49
|
-
valueString = valueRaw.toString();
|
|
50
|
-
}
|
|
51
|
-
if (valueString.length > 512 && key !== "msg" && key !== "error")
|
|
52
|
-
valueString = `${valueString.slice(0, 512)}...`;
|
|
53
|
-
const needsQuoting = valueString.indexOf(" ") > -1 || valueString.indexOf("=") > -1;
|
|
54
|
-
const needsEscaping = valueString.indexOf('"') > -1 || valueString.indexOf("\\") > -1;
|
|
55
|
-
valueString = valueString.replace(/\n/g, "\\n");
|
|
56
|
-
if (needsEscaping) valueString = valueString.replace(/["\\]/g, "\\$&");
|
|
57
|
-
if (needsQuoting || needsEscaping) valueString = `"${valueString}"`;
|
|
58
|
-
if (valueString === "" && !isNull) valueString = '""';
|
|
59
|
-
if (LOGGER_CONFIG.enableColor) {
|
|
60
|
-
let color = "\x1B[2m";
|
|
61
|
-
if (key === "level") {
|
|
62
|
-
const level = LogLevels[valueString];
|
|
63
|
-
const levelColor = LOG_LEVEL_COLORS[level];
|
|
64
|
-
if (levelColor) {
|
|
65
|
-
color = levelColor;
|
|
66
|
-
}
|
|
67
|
-
} else if (key === "msg") {
|
|
68
|
-
color = "\x1B[32m";
|
|
69
|
-
} else if (key === "trace") {
|
|
70
|
-
color = "\x1B[34m";
|
|
71
|
-
}
|
|
72
|
-
line += `\x1B[0m\x1B[1m${key}\x1B[0m\x1B[2m=\x1B[0m${color}${valueString}${RESET_COLOR}`;
|
|
73
|
-
} else {
|
|
74
|
-
line += `${key}=${valueString}`;
|
|
75
|
-
}
|
|
76
|
-
if (i !== entries.length - 1) {
|
|
77
|
-
line += " ";
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return line;
|
|
81
|
-
}
|
|
82
|
-
function formatTimestamp(date) {
|
|
83
|
-
const year = date.getUTCFullYear();
|
|
84
|
-
const month = String(date.getUTCMonth() + 1).padStart(2, "0");
|
|
85
|
-
const day = String(date.getUTCDate()).padStart(2, "0");
|
|
86
|
-
const hours = String(date.getUTCHours()).padStart(2, "0");
|
|
87
|
-
const minutes = String(date.getUTCMinutes()).padStart(2, "0");
|
|
88
|
-
const seconds = String(date.getUTCSeconds()).padStart(2, "0");
|
|
89
|
-
const milliseconds = String(date.getUTCMilliseconds()).padStart(3, "0");
|
|
90
|
-
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;
|
|
91
|
-
}
|
|
92
|
-
function castToLogValue(v) {
|
|
93
|
-
if (typeof v === "string" || typeof v === "number" || typeof v === "bigint" || typeof v === "boolean" || v === null || v === void 0) {
|
|
94
|
-
return v;
|
|
95
|
-
}
|
|
96
|
-
if (v instanceof Error) {
|
|
97
|
-
return String(v);
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
return JSON.stringify(v);
|
|
101
|
-
} catch {
|
|
102
|
-
return "[cannot stringify]";
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
var LOGGER_CONFIG = {
|
|
106
|
-
enableColor: false,
|
|
107
|
-
enableSpreadObject: false,
|
|
108
|
-
enableErrorStack: false
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
// src/common/log.ts
|
|
112
|
-
var baseLogger;
|
|
113
|
-
var configuredLogLevel;
|
|
114
|
-
var loggerCache = /* @__PURE__ */ new Map();
|
|
115
|
-
var LogLevelSchema = z.enum([
|
|
116
|
-
"trace",
|
|
117
|
-
"debug",
|
|
118
|
-
"info",
|
|
119
|
-
"warn",
|
|
120
|
-
"error",
|
|
121
|
-
"fatal",
|
|
122
|
-
"silent"
|
|
123
|
-
]);
|
|
124
|
-
function getPinoLevel(logLevel) {
|
|
125
|
-
if (logLevel) {
|
|
126
|
-
return logLevel;
|
|
127
|
-
}
|
|
128
|
-
if (configuredLogLevel) {
|
|
129
|
-
return configuredLogLevel;
|
|
130
|
-
}
|
|
131
|
-
const raw = (getEnvUniversal("LOG_LEVEL") || "warn").toString().toLowerCase();
|
|
132
|
-
const parsed = LogLevelSchema.safeParse(raw);
|
|
133
|
-
if (parsed.success) {
|
|
134
|
-
return parsed.data;
|
|
135
|
-
}
|
|
136
|
-
return "info";
|
|
137
|
-
}
|
|
138
|
-
function getIncludeTarget() {
|
|
139
|
-
return getEnvUniversal("LOG_TARGET") === "1";
|
|
140
|
-
}
|
|
141
|
-
function configureBaseLogger(logger) {
|
|
142
|
-
baseLogger = logger;
|
|
143
|
-
loggerCache.clear();
|
|
144
|
-
}
|
|
145
|
-
function customWrite(level, o) {
|
|
146
|
-
const entries = {};
|
|
147
|
-
if (getEnvUniversal("LOG_TIMESTAMP") === "1" && o.time) {
|
|
148
|
-
const date = typeof o.time === "number" ? new Date(o.time) : /* @__PURE__ */ new Date();
|
|
149
|
-
entries.ts = formatTimestamp(date);
|
|
150
|
-
}
|
|
151
|
-
entries.level = level.toUpperCase();
|
|
152
|
-
if (o.target) {
|
|
153
|
-
entries.target = o.target;
|
|
154
|
-
}
|
|
155
|
-
if (o.msg) {
|
|
156
|
-
entries.msg = o.msg;
|
|
157
|
-
}
|
|
158
|
-
for (const [key, value] of Object.entries(o)) {
|
|
159
|
-
if (key !== "time" && key !== "level" && key !== "target" && key !== "msg" && key !== "pid" && key !== "hostname") {
|
|
160
|
-
entries[key] = castToLogValue(value);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
const output = stringify(entries);
|
|
164
|
-
console.log(output);
|
|
165
|
-
}
|
|
166
|
-
async function configureDefaultLogger(logLevel) {
|
|
167
|
-
if (logLevel) {
|
|
168
|
-
configuredLogLevel = logLevel;
|
|
169
|
-
}
|
|
170
|
-
baseLogger = pino({
|
|
171
|
-
level: getPinoLevel(logLevel),
|
|
172
|
-
messageKey: "msg",
|
|
173
|
-
// Do not include pid/hostname in output
|
|
174
|
-
base: {},
|
|
175
|
-
// Keep a string level in the output
|
|
176
|
-
formatters: {
|
|
177
|
-
level(_label, number) {
|
|
178
|
-
return { level: number };
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
timestamp: getEnvUniversal("LOG_TIMESTAMP") === "1" ? stdTimeFunctions.epochTime : false,
|
|
182
|
-
browser: {
|
|
183
|
-
write: {
|
|
184
|
-
fatal: customWrite.bind(null, "fatal"),
|
|
185
|
-
error: customWrite.bind(null, "error"),
|
|
186
|
-
warn: customWrite.bind(null, "warn"),
|
|
187
|
-
info: customWrite.bind(null, "info"),
|
|
188
|
-
debug: customWrite.bind(null, "debug"),
|
|
189
|
-
trace: customWrite.bind(null, "trace")
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
hooks: {
|
|
193
|
-
logMethod(inputArgs, method, level) {
|
|
194
|
-
var _a;
|
|
195
|
-
const levelMap = {
|
|
196
|
-
10: "trace",
|
|
197
|
-
20: "debug",
|
|
198
|
-
30: "info",
|
|
199
|
-
40: "warn",
|
|
200
|
-
50: "error",
|
|
201
|
-
60: "fatal"
|
|
202
|
-
};
|
|
203
|
-
const levelName = levelMap[level] || "info";
|
|
204
|
-
const time = getEnvUniversal("LOG_TIMESTAMP") === "1" ? Date.now() : void 0;
|
|
205
|
-
const bindings = ((_a = this.bindings) == null ? void 0 : _a.call(this)) || {};
|
|
206
|
-
if (inputArgs.length >= 2) {
|
|
207
|
-
const [objOrMsg, msg] = inputArgs;
|
|
208
|
-
if (typeof objOrMsg === "object" && objOrMsg !== null) {
|
|
209
|
-
customWrite(levelName, {
|
|
210
|
-
...bindings,
|
|
211
|
-
...objOrMsg,
|
|
212
|
-
msg,
|
|
213
|
-
time
|
|
214
|
-
});
|
|
215
|
-
} else {
|
|
216
|
-
customWrite(levelName, {
|
|
217
|
-
...bindings,
|
|
218
|
-
msg: String(objOrMsg),
|
|
219
|
-
time
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
} else if (inputArgs.length === 1) {
|
|
223
|
-
const [objOrMsg] = inputArgs;
|
|
224
|
-
if (typeof objOrMsg === "object" && objOrMsg !== null) {
|
|
225
|
-
customWrite(levelName, {
|
|
226
|
-
...bindings,
|
|
227
|
-
...objOrMsg,
|
|
228
|
-
time
|
|
229
|
-
});
|
|
230
|
-
} else {
|
|
231
|
-
customWrite(levelName, {
|
|
232
|
-
...bindings,
|
|
233
|
-
msg: String(objOrMsg),
|
|
234
|
-
time
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
loggerCache.clear();
|
|
242
|
-
}
|
|
243
|
-
function getBaseLogger() {
|
|
244
|
-
if (!baseLogger) {
|
|
245
|
-
configureDefaultLogger();
|
|
246
|
-
}
|
|
247
|
-
return baseLogger;
|
|
248
|
-
}
|
|
249
|
-
function getLogger(name = "default") {
|
|
250
|
-
const cached = loggerCache.get(name);
|
|
251
|
-
if (cached) {
|
|
252
|
-
return cached;
|
|
253
|
-
}
|
|
254
|
-
const base = getBaseLogger();
|
|
255
|
-
const child = getIncludeTarget() ? base.child({ target: name }) : base;
|
|
256
|
-
loggerCache.set(name, child);
|
|
257
|
-
return child;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
export {
|
|
261
|
-
LogLevelSchema,
|
|
262
|
-
getPinoLevel,
|
|
263
|
-
getIncludeTarget,
|
|
264
|
-
configureBaseLogger,
|
|
265
|
-
configureDefaultLogger,
|
|
266
|
-
getBaseLogger,
|
|
267
|
-
getLogger
|
|
268
|
-
};
|
|
269
|
-
//# sourceMappingURL=chunk-VMFBKBJL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/log.ts","../../src/common/log-levels.ts","../../src/common/logfmt.ts"],"sourcesContent":["import {\n\ttype LevelWithSilent,\n\ttype Logger,\n\tpino,\n\tstdTimeFunctions,\n} from \"pino\";\nimport { z } from \"zod\";\nimport { getEnvUniversal } from \"@/utils\";\nimport {\n\tcastToLogValue,\n\tformatTimestamp,\n\tLOGGER_CONFIG,\n\tstringify,\n} from \"./logfmt\";\n\nexport type { Logger } from \"pino\";\n\nlet baseLogger: Logger | undefined;\nlet configuredLogLevel: LogLevel | undefined;\n\n/** Cache of child loggers by logger name. */\nconst loggerCache = new Map<string, Logger>();\n\nexport const LogLevelSchema = z.enum([\n\t\"trace\",\n\t\"debug\",\n\t\"info\",\n\t\"warn\",\n\t\"error\",\n\t\"fatal\",\n\t\"silent\",\n]);\n\nexport type LogLevel = z.infer<typeof LogLevelSchema>;\n\nexport function getPinoLevel(logLevel?: LogLevel): LevelWithSilent {\n\t// Priority: provided > configured > env > default\n\tif (logLevel) {\n\t\treturn logLevel;\n\t}\n\n\tif (configuredLogLevel) {\n\t\treturn configuredLogLevel;\n\t}\n\n\tconst raw = (getEnvUniversal(\"LOG_LEVEL\") || \"warn\")\n\t\t.toString()\n\t\t.toLowerCase();\n\n\tconst parsed = LogLevelSchema.safeParse(raw);\n\tif (parsed.success) {\n\t\treturn parsed.data;\n\t}\n\n\t// Default to info if invalid\n\treturn \"info\";\n}\n\nexport function getIncludeTarget(): boolean {\n\treturn getEnvUniversal(\"LOG_TARGET\") === \"1\";\n}\n\n/**\n * Configure a custom base logger.\n */\nexport function configureBaseLogger(logger: Logger): void {\n\tbaseLogger = logger;\n\tloggerCache.clear();\n}\n\n// TODO: This can be simplified in logfmt.ts\nfunction customWrite(level: string, o: any) {\n\tconst entries: any = {};\n\n\t// Add timestamp if enabled\n\tif (getEnvUniversal(\"LOG_TIMESTAMP\") === \"1\" && o.time) {\n\t\tconst date = typeof o.time === \"number\" ? new Date(o.time) : new Date();\n\t\tentries.ts = formatTimestamp(date);\n\t}\n\n\t// Add level\n\tentries.level = level.toUpperCase();\n\n\t// Add target if present\n\tif (o.target) {\n\t\tentries.target = o.target;\n\t}\n\n\t// Add message\n\tif (o.msg) {\n\t\tentries.msg = o.msg;\n\t}\n\n\t// Add other properties\n\tfor (const [key, value] of Object.entries(o)) {\n\t\tif (\n\t\t\tkey !== \"time\" &&\n\t\t\tkey !== \"level\" &&\n\t\t\tkey !== \"target\" &&\n\t\t\tkey !== \"msg\" &&\n\t\t\tkey !== \"pid\" &&\n\t\t\tkey !== \"hostname\"\n\t\t) {\n\t\t\tentries[key] = castToLogValue(value);\n\t\t}\n\t}\n\n\tconst output = stringify(entries);\n\tconsole.log(output);\n}\n\n/**\n * Configure the default logger with optional log level.\n */\nexport async function configureDefaultLogger(\n\tlogLevel?: LogLevel,\n): Promise<void> {\n\t// Store the configured log level\n\tif (logLevel) {\n\t\tconfiguredLogLevel = logLevel;\n\t}\n\n\tbaseLogger = pino({\n\t\tlevel: getPinoLevel(logLevel),\n\t\tmessageKey: \"msg\",\n\t\t// Do not include pid/hostname in output\n\t\tbase: {},\n\t\t// Keep a string level in the output\n\t\tformatters: {\n\t\t\tlevel(_label: string, number: number) {\n\t\t\t\treturn { level: number };\n\t\t\t},\n\t\t},\n\t\ttimestamp:\n\t\t\tgetEnvUniversal(\"LOG_TIMESTAMP\") === \"1\"\n\t\t\t\t? stdTimeFunctions.epochTime\n\t\t\t\t: false,\n\t\tbrowser: {\n\t\t\twrite: {\n\t\t\t\tfatal: customWrite.bind(null, \"fatal\"),\n\t\t\t\terror: customWrite.bind(null, \"error\"),\n\t\t\t\twarn: customWrite.bind(null, \"warn\"),\n\t\t\t\tinfo: customWrite.bind(null, \"info\"),\n\t\t\t\tdebug: customWrite.bind(null, \"debug\"),\n\t\t\t\ttrace: customWrite.bind(null, \"trace\"),\n\t\t\t},\n\t\t},\n\t\thooks: {\n\t\t\tlogMethod(inputArgs, method, level) {\n\t\t\t\t// TODO: This is a hack to not implement our own transport target. We can get better perf if we have our own transport target.\n\n\t\t\t\tconst levelMap: Record<number, string> = {\n\t\t\t\t\t10: \"trace\",\n\t\t\t\t\t20: \"debug\",\n\t\t\t\t\t30: \"info\",\n\t\t\t\t\t40: \"warn\",\n\t\t\t\t\t50: \"error\",\n\t\t\t\t\t60: \"fatal\",\n\t\t\t\t};\n\t\t\t\tconst levelName = levelMap[level] || \"info\";\n\t\t\t\tconst time =\n\t\t\t\t\tgetEnvUniversal(\"LOG_TIMESTAMP\") === \"1\"\n\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t// Get bindings from the logger instance (child logger fields)\n\t\t\t\tconst bindings = (this as any).bindings?.() || {};\n\n\t\t\t\t// TODO: This can be simplified in logfmt.ts\n\t\t\t\tif (inputArgs.length >= 2) {\n\t\t\t\t\tconst [objOrMsg, msg] = inputArgs;\n\t\t\t\t\tif (typeof objOrMsg === \"object\" && objOrMsg !== null) {\n\t\t\t\t\t\tcustomWrite(levelName, {\n\t\t\t\t\t\t\t...bindings,\n\t\t\t\t\t\t\t...objOrMsg,\n\t\t\t\t\t\t\tmsg,\n\t\t\t\t\t\t\ttime,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcustomWrite(levelName, {\n\t\t\t\t\t\t\t...bindings,\n\t\t\t\t\t\t\tmsg: String(objOrMsg),\n\t\t\t\t\t\t\ttime,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (inputArgs.length === 1) {\n\t\t\t\t\tconst [objOrMsg] = inputArgs;\n\t\t\t\t\tif (typeof objOrMsg === \"object\" && objOrMsg !== null) {\n\t\t\t\t\t\tcustomWrite(levelName, {\n\t\t\t\t\t\t\t...bindings,\n\t\t\t\t\t\t\t...objOrMsg,\n\t\t\t\t\t\t\ttime,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcustomWrite(levelName, {\n\t\t\t\t\t\t\t...bindings,\n\t\t\t\t\t\t\tmsg: String(objOrMsg),\n\t\t\t\t\t\t\ttime,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t});\n\n\tloggerCache.clear();\n}\n\n/**\n * Get or initialize the base logger.\n */\nexport function getBaseLogger(): Logger {\n\tif (!baseLogger) {\n\t\tconfigureDefaultLogger();\n\t}\n\treturn baseLogger!;\n}\n\n/**\n * Returns a child logger with `target` bound for the given name.\n */\nexport function getLogger(name = \"default\"): Logger {\n\t// Check cache first\n\tconst cached = loggerCache.get(name);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\t// Create\n\tconst base = getBaseLogger();\n\n\t// Add target to log if enabled\n\tconst child = getIncludeTarget() ? base.child({ target: name }) : base;\n\n\t// Cache the logger\n\tloggerCache.set(name, child);\n\n\treturn child;\n}\n","export type LogLevel =\n\t| \"TRACE\"\n\t| \"DEBUG\"\n\t| \"INFO\"\n\t| \"WARN\"\n\t| \"ERROR\"\n\t| \"CRITICAL\";\n\nexport const LogLevels: Record<LogLevel, LevelIndex> = {\n\tTRACE: 0,\n\tDEBUG: 1,\n\tINFO: 2,\n\tWARN: 3,\n\tERROR: 4,\n\tCRITICAL: 5,\n} as const;\n\nexport const LevelNameMap: Record<number, LogLevel> = {\n\t0: \"TRACE\",\n\t1: \"DEBUG\",\n\t2: \"INFO\",\n\t3: \"WARN\",\n\t4: \"ERROR\",\n\t5: \"CRITICAL\",\n};\n\nexport type LevelIndex = number;\n","import { type LogLevel, LogLevels } from \"./log-levels\";\n\nconst LOG_LEVEL_COLORS: Record<number, string> = {\n\t[LogLevels.CRITICAL]: \"\\x1b[31m\", // Red\n\t[LogLevels.ERROR]: \"\\x1b[31m\", // Red\n\t[LogLevels.WARN]: \"\\x1b[33m\", // Yellow\n\t[LogLevels.INFO]: \"\\x1b[32m\", // Green\n\t[LogLevels.DEBUG]: \"\\x1b[36m\", // Cyan\n\t[LogLevels.TRACE]: \"\\x1b[36m\", // Cyan\n};\n\nconst RESET_COLOR = \"\\x1b[0m\";\n\n/**\n * Serializes logfmt line from an object.\n *\n * ## Styling Methodology\n *\n * The three things you need to know for every log line is the level, the\n * message, and who called it. These properties are highlighted in different colros\n * and sorted in th eorder that you usually read them.\n *\n * Once you've found a log line you care about, then you want to find the\n * property you need to see. The property names are bolded and the default color\n * while the rest of the data is dim. This lets you scan to find the property\n * name quickly then look closer to read the data associated with the\n * property.\n */\nexport function stringify(data: any) {\n\tlet line = \"\";\n\tconst entries = Object.entries(data);\n\n\tfor (let i = 0; i < entries.length; i++) {\n\t\tconst [key, valueRaw] = entries[i];\n\n\t\tlet isNull = false;\n\t\tlet valueString: string;\n\t\tif (valueRaw == null) {\n\t\t\tisNull = true;\n\t\t\tvalueString = \"\";\n\t\t} else {\n\t\t\tvalueString = valueRaw.toString();\n\t\t}\n\n\t\t// Clip value unless specifically the error message\n\t\tif (valueString.length > 512 && key !== \"msg\" && key !== \"error\")\n\t\t\tvalueString = `${valueString.slice(0, 512)}...`;\n\n\t\tconst needsQuoting =\n\t\t\tvalueString.indexOf(\" \") > -1 || valueString.indexOf(\"=\") > -1;\n\t\tconst needsEscaping =\n\t\t\tvalueString.indexOf('\"') > -1 || valueString.indexOf(\"\\\\\") > -1;\n\n\t\tvalueString = valueString.replace(/\\n/g, \"\\\\n\");\n\t\tif (needsEscaping) valueString = valueString.replace(/[\"\\\\]/g, \"\\\\$&\");\n\t\tif (needsQuoting || needsEscaping) valueString = `\"${valueString}\"`;\n\t\tif (valueString === \"\" && !isNull) valueString = '\"\"';\n\n\t\tif (LOGGER_CONFIG.enableColor) {\n\t\t\t// With color\n\n\t\t\t// Special message colors\n\t\t\tlet color = \"\\x1b[2m\";\n\t\t\tif (key === \"level\") {\n\t\t\t\tconst level = LogLevels[valueString as LogLevel];\n\t\t\t\tconst levelColor = LOG_LEVEL_COLORS[level];\n\t\t\t\tif (levelColor) {\n\t\t\t\t\tcolor = levelColor;\n\t\t\t\t}\n\t\t\t} else if (key === \"msg\") {\n\t\t\t\tcolor = \"\\x1b[32m\";\n\t\t\t} else if (key === \"trace\") {\n\t\t\t\tcolor = \"\\x1b[34m\";\n\t\t\t}\n\n\t\t\t// Format line\n\t\t\tline += `\\x1b[0m\\x1b[1m${key}\\x1b[0m\\x1b[2m=\\x1b[0m${color}${valueString}${RESET_COLOR}`;\n\t\t} else {\n\t\t\t// No color\n\t\t\tline += `${key}=${valueString}`;\n\t\t}\n\n\t\tif (i !== entries.length - 1) {\n\t\t\tline += \" \";\n\t\t}\n\t}\n\n\treturn line;\n}\n\nexport function formatTimestamp(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n\tconst day = String(date.getUTCDate()).padStart(2, \"0\");\n\tconst hours = String(date.getUTCHours()).padStart(2, \"0\");\n\tconst minutes = String(date.getUTCMinutes()).padStart(2, \"0\");\n\tconst seconds = String(date.getUTCSeconds()).padStart(2, \"0\");\n\tconst milliseconds = String(date.getUTCMilliseconds()).padStart(3, \"0\");\n\n\treturn `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;\n}\n\nexport function castToLogValue(v: unknown): any {\n\tif (\n\t\ttypeof v === \"string\" ||\n\t\ttypeof v === \"number\" ||\n\t\ttypeof v === \"bigint\" ||\n\t\ttypeof v === \"boolean\" ||\n\t\tv === null ||\n\t\tv === undefined\n\t) {\n\t\treturn v;\n\t}\n\tif (v instanceof Error) {\n\t\t//args.push(...errorToLogEntries(k, v));\n\t\treturn String(v);\n\t}\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch {\n\t\treturn \"[cannot stringify]\";\n\t}\n}\n\n// MARK: Config\ninterface GlobalLoggerConfig {\n\tenableColor: boolean;\n\tenableSpreadObject: boolean;\n\tenableErrorStack: boolean;\n}\n\nexport const LOGGER_CONFIG: GlobalLoggerConfig = {\n\tenableColor: false,\n\tenableSpreadObject: false,\n\tenableErrorStack: false,\n};\n\n// MARK: Utils\n/**\n * Converts an object in to an easier to read KV of entries.\n */\nexport function spreadObjectToLogEntries(base: string, data: unknown): any {\n\tif (\n\t\tLOGGER_CONFIG.enableSpreadObject &&\n\t\ttypeof data === \"object\" &&\n\t\t!Array.isArray(data) &&\n\t\tdata !== null &&\n\t\tObject.keys(data).length !== 0 &&\n\t\tObject.keys(data).length < 16\n\t) {\n\t\tconst logData: any = {};\n\t\tfor (const key in data) {\n\t\t\tObject.assign(\n\t\t\t\tlogData,\n\t\t\t\tspreadObjectToLogEntries(\n\t\t\t\t\t`${base}.${key}`,\n\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: FIXME\n\t\t\t\t\t(data as any)[key],\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn logData;\n\t}\n\n\treturn { [base]: JSON.stringify(data) };\n}\n\nexport function errorToLogEntries(base: string, error: unknown): any {\n\tif (error instanceof Error) {\n\t\treturn {\n\t\t\t[`${base}.message`]: error.message,\n\t\t\t...(LOGGER_CONFIG.enableErrorStack && error.stack\n\t\t\t\t? { [`${base}.stack`]: formatStackTrace(error.stack) }\n\t\t\t\t: {}),\n\t\t\t...(error.cause\n\t\t\t\t? errorToLogEntries(`${base}.cause`, error.cause)\n\t\t\t\t: {}),\n\t\t};\n\t}\n\treturn { [base]: `${error}` };\n}\n\n// export function errorToLogEntries(base: string, error: unknown): LogEntry[] {\n// \tif (error instanceof RuntimeError) {\n// \t\treturn [\n// \t\t\t[`${base}.code`, error.code],\n// \t\t\t[`${base}.description`, error.errorConfig?.description],\n// \t\t\t[`${base}.module`, error.moduleName],\n// \t\t\t...(error.trace ? [[`${base}.trace`, stringifyTrace(error.trace)] as LogEntry] : []),\n// \t\t\t...(LOGGER_CONFIG.enableErrorStack && error.stack\n// \t\t\t\t? [[`${base}.stack`, formatStackTrace(error.stack)] as LogEntry]\n// \t\t\t\t: []),\n// \t\t\t...(error.meta ? [[`${base}.meta`, JSON.stringify(error.meta)] as LogEntry] : []),\n// \t\t\t...(error.cause ? errorToLogEntries(`${base}.cause`, error.cause) : []),\n// \t\t];\n// \t} else if (error instanceof Error) {\n// \t\treturn [\n// \t\t\t[`${base}.name`, error.name],\n// \t\t\t[`${base}.message`, error.message],\n// \t\t\t...(LOGGER_CONFIG.enableErrorStack && error.stack\n// \t\t\t\t? [[`${base}.stack`, formatStackTrace(error.stack)] as LogEntry]\n// \t\t\t\t: []),\n// \t\t\t...(error.cause ? errorToLogEntries(`${base}.cause`, error.cause) : []),\n// \t\t];\n// \t} else {\n// \t\treturn [\n// \t\t\t[base, `${error}`],\n// \t\t];\n// \t}\n// }\n\n/**\n * Formats a JS stack trace in to a legible one-liner.\n */\nfunction formatStackTrace(stackTrace: string): string {\n\tconst regex = /at (.+?)$/gm;\n\tconst matches = [...stackTrace.matchAll(regex)];\n\t// Reverse array since the stack goes from top level -> bottom level\n\tmatches.reverse();\n\treturn matches.map((match) => match[1].trim()).join(\" > \");\n}\n"],"mappings":"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","names":[]}
|