@trigger.dev/core 3.0.0-beta.45 → 3.0.0-beta.47
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-mlNxCacM.d.ts → catalog-N-X0Te3W.d.mts} +5 -23
- package/dist/{catalog-QcLmPVsr.d.mts → catalog-NxVZnWZh.d.ts} +5 -23
- package/dist/{common-55Mqj8JP.d.mts → common-fIyU5pmz.d.mts} +13 -0
- package/dist/{common-55Mqj8JP.d.ts → common-fIyU5pmz.d.ts} +13 -0
- package/dist/{manager-6NRInm7C.d.ts → manager-2ZQ3_twq.d.ts} +1 -1
- package/dist/{manager-2AqSY67c.d.mts → manager-X_HrWQ7_.d.mts} +1 -1
- package/dist/{messages-EJX0bMsF.d.mts → messages-Sggr4tid.d.mts} +233 -70
- package/dist/{messages-EJX0bMsF.d.ts → messages-Sggr4tid.d.ts} +233 -70
- package/dist/{schemas-Sb0sJcEt.d.mts → schemas-Zy7mGFgD.d.mts} +22 -0
- package/dist/{schemas-Sb0sJcEt.d.ts → schemas-Zy7mGFgD.d.ts} +22 -0
- package/dist/tracer-N0p2Fuuv.d.mts +23 -0
- package/dist/tracer-N0p2Fuuv.d.ts +23 -0
- package/dist/v3/dev/index.d.mts +2 -2
- package/dist/v3/dev/index.d.ts +2 -2
- package/dist/v3/dev/index.js.map +1 -1
- package/dist/v3/dev/index.mjs.map +1 -1
- package/dist/v3/index.d.mts +50 -38
- package/dist/v3/index.d.ts +50 -38
- package/dist/v3/index.js +503 -343
- package/dist/v3/index.js.map +1 -1
- package/dist/v3/index.mjs +499 -344
- package/dist/v3/index.mjs.map +1 -1
- package/dist/v3/otel/index.js +15 -5
- package/dist/v3/otel/index.js.map +1 -1
- package/dist/v3/otel/index.mjs +15 -5
- package/dist/v3/otel/index.mjs.map +1 -1
- package/dist/v3/prod/index.d.mts +4 -4
- package/dist/v3/prod/index.d.ts +4 -4
- package/dist/v3/prod/index.js +7 -131
- package/dist/v3/prod/index.js.map +1 -1
- package/dist/v3/prod/index.mjs +7 -131
- package/dist/v3/prod/index.mjs.map +1 -1
- package/dist/v3/schemas/index.d.mts +16 -4
- package/dist/v3/schemas/index.d.ts +16 -4
- package/dist/v3/schemas/index.js +35 -40
- package/dist/v3/schemas/index.js.map +1 -1
- package/dist/v3/schemas/index.mjs +35 -41
- package/dist/v3/schemas/index.mjs.map +1 -1
- package/dist/v3/utils/timers.d.mts +6 -0
- package/dist/v3/utils/timers.d.ts +6 -0
- package/dist/v3/utils/timers.js +31 -0
- package/dist/v3/utils/timers.js.map +1 -0
- package/dist/v3/utils/timers.mjs +28 -0
- package/dist/v3/utils/timers.mjs.map +1 -0
- package/dist/v3/workers/index.d.mts +7 -6
- package/dist/v3/workers/index.d.ts +7 -6
- package/dist/v3/workers/index.js +251 -96
- package/dist/v3/workers/index.js.map +1 -1
- package/dist/v3/workers/index.mjs +251 -96
- package/dist/v3/workers/index.mjs.map +1 -1
- package/dist/v3/zodNamespace.js +41 -18
- package/dist/v3/zodNamespace.js.map +1 -1
- package/dist/v3/zodNamespace.mjs +42 -19
- package/dist/v3/zodNamespace.mjs.map +1 -1
- package/dist/v3/zodSocket.d.mts +8 -3
- package/dist/v3/zodSocket.d.ts +8 -3
- package/dist/v3/zodSocket.js +56 -25
- package/dist/v3/zodSocket.js.map +1 -1
- package/dist/v3/zodSocket.mjs +57 -26
- package/dist/v3/zodSocket.mjs.map +1 -1
- package/dist/v3/zodfetch.d.mts +15 -2
- package/dist/v3/zodfetch.d.ts +15 -2
- package/dist/v3/zodfetch.js +248 -28
- package/dist/v3/zodfetch.js.map +1 -1
- package/dist/v3/zodfetch.mjs +246 -29
- package/dist/v3/zodfetch.mjs.map +1 -1
- package/package.json +10 -2
package/dist/v3/prod/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as TaskRunExecutionResult, B as BatchTaskRunExecutionResult, a as TaskRunContext } from '../../common-
|
|
2
|
-
import { P as ProdWorkerToChildMessages, a as ProdChildToWorkerMessages } from '../../messages-
|
|
1
|
+
import { T as TaskRunExecutionResult, B as BatchTaskRunExecutionResult, a as TaskRunContext } from '../../common-fIyU5pmz.mjs';
|
|
2
|
+
import { P as ProdWorkerToChildMessages, a as ProdChildToWorkerMessages } from '../../messages-Sggr4tid.mjs';
|
|
3
3
|
import { ZodIpcConnection } from '../zodIpc.mjs';
|
|
4
|
-
import { R as RuntimeManager } from '../../manager-
|
|
4
|
+
import { R as RuntimeManager } from '../../manager-X_HrWQ7_.mjs';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import '../zodSocket.mjs';
|
|
7
7
|
import 'socket.io-client';
|
|
@@ -22,7 +22,7 @@ declare class ProdRuntimeManager implements RuntimeManager {
|
|
|
22
22
|
reject: (err?: any) => void;
|
|
23
23
|
}>;
|
|
24
24
|
_waitForDuration: {
|
|
25
|
-
resolve: (value:
|
|
25
|
+
resolve: (value: void) => void;
|
|
26
26
|
reject: (err?: any) => void;
|
|
27
27
|
} | undefined;
|
|
28
28
|
constructor(ipc: ZodIpcConnection<typeof ProdWorkerToChildMessages, typeof ProdChildToWorkerMessages>, options?: ProdRuntimeManagerOptions);
|
package/dist/v3/prod/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as TaskRunExecutionResult, B as BatchTaskRunExecutionResult, a as TaskRunContext } from '../../common-
|
|
2
|
-
import { P as ProdWorkerToChildMessages, a as ProdChildToWorkerMessages } from '../../messages-
|
|
1
|
+
import { T as TaskRunExecutionResult, B as BatchTaskRunExecutionResult, a as TaskRunContext } from '../../common-fIyU5pmz.js';
|
|
2
|
+
import { P as ProdWorkerToChildMessages, a as ProdChildToWorkerMessages } from '../../messages-Sggr4tid.js';
|
|
3
3
|
import { ZodIpcConnection } from '../zodIpc.js';
|
|
4
|
-
import { R as RuntimeManager } from '../../manager-
|
|
4
|
+
import { R as RuntimeManager } from '../../manager-2ZQ3_twq.js';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import '../zodSocket.js';
|
|
7
7
|
import 'socket.io-client';
|
|
@@ -22,7 +22,7 @@ declare class ProdRuntimeManager implements RuntimeManager {
|
|
|
22
22
|
reject: (err?: any) => void;
|
|
23
23
|
}>;
|
|
24
24
|
_waitForDuration: {
|
|
25
|
-
resolve: (value:
|
|
25
|
+
resolve: (value: void) => void;
|
|
26
26
|
reject: (err?: any) => void;
|
|
27
27
|
} | undefined;
|
|
28
28
|
constructor(ipc: ZodIpcConnection<typeof ProdWorkerToChildMessages, typeof ProdChildToWorkerMessages>, options?: ProdRuntimeManagerOptions);
|
package/dist/v3/prod/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var preciseDate = require('@google-cloud/precise-date');
|
|
4
|
-
require('@opentelemetry/api-logs');
|
|
5
|
-
var promises = require('timers/promises');
|
|
6
4
|
|
|
7
5
|
var __defProp = Object.defineProperty;
|
|
8
6
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -39,13 +37,6 @@ function getGlobal(type) {
|
|
|
39
37
|
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
40
38
|
}
|
|
41
39
|
__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
40
|
var _SimpleClock = class _SimpleClock {
|
|
50
41
|
preciseNow() {
|
|
51
42
|
const now = new preciseDate.PreciseDate();
|
|
@@ -94,92 +85,6 @@ var ClockAPI = _ClockAPI;
|
|
|
94
85
|
|
|
95
86
|
// src/v3/clock-api.ts
|
|
96
87
|
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
88
|
|
|
184
89
|
// src/v3/runtime/prodRuntimeManager.ts
|
|
185
90
|
var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
@@ -193,54 +98,25 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
193
98
|
}
|
|
194
99
|
async waitForDuration(ms) {
|
|
195
100
|
const now = Date.now();
|
|
196
|
-
const
|
|
197
|
-
const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);
|
|
198
|
-
if (ms <= this.waitThresholdInMs) {
|
|
199
|
-
await internalTimeout;
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
const externalResume = new Promise((resolve, reject) => {
|
|
101
|
+
const resume = new Promise((resolve, reject) => {
|
|
203
102
|
this._waitForDuration = {
|
|
204
103
|
resolve,
|
|
205
104
|
reject
|
|
206
105
|
};
|
|
207
106
|
});
|
|
208
|
-
|
|
107
|
+
await this.ipc.send("WAIT_FOR_DURATION", {
|
|
209
108
|
ms,
|
|
210
|
-
now
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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;
|
|
109
|
+
now,
|
|
110
|
+
waitThresholdInMs: this.waitThresholdInMs
|
|
111
|
+
});
|
|
112
|
+
await resume;
|
|
237
113
|
}
|
|
238
114
|
resumeAfterDuration() {
|
|
239
115
|
if (!this._waitForDuration) {
|
|
240
116
|
return;
|
|
241
117
|
}
|
|
242
118
|
clock.reset();
|
|
243
|
-
this._waitForDuration.resolve(
|
|
119
|
+
this._waitForDuration.resolve();
|
|
244
120
|
this._waitForDuration = void 0;
|
|
245
121
|
}
|
|
246
122
|
async waitUntil(date) {
|
|
@@ -1 +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"]}
|
|
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/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","ProdRuntimeManager","constructor","ipc","options","_taskWaits","Map","_batchWaits","disable","waitForDuration","ms","Date","resume","Promise","resolve","reject","_waitForDuration","send","waitThresholdInMs","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 { clock } from \"../clock-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecutionResult,\n} from \"../schemas\";\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: { resolve: (value: void) => void; reject: (err?: any) => void } | 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 resume = new Promise<void>((resolve, reject) => {\n this._waitForDuration = { resolve, reject };\n });\n\n await this.ipc.send(\"WAIT_FOR_DURATION\", {\n ms,\n now,\n waitThresholdInMs: this.waitThresholdInMs,\n });\n\n await resume;\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();\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"]}
|
package/dist/v3/prod/index.mjs
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
2
|
-
import '@opentelemetry/api-logs';
|
|
3
|
-
import { setTimeout, setInterval } from 'node:timers/promises';
|
|
4
2
|
|
|
5
3
|
var __defProp = Object.defineProperty;
|
|
6
4
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -37,13 +35,6 @@ function getGlobal(type) {
|
|
|
37
35
|
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
38
36
|
}
|
|
39
37
|
__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
38
|
var _SimpleClock = class _SimpleClock {
|
|
48
39
|
preciseNow() {
|
|
49
40
|
const now = new PreciseDate();
|
|
@@ -92,92 +83,6 @@ var ClockAPI = _ClockAPI;
|
|
|
92
83
|
|
|
93
84
|
// src/v3/clock-api.ts
|
|
94
85
|
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
86
|
|
|
182
87
|
// src/v3/runtime/prodRuntimeManager.ts
|
|
183
88
|
var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
@@ -191,54 +96,25 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
191
96
|
}
|
|
192
97
|
async waitForDuration(ms) {
|
|
193
98
|
const now = Date.now();
|
|
194
|
-
const
|
|
195
|
-
const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);
|
|
196
|
-
if (ms <= this.waitThresholdInMs) {
|
|
197
|
-
await internalTimeout;
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
const externalResume = new Promise((resolve, reject) => {
|
|
99
|
+
const resume = new Promise((resolve, reject) => {
|
|
201
100
|
this._waitForDuration = {
|
|
202
101
|
resolve,
|
|
203
102
|
reject
|
|
204
103
|
};
|
|
205
104
|
});
|
|
206
|
-
|
|
105
|
+
await this.ipc.send("WAIT_FOR_DURATION", {
|
|
207
106
|
ms,
|
|
208
|
-
now
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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;
|
|
107
|
+
now,
|
|
108
|
+
waitThresholdInMs: this.waitThresholdInMs
|
|
109
|
+
});
|
|
110
|
+
await resume;
|
|
235
111
|
}
|
|
236
112
|
resumeAfterDuration() {
|
|
237
113
|
if (!this._waitForDuration) {
|
|
238
114
|
return;
|
|
239
115
|
}
|
|
240
116
|
clock.reset();
|
|
241
|
-
this._waitForDuration.resolve(
|
|
117
|
+
this._waitForDuration.resolve();
|
|
242
118
|
this._waitForDuration = void 0;
|
|
243
119
|
}
|
|
244
120
|
async waitUntil(date) {
|
|
@@ -1 +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"]}
|
|
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/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","ProdRuntimeManager","constructor","ipc","options","_taskWaits","Map","_batchWaits","disable","waitForDuration","ms","Date","resume","Promise","resolve","reject","_waitForDuration","send","waitThresholdInMs","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":";;;;;;;;;;;;;;;;;AAAO,IAAMA,cAAc,OAAOC,eAAe,WAAWA,aAAaC;;;ACQzE,IAAMC,6BAA6BC,OAAOC,IAAI,oBAAoB;AAElE,IAAMC,UAAUN;AAET,SAASO,eACdC,MACAC,UACAC,gBAAgB,OACP;AACT,QAAMC,MAAOL,QAAQH,0BAAAA,IAA8BG,QAAQH,0BAAAA,KAA+B,CAAC;AAE3F,MAAI,CAACO,iBAAiBC,IAAIH,IAAAA,GAAO;AAE/B,UAAMI,MAAM,IAAIC,MAAM,yDAAyDL,IAAAA,EAAM;AACrF,WAAO;EACT;AAEAG,MAAIH,IAAAA,IAAQC;AAEZ,SAAO;AACT;AAhBgBF;AAkBT,SAASO,UACdN,MAC0C;AAC1C,SAAOF,QAAQH,0BAAAA,IAA8BK,IAAAA;AAC/C;AAJgBM;;;AC9BhB,SAASC,mBAAmB;AAGrB,IAAMC,eAAN,MAAMA,aAAAA;EACXC,aAA+B;AAC7B,UAAMC,MAAM,IAAIH,YAAAA;AAChB,UAAMI,YAAYD,IAAIE,SAAQ;AAE9B,WAAO;MAACD,UAAUE;MAASF,UAAUG;;EACvC;EAEAC,QAAQ;EAER;AACF;AAXaP;AAAN,IAAMA,cAAN;;;ACHP,IAAMQ,WAAW;AAMjB,IAAMC,eAAe,IAAIT,YAAAA;AANzB;AAQO,IAAMU,YAAN,MAAMA,UAAAA;EAGX,cAAsB;AAsBtB;EAtBuB;EAEvB,OAAcC,cAAwB;AACpC,QAAI,CAAC,KAAKC,WAAW;AACnB,WAAKA,YAAY,IAAIF,UAAAA;IACvB;AAEA,WAAO,KAAKE;EACd;EAEOC,eAAeC,QAAuB;AAC3C,WAAOvB,eAAeiB,UAAUM,MAAAA;EAClC;EAEOb,aAAwB;AAC7B,WAAO,sBAAK,wBAAL,WAAiBA,WAAU;EACpC;EAEOM,QAAc;AACnB,0BAAK,wBAAL,WAAiBA,MAAK;EACxB;AAKF;AAHE;cAAS,kCAAU;AACjB,SAAOT,UAAUU,QAAAA,KAAaC;AAChC,GAFS;AAzBEC;AAAN,IAAMA,WAAN;;;ACJA,IAAMI,QAAQJ,SAASC,YAAW;;;ACWlC,IAAMI,sBAAN,MAAMA,oBAAAA;EAUXC,YACUC,KAIAC,UAAqC,CAAC,GAC9C;eALQD;mBAIAC;SAdVC,aAAgF,oBAAIC,IAAAA;SAEpFC,cAGI,oBAAID,IAAAA;EAUL;EAEHE,UAAgB;EAEhB;EAEA,MAAMC,gBAAgBC,IAA2B;AAC/C,UAAMtB,MAAMuB,KAAKvB,IAAG;AAEpB,UAAMwB,SAAS,IAAIC,QAAc,CAACC,SAASC,WAAW;AACpD,WAAKC,mBAAmB;QAAEF;QAASC;MAAO;IAC5C,CAAA;AAEA,UAAM,KAAKZ,IAAIc,KAAK,qBAAqB;MACvCP;MACAtB;MACA8B,mBAAmB,KAAKA;IAC1B,CAAA;AAEA,UAAMN;EACR;EAEAO,sBAA4B;AAC1B,QAAI,CAAC,KAAKH,kBAAkB;AAC1B;IACF;AAGAhB,UAAMP,MAAK;AAEX,SAAKuB,iBAAiBF,QAAO;AAC7B,SAAKE,mBAAmBI;EAC1B;EAEA,MAAMC,UAAUC,MAA2B;AACzC,WAAO,KAAKb,gBAAgBa,KAAKC,QAAO,IAAKZ,KAAKvB,IAAG,CAAA;EACvD;EAEA,MAAMoC,YAAYC,QAA8E;AAC9F,UAAMC,UAAU,IAAIb,QAAgC,CAACC,YAAY;AAC/D,WAAKT,WAAWsB,IAAIF,OAAOG,IAAI;QAAEd;MAAQ,CAAA;IAC3C,CAAA;AAEA,UAAM,KAAKX,IAAIc,KAAK,iBAAiB;MACnCY,YAAYJ,OAAOG;IACrB,CAAA;AAEA,UAAME,SAAS,MAAMJ;AAErB1B,UAAMP,MAAK;AAEX,WAAOqC;EACT;EAEA,MAAMC,aAAaN,QAIsB;AACvC,QAAI,CAACA,OAAOO,KAAKC,QAAQ;AACvB,aAAOpB,QAAQC,QAAQ;QAAEc,IAAIH,OAAOG;QAAIM,OAAO,CAAA;MAAG,CAAA;IACpD;AAEA,UAAMR,UAAUb,QAAQsB,IACtBV,OAAOO,KAAKI,IAAI,CAACC,UAAU;AACzB,aAAO,IAAIxB,QAAgC,CAACC,SAASC,WAAW;AAC9D,aAAKV,WAAWsB,IAAIU,OAAO;UAAEvB;QAAQ,CAAA;MACvC,CAAA;IACF,CAAA,CAAA;AAGF,UAAM,KAAKX,IAAIc,KAAK,kBAAkB;MACpCqB,iBAAiBb,OAAOG;MACxBW,gBAAgBd,OAAOO;IACzB,CAAA;AAEA,UAAMQ,UAAU,MAAMd;AAEtB1B,UAAMP,MAAK;AAEX,WAAO;MACLmC,IAAIH,OAAOG;MACXM,OAAOM;IACT;EACF;EAEAC,WAAWC,YAA0C;AACnD,UAAMC,OAAO,KAAKtC,WAAWuC,IAAIF,WAAWd,EAAE;AAE9C,QAAI,CAACe,MAAM;AACT;IACF;AAEAA,SAAK7B,QAAQ4B,UAAAA;AAEb,SAAKrC,WAAWwC,OAAOH,WAAWd,EAAE;EACtC;EAEA,IAAYV,oBAA4B;AACtC,WAAO,KAAKd,QAAQc,qBAAqB;EAC3C;AACF;AArHajB;AAAN,IAAMA,qBAAN","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 { clock } from \"../clock-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecutionResult,\n} from \"../schemas\";\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: { resolve: (value: void) => void; reject: (err?: any) => void } | 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 resume = new Promise<void>((resolve, reject) => {\n this._waitForDuration = { resolve, reject };\n });\n\n await this.ipc.send(\"WAIT_FOR_DURATION\", {\n ms,\n now,\n waitThresholdInMs: this.waitThresholdInMs,\n });\n\n await resume;\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();\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"]}
|