trigger.dev
Version:
A Command-Line Interface for Trigger.dev (v3) projects
77 lines • 3.34 kB
JavaScript
import { execPathForRuntime } from "@trigger.dev/core/v3/build";
import { TaskIndexingImportError, TaskMetadataParseError, UncaughtExceptionError, } from "@trigger.dev/core/v3/errors";
import { indexerToWorkerMessages, } from "@trigger.dev/core/v3/schemas";
import { parseMessageFromCatalog } from "@trigger.dev/core/v3/zodMessageHandler";
import { fork } from "node:child_process";
export async function indexWorkerManifest({ runtime, indexWorkerPath, buildManifestPath, nodeOptions, env: $env, cwd, otelHookInclude, otelHookExclude, handleStderr, handleStdout, }) {
return await new Promise((resolve, reject) => {
let resolved = false;
const child = fork(indexWorkerPath, {
stdio: [/*stdin*/ "ignore", /*stdout*/ "pipe", /*stderr*/ "pipe", "ipc"],
cwd,
env: {
...$env,
OTEL_IMPORT_HOOK_INCLUDES: otelHookInclude?.join(","),
OTEL_IMPORT_HOOK_EXCLUDES: otelHookExclude?.join(","),
TRIGGER_BUILD_MANIFEST_PATH: buildManifestPath,
NODE_OPTIONS: nodeOptions,
TRIGGER_INDEXING: "1",
},
execPath: execPathForRuntime(runtime),
});
// Set a timeout to kill the child process if it doesn't respond
const timeout = setTimeout(() => {
if (resolved) {
return;
}
resolved = true;
child.kill();
reject(new Error("Worker timed out"));
}, 20_000);
child.on("message", async (msg) => {
const message = parseMessageFromCatalog(msg, indexerToWorkerMessages);
switch (message.type) {
case "INDEX_COMPLETE": {
clearTimeout(timeout);
resolved = true;
if (message.payload.importErrors.length > 0) {
reject(new TaskIndexingImportError(message.payload.importErrors, message.payload.manifest));
}
else {
resolve(message.payload.manifest);
}
child.kill();
break;
}
case "TASKS_FAILED_TO_PARSE": {
clearTimeout(timeout);
resolved = true;
reject(new TaskMetadataParseError(message.payload.zodIssues, message.payload.tasks));
child.kill();
break;
}
case "UNCAUGHT_EXCEPTION": {
clearTimeout(timeout);
resolved = true;
reject(new UncaughtExceptionError(message.payload.error, message.payload.origin));
child.kill();
break;
}
}
});
child.on("exit", (code) => {
if (!resolved) {
clearTimeout(timeout);
resolved = true;
reject(new Error(`Worker exited with code ${code}`));
}
});
child.stdout?.on("data", (data) => {
handleStdout?.(data.toString());
});
child.stderr?.on("data", (data) => {
handleStderr?.(data.toString());
});
});
}
//# sourceMappingURL=indexWorkerManifest.js.map