rivetkit 2.0.22-rc.1 → 2.0.22-rc.2
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 +259 -0
- package/dist/tsup/{chunk-VJLGVVGP.cjs → chunk-5N6F5PXD.cjs} +31 -12
- package/dist/tsup/chunk-5N6F5PXD.cjs.map +1 -0
- package/dist/tsup/{chunk-BIOPK7IB.cjs → chunk-5TRXLS6X.cjs} +71 -67
- package/dist/tsup/chunk-5TRXLS6X.cjs.map +1 -0
- package/dist/tsup/{chunk-JKNDUKFI.js → chunk-7RUROQAZ.js} +36 -16
- package/dist/tsup/chunk-7RUROQAZ.js.map +1 -0
- package/dist/tsup/{chunk-FETQGZN4.js → chunk-AMK3AACS.js} +272 -89
- package/dist/tsup/chunk-AMK3AACS.js.map +1 -0
- package/dist/tsup/{chunk-I7EJWHYV.js → chunk-BHLQTKOD.js} +51 -47
- package/dist/tsup/chunk-BHLQTKOD.js.map +1 -0
- package/dist/tsup/{chunk-RPI45FGS.js → chunk-C4FPCW7T.js} +2 -2
- package/dist/tsup/{chunk-ZVEDMBFT.js → chunk-CVLO2OOK.js} +3 -3
- package/dist/tsup/{chunk-NDLOG2JH.js → chunk-EJXZYQ3N.js} +2 -2
- package/dist/tsup/{chunk-UBCUW7HD.js → chunk-F7WVJXPB.js} +2 -2
- package/dist/tsup/{chunk-JN6GPVFY.js → chunk-FLVL7RGH.js} +3 -3
- package/dist/tsup/{chunk-PELXJCJS.cjs → chunk-GXIO5YOT.cjs} +8 -8
- package/dist/tsup/{chunk-PELXJCJS.cjs.map → chunk-GXIO5YOT.cjs.map} +1 -1
- package/dist/tsup/{chunk-4B25D5OW.js → chunk-HLZT5C6A.js} +385 -104
- package/dist/tsup/chunk-HLZT5C6A.js.map +1 -0
- package/dist/tsup/{chunk-ZZYMCYAY.cjs → chunk-LFP446KS.cjs} +14 -14
- package/dist/tsup/{chunk-ZZYMCYAY.cjs.map → chunk-LFP446KS.cjs.map} +1 -1
- package/dist/tsup/{chunk-EEXX243L.js → chunk-MQDXPGNE.js} +6 -6
- package/dist/tsup/{chunk-5EB77IQ2.cjs → chunk-NDOG6IQ5.cjs} +6 -6
- package/dist/tsup/{chunk-5EB77IQ2.cjs.map → chunk-NDOG6IQ5.cjs.map} +1 -1
- package/dist/tsup/{chunk-R6XOZKMU.cjs → chunk-Q5CAVEKC.cjs} +467 -284
- package/dist/tsup/chunk-Q5CAVEKC.cjs.map +1 -0
- package/dist/tsup/{chunk-7FEMVD3D.cjs → chunk-UBMUBNS2.cjs} +12 -12
- package/dist/tsup/{chunk-7FEMVD3D.cjs.map → chunk-UBMUBNS2.cjs.map} +1 -1
- package/dist/tsup/{chunk-GJPOIJHZ.js → chunk-VMFBKBJL.js} +26 -7
- package/dist/tsup/chunk-VMFBKBJL.js.map +1 -0
- package/dist/tsup/{chunk-OAB7ECAB.cjs → chunk-YLWF6RFL.cjs} +558 -277
- package/dist/tsup/chunk-YLWF6RFL.cjs.map +1 -0
- package/dist/tsup/{chunk-6Z3YA6QR.cjs → chunk-YUBR6XCJ.cjs} +35 -15
- package/dist/tsup/chunk-YUBR6XCJ.cjs.map +1 -0
- package/dist/tsup/{chunk-LCQDY73V.cjs → chunk-ZL6NSKF2.cjs} +3 -3
- package/dist/tsup/{chunk-LCQDY73V.cjs.map → chunk-ZL6NSKF2.cjs.map} +1 -1
- package/dist/tsup/{chunk-C2U6KGOG.cjs → chunk-ZY4DKLMT.cjs} +3 -3
- package/dist/tsup/{chunk-C2U6KGOG.cjs.map → chunk-ZY4DKLMT.cjs.map} +1 -1
- package/dist/tsup/client/mod.cjs +9 -9
- package/dist/tsup/client/mod.d.cts +2 -2
- package/dist/tsup/client/mod.d.ts +2 -2
- package/dist/tsup/client/mod.js +8 -8
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{conn-Clu655RU.d.ts → conn-BYXlxnh0.d.ts} +111 -102
- package/dist/tsup/{conn-lUvFLo_q.d.cts → conn-BiazosE_.d.cts} +111 -102
- package/dist/tsup/driver-helpers/mod.cjs +5 -5
- 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 +4 -4
- package/dist/tsup/driver-test-suite/mod.cjs +71 -71
- 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 -11
- package/dist/tsup/inspector/mod.cjs +6 -6
- package/dist/tsup/inspector/mod.d.cts +2 -2
- package/dist/tsup/inspector/mod.d.ts +2 -2
- package/dist/tsup/inspector/mod.js +5 -5
- package/dist/tsup/mod.cjs +10 -10
- package/dist/tsup/mod.d.cts +3 -3
- package/dist/tsup/mod.d.ts +3 -3
- package/dist/tsup/mod.js +9 -9
- package/dist/tsup/test/mod.cjs +11 -11
- package/dist/tsup/test/mod.d.cts +1 -1
- package/dist/tsup/test/mod.d.ts +1 -1
- package/dist/tsup/test/mod.js +10 -10
- package/dist/tsup/utils.cjs +8 -2
- package/dist/tsup/utils.cjs.map +1 -1
- package/dist/tsup/utils.d.cts +8 -1
- package/dist/tsup/utils.d.ts +8 -1
- package/dist/tsup/utils.js +7 -1
- package/package.json +5 -4
- package/src/actor/config.ts +10 -0
- package/src/actor/conn-drivers.ts +43 -1
- package/src/actor/conn-socket.ts +1 -1
- package/src/actor/conn.ts +22 -2
- package/src/actor/context.ts +1 -1
- package/src/actor/driver.ts +13 -2
- package/src/actor/instance.ts +248 -57
- package/src/actor/persisted.ts +7 -0
- package/src/actor/router-endpoints.ts +67 -45
- package/src/actor/router.ts +25 -17
- package/src/client/actor-conn.ts +9 -5
- package/src/common/cors.ts +57 -0
- package/src/common/log.ts +26 -5
- package/src/common/utils.ts +5 -9
- package/src/common/websocket-interface.ts +10 -0
- package/src/driver-helpers/utils.ts +1 -0
- package/src/drivers/engine/actor-driver.ts +261 -14
- package/src/drivers/engine/config.ts +2 -4
- package/src/drivers/file-system/actor.ts +3 -2
- package/src/drivers/file-system/global-state.ts +1 -1
- package/src/drivers/file-system/manager.ts +3 -0
- package/src/engine-process/mod.ts +22 -4
- package/src/inspector/config.ts +0 -45
- package/src/manager/gateway.ts +45 -32
- package/src/manager/hono-websocket-adapter.ts +31 -3
- package/src/manager/router.ts +11 -17
- package/src/registry/run-config.ts +2 -8
- package/src/remote-manager-driver/actor-http-client.ts +5 -8
- package/src/remote-manager-driver/actor-websocket-client.ts +2 -14
- package/src/remote-manager-driver/mod.ts +0 -1
- package/src/schemas/actor-persist/mod.ts +1 -1
- package/src/schemas/actor-persist/versioned.ts +22 -10
- package/src/utils.ts +26 -0
- package/dist/tsup/chunk-4B25D5OW.js.map +0 -1
- package/dist/tsup/chunk-6Z3YA6QR.cjs.map +0 -1
- package/dist/tsup/chunk-BIOPK7IB.cjs.map +0 -1
- package/dist/tsup/chunk-FETQGZN4.js.map +0 -1
- package/dist/tsup/chunk-GJPOIJHZ.js.map +0 -1
- package/dist/tsup/chunk-I7EJWHYV.js.map +0 -1
- package/dist/tsup/chunk-JKNDUKFI.js.map +0 -1
- package/dist/tsup/chunk-OAB7ECAB.cjs.map +0 -1
- package/dist/tsup/chunk-R6XOZKMU.cjs.map +0 -1
- package/dist/tsup/chunk-VJLGVVGP.cjs.map +0 -1
- /package/dist/tsup/{chunk-RPI45FGS.js.map → chunk-C4FPCW7T.js.map} +0 -0
- /package/dist/tsup/{chunk-ZVEDMBFT.js.map → chunk-CVLO2OOK.js.map} +0 -0
- /package/dist/tsup/{chunk-NDLOG2JH.js.map → chunk-EJXZYQ3N.js.map} +0 -0
- /package/dist/tsup/{chunk-UBCUW7HD.js.map → chunk-F7WVJXPB.js.map} +0 -0
- /package/dist/tsup/{chunk-JN6GPVFY.js.map → chunk-FLVL7RGH.js.map} +0 -0
- /package/dist/tsup/{chunk-EEXX243L.js.map → chunk-MQDXPGNE.js.map} +0 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import * as bare from "@bare-ts/lib"
|
|
2
|
+
|
|
3
|
+
const config = /* @__PURE__ */ bare.Config({})
|
|
4
|
+
|
|
5
|
+
export type u64 = bigint
|
|
6
|
+
|
|
7
|
+
export type PersistedSubscription = {
|
|
8
|
+
readonly eventName: string,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function readPersistedSubscription(bc: bare.ByteCursor): PersistedSubscription {
|
|
12
|
+
return {
|
|
13
|
+
eventName: bare.readString(bc),
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function writePersistedSubscription(bc: bare.ByteCursor, x: PersistedSubscription): void {
|
|
18
|
+
bare.writeString(bc, x.eventName)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function read0(bc: bare.ByteCursor): readonly PersistedSubscription[] {
|
|
22
|
+
const len = bare.readUintSafe(bc)
|
|
23
|
+
if (len === 0) { return [] }
|
|
24
|
+
const result = [readPersistedSubscription(bc)]
|
|
25
|
+
for (let i = 1; i < len; i++) {
|
|
26
|
+
result[i] = readPersistedSubscription(bc)
|
|
27
|
+
}
|
|
28
|
+
return result
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function write0(bc: bare.ByteCursor, x: readonly PersistedSubscription[]): void {
|
|
32
|
+
bare.writeUintSafe(bc, x.length)
|
|
33
|
+
for (let i = 0; i < x.length; i++) {
|
|
34
|
+
writePersistedSubscription(bc, x[i])
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type PersistedConnection = {
|
|
39
|
+
readonly id: string,
|
|
40
|
+
readonly token: string,
|
|
41
|
+
readonly parameters: ArrayBuffer,
|
|
42
|
+
readonly state: ArrayBuffer,
|
|
43
|
+
readonly subscriptions: readonly PersistedSubscription[],
|
|
44
|
+
readonly lastSeen: u64,
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function readPersistedConnection(bc: bare.ByteCursor): PersistedConnection {
|
|
48
|
+
return {
|
|
49
|
+
id: bare.readString(bc),
|
|
50
|
+
token: bare.readString(bc),
|
|
51
|
+
parameters: bare.readData(bc),
|
|
52
|
+
state: bare.readData(bc),
|
|
53
|
+
subscriptions: read0(bc),
|
|
54
|
+
lastSeen: bare.readU64(bc),
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function writePersistedConnection(bc: bare.ByteCursor, x: PersistedConnection): void {
|
|
59
|
+
bare.writeString(bc, x.id)
|
|
60
|
+
bare.writeString(bc, x.token)
|
|
61
|
+
bare.writeData(bc, x.parameters)
|
|
62
|
+
bare.writeData(bc, x.state)
|
|
63
|
+
write0(bc, x.subscriptions)
|
|
64
|
+
bare.writeU64(bc, x.lastSeen)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function read1(bc: bare.ByteCursor): ArrayBuffer | null {
|
|
68
|
+
return bare.readBool(bc)
|
|
69
|
+
? bare.readData(bc)
|
|
70
|
+
: null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function write1(bc: bare.ByteCursor, x: ArrayBuffer | null): void {
|
|
74
|
+
bare.writeBool(bc, x !== null)
|
|
75
|
+
if (x !== null) {
|
|
76
|
+
bare.writeData(bc, x)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export type GenericPersistedScheduleEvent = {
|
|
81
|
+
readonly action: string,
|
|
82
|
+
readonly args: ArrayBuffer | null,
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function readGenericPersistedScheduleEvent(bc: bare.ByteCursor): GenericPersistedScheduleEvent {
|
|
86
|
+
return {
|
|
87
|
+
action: bare.readString(bc),
|
|
88
|
+
args: read1(bc),
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function writeGenericPersistedScheduleEvent(bc: bare.ByteCursor, x: GenericPersistedScheduleEvent): void {
|
|
93
|
+
bare.writeString(bc, x.action)
|
|
94
|
+
write1(bc, x.args)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type PersistedScheduleEventKind =
|
|
98
|
+
| { readonly tag: "GenericPersistedScheduleEvent", readonly val: GenericPersistedScheduleEvent }
|
|
99
|
+
|
|
100
|
+
export function readPersistedScheduleEventKind(bc: bare.ByteCursor): PersistedScheduleEventKind {
|
|
101
|
+
const offset = bc.offset
|
|
102
|
+
const tag = bare.readU8(bc)
|
|
103
|
+
switch (tag) {
|
|
104
|
+
case 0:
|
|
105
|
+
return { tag: "GenericPersistedScheduleEvent", val: readGenericPersistedScheduleEvent(bc) }
|
|
106
|
+
default: {
|
|
107
|
+
bc.offset = offset
|
|
108
|
+
throw new bare.BareError(offset, "invalid tag")
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function writePersistedScheduleEventKind(bc: bare.ByteCursor, x: PersistedScheduleEventKind): void {
|
|
114
|
+
switch (x.tag) {
|
|
115
|
+
case "GenericPersistedScheduleEvent": {
|
|
116
|
+
bare.writeU8(bc, 0)
|
|
117
|
+
writeGenericPersistedScheduleEvent(bc, x.val)
|
|
118
|
+
break
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export type PersistedScheduleEvent = {
|
|
124
|
+
readonly eventId: string,
|
|
125
|
+
readonly timestamp: u64,
|
|
126
|
+
readonly kind: PersistedScheduleEventKind,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function readPersistedScheduleEvent(bc: bare.ByteCursor): PersistedScheduleEvent {
|
|
130
|
+
return {
|
|
131
|
+
eventId: bare.readString(bc),
|
|
132
|
+
timestamp: bare.readU64(bc),
|
|
133
|
+
kind: readPersistedScheduleEventKind(bc),
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function writePersistedScheduleEvent(bc: bare.ByteCursor, x: PersistedScheduleEvent): void {
|
|
138
|
+
bare.writeString(bc, x.eventId)
|
|
139
|
+
bare.writeU64(bc, x.timestamp)
|
|
140
|
+
writePersistedScheduleEventKind(bc, x.kind)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export type PersistedHibernatableWebSocket = {
|
|
144
|
+
readonly requestId: ArrayBuffer,
|
|
145
|
+
readonly lastSeenTimestamp: u64,
|
|
146
|
+
readonly msgIndex: u64,
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function readPersistedHibernatableWebSocket(bc: bare.ByteCursor): PersistedHibernatableWebSocket {
|
|
150
|
+
return {
|
|
151
|
+
requestId: bare.readData(bc),
|
|
152
|
+
lastSeenTimestamp: bare.readU64(bc),
|
|
153
|
+
msgIndex: bare.readU64(bc),
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function writePersistedHibernatableWebSocket(bc: bare.ByteCursor, x: PersistedHibernatableWebSocket): void {
|
|
158
|
+
bare.writeData(bc, x.requestId)
|
|
159
|
+
bare.writeU64(bc, x.lastSeenTimestamp)
|
|
160
|
+
bare.writeU64(bc, x.msgIndex)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function read2(bc: bare.ByteCursor): readonly PersistedConnection[] {
|
|
164
|
+
const len = bare.readUintSafe(bc)
|
|
165
|
+
if (len === 0) { return [] }
|
|
166
|
+
const result = [readPersistedConnection(bc)]
|
|
167
|
+
for (let i = 1; i < len; i++) {
|
|
168
|
+
result[i] = readPersistedConnection(bc)
|
|
169
|
+
}
|
|
170
|
+
return result
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function write2(bc: bare.ByteCursor, x: readonly PersistedConnection[]): void {
|
|
174
|
+
bare.writeUintSafe(bc, x.length)
|
|
175
|
+
for (let i = 0; i < x.length; i++) {
|
|
176
|
+
writePersistedConnection(bc, x[i])
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function read3(bc: bare.ByteCursor): readonly PersistedScheduleEvent[] {
|
|
181
|
+
const len = bare.readUintSafe(bc)
|
|
182
|
+
if (len === 0) { return [] }
|
|
183
|
+
const result = [readPersistedScheduleEvent(bc)]
|
|
184
|
+
for (let i = 1; i < len; i++) {
|
|
185
|
+
result[i] = readPersistedScheduleEvent(bc)
|
|
186
|
+
}
|
|
187
|
+
return result
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function write3(bc: bare.ByteCursor, x: readonly PersistedScheduleEvent[]): void {
|
|
191
|
+
bare.writeUintSafe(bc, x.length)
|
|
192
|
+
for (let i = 0; i < x.length; i++) {
|
|
193
|
+
writePersistedScheduleEvent(bc, x[i])
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function read4(bc: bare.ByteCursor): readonly PersistedHibernatableWebSocket[] {
|
|
198
|
+
const len = bare.readUintSafe(bc)
|
|
199
|
+
if (len === 0) { return [] }
|
|
200
|
+
const result = [readPersistedHibernatableWebSocket(bc)]
|
|
201
|
+
for (let i = 1; i < len; i++) {
|
|
202
|
+
result[i] = readPersistedHibernatableWebSocket(bc)
|
|
203
|
+
}
|
|
204
|
+
return result
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function write4(bc: bare.ByteCursor, x: readonly PersistedHibernatableWebSocket[]): void {
|
|
208
|
+
bare.writeUintSafe(bc, x.length)
|
|
209
|
+
for (let i = 0; i < x.length; i++) {
|
|
210
|
+
writePersistedHibernatableWebSocket(bc, x[i])
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export type PersistedActor = {
|
|
215
|
+
readonly input: ArrayBuffer | null,
|
|
216
|
+
readonly hasInitialized: boolean,
|
|
217
|
+
readonly state: ArrayBuffer,
|
|
218
|
+
readonly connections: readonly PersistedConnection[],
|
|
219
|
+
readonly scheduledEvents: readonly PersistedScheduleEvent[],
|
|
220
|
+
readonly hibernatableWebSocket: readonly PersistedHibernatableWebSocket[],
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export function readPersistedActor(bc: bare.ByteCursor): PersistedActor {
|
|
224
|
+
return {
|
|
225
|
+
input: read1(bc),
|
|
226
|
+
hasInitialized: bare.readBool(bc),
|
|
227
|
+
state: bare.readData(bc),
|
|
228
|
+
connections: read2(bc),
|
|
229
|
+
scheduledEvents: read3(bc),
|
|
230
|
+
hibernatableWebSocket: read4(bc),
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export function writePersistedActor(bc: bare.ByteCursor, x: PersistedActor): void {
|
|
235
|
+
write1(bc, x.input)
|
|
236
|
+
bare.writeBool(bc, x.hasInitialized)
|
|
237
|
+
bare.writeData(bc, x.state)
|
|
238
|
+
write2(bc, x.connections)
|
|
239
|
+
write3(bc, x.scheduledEvents)
|
|
240
|
+
write4(bc, x.hibernatableWebSocket)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export function encodePersistedActor(x: PersistedActor): Uint8Array {
|
|
244
|
+
const bc = new bare.ByteCursor(
|
|
245
|
+
new Uint8Array(config.initialBufferLength),
|
|
246
|
+
config
|
|
247
|
+
)
|
|
248
|
+
writePersistedActor(bc, x)
|
|
249
|
+
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function decodePersistedActor(bytes: Uint8Array): PersistedActor {
|
|
253
|
+
const bc = new bare.ByteCursor(bytes, config)
|
|
254
|
+
const result = readPersistedActor(bc)
|
|
255
|
+
if (bc.offset < bc.view.byteLength) {
|
|
256
|
+
throw new bare.BareError(bc.offset, "remaining bytes")
|
|
257
|
+
}
|
|
258
|
+
return result
|
|
259
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkYUBR6XCJcjs = require('./chunk-YUBR6XCJ.cjs');
|
|
4
4
|
|
|
5
5
|
// src/common/log.ts
|
|
6
6
|
|
|
@@ -128,7 +128,7 @@ function getPinoLevel(logLevel) {
|
|
|
128
128
|
if (configuredLogLevel) {
|
|
129
129
|
return configuredLogLevel;
|
|
130
130
|
}
|
|
131
|
-
const raw = (
|
|
131
|
+
const raw = (_chunkYUBR6XCJcjs.getEnvUniversal.call(void 0, "LOG_LEVEL") || "warn").toString().toLowerCase();
|
|
132
132
|
const parsed = LogLevelSchema.safeParse(raw);
|
|
133
133
|
if (parsed.success) {
|
|
134
134
|
return parsed.data;
|
|
@@ -136,7 +136,7 @@ function getPinoLevel(logLevel) {
|
|
|
136
136
|
return "info";
|
|
137
137
|
}
|
|
138
138
|
function getIncludeTarget() {
|
|
139
|
-
return
|
|
139
|
+
return _chunkYUBR6XCJcjs.getEnvUniversal.call(void 0, "LOG_TARGET") === "1";
|
|
140
140
|
}
|
|
141
141
|
function configureBaseLogger(logger) {
|
|
142
142
|
baseLogger = logger;
|
|
@@ -144,7 +144,7 @@ function configureBaseLogger(logger) {
|
|
|
144
144
|
}
|
|
145
145
|
function customWrite(level, o) {
|
|
146
146
|
const entries = {};
|
|
147
|
-
if (
|
|
147
|
+
if (_chunkYUBR6XCJcjs.getEnvUniversal.call(void 0, "LOG_TIMESTAMP") === "1" && o.time) {
|
|
148
148
|
const date = typeof o.time === "number" ? new Date(o.time) : /* @__PURE__ */ new Date();
|
|
149
149
|
entries.ts = formatTimestamp(date);
|
|
150
150
|
}
|
|
@@ -178,7 +178,7 @@ async function configureDefaultLogger(logLevel) {
|
|
|
178
178
|
return { level: number };
|
|
179
179
|
}
|
|
180
180
|
},
|
|
181
|
-
timestamp:
|
|
181
|
+
timestamp: _chunkYUBR6XCJcjs.getEnvUniversal.call(void 0, "LOG_TIMESTAMP") === "1" ? _pino.stdTimeFunctions.epochTime : false,
|
|
182
182
|
browser: {
|
|
183
183
|
write: {
|
|
184
184
|
fatal: customWrite.bind(null, "fatal"),
|
|
@@ -190,7 +190,8 @@ async function configureDefaultLogger(logLevel) {
|
|
|
190
190
|
}
|
|
191
191
|
},
|
|
192
192
|
hooks: {
|
|
193
|
-
logMethod(inputArgs,
|
|
193
|
+
logMethod(inputArgs, method, level) {
|
|
194
|
+
var _a;
|
|
194
195
|
const levelMap = {
|
|
195
196
|
10: "trace",
|
|
196
197
|
20: "debug",
|
|
@@ -200,20 +201,38 @@ async function configureDefaultLogger(logLevel) {
|
|
|
200
201
|
60: "fatal"
|
|
201
202
|
};
|
|
202
203
|
const levelName = levelMap[level] || "info";
|
|
203
|
-
const time =
|
|
204
|
+
const time = _chunkYUBR6XCJcjs.getEnvUniversal.call(void 0, "LOG_TIMESTAMP") === "1" ? Date.now() : void 0;
|
|
205
|
+
const bindings = ((_a = this.bindings) == null ? void 0 : _a.call(this)) || {};
|
|
204
206
|
if (inputArgs.length >= 2) {
|
|
205
207
|
const [objOrMsg, msg] = inputArgs;
|
|
206
208
|
if (typeof objOrMsg === "object" && objOrMsg !== null) {
|
|
207
|
-
customWrite(levelName, {
|
|
209
|
+
customWrite(levelName, {
|
|
210
|
+
...bindings,
|
|
211
|
+
...objOrMsg,
|
|
212
|
+
msg,
|
|
213
|
+
time
|
|
214
|
+
});
|
|
208
215
|
} else {
|
|
209
|
-
customWrite(levelName, {
|
|
216
|
+
customWrite(levelName, {
|
|
217
|
+
...bindings,
|
|
218
|
+
msg: String(objOrMsg),
|
|
219
|
+
time
|
|
220
|
+
});
|
|
210
221
|
}
|
|
211
222
|
} else if (inputArgs.length === 1) {
|
|
212
223
|
const [objOrMsg] = inputArgs;
|
|
213
224
|
if (typeof objOrMsg === "object" && objOrMsg !== null) {
|
|
214
|
-
customWrite(levelName, {
|
|
225
|
+
customWrite(levelName, {
|
|
226
|
+
...bindings,
|
|
227
|
+
...objOrMsg,
|
|
228
|
+
time
|
|
229
|
+
});
|
|
215
230
|
} else {
|
|
216
|
-
customWrite(levelName, {
|
|
231
|
+
customWrite(levelName, {
|
|
232
|
+
...bindings,
|
|
233
|
+
msg: String(objOrMsg),
|
|
234
|
+
time
|
|
235
|
+
});
|
|
217
236
|
}
|
|
218
237
|
}
|
|
219
238
|
}
|
|
@@ -247,4 +266,4 @@ function getLogger(name = "default") {
|
|
|
247
266
|
|
|
248
267
|
|
|
249
268
|
exports.LogLevelSchema = LogLevelSchema; exports.getPinoLevel = getPinoLevel; exports.getIncludeTarget = getIncludeTarget; exports.configureBaseLogger = configureBaseLogger; exports.configureDefaultLogger = configureDefaultLogger; exports.getBaseLogger = getBaseLogger; exports.getLogger = getLogger;
|
|
250
|
-
//# sourceMappingURL=chunk-
|
|
269
|
+
//# sourceMappingURL=chunk-5N6F5PXD.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-5N6F5PXD.cjs","../../src/common/log.ts","../../src/common/log-levels.ts","../../src/common/logfmt.ts"],"names":[],"mappings":"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","file":"/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-5N6F5PXD.cjs","sourcesContent":[null,"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"]}
|