@trigger.dev/core 3.0.0-beta.4 → 3.0.0-beta.40
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/catalog-EP9DGAGm.d.ts +242 -0
- package/dist/catalog-Gjy5NtAB.d.mts +242 -0
- package/dist/index.d.mts +60 -1
- package/dist/index.d.ts +60 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -1
- package/dist/index.mjs.map +1 -1
- package/dist/manager-S98VaLUy.d.mts +1402 -0
- package/dist/manager-S98VaLUy.d.ts +1402 -0
- package/dist/messages-xJbR1Vai.d.mts +18953 -0
- package/dist/messages-xJbR1Vai.d.ts +18953 -0
- package/dist/schemas-Sb0sJcEt.d.mts +2497 -0
- package/dist/schemas-Sb0sJcEt.d.ts +2497 -0
- package/dist/v3/dev/index.d.mts +28 -0
- package/dist/v3/dev/index.d.ts +28 -0
- package/dist/v3/dev/index.js +93 -0
- package/dist/v3/dev/index.js.map +1 -0
- package/dist/v3/dev/index.mjs +91 -0
- package/dist/v3/dev/index.mjs.map +1 -0
- package/dist/v3/index.d.mts +2140 -17560
- package/dist/v3/index.d.ts +2140 -17560
- package/dist/v3/index.js +2611 -2886
- package/dist/v3/index.js.map +1 -1
- package/dist/v3/index.mjs +2563 -2858
- package/dist/v3/index.mjs.map +1 -1
- package/dist/v3/otel/index.js +106 -50
- package/dist/v3/otel/index.js.map +1 -1
- package/dist/v3/otel/index.mjs +106 -50
- package/dist/v3/otel/index.mjs.map +1 -1
- package/dist/v3/prod/index.d.mts +45 -0
- package/dist/v3/prod/index.d.ts +45 -0
- package/dist/v3/prod/index.js +304 -0
- package/dist/v3/prod/index.js.map +1 -0
- package/dist/v3/prod/index.mjs +302 -0
- package/dist/v3/prod/index.mjs.map +1 -0
- package/dist/v3/utils/structuredLogger.d.mts +31 -0
- package/dist/v3/utils/structuredLogger.d.ts +31 -0
- package/dist/v3/utils/structuredLogger.js +88 -0
- package/dist/v3/utils/structuredLogger.js.map +1 -0
- package/dist/v3/utils/structuredLogger.mjs +86 -0
- package/dist/v3/utils/structuredLogger.mjs.map +1 -0
- package/dist/v3/workers/index.d.mts +142 -0
- package/dist/v3/workers/index.d.ts +142 -0
- package/dist/v3/workers/index.js +3485 -0
- package/dist/v3/workers/index.js.map +1 -0
- package/dist/v3/workers/index.mjs +3466 -0
- package/dist/v3/workers/index.mjs.map +1 -0
- package/dist/v3/zodIpc.d.mts +32 -0
- package/dist/v3/zodIpc.d.ts +32 -0
- package/dist/v3/zodIpc.js +268 -0
- package/dist/v3/zodIpc.js.map +1 -0
- package/dist/v3/zodIpc.mjs +266 -0
- package/dist/v3/zodIpc.mjs.map +1 -0
- package/dist/v3/zodMessageHandler.d.mts +69 -0
- package/dist/v3/zodMessageHandler.d.ts +69 -0
- package/dist/v3/zodMessageHandler.js +168 -0
- package/dist/v3/zodMessageHandler.js.map +1 -0
- package/dist/v3/zodMessageHandler.mjs +163 -0
- package/dist/v3/zodMessageHandler.mjs.map +1 -0
- package/dist/v3/zodNamespace.d.mts +3663 -0
- package/dist/v3/zodNamespace.d.ts +3663 -0
- package/dist/v3/zodNamespace.js +366 -0
- package/dist/v3/zodNamespace.js.map +1 -0
- package/dist/v3/zodNamespace.mjs +364 -0
- package/dist/v3/zodNamespace.mjs.map +1 -0
- package/dist/v3/zodSocket.d.mts +88 -0
- package/dist/v3/zodSocket.d.ts +88 -0
- package/dist/v3/zodSocket.js +319 -0
- package/dist/v3/zodSocket.js.map +1 -0
- package/dist/v3/zodSocket.mjs +315 -0
- package/dist/v3/zodSocket.mjs.map +1 -0
- package/dist/v3/zodfetch.d.mts +206 -0
- package/dist/v3/zodfetch.d.ts +206 -0
- package/dist/v3/zodfetch.js +614 -0
- package/dist/v3/zodfetch.js.map +1 -0
- package/dist/v3/zodfetch.mjs +594 -0
- package/dist/v3/zodfetch.mjs.map +1 -0
- package/package.json +79 -5
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var preciseDate = require('@google-cloud/precise-date');
|
|
4
|
+
require('@opentelemetry/api-logs');
|
|
5
|
+
var promises = require('timers/promises');
|
|
6
|
+
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __accessCheck = (obj, member, msg) => {
|
|
10
|
+
if (!member.has(obj))
|
|
11
|
+
throw TypeError("Cannot " + msg);
|
|
12
|
+
};
|
|
13
|
+
var __privateAdd = (obj, member, value) => {
|
|
14
|
+
if (member.has(obj))
|
|
15
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
16
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
17
|
+
};
|
|
18
|
+
var __privateMethod = (obj, member, method) => {
|
|
19
|
+
__accessCheck(obj, member, "access private method");
|
|
20
|
+
return method;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// src/v3/utils/platform.ts
|
|
24
|
+
var _globalThis = typeof globalThis === "object" ? globalThis : global;
|
|
25
|
+
|
|
26
|
+
// src/v3/utils/globals.ts
|
|
27
|
+
var GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);
|
|
28
|
+
var _global = _globalThis;
|
|
29
|
+
function registerGlobal(type, instance, allowOverride = false) {
|
|
30
|
+
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {};
|
|
31
|
+
if (!allowOverride && api[type]) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
api[type] = instance;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
__name(registerGlobal, "registerGlobal");
|
|
38
|
+
function getGlobal(type) {
|
|
39
|
+
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
40
|
+
}
|
|
41
|
+
__name(getGlobal, "getGlobal");
|
|
42
|
+
function unregisterGlobal(type) {
|
|
43
|
+
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];
|
|
44
|
+
if (api) {
|
|
45
|
+
delete api[type];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
__name(unregisterGlobal, "unregisterGlobal");
|
|
49
|
+
var _SimpleClock = class _SimpleClock {
|
|
50
|
+
preciseNow() {
|
|
51
|
+
const now = new preciseDate.PreciseDate();
|
|
52
|
+
const nowStruct = now.toStruct();
|
|
53
|
+
return [
|
|
54
|
+
nowStruct.seconds,
|
|
55
|
+
nowStruct.nanos
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
reset() {
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
__name(_SimpleClock, "SimpleClock");
|
|
62
|
+
var SimpleClock = _SimpleClock;
|
|
63
|
+
|
|
64
|
+
// src/v3/clock/index.ts
|
|
65
|
+
var API_NAME = "clock";
|
|
66
|
+
var SIMPLE_CLOCK = new SimpleClock();
|
|
67
|
+
var _getClock, getClock_fn;
|
|
68
|
+
var _ClockAPI = class _ClockAPI {
|
|
69
|
+
constructor() {
|
|
70
|
+
__privateAdd(this, _getClock);
|
|
71
|
+
}
|
|
72
|
+
static getInstance() {
|
|
73
|
+
if (!this._instance) {
|
|
74
|
+
this._instance = new _ClockAPI();
|
|
75
|
+
}
|
|
76
|
+
return this._instance;
|
|
77
|
+
}
|
|
78
|
+
setGlobalClock(clock2) {
|
|
79
|
+
return registerGlobal(API_NAME, clock2);
|
|
80
|
+
}
|
|
81
|
+
preciseNow() {
|
|
82
|
+
return __privateMethod(this, _getClock, getClock_fn).call(this).preciseNow();
|
|
83
|
+
}
|
|
84
|
+
reset() {
|
|
85
|
+
__privateMethod(this, _getClock, getClock_fn).call(this).reset();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
_getClock = new WeakSet();
|
|
89
|
+
getClock_fn = /* @__PURE__ */ __name(function() {
|
|
90
|
+
return getGlobal(API_NAME) ?? SIMPLE_CLOCK;
|
|
91
|
+
}, "#getClock");
|
|
92
|
+
__name(_ClockAPI, "ClockAPI");
|
|
93
|
+
var ClockAPI = _ClockAPI;
|
|
94
|
+
|
|
95
|
+
// src/v3/clock-api.ts
|
|
96
|
+
var clock = ClockAPI.getInstance();
|
|
97
|
+
var _NoopTaskLogger = class _NoopTaskLogger {
|
|
98
|
+
debug() {
|
|
99
|
+
}
|
|
100
|
+
log() {
|
|
101
|
+
}
|
|
102
|
+
info() {
|
|
103
|
+
}
|
|
104
|
+
warn() {
|
|
105
|
+
}
|
|
106
|
+
error() {
|
|
107
|
+
}
|
|
108
|
+
trace(name, fn) {
|
|
109
|
+
return fn({});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
__name(_NoopTaskLogger, "NoopTaskLogger");
|
|
113
|
+
var NoopTaskLogger = _NoopTaskLogger;
|
|
114
|
+
|
|
115
|
+
// src/v3/logger/index.ts
|
|
116
|
+
var API_NAME2 = "logger";
|
|
117
|
+
var NOOP_TASK_LOGGER = new NoopTaskLogger();
|
|
118
|
+
var _getTaskLogger, getTaskLogger_fn;
|
|
119
|
+
var _LoggerAPI = class _LoggerAPI {
|
|
120
|
+
constructor() {
|
|
121
|
+
__privateAdd(this, _getTaskLogger);
|
|
122
|
+
}
|
|
123
|
+
static getInstance() {
|
|
124
|
+
if (!this._instance) {
|
|
125
|
+
this._instance = new _LoggerAPI();
|
|
126
|
+
}
|
|
127
|
+
return this._instance;
|
|
128
|
+
}
|
|
129
|
+
disable() {
|
|
130
|
+
unregisterGlobal(API_NAME2);
|
|
131
|
+
}
|
|
132
|
+
setGlobalTaskLogger(taskLogger) {
|
|
133
|
+
return registerGlobal(API_NAME2, taskLogger);
|
|
134
|
+
}
|
|
135
|
+
debug(message, metadata) {
|
|
136
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).debug(message, metadata);
|
|
137
|
+
}
|
|
138
|
+
log(message, metadata) {
|
|
139
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).log(message, metadata);
|
|
140
|
+
}
|
|
141
|
+
info(message, metadata) {
|
|
142
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).info(message, metadata);
|
|
143
|
+
}
|
|
144
|
+
warn(message, metadata) {
|
|
145
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).warn(message, metadata);
|
|
146
|
+
}
|
|
147
|
+
error(message, metadata) {
|
|
148
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).error(message, metadata);
|
|
149
|
+
}
|
|
150
|
+
trace(name, fn) {
|
|
151
|
+
return __privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).trace(name, fn);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
_getTaskLogger = new WeakSet();
|
|
155
|
+
getTaskLogger_fn = /* @__PURE__ */ __name(function() {
|
|
156
|
+
return getGlobal(API_NAME2) ?? NOOP_TASK_LOGGER;
|
|
157
|
+
}, "#getTaskLogger");
|
|
158
|
+
__name(_LoggerAPI, "LoggerAPI");
|
|
159
|
+
var LoggerAPI = _LoggerAPI;
|
|
160
|
+
|
|
161
|
+
// src/v3/logger-api.ts
|
|
162
|
+
var logger = LoggerAPI.getInstance();
|
|
163
|
+
async function unboundedTimeout(delay = 0, value, options) {
|
|
164
|
+
const maxDelay = 2147483647;
|
|
165
|
+
const fullTimeouts = Math.floor(delay / maxDelay);
|
|
166
|
+
const remainingDelay = delay % maxDelay;
|
|
167
|
+
let lastTimeoutResult = await promises.setTimeout(remainingDelay, value, options);
|
|
168
|
+
for (let i = 0; i < fullTimeouts; i++) {
|
|
169
|
+
lastTimeoutResult = await promises.setTimeout(maxDelay, value, options);
|
|
170
|
+
}
|
|
171
|
+
return lastTimeoutResult;
|
|
172
|
+
}
|
|
173
|
+
__name(unboundedTimeout, "unboundedTimeout");
|
|
174
|
+
async function checkpointSafeTimeout(delay = 0) {
|
|
175
|
+
const scanIntervalMs = 1e3;
|
|
176
|
+
for await (const start of promises.setInterval(scanIntervalMs, Date.now())) {
|
|
177
|
+
if (Date.now() - start > delay) {
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
__name(checkpointSafeTimeout, "checkpointSafeTimeout");
|
|
183
|
+
|
|
184
|
+
// src/v3/runtime/prodRuntimeManager.ts
|
|
185
|
+
var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
186
|
+
constructor(ipc, options = {}) {
|
|
187
|
+
this.ipc = ipc;
|
|
188
|
+
this.options = options;
|
|
189
|
+
this._taskWaits = /* @__PURE__ */ new Map();
|
|
190
|
+
this._batchWaits = /* @__PURE__ */ new Map();
|
|
191
|
+
}
|
|
192
|
+
disable() {
|
|
193
|
+
}
|
|
194
|
+
async waitForDuration(ms) {
|
|
195
|
+
const now = Date.now();
|
|
196
|
+
const internalTimeout = unboundedTimeout(ms, "internal");
|
|
197
|
+
const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);
|
|
198
|
+
if (ms <= this.waitThresholdInMs) {
|
|
199
|
+
await internalTimeout;
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const externalResume = new Promise((resolve, reject) => {
|
|
203
|
+
this._waitForDuration = {
|
|
204
|
+
resolve,
|
|
205
|
+
reject
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
const { willCheckpointAndRestore } = await this.ipc.sendWithAck("WAIT_FOR_DURATION", {
|
|
209
|
+
ms,
|
|
210
|
+
now
|
|
211
|
+
}, 31e3);
|
|
212
|
+
if (!willCheckpointAndRestore) {
|
|
213
|
+
await internalTimeout;
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this.ipc.send("READY_FOR_CHECKPOINT", {});
|
|
217
|
+
await Promise.race([
|
|
218
|
+
internalTimeout,
|
|
219
|
+
checkpointSafeInternalTimeout
|
|
220
|
+
]);
|
|
221
|
+
clock.reset();
|
|
222
|
+
try {
|
|
223
|
+
const { checkpointCanceled, version } = await this.ipc.sendWithAck("CANCEL_CHECKPOINT", {
|
|
224
|
+
version: "v2",
|
|
225
|
+
reason: "WAIT_FOR_DURATION"
|
|
226
|
+
}, 31e3);
|
|
227
|
+
if (checkpointCanceled) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
} catch (error) {
|
|
231
|
+
logger.debug("Checkpoint cancellation timed out", {
|
|
232
|
+
error
|
|
233
|
+
});
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
await externalResume;
|
|
237
|
+
}
|
|
238
|
+
resumeAfterDuration() {
|
|
239
|
+
if (!this._waitForDuration) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
clock.reset();
|
|
243
|
+
this._waitForDuration.resolve("external");
|
|
244
|
+
this._waitForDuration = void 0;
|
|
245
|
+
}
|
|
246
|
+
async waitUntil(date) {
|
|
247
|
+
return this.waitForDuration(date.getTime() - Date.now());
|
|
248
|
+
}
|
|
249
|
+
async waitForTask(params) {
|
|
250
|
+
const promise = new Promise((resolve) => {
|
|
251
|
+
this._taskWaits.set(params.id, {
|
|
252
|
+
resolve
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
await this.ipc.send("WAIT_FOR_TASK", {
|
|
256
|
+
friendlyId: params.id
|
|
257
|
+
});
|
|
258
|
+
const result = await promise;
|
|
259
|
+
clock.reset();
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
async waitForBatch(params) {
|
|
263
|
+
if (!params.runs.length) {
|
|
264
|
+
return Promise.resolve({
|
|
265
|
+
id: params.id,
|
|
266
|
+
items: []
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
const promise = Promise.all(params.runs.map((runId) => {
|
|
270
|
+
return new Promise((resolve, reject) => {
|
|
271
|
+
this._taskWaits.set(runId, {
|
|
272
|
+
resolve
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
}));
|
|
276
|
+
await this.ipc.send("WAIT_FOR_BATCH", {
|
|
277
|
+
batchFriendlyId: params.id,
|
|
278
|
+
runFriendlyIds: params.runs
|
|
279
|
+
});
|
|
280
|
+
const results = await promise;
|
|
281
|
+
clock.reset();
|
|
282
|
+
return {
|
|
283
|
+
id: params.id,
|
|
284
|
+
items: results
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
resumeTask(completion) {
|
|
288
|
+
const wait = this._taskWaits.get(completion.id);
|
|
289
|
+
if (!wait) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
wait.resolve(completion);
|
|
293
|
+
this._taskWaits.delete(completion.id);
|
|
294
|
+
}
|
|
295
|
+
get waitThresholdInMs() {
|
|
296
|
+
return this.options.waitThresholdInMs ?? 3e4;
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
__name(_ProdRuntimeManager, "ProdRuntimeManager");
|
|
300
|
+
var ProdRuntimeManager = _ProdRuntimeManager;
|
|
301
|
+
|
|
302
|
+
exports.ProdRuntimeManager = ProdRuntimeManager;
|
|
303
|
+
//# sourceMappingURL=out.js.map
|
|
304
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/v3/utils/platform.ts","../../../src/v3/utils/globals.ts","../../../src/v3/clock/simpleClock.ts","../../../src/v3/clock/index.ts","../../../src/v3/clock-api.ts","../../../src/v3/logger/taskLogger.ts","../../../src/v3/logger/index.ts","../../../src/v3/logger-api.ts","../../../src/v3/utils/timers.ts","../../../src/v3/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","unregisterGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","SeverityNumber","NoopTaskLogger","debug","log","info","warn","error","trace","name","fn","NOOP_TASK_LOGGER","LoggerAPI","disable","setGlobalTaskLogger","taskLogger","message","metadata","logger","setInterval","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","checkpointSafeTimeout","scanIntervalMs","start","Date","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","waitForDuration","ms","internalTimeout","checkpointSafeInternalTimeout","waitThresholdInMs","externalResume","Promise","resolve","reject","_waitForDuration","willCheckpointAndRestore","sendWithAck","send","race","checkpointCanceled","version","reason","resumeAfterDuration","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","wait","get","delete"],"mappings":"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","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { ApiClientConfiguration } from \"../apiClientManager/types\";\nimport { Clock } from \"../clock/clock\";\nimport type { RuntimeManager } from \"../runtime/manager\";\nimport { TaskCatalog } from \"../task-catalog/catalog\";\nimport { TaskContext } from \"../taskContext/types\";\nimport { UsageManager } from \"../usage/types\";\nimport { _globalThis } from \"./platform\";\n\nconst GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);\n\nconst _global = _globalThis as TriggerDotDevGlobal;\n\nexport function registerGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type,\n instance: TriggerDotDevGlobalAPI[Type],\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {});\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(`trigger.dev: Attempted duplicate registration of API: ${type}`);\n return false;\n }\n\n api[type] = instance;\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type\n): TriggerDotDevGlobalAPI[Type] | undefined {\n return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof TriggerDotDevGlobalAPI) {\n const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype TriggerDotDevGlobal = {\n [GLOBAL_TRIGGER_DOT_DEV_KEY]?: TriggerDotDevGlobalAPI;\n};\n\ntype TriggerDotDevGlobalAPI = {\n runtime?: RuntimeManager;\n logger?: any;\n clock?: Clock;\n usage?: UsageManager;\n [\"task-catalog\"]?: TaskCatalog;\n [\"task-context\"]?: TaskContext;\n [\"api-client\"]?: ApiClientConfiguration;\n};\n","import { PreciseDate } from \"@google-cloud/precise-date\";\nimport { Clock } from \"./clock\";\n\nexport class SimpleClock implements Clock {\n preciseNow(): [number, number] {\n const now = new PreciseDate();\n const nowStruct = now.toStruct();\n\n return [nowStruct.seconds, nowStruct.nanos];\n }\n\n reset() {\n // do nothing\n }\n}\n","const API_NAME = \"clock\";\n\nimport { getGlobal, registerGlobal } from \"../utils/globals\";\nimport type { Clock, ClockTime } from \"./clock\";\nimport { SimpleClock } from \"./simpleClock\";\n\nconst SIMPLE_CLOCK = new SimpleClock();\n\nexport class ClockAPI {\n private static _instance?: ClockAPI;\n\n private constructor() {}\n\n public static getInstance(): ClockAPI {\n if (!this._instance) {\n this._instance = new ClockAPI();\n }\n\n return this._instance;\n }\n\n public setGlobalClock(clock: Clock): boolean {\n return registerGlobal(API_NAME, clock);\n }\n\n public preciseNow(): ClockTime {\n return this.#getClock().preciseNow();\n }\n\n public reset(): void {\n this.#getClock().reset();\n }\n\n #getClock(): Clock {\n return getGlobal(API_NAME) ?? SIMPLE_CLOCK;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ClockAPI } from \"./clock\";\n/** Entrypoint for clock API */\nexport const clock = ClockAPI.getInstance();\n","import { Attributes, Span, SpanOptions } from \"@opentelemetry/api\";\nimport { Logger, SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { iconStringForSeverity } from \"../icons\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { TriggerTracer } from \"../tracer\";\nimport { flattenAttributes } from \"../utils/flattenAttributes\";\nimport { ClockTime } from \"../clock/clock\";\nimport { clock } from \"../clock-api\";\n\nexport type LogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\" | \"log\";\n\nexport const logLevels: Array<LogLevel> = [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\nexport type TaskLoggerConfig = {\n logger: Logger;\n tracer: TriggerTracer;\n level: LogLevel;\n};\n\nexport interface TaskLogger {\n debug(message: string, properties?: Record<string, unknown>): void;\n log(message: string, properties?: Record<string, unknown>): void;\n info(message: string, properties?: Record<string, unknown>): void;\n warn(message: string, properties?: Record<string, unknown>): void;\n error(message: string, properties?: Record<string, unknown>): void;\n trace<T>(name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T>;\n}\n\nexport class OtelTaskLogger implements TaskLogger {\n private readonly _level: number;\n\n constructor(private readonly _config: TaskLoggerConfig) {\n this._level = logLevels.indexOf(_config.level);\n }\n\n debug(message: string, properties?: Record<string, unknown>) {\n if (this._level < 4) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"debug\", SeverityNumber.DEBUG, properties);\n }\n\n log(message: string, properties?: Record<string, unknown>) {\n if (this._level < 3) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"log\", SeverityNumber.INFO, properties);\n }\n\n info(message: string, properties?: Record<string, unknown>) {\n if (this._level < 3) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"info\", SeverityNumber.INFO, properties);\n }\n\n warn(message: string, properties?: Record<string, unknown>) {\n if (this._level < 2) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"warn\", SeverityNumber.WARN, properties);\n }\n\n error(message: string, properties?: Record<string, unknown>) {\n if (this._level < 1) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"error\", SeverityNumber.ERROR, properties);\n }\n\n #emitLog(\n message: string,\n timestamp: ClockTime,\n severityText: string,\n severityNumber: SeverityNumber,\n properties?: Record<string, unknown>\n ) {\n let attributes: Attributes = { ...flattenAttributes(safeJsonProcess(properties)) };\n\n const icon = iconStringForSeverity(severityNumber);\n if (icon !== undefined) {\n attributes[SemanticInternalAttributes.STYLE_ICON] = icon;\n }\n\n this._config.logger.emit({\n severityNumber,\n severityText,\n body: message,\n attributes,\n timestamp,\n });\n }\n\n trace<T>(name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T> {\n return this._config.tracer.startActiveSpan(name, fn, options);\n }\n\n #getTimestampInHrTime(): ClockTime {\n return clock.preciseNow();\n }\n}\n\nexport class NoopTaskLogger implements TaskLogger {\n debug() {}\n log() {}\n info() {}\n warn() {}\n error() {}\n trace<T>(name: string, fn: (span: Span) => Promise<T>): Promise<T> {\n return fn({} as Span);\n }\n}\n\nfunction safeJsonProcess(value?: Record<string, unknown>): Record<string, unknown> | undefined {\n try {\n return JSON.parse(JSON.stringify(value, jsonErrorReplacer));\n } catch {\n return value;\n }\n}\n\nfunction jsonErrorReplacer(key: string, value: unknown) {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n\n return value;\n}\n","import { NoopTaskLogger, TaskLogger } from \"./taskLogger\";\nimport { getGlobal, registerGlobal, unregisterGlobal } from \"../utils/globals\";\nimport { Span } from \"@opentelemetry/api\";\n\nconst API_NAME = \"logger\";\n\nconst NOOP_TASK_LOGGER = new NoopTaskLogger();\n\nexport class LoggerAPI implements TaskLogger {\n private static _instance?: LoggerAPI;\n\n private constructor() {}\n\n public static getInstance(): LoggerAPI {\n if (!this._instance) {\n this._instance = new LoggerAPI();\n }\n\n return this._instance;\n }\n\n public disable() {\n unregisterGlobal(API_NAME);\n }\n\n public setGlobalTaskLogger(taskLogger: TaskLogger): boolean {\n return registerGlobal(API_NAME, taskLogger);\n }\n\n public debug(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().debug(message, metadata);\n }\n\n public log(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().log(message, metadata);\n }\n\n public info(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().info(message, metadata);\n }\n\n public warn(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().warn(message, metadata);\n }\n\n public error(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().error(message, metadata);\n }\n\n public trace<T>(name: string, fn: (span: Span) => Promise<T>): Promise<T> {\n return this.#getTaskLogger().trace(name, fn);\n }\n\n #getTaskLogger(): TaskLogger {\n return getGlobal(API_NAME) ?? NOOP_TASK_LOGGER;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { LoggerAPI } from \"./logger\";\n/** Entrypoint for logger API */\nexport const logger = LoggerAPI.getInstance();\n","import { TimerOptions } from \"node:timers\";\nimport { setInterval, setTimeout } from \"node:timers/promises\";\n\nexport async function unboundedTimeout<T = void>(\n delay: number = 0,\n value?: T,\n options?: TimerOptions\n): Promise<T> {\n const maxDelay = 2147483647; // Highest value that will fit in a 32-bit signed integer\n\n const fullTimeouts = Math.floor(delay / maxDelay);\n const remainingDelay = delay % maxDelay;\n\n let lastTimeoutResult = await setTimeout(remainingDelay, value, options);\n\n for (let i = 0; i < fullTimeouts; i++) {\n lastTimeoutResult = await setTimeout(maxDelay, value, options);\n }\n\n return lastTimeoutResult;\n}\n\nexport async function checkpointSafeTimeout(delay: number = 0): Promise<void> {\n const scanIntervalMs = 1000;\n\n // Every scanIntervalMs, check if delay has elapsed\n for await (const start of setInterval(scanIntervalMs, Date.now())) {\n if (Date.now() - start > delay) {\n break;\n }\n }\n}\n","import { clock } from \"../clock-api\";\nimport { logger } from \"../logger-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecution,\n TaskRunExecutionResult,\n} from \"../schemas\";\nimport { checkpointSafeTimeout, unboundedTimeout } from \"../utils/timers\";\nimport { ZodIpcConnection } from \"../zodIpc\";\nimport { RuntimeManager } from \"./manager\";\n\nexport type ProdRuntimeManagerOptions = {\n waitThresholdInMs?: number;\n};\n\nexport class ProdRuntimeManager implements RuntimeManager {\n _taskWaits: Map<string, { resolve: (value: TaskRunExecutionResult) => void }> = new Map();\n\n _batchWaits: Map<\n string,\n { resolve: (value: BatchTaskRunExecutionResult) => void; reject: (err?: any) => void }\n > = new Map();\n\n _waitForDuration:\n | { resolve: (value: \"external\") => void; reject: (err?: any) => void }\n | undefined;\n\n constructor(\n private ipc: ZodIpcConnection<\n typeof ProdWorkerToChildMessages,\n typeof ProdChildToWorkerMessages\n >,\n private options: ProdRuntimeManagerOptions = {}\n ) {}\n\n disable(): void {\n // do nothing\n }\n\n async waitForDuration(ms: number): Promise<void> {\n const now = Date.now();\n\n const internalTimeout = unboundedTimeout(ms, \"internal\" as const);\n const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);\n\n if (ms <= this.waitThresholdInMs) {\n await internalTimeout;\n return;\n }\n\n const externalResume = new Promise<\"external\">((resolve, reject) => {\n this._waitForDuration = { resolve, reject };\n });\n\n const { willCheckpointAndRestore } = await this.ipc.sendWithAck(\n \"WAIT_FOR_DURATION\",\n {\n ms,\n now,\n },\n 31_000\n );\n\n if (!willCheckpointAndRestore) {\n await internalTimeout;\n return;\n }\n\n this.ipc.send(\"READY_FOR_CHECKPOINT\", {});\n\n // internalTimeout acts as a backup and will be accurate if the checkpoint never happens\n // checkpointSafeInternalTimeout is accurate even after non-simulated restores\n await Promise.race([internalTimeout, checkpointSafeInternalTimeout]);\n\n // Resets the clock to the current time\n clock.reset();\n\n try {\n // The coordinator should cancel any in-progress checkpoints\n const { checkpointCanceled, version } = await this.ipc.sendWithAck(\n \"CANCEL_CHECKPOINT\",\n {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n },\n 31_000\n );\n\n if (checkpointCanceled) {\n // There won't be a checkpoint or external resume and we've already completed our internal timeout\n return;\n }\n } catch (error) {\n // If the cancellation times out, we will proceed as if the checkpoint was canceled\n logger.debug(\"Checkpoint cancellation timed out\", { error });\n return;\n }\n\n // No checkpoint was canceled, so we were checkpointed. We need to wait for the external resume message.\n await externalResume;\n }\n\n resumeAfterDuration(): void {\n if (!this._waitForDuration) {\n return;\n }\n\n // Resets the clock to the current time\n clock.reset();\n\n this._waitForDuration.resolve(\"external\");\n this._waitForDuration = undefined;\n }\n\n async waitUntil(date: Date): Promise<void> {\n return this.waitForDuration(date.getTime() - Date.now());\n }\n\n async waitForTask(params: { id: string; ctx: TaskRunContext }): Promise<TaskRunExecutionResult> {\n const promise = new Promise<TaskRunExecutionResult>((resolve) => {\n this._taskWaits.set(params.id, { resolve });\n });\n\n await this.ipc.send(\"WAIT_FOR_TASK\", {\n friendlyId: params.id,\n });\n\n const result = await promise;\n\n clock.reset();\n\n return result;\n }\n\n async waitForBatch(params: {\n id: string;\n runs: string[];\n ctx: TaskRunContext;\n }): Promise<BatchTaskRunExecutionResult> {\n if (!params.runs.length) {\n return Promise.resolve({ id: params.id, items: [] });\n }\n\n const promise = Promise.all(\n params.runs.map((runId) => {\n return new Promise<TaskRunExecutionResult>((resolve, reject) => {\n this._taskWaits.set(runId, { resolve });\n });\n })\n );\n\n await this.ipc.send(\"WAIT_FOR_BATCH\", {\n batchFriendlyId: params.id,\n runFriendlyIds: params.runs,\n });\n\n const results = await promise;\n\n clock.reset();\n\n return {\n id: params.id,\n items: results,\n };\n }\n\n resumeTask(completion: TaskRunExecutionResult): void {\n const wait = this._taskWaits.get(completion.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(completion.id);\n }\n\n private get waitThresholdInMs(): number {\n return this.options.waitThresholdInMs ?? 30_000;\n }\n}\n"]}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { PreciseDate } from '@google-cloud/precise-date';
|
|
2
|
+
import '@opentelemetry/api-logs';
|
|
3
|
+
import { setTimeout, setInterval } from 'node:timers/promises';
|
|
4
|
+
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __accessCheck = (obj, member, msg) => {
|
|
8
|
+
if (!member.has(obj))
|
|
9
|
+
throw TypeError("Cannot " + msg);
|
|
10
|
+
};
|
|
11
|
+
var __privateAdd = (obj, member, value) => {
|
|
12
|
+
if (member.has(obj))
|
|
13
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
14
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
15
|
+
};
|
|
16
|
+
var __privateMethod = (obj, member, method) => {
|
|
17
|
+
__accessCheck(obj, member, "access private method");
|
|
18
|
+
return method;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// src/v3/utils/platform.ts
|
|
22
|
+
var _globalThis = typeof globalThis === "object" ? globalThis : global;
|
|
23
|
+
|
|
24
|
+
// src/v3/utils/globals.ts
|
|
25
|
+
var GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);
|
|
26
|
+
var _global = _globalThis;
|
|
27
|
+
function registerGlobal(type, instance, allowOverride = false) {
|
|
28
|
+
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {};
|
|
29
|
+
if (!allowOverride && api[type]) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
api[type] = instance;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
__name(registerGlobal, "registerGlobal");
|
|
36
|
+
function getGlobal(type) {
|
|
37
|
+
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
38
|
+
}
|
|
39
|
+
__name(getGlobal, "getGlobal");
|
|
40
|
+
function unregisterGlobal(type) {
|
|
41
|
+
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];
|
|
42
|
+
if (api) {
|
|
43
|
+
delete api[type];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
__name(unregisterGlobal, "unregisterGlobal");
|
|
47
|
+
var _SimpleClock = class _SimpleClock {
|
|
48
|
+
preciseNow() {
|
|
49
|
+
const now = new PreciseDate();
|
|
50
|
+
const nowStruct = now.toStruct();
|
|
51
|
+
return [
|
|
52
|
+
nowStruct.seconds,
|
|
53
|
+
nowStruct.nanos
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
reset() {
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
__name(_SimpleClock, "SimpleClock");
|
|
60
|
+
var SimpleClock = _SimpleClock;
|
|
61
|
+
|
|
62
|
+
// src/v3/clock/index.ts
|
|
63
|
+
var API_NAME = "clock";
|
|
64
|
+
var SIMPLE_CLOCK = new SimpleClock();
|
|
65
|
+
var _getClock, getClock_fn;
|
|
66
|
+
var _ClockAPI = class _ClockAPI {
|
|
67
|
+
constructor() {
|
|
68
|
+
__privateAdd(this, _getClock);
|
|
69
|
+
}
|
|
70
|
+
static getInstance() {
|
|
71
|
+
if (!this._instance) {
|
|
72
|
+
this._instance = new _ClockAPI();
|
|
73
|
+
}
|
|
74
|
+
return this._instance;
|
|
75
|
+
}
|
|
76
|
+
setGlobalClock(clock2) {
|
|
77
|
+
return registerGlobal(API_NAME, clock2);
|
|
78
|
+
}
|
|
79
|
+
preciseNow() {
|
|
80
|
+
return __privateMethod(this, _getClock, getClock_fn).call(this).preciseNow();
|
|
81
|
+
}
|
|
82
|
+
reset() {
|
|
83
|
+
__privateMethod(this, _getClock, getClock_fn).call(this).reset();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
_getClock = new WeakSet();
|
|
87
|
+
getClock_fn = /* @__PURE__ */ __name(function() {
|
|
88
|
+
return getGlobal(API_NAME) ?? SIMPLE_CLOCK;
|
|
89
|
+
}, "#getClock");
|
|
90
|
+
__name(_ClockAPI, "ClockAPI");
|
|
91
|
+
var ClockAPI = _ClockAPI;
|
|
92
|
+
|
|
93
|
+
// src/v3/clock-api.ts
|
|
94
|
+
var clock = ClockAPI.getInstance();
|
|
95
|
+
var _NoopTaskLogger = class _NoopTaskLogger {
|
|
96
|
+
debug() {
|
|
97
|
+
}
|
|
98
|
+
log() {
|
|
99
|
+
}
|
|
100
|
+
info() {
|
|
101
|
+
}
|
|
102
|
+
warn() {
|
|
103
|
+
}
|
|
104
|
+
error() {
|
|
105
|
+
}
|
|
106
|
+
trace(name, fn) {
|
|
107
|
+
return fn({});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
__name(_NoopTaskLogger, "NoopTaskLogger");
|
|
111
|
+
var NoopTaskLogger = _NoopTaskLogger;
|
|
112
|
+
|
|
113
|
+
// src/v3/logger/index.ts
|
|
114
|
+
var API_NAME2 = "logger";
|
|
115
|
+
var NOOP_TASK_LOGGER = new NoopTaskLogger();
|
|
116
|
+
var _getTaskLogger, getTaskLogger_fn;
|
|
117
|
+
var _LoggerAPI = class _LoggerAPI {
|
|
118
|
+
constructor() {
|
|
119
|
+
__privateAdd(this, _getTaskLogger);
|
|
120
|
+
}
|
|
121
|
+
static getInstance() {
|
|
122
|
+
if (!this._instance) {
|
|
123
|
+
this._instance = new _LoggerAPI();
|
|
124
|
+
}
|
|
125
|
+
return this._instance;
|
|
126
|
+
}
|
|
127
|
+
disable() {
|
|
128
|
+
unregisterGlobal(API_NAME2);
|
|
129
|
+
}
|
|
130
|
+
setGlobalTaskLogger(taskLogger) {
|
|
131
|
+
return registerGlobal(API_NAME2, taskLogger);
|
|
132
|
+
}
|
|
133
|
+
debug(message, metadata) {
|
|
134
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).debug(message, metadata);
|
|
135
|
+
}
|
|
136
|
+
log(message, metadata) {
|
|
137
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).log(message, metadata);
|
|
138
|
+
}
|
|
139
|
+
info(message, metadata) {
|
|
140
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).info(message, metadata);
|
|
141
|
+
}
|
|
142
|
+
warn(message, metadata) {
|
|
143
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).warn(message, metadata);
|
|
144
|
+
}
|
|
145
|
+
error(message, metadata) {
|
|
146
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).error(message, metadata);
|
|
147
|
+
}
|
|
148
|
+
trace(name, fn) {
|
|
149
|
+
return __privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).trace(name, fn);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
_getTaskLogger = new WeakSet();
|
|
153
|
+
getTaskLogger_fn = /* @__PURE__ */ __name(function() {
|
|
154
|
+
return getGlobal(API_NAME2) ?? NOOP_TASK_LOGGER;
|
|
155
|
+
}, "#getTaskLogger");
|
|
156
|
+
__name(_LoggerAPI, "LoggerAPI");
|
|
157
|
+
var LoggerAPI = _LoggerAPI;
|
|
158
|
+
|
|
159
|
+
// src/v3/logger-api.ts
|
|
160
|
+
var logger = LoggerAPI.getInstance();
|
|
161
|
+
async function unboundedTimeout(delay = 0, value, options) {
|
|
162
|
+
const maxDelay = 2147483647;
|
|
163
|
+
const fullTimeouts = Math.floor(delay / maxDelay);
|
|
164
|
+
const remainingDelay = delay % maxDelay;
|
|
165
|
+
let lastTimeoutResult = await setTimeout(remainingDelay, value, options);
|
|
166
|
+
for (let i = 0; i < fullTimeouts; i++) {
|
|
167
|
+
lastTimeoutResult = await setTimeout(maxDelay, value, options);
|
|
168
|
+
}
|
|
169
|
+
return lastTimeoutResult;
|
|
170
|
+
}
|
|
171
|
+
__name(unboundedTimeout, "unboundedTimeout");
|
|
172
|
+
async function checkpointSafeTimeout(delay = 0) {
|
|
173
|
+
const scanIntervalMs = 1e3;
|
|
174
|
+
for await (const start of setInterval(scanIntervalMs, Date.now())) {
|
|
175
|
+
if (Date.now() - start > delay) {
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
__name(checkpointSafeTimeout, "checkpointSafeTimeout");
|
|
181
|
+
|
|
182
|
+
// src/v3/runtime/prodRuntimeManager.ts
|
|
183
|
+
var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
184
|
+
constructor(ipc, options = {}) {
|
|
185
|
+
this.ipc = ipc;
|
|
186
|
+
this.options = options;
|
|
187
|
+
this._taskWaits = /* @__PURE__ */ new Map();
|
|
188
|
+
this._batchWaits = /* @__PURE__ */ new Map();
|
|
189
|
+
}
|
|
190
|
+
disable() {
|
|
191
|
+
}
|
|
192
|
+
async waitForDuration(ms) {
|
|
193
|
+
const now = Date.now();
|
|
194
|
+
const internalTimeout = unboundedTimeout(ms, "internal");
|
|
195
|
+
const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);
|
|
196
|
+
if (ms <= this.waitThresholdInMs) {
|
|
197
|
+
await internalTimeout;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const externalResume = new Promise((resolve, reject) => {
|
|
201
|
+
this._waitForDuration = {
|
|
202
|
+
resolve,
|
|
203
|
+
reject
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
const { willCheckpointAndRestore } = await this.ipc.sendWithAck("WAIT_FOR_DURATION", {
|
|
207
|
+
ms,
|
|
208
|
+
now
|
|
209
|
+
}, 31e3);
|
|
210
|
+
if (!willCheckpointAndRestore) {
|
|
211
|
+
await internalTimeout;
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
this.ipc.send("READY_FOR_CHECKPOINT", {});
|
|
215
|
+
await Promise.race([
|
|
216
|
+
internalTimeout,
|
|
217
|
+
checkpointSafeInternalTimeout
|
|
218
|
+
]);
|
|
219
|
+
clock.reset();
|
|
220
|
+
try {
|
|
221
|
+
const { checkpointCanceled, version } = await this.ipc.sendWithAck("CANCEL_CHECKPOINT", {
|
|
222
|
+
version: "v2",
|
|
223
|
+
reason: "WAIT_FOR_DURATION"
|
|
224
|
+
}, 31e3);
|
|
225
|
+
if (checkpointCanceled) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
} catch (error) {
|
|
229
|
+
logger.debug("Checkpoint cancellation timed out", {
|
|
230
|
+
error
|
|
231
|
+
});
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
await externalResume;
|
|
235
|
+
}
|
|
236
|
+
resumeAfterDuration() {
|
|
237
|
+
if (!this._waitForDuration) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
clock.reset();
|
|
241
|
+
this._waitForDuration.resolve("external");
|
|
242
|
+
this._waitForDuration = void 0;
|
|
243
|
+
}
|
|
244
|
+
async waitUntil(date) {
|
|
245
|
+
return this.waitForDuration(date.getTime() - Date.now());
|
|
246
|
+
}
|
|
247
|
+
async waitForTask(params) {
|
|
248
|
+
const promise = new Promise((resolve) => {
|
|
249
|
+
this._taskWaits.set(params.id, {
|
|
250
|
+
resolve
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
await this.ipc.send("WAIT_FOR_TASK", {
|
|
254
|
+
friendlyId: params.id
|
|
255
|
+
});
|
|
256
|
+
const result = await promise;
|
|
257
|
+
clock.reset();
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
async waitForBatch(params) {
|
|
261
|
+
if (!params.runs.length) {
|
|
262
|
+
return Promise.resolve({
|
|
263
|
+
id: params.id,
|
|
264
|
+
items: []
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
const promise = Promise.all(params.runs.map((runId) => {
|
|
268
|
+
return new Promise((resolve, reject) => {
|
|
269
|
+
this._taskWaits.set(runId, {
|
|
270
|
+
resolve
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
}));
|
|
274
|
+
await this.ipc.send("WAIT_FOR_BATCH", {
|
|
275
|
+
batchFriendlyId: params.id,
|
|
276
|
+
runFriendlyIds: params.runs
|
|
277
|
+
});
|
|
278
|
+
const results = await promise;
|
|
279
|
+
clock.reset();
|
|
280
|
+
return {
|
|
281
|
+
id: params.id,
|
|
282
|
+
items: results
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
resumeTask(completion) {
|
|
286
|
+
const wait = this._taskWaits.get(completion.id);
|
|
287
|
+
if (!wait) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
wait.resolve(completion);
|
|
291
|
+
this._taskWaits.delete(completion.id);
|
|
292
|
+
}
|
|
293
|
+
get waitThresholdInMs() {
|
|
294
|
+
return this.options.waitThresholdInMs ?? 3e4;
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
__name(_ProdRuntimeManager, "ProdRuntimeManager");
|
|
298
|
+
var ProdRuntimeManager = _ProdRuntimeManager;
|
|
299
|
+
|
|
300
|
+
export { ProdRuntimeManager };
|
|
301
|
+
//# sourceMappingURL=out.js.map
|
|
302
|
+
//# sourceMappingURL=index.mjs.map
|