Indexing of the v3 catalog
This commit is contained in:
+2
-1
@@ -59,7 +59,8 @@
|
||||
"turbo": "^1.10.3",
|
||||
"vite": "^4.1.1",
|
||||
"vite-tsconfig-paths": "^4.0.5",
|
||||
"vitest": "^0.28.4"
|
||||
"vitest": "^0.28.4",
|
||||
"pkg-types": "1.1.3"
|
||||
},
|
||||
"packageManager": "pnpm@8.15.5",
|
||||
"dependencies": {
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
"@types/resolve": "^1.20.6",
|
||||
"@types/semver": "^7.3.13",
|
||||
"@types/ws": "^8.5.3",
|
||||
"@types/source-map-support": "0.5.10",
|
||||
"cpy-cli": "^5.0.0",
|
||||
"nodemon": "^3.0.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
@@ -64,15 +65,17 @@
|
||||
"type-fest": "^3.6.0",
|
||||
"typescript": "^5.5.4",
|
||||
"vitest": "^1.6.0",
|
||||
"xdg-app-paths": "^8.3.0"
|
||||
"xdg-app-paths": "^8.3.0",
|
||||
"tsx": "4.17.0"
|
||||
},
|
||||
"scripts": {
|
||||
"typecheck": "tsc",
|
||||
"prepare": "tshy",
|
||||
"prepare": "tshy && pnpm run update-version",
|
||||
"build": "tshy",
|
||||
"dev": "tshy --watch",
|
||||
"test": "vitest",
|
||||
"test:e2e": "vitest --run -c e2e/vite.config.js"
|
||||
"test:e2e": "vitest --run -c e2e/vite.config.js",
|
||||
"update-version": "tsx ../../scripts/updateVersion.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@anatine/esbuild-decorators": "^0.2.19",
|
||||
@@ -123,7 +126,6 @@
|
||||
"object-hash": "^3.0.0",
|
||||
"p-debounce": "^4.0.0",
|
||||
"p-throttle": "^6.1.0",
|
||||
"package-json-from-dist": "^1.0.0",
|
||||
"partysocket": "^0.0.17",
|
||||
"pkg-types": "^1.1.3",
|
||||
"proxy-agent": "^6.3.0",
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
import * as esbuild from "esbuild";
|
||||
import { resolveModule } from "./resolveModule.js";
|
||||
import { BuildContext, BuildExtension, BuildLayer, RegisteredPlugin, RegisterPluginOptions, ResolvedConfig } from "@trigger.dev/core/v3/build";
|
||||
import {
|
||||
BuildContext,
|
||||
BuildExtension,
|
||||
BuildLayer,
|
||||
RegisteredPlugin,
|
||||
ResolvedConfig,
|
||||
} from "@trigger.dev/core/v3/build";
|
||||
import { BuildManifest, BuildTarget } from "@trigger.dev/core/v3/schemas";
|
||||
import * as esbuild from "esbuild";
|
||||
import { logger } from "../utilities/logger.js";
|
||||
|
||||
export function createExtensionForPlugin(
|
||||
plugin: esbuild.Plugin,
|
||||
options: RegisterPluginOptions = {}
|
||||
): BuildExtension {
|
||||
return {
|
||||
name: plugin.name,
|
||||
onBuildStart(context) {
|
||||
context.registerPlugin(plugin, options);
|
||||
},
|
||||
};
|
||||
}
|
||||
import { resolveModule } from "./resolveModule.js";
|
||||
|
||||
export interface InternalBuildContext extends BuildContext {
|
||||
getLayers(): BuildLayer[];
|
||||
@@ -25,9 +19,7 @@ export interface InternalBuildContext extends BuildContext {
|
||||
getExtensions(): BuildExtension[];
|
||||
}
|
||||
|
||||
export async function notifyExtensionOnBuildStart(
|
||||
context: InternalBuildContext
|
||||
) {
|
||||
export async function notifyExtensionOnBuildStart(context: InternalBuildContext) {
|
||||
for (const extension of context.getExtensions()) {
|
||||
if (extension.onBuildStart) {
|
||||
await extension.onBuildStart(context);
|
||||
@@ -118,10 +110,7 @@ function applyContextLayersToManifest(
|
||||
return manifest;
|
||||
}
|
||||
|
||||
function applyLayerToManifest(
|
||||
layer: BuildLayer,
|
||||
manifest: BuildManifest
|
||||
): BuildManifest {
|
||||
function applyLayerToManifest(layer: BuildLayer, manifest: BuildManifest): BuildManifest {
|
||||
let $manifest = { ...manifest };
|
||||
|
||||
if (layer.commands) {
|
||||
@@ -152,9 +141,7 @@ function applyLayerToManifest(
|
||||
return $manifest;
|
||||
}
|
||||
|
||||
export function resolvePluginsForContext(
|
||||
context: InternalBuildContext
|
||||
): esbuild.Plugin[] {
|
||||
export function resolvePluginsForContext(context: InternalBuildContext): esbuild.Plugin[] {
|
||||
const registeredPlugins = context.getPlugins();
|
||||
|
||||
if (registeredPlugins.length === 0) {
|
||||
|
||||
@@ -18,6 +18,8 @@ export async function buildPlugins(
|
||||
plugins.push($configPlugin);
|
||||
}
|
||||
|
||||
plugins.push(mockServerOnlyPlugin());
|
||||
|
||||
return plugins;
|
||||
}
|
||||
|
||||
@@ -39,3 +41,33 @@ export function analyzeMetadataPlugin(): esbuild.Plugin {
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function mockServerOnlyPlugin(): esbuild.Plugin {
|
||||
return {
|
||||
name: "trigger-mock-server-only",
|
||||
setup(build) {
|
||||
build.onResolve({ filter: /^server-only$/ }, (args) => {
|
||||
if (args.path !== "server-only") {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
logger.debug(`[trigger-mock-server-only] Bundling ${args.path}`, {
|
||||
...args,
|
||||
});
|
||||
|
||||
return {
|
||||
path: args.path,
|
||||
external: false,
|
||||
namespace: "server-only-mock",
|
||||
};
|
||||
});
|
||||
|
||||
build.onLoad({ filter: /^server-only$/, namespace: "server-only-mock" }, (args) => {
|
||||
return {
|
||||
contents: `export default true;`,
|
||||
loader: "js",
|
||||
};
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -4,9 +4,10 @@ import { configureInitCommand } from "../commands/init.js";
|
||||
import { configureLoginCommand } from "../commands/login.js";
|
||||
import { configureLogoutCommand } from "../commands/logout.js";
|
||||
import { configureWhoamiCommand } from "../commands/whoami.js";
|
||||
import { COMMAND_NAME, VERSION } from "../consts.js";
|
||||
import { COMMAND_NAME } from "../consts.js";
|
||||
import { configureListProfilesCommand } from "../commands/list-profiles.js";
|
||||
import { configureUpdateCommand } from "../commands/update.js";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
export const program = new Command();
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import { whoAmI } from "./whoami.js";
|
||||
import { logger } from "../utilities/logger.js";
|
||||
import { spinner } from "../utilities/windows.js";
|
||||
import { isLinuxServer } from "../utilities/linux.js";
|
||||
import { VERSION } from "../consts.js";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
export const LoginCommandOptions = CommonCommandOptions.extend({
|
||||
apiUrl: z.string(),
|
||||
|
||||
@@ -11,7 +11,7 @@ import { join, resolve } from "path";
|
||||
import { JavascriptProject } from "../utilities/javascriptProject.js";
|
||||
import { PackageManager } from "../utilities/getUserPackageManager.js";
|
||||
import { chalkError, prettyError, prettyWarning } from "../utilities/cliOutput.js";
|
||||
import { VERSION } from "../consts.js";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
export const UpdateCommandOptions = CommonCommandOptions.pick({
|
||||
logLevel: true,
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
import { pkg } from "./pkg.js";
|
||||
|
||||
export const COMMAND_NAME = "trigger.dev";
|
||||
export const CLOUD_WEB_URL = "https://cloud.trigger.dev";
|
||||
export const CLOUD_API_URL = "https://api.trigger.dev";
|
||||
export const CONFIG_FILES = ["trigger.config.ts", "trigger.config.js", "trigger.config.mjs"];
|
||||
export const VERSION = pkg.version;
|
||||
|
||||
@@ -314,14 +314,34 @@ export class BackgroundWorker {
|
||||
});
|
||||
|
||||
child.stdout?.on("data", (data) => {
|
||||
logger.log(data.toString());
|
||||
logger.debug(data.toString());
|
||||
});
|
||||
|
||||
child.stderr?.on("data", (data) => {
|
||||
this.stderr.push(data.toString());
|
||||
logger.debug(data.toString());
|
||||
});
|
||||
|
||||
const sender = new ZodMessageSender({
|
||||
schema: workerToChildMessages,
|
||||
sender: async (message) => {
|
||||
if (child.connected && !resolved) {
|
||||
child.send(message);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
sender.send("INDEX", { build: this.build }).catch((err) => {
|
||||
if (err instanceof Error) {
|
||||
clearTimeout(timeout);
|
||||
resolved = true;
|
||||
reject(err);
|
||||
child.kill();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
logger.debug("Worker initialized", { manifest: this.manifest });
|
||||
|
||||
this._initialized = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,8 @@ export async function startDevSession({
|
||||
buildManifest = await notifyExtensionOnBuildComplete(buildContext, buildManifest);
|
||||
|
||||
logger.debug("Updated bundle", { bundle, buildManifest });
|
||||
|
||||
await runtime.initializeWorker(buildManifest);
|
||||
} catch (error) {
|
||||
logger.error("Error updating bundle", { error });
|
||||
}
|
||||
@@ -156,7 +158,10 @@ async function createBuildManifestFromBundle(
|
||||
target: "dev",
|
||||
files: bundle.files,
|
||||
externals: [],
|
||||
config: resolvedConfig,
|
||||
config: {
|
||||
project: resolvedConfig.project,
|
||||
dirs: resolvedConfig.dirs,
|
||||
},
|
||||
outputPath: destination,
|
||||
workerEntryPoint: bundle.workerEntryPoint ?? devEntryPoint,
|
||||
loaderEntryPoint: bundle.loaderEntryPoint ?? telemetryEntryPoint,
|
||||
|
||||
@@ -1 +1,296 @@
|
||||
export {};
|
||||
import type { Tracer } from "@opentelemetry/api";
|
||||
import type { Logger } from "@opentelemetry/api-logs";
|
||||
import {
|
||||
childToWorkerMessages,
|
||||
clock,
|
||||
type HandleErrorFunction,
|
||||
logger,
|
||||
LogLevel,
|
||||
runtime,
|
||||
taskCatalog,
|
||||
TaskRunErrorCodes,
|
||||
TaskRunExecution,
|
||||
TriggerConfig,
|
||||
TriggerTracer,
|
||||
workerToChildMessages,
|
||||
} from "@trigger.dev/core/v3";
|
||||
import { DevRuntimeManager } from "@trigger.dev/core/v3/dev";
|
||||
import {
|
||||
ConsoleInterceptor,
|
||||
DevUsageManager,
|
||||
DurableClock,
|
||||
getEnvVar,
|
||||
logLevels,
|
||||
OtelTaskLogger,
|
||||
StandardTaskCatalog,
|
||||
TaskExecutor,
|
||||
TracingDiagnosticLogLevel,
|
||||
TracingSDK,
|
||||
usage,
|
||||
} from "@trigger.dev/core/v3/workers";
|
||||
import {
|
||||
ZodMessageHandler,
|
||||
ZodMessageSender,
|
||||
ZodSchemaParsedError,
|
||||
} from "@trigger.dev/core/v3/zodMessageHandler";
|
||||
import sourceMapSupport from "source-map-support";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
sourceMapSupport.install({
|
||||
handleUncaughtExceptions: false,
|
||||
environment: "node",
|
||||
hookRequire: false,
|
||||
});
|
||||
|
||||
const sender = new ZodMessageSender({
|
||||
schema: childToWorkerMessages,
|
||||
sender: async (message) => {
|
||||
process.send?.(message);
|
||||
},
|
||||
});
|
||||
|
||||
taskCatalog.setGlobalTaskCatalog(new StandardTaskCatalog());
|
||||
const durableClock = new DurableClock();
|
||||
clock.setGlobalClock(durableClock);
|
||||
usage.setGlobalUsageManager(new DevUsageManager());
|
||||
const devRuntimeManager = new DevRuntimeManager();
|
||||
runtime.setGlobalRuntimeManager(devRuntimeManager);
|
||||
|
||||
const triggerLogLevel = getEnvVar("TRIGGER_LOG_LEVEL");
|
||||
|
||||
async function importConfig(
|
||||
configPath: string
|
||||
): Promise<{ config: TriggerConfig; handleError?: HandleErrorFunction }> {
|
||||
const configModule = await import(configPath);
|
||||
|
||||
const config = configModule?.default ?? configModule?.config;
|
||||
|
||||
return {
|
||||
config,
|
||||
handleError: configModule?.handleError,
|
||||
};
|
||||
}
|
||||
|
||||
async function bootstrap(configPath: string) {
|
||||
const { config, handleError } = await importConfig(configPath);
|
||||
|
||||
const tracingSDK = new TracingSDK({
|
||||
url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318",
|
||||
instrumentations: config.instrumentations ?? [],
|
||||
diagLogLevel: (process.env.OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none",
|
||||
forceFlushTimeoutMillis: 30_000,
|
||||
});
|
||||
|
||||
const otelTracer: Tracer = tracingSDK.getTracer("trigger-dev-worker", VERSION);
|
||||
const otelLogger: Logger = tracingSDK.getLogger("trigger-dev-worker", VERSION);
|
||||
|
||||
const tracer = new TriggerTracer({ tracer: otelTracer, logger: otelLogger });
|
||||
const consoleInterceptor = new ConsoleInterceptor(
|
||||
otelLogger,
|
||||
typeof config.enableConsoleLogging === "boolean" ? config.enableConsoleLogging : true
|
||||
);
|
||||
|
||||
const configLogLevel = triggerLogLevel ?? config.logLevel ?? "info";
|
||||
|
||||
const otelTaskLogger = new OtelTaskLogger({
|
||||
logger: otelLogger,
|
||||
tracer: tracer,
|
||||
level: logLevels.includes(configLogLevel as any) ? (configLogLevel as LogLevel) : "info",
|
||||
});
|
||||
|
||||
logger.setGlobalTaskLogger(otelTaskLogger);
|
||||
|
||||
return { tracer, tracingSDK, consoleInterceptor, config, handleErrorFn: handleError };
|
||||
}
|
||||
|
||||
async function registerTaskFileMetadata(files: Array<{ entry: string; out: string }>) {
|
||||
for (const file of files) {
|
||||
console.log("Detecting exported tasks in file", file.out);
|
||||
|
||||
const module = await import(file.out);
|
||||
|
||||
for (const exportName of Object.keys(module)) {
|
||||
const task = module[exportName];
|
||||
|
||||
if (!task) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (task[Symbol.for("trigger.dev/task")]) {
|
||||
if (taskCatalog.taskExists(task.id)) {
|
||||
taskCatalog.registerTaskFileMetadata(task.id, {
|
||||
exportName,
|
||||
filePath: file.out,
|
||||
entryPoint: file.entry,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let _execution: TaskRunExecution | undefined;
|
||||
let _isRunning = false;
|
||||
let _tracingSDK: TracingSDK | undefined;
|
||||
|
||||
const handler = new ZodMessageHandler({
|
||||
schema: workerToChildMessages,
|
||||
messages: {
|
||||
INDEX: async ({ build }) => {
|
||||
await bootstrap(build.configPath);
|
||||
await registerTaskFileMetadata(build.files);
|
||||
|
||||
const tasks = taskCatalog.listTaskManifests();
|
||||
|
||||
await sender.send("INDEX_COMPLETE", { manifest: { tasks } }).catch((err) => {
|
||||
if (err instanceof ZodSchemaParsedError) {
|
||||
sender.send("TASKS_FAILED_TO_PARSE", {
|
||||
zodIssues: err.error.issues,
|
||||
tasks,
|
||||
});
|
||||
} else {
|
||||
console.error("Failed to send TASKS_READY message", err);
|
||||
}
|
||||
});
|
||||
},
|
||||
EXECUTE_TASK_RUN: async ({ execution, traceContext, metadata }) => {
|
||||
if (_isRunning) {
|
||||
console.error("Worker is already running a task");
|
||||
|
||||
await sender.send("TASK_RUN_COMPLETED", {
|
||||
execution,
|
||||
result: {
|
||||
ok: false,
|
||||
id: execution.run.id,
|
||||
error: {
|
||||
type: "INTERNAL_ERROR",
|
||||
code: TaskRunErrorCodes.TASK_ALREADY_RUNNING,
|
||||
},
|
||||
usage: {
|
||||
durationMs: 0,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
process.title = `trigger-dev-worker: ${execution.task.id} ${execution.run.id}`;
|
||||
|
||||
const task = taskCatalog.getTask(execution.task.id);
|
||||
|
||||
if (!task) {
|
||||
console.error(`Could not find task ${execution.task.id}`);
|
||||
|
||||
await sender.send("TASK_RUN_COMPLETED", {
|
||||
execution,
|
||||
result: {
|
||||
ok: false,
|
||||
id: execution.run.id,
|
||||
error: {
|
||||
type: "INTERNAL_ERROR",
|
||||
code: TaskRunErrorCodes.COULD_NOT_FIND_EXECUTOR,
|
||||
},
|
||||
usage: {
|
||||
durationMs: 0,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const { tracer, tracingSDK, consoleInterceptor, config, handleErrorFn } = await bootstrap(
|
||||
"./trigger.config.js"
|
||||
);
|
||||
|
||||
const executor = new TaskExecutor(task, {
|
||||
tracer,
|
||||
tracingSDK,
|
||||
consoleInterceptor,
|
||||
config,
|
||||
handleErrorFn,
|
||||
});
|
||||
|
||||
try {
|
||||
_execution = execution;
|
||||
_isRunning = true;
|
||||
|
||||
const measurement = usage.start();
|
||||
|
||||
const { result } = await executor.execute(execution, metadata, traceContext, measurement);
|
||||
|
||||
const usageSample = usage.stop(measurement);
|
||||
|
||||
return sender.send("TASK_RUN_COMPLETED", {
|
||||
execution,
|
||||
result: {
|
||||
...result,
|
||||
usage: {
|
||||
durationMs: usageSample.cpuTime,
|
||||
},
|
||||
},
|
||||
});
|
||||
} finally {
|
||||
_execution = undefined;
|
||||
_isRunning = false;
|
||||
}
|
||||
},
|
||||
TASK_RUN_COMPLETED_NOTIFICATION: async (payload) => {
|
||||
switch (payload.version) {
|
||||
case "v1": {
|
||||
devRuntimeManager.resumeTask(payload.completion, payload.execution.run.id);
|
||||
break;
|
||||
}
|
||||
case "v2": {
|
||||
devRuntimeManager.resumeTask(payload.completion, payload.completion.id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
CLEANUP: async ({ flush, kill }) => {
|
||||
if (kill) {
|
||||
await _tracingSDK?.flush();
|
||||
// Now we need to exit the process
|
||||
await sender.send("READY_TO_DISPOSE", undefined);
|
||||
} else {
|
||||
if (flush) {
|
||||
await _tracingSDK?.flush();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
process.on("message", async (msg: any) => {
|
||||
await handler.handleMessage(msg);
|
||||
});
|
||||
|
||||
process.title = "trigger-dev-worker";
|
||||
|
||||
async function asyncHeartbeat(initialDelayInSeconds: number = 30, intervalInSeconds: number = 30) {
|
||||
async function _doHeartbeat() {
|
||||
while (true) {
|
||||
if (_isRunning && _execution) {
|
||||
try {
|
||||
await sender.send("TASK_HEARTBEAT", { id: _execution.attempt.id });
|
||||
} catch (err) {
|
||||
console.error("Failed to send HEARTBEAT message", err);
|
||||
}
|
||||
}
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000 * intervalInSeconds));
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for the initial delay
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000 * initialDelayInSeconds));
|
||||
|
||||
// Wait for 5 seconds before the next execution
|
||||
return _doHeartbeat();
|
||||
}
|
||||
|
||||
// Start the async interval after 30 seconds
|
||||
asyncHeartbeat().catch((err) => {
|
||||
console.error("Failed to start asyncHeartbeat", err);
|
||||
});
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
|
||||
export const pkg = loadPackageJson(__filename);
|
||||
export const pj = findPackageJson(__filename);
|
||||
@@ -1,5 +0,0 @@
|
||||
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
|
||||
//@ts-ignore
|
||||
export const pkg = loadPackageJson(import.meta.url);
|
||||
//@ts-ignore
|
||||
export const pj = findPackageJson(import.meta.url);
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
SEMRESATTRS_SERVICE_VERSION,
|
||||
} from "@opentelemetry/semantic-conventions";
|
||||
import { logger } from "../utilities/logger.js";
|
||||
import { VERSION } from "../consts.js";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
function initializeTracing(): NodeTracerProvider | undefined {
|
||||
if (
|
||||
|
||||
@@ -4,11 +4,11 @@ import checkForUpdate from "update-check";
|
||||
import { chalkGrey, chalkRun, chalkTask, chalkWorker, green, logo } from "./cliOutput.js";
|
||||
import { logger } from "./logger.js";
|
||||
import { spinner } from "./windows.js";
|
||||
import { readPackageJson } from "./packageJson.js";
|
||||
import { readPackageJSON } from "pkg-types";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
export async function printInitialBanner(performUpdateCheck = true) {
|
||||
const cliVersion = await getVersion();
|
||||
const text = `\n${logo()} ${chalkGrey(`(${cliVersion})`)}\n`;
|
||||
const text = `\n${logo()} ${chalkGrey(`(${VERSION})`)}\n`;
|
||||
|
||||
logger.info(text);
|
||||
|
||||
@@ -21,7 +21,7 @@ export async function printInitialBanner(performUpdateCheck = true) {
|
||||
// Log a slightly more noticeable message if this is a major bump
|
||||
if (maybeNewVersion !== undefined) {
|
||||
loadingSpinner.stop(`Update available ${chalk.green(maybeNewVersion)}`);
|
||||
const currentMajor = parseInt(cliVersion.split(".")[0]!);
|
||||
const currentMajor = parseInt(VERSION.split(".")[0]!);
|
||||
const newMajor = parseInt(maybeNewVersion.split(".")[0]!);
|
||||
if (newMajor > currentMajor) {
|
||||
logger.warn(
|
||||
@@ -37,19 +37,17 @@ After installation, run Trigger.dev with \`npx trigger.dev\`.`
|
||||
}
|
||||
|
||||
export async function printStandloneInitialBanner(performUpdateCheck = true) {
|
||||
const cliVersion = await getVersion();
|
||||
|
||||
if (performUpdateCheck) {
|
||||
const maybeNewVersion = await updateCheck();
|
||||
|
||||
// Log a slightly more noticeable message if this is a major bump
|
||||
if (maybeNewVersion !== undefined) {
|
||||
logger.log(`\n${logo()} ${chalkGrey(`(${cliVersion} -> ${chalk.green(maybeNewVersion)})`)}`);
|
||||
logger.log(`\n${logo()} ${chalkGrey(`(${VERSION} -> ${chalk.green(maybeNewVersion)})`)}`);
|
||||
} else {
|
||||
logger.log(`\n${logo()} ${chalkGrey(`(${cliVersion})`)}`);
|
||||
logger.log(`\n${logo()} ${chalkGrey(`(${VERSION})`)}`);
|
||||
}
|
||||
} else {
|
||||
logger.log(`\n${logo()} ${chalkGrey(`(${cliVersion})`)}`);
|
||||
logger.log(`\n${logo()} ${chalkGrey(`(${VERSION})`)}`);
|
||||
}
|
||||
|
||||
logger.log(`${chalkGrey("-".repeat(54))}`);
|
||||
@@ -71,10 +69,10 @@ export function printDevBanner(printTopBorder = true) {
|
||||
async function doUpdateCheck(): Promise<string | undefined> {
|
||||
let update: Result | null = null;
|
||||
try {
|
||||
const pkg = await readPackageJson();
|
||||
const pkg = await readPackageJSON();
|
||||
// default cache for update check is 1 day
|
||||
update = await checkForUpdate.default(pkg, {
|
||||
distTag: pkg.version?.startsWith("3.0.0-beta") ? "beta" : "latest",
|
||||
distTag: VERSION.startsWith("3.0.0-beta") ? "beta" : "latest",
|
||||
});
|
||||
} catch (err) {
|
||||
// ignore error
|
||||
@@ -87,8 +85,3 @@ let updateCheckPromise: Promise<string | undefined>;
|
||||
export function updateCheck(): Promise<string | undefined> {
|
||||
return (updateCheckPromise ??= doUpdateCheck());
|
||||
}
|
||||
|
||||
async function getVersion() {
|
||||
const packageJson = await readPackageJson();
|
||||
return packageJson.version ?? "unknown";
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
import { readPackageJSON } from "pkg-types";
|
||||
import { pj } from "../pkg.js";
|
||||
|
||||
export async function readPackageJson() {
|
||||
return await readPackageJSON(pj);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export const VERSION = "0.0.0";
|
||||
@@ -29,6 +29,7 @@
|
||||
"./versions": "./src/versions.ts",
|
||||
"./v3": "./src/v3/index.ts",
|
||||
"./v3/build": "./src/v3/build/index.ts",
|
||||
"./v3/extensions": "./src/v3/extensions/index.ts",
|
||||
"./v3/apps": "./src/v3/apps/index.ts",
|
||||
"./v3/errors": "./src/v3/errors.ts",
|
||||
"./v3/logger-api": "./src/v3/logger-api.ts",
|
||||
@@ -58,7 +59,8 @@
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
"clean": "rimraf dist",
|
||||
"prepare": "tshy",
|
||||
"prepare": "tshy && pnpm run update-version",
|
||||
"update-version": "tsx ../../scripts/updateVersion.ts",
|
||||
"build": "tshy",
|
||||
"dev": "tshy --watch",
|
||||
"typecheck": "tsc --noEmit",
|
||||
@@ -79,7 +81,6 @@
|
||||
"@opentelemetry/semantic-conventions": "1.25.1",
|
||||
"execa": "^8.0.1",
|
||||
"humanize-duration": "^3.27.3",
|
||||
"package-json-from-dist": "^1.0.0",
|
||||
"socket.io-client": "4.7.5",
|
||||
"superjson": "^2.2.1",
|
||||
"zod": "3.23.8",
|
||||
@@ -97,7 +98,8 @@
|
||||
"ts-essentials": "10.0.1",
|
||||
"tshy": "^3.0.2",
|
||||
"typescript": "^5.5.4",
|
||||
"vitest": "^1.6.0"
|
||||
"vitest": "^1.6.0",
|
||||
"tsx": "4.17.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.20.0"
|
||||
@@ -247,6 +249,17 @@
|
||||
"default": "./dist/commonjs/v3/build/index.js"
|
||||
}
|
||||
},
|
||||
"./v3/extensions": {
|
||||
"import": {
|
||||
"triggerdotdev-source": "./src/v3/extensions/index.ts",
|
||||
"types": "./dist/esm/v3/extensions/index.d.ts",
|
||||
"default": "./dist/esm/v3/extensions/index.js"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/commonjs/v3/extensions/index.d.ts",
|
||||
"default": "./dist/commonjs/v3/extensions/index.js"
|
||||
}
|
||||
},
|
||||
"./v3/apps": {
|
||||
"import": {
|
||||
"triggerdotdev-source": "./src/v3/apps/index.ts",
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
|
||||
export const pkg = loadPackageJson(__filename);
|
||||
export const pj = findPackageJson(__filename);
|
||||
@@ -1,5 +0,0 @@
|
||||
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
|
||||
//@ts-ignore
|
||||
export const pkg = loadPackageJson(import.meta.url ?? __filename); // ?? __filename is a hack to get the webapp to build
|
||||
//@ts-ignore
|
||||
export const pj = findPackageJson(import.meta.url ?? __filename); // ?? __filename is a hack to get the webapp to build
|
||||
@@ -43,7 +43,7 @@ import {
|
||||
ListRunsQueryParams,
|
||||
UpdateEnvironmentVariableParams,
|
||||
} from "./types.js";
|
||||
import { pkg } from "../../pkg.js";
|
||||
import { VERSION } from "../../version.js";
|
||||
|
||||
export type {
|
||||
CreateEnvironmentVariableParams,
|
||||
@@ -503,7 +503,7 @@ export class ApiClient {
|
||||
const headers: Record<string, string> = {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${this.accessToken}`,
|
||||
"trigger-version": pkg.version,
|
||||
"trigger-version": VERSION,
|
||||
};
|
||||
|
||||
// Only inject the context if we are inside a task
|
||||
|
||||
@@ -2,6 +2,18 @@ import { BuildManifest, BuildTarget } from "../schemas/build.js";
|
||||
import type { Plugin } from "esbuild";
|
||||
import { ResolvedConfig } from "./resolvedConfig.js";
|
||||
|
||||
export function createExtensionForPlugin(
|
||||
plugin: Plugin,
|
||||
options: RegisterPluginOptions = {}
|
||||
): BuildExtension {
|
||||
return {
|
||||
name: plugin.name,
|
||||
onBuildStart(context) {
|
||||
context.registerPlugin(plugin, options);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export interface BuildExtension {
|
||||
name: string;
|
||||
externalsForTarget?: (target: BuildTarget) => string[] | undefined;
|
||||
@@ -48,4 +60,4 @@ export type RegisterPluginOptions = {
|
||||
|
||||
export type RegisteredPlugin = RegisterPluginOptions & {
|
||||
plugin: Plugin;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import * as esbuild from "esbuild";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { readTSConfig } from "pkg-types";
|
||||
import typescriptPkg, { ModuleKind } from "typescript";
|
||||
import { BuildExtension, createExtensionForPlugin } from "../build/extensions.js";
|
||||
|
||||
const { transpileModule } = typescriptPkg;
|
||||
|
||||
const decoratorMatcher = new RegExp(/((?<![(\s]\s*['"])@\w[.[\]\w\d]*\s*(?![;])[((?=\s)])/);
|
||||
|
||||
export type EmitDecoratorMetadataOptions = {
|
||||
path?: string;
|
||||
};
|
||||
|
||||
export function emitDecoratorMetadata(options: EmitDecoratorMetadataOptions = {}): BuildExtension {
|
||||
return createExtensionForPlugin(plugin(options));
|
||||
}
|
||||
|
||||
function plugin(options: EmitDecoratorMetadataOptions = {}): esbuild.Plugin {
|
||||
return {
|
||||
name: "emitDecoratorMetadata",
|
||||
async setup(build) {
|
||||
const tsconfig = await readTSConfig(options.path);
|
||||
|
||||
if (!tsconfig) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!tsconfig.compilerOptions?.emitDecoratorMetadata) {
|
||||
console.warn(
|
||||
"Typescript decorators plugin requires `emitDecoratorMetadata` to be set to true in your tsconfig.json"
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("Setting up typescript decorators plugin", {
|
||||
tsconfig,
|
||||
});
|
||||
|
||||
build.onLoad({ filter: /\.ts$/ }, async (args) => {
|
||||
const ts = await readFile(args.path, "utf8");
|
||||
|
||||
if (!ts) return;
|
||||
|
||||
// Find the decorator and if there isn't one, return out
|
||||
if (!decoratorMatcher.test(ts)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const program = transpileModule(ts, {
|
||||
fileName: args.path,
|
||||
compilerOptions: {
|
||||
...tsconfig.compilerOptions,
|
||||
module: ModuleKind.ES2022,
|
||||
},
|
||||
});
|
||||
|
||||
return { contents: program.outputText };
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./emitDecoratorMetadata.js";
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
SpanExporter,
|
||||
} from "@opentelemetry/sdk-trace-node";
|
||||
import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions";
|
||||
import { VERSION } from "../../version.js";
|
||||
import {
|
||||
OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
|
||||
OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT,
|
||||
@@ -40,7 +41,6 @@ import {
|
||||
TaskContextSpanProcessor,
|
||||
} from "../taskContext/otelProcessors.js";
|
||||
import { getEnvVar } from "../utils/getEnv.js";
|
||||
import { pkg } from "../../pkg.js";
|
||||
|
||||
class AsyncResourceDetector implements DetectorSync {
|
||||
private _promise: Promise<ResourceAttributes>;
|
||||
@@ -112,7 +112,7 @@ export class TracingSDK {
|
||||
new Resource({
|
||||
[SemanticResourceAttributes.CLOUD_PROVIDER]: "trigger.dev",
|
||||
[SemanticInternalAttributes.TRIGGER]: true,
|
||||
[SemanticInternalAttributes.CLI_VERSION]: pkg.version,
|
||||
[SemanticInternalAttributes.CLI_VERSION]: VERSION,
|
||||
})
|
||||
)
|
||||
.merge(config.resource ?? new Resource({}))
|
||||
|
||||
@@ -3,7 +3,6 @@ import { z } from "zod";
|
||||
export const ConfigManifest = z.object({
|
||||
project: z.string(),
|
||||
dirs: z.string().array(),
|
||||
external: z.string().array().optional(),
|
||||
});
|
||||
|
||||
export type ConfigManifest = z.infer<typeof ConfigManifest>;
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
WaitReason,
|
||||
} from "./schemas.js";
|
||||
import { TaskResource } from "./resources.js";
|
||||
import { WorkerManifest } from "./build.js";
|
||||
import { BuildManifest, WorkerManifest } from "./build.js";
|
||||
|
||||
export const BackgroundWorkerServerMessages = z.discriminatedUnion("type", [
|
||||
z.object({
|
||||
@@ -109,6 +109,9 @@ export const clientWebsocketMessages = {
|
||||
};
|
||||
|
||||
export const workerToChildMessages = {
|
||||
INDEX: z.object({
|
||||
build: BuildManifest,
|
||||
}),
|
||||
EXECUTE_TASK_RUN: z.object({
|
||||
version: z.literal("v1").default("v1"),
|
||||
execution: TaskRunExecution,
|
||||
|
||||
@@ -168,7 +168,8 @@ export const TaskFile = z.object({
|
||||
export type TaskFile = z.infer<typeof TaskFile>;
|
||||
|
||||
const taskFileMetadata = {
|
||||
file: TaskFile,
|
||||
filePath: z.string(),
|
||||
entryPoint: z.string(),
|
||||
exportName: z.string(),
|
||||
};
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import { SpanKind } from "@opentelemetry/api";
|
||||
import { VERSION } from "../../version.js";
|
||||
import { ApiError, RateLimitError } from "../apiClient/errors.js";
|
||||
import { ConsoleInterceptor } from "../consoleInterceptor.js";
|
||||
import { parseError, sanitizeError } from "../errors.js";
|
||||
import { TracingSDK, recordSpanException } from "../otel/index.js";
|
||||
import { TriggerConfig } from "../index.js";
|
||||
import { recordSpanException, TracingSDK } from "../otel/index.js";
|
||||
import {
|
||||
ServerBackgroundWorker,
|
||||
Config,
|
||||
TaskRunContext,
|
||||
TaskRunErrorCodes,
|
||||
TaskRunExecution,
|
||||
@@ -15,6 +17,7 @@ import { SemanticInternalAttributes } from "../semanticInternalAttributes.js";
|
||||
import { taskContext } from "../task-context-api.js";
|
||||
import { TriggerTracer } from "../tracer.js";
|
||||
import { HandleErrorFunction, TaskMetadataWithFunctions } from "../types/index.js";
|
||||
import { UsageMeasurement } from "../usage/types.js";
|
||||
import {
|
||||
conditionallyExportPacket,
|
||||
conditionallyImportPacket,
|
||||
@@ -24,17 +27,12 @@ import {
|
||||
} from "../utils/ioSerialization.js";
|
||||
import { calculateNextRetryDelay } from "../utils/retries.js";
|
||||
import { accessoryAttributes } from "../utils/styleAttributes.js";
|
||||
import { UsageMeasurement } from "../usage/types.js";
|
||||
import { ApiError, RateLimitError } from "../apiClient/errors.js";
|
||||
import { TriggerConfig } from "../index.js";
|
||||
import { pkg } from "../../pkg.js";
|
||||
|
||||
export type TaskExecutorOptions = {
|
||||
tracingSDK: TracingSDK;
|
||||
tracer: TriggerTracer;
|
||||
consoleInterceptor: ConsoleInterceptor;
|
||||
projectConfig: Config;
|
||||
importedConfig: TriggerConfig | undefined;
|
||||
config: TriggerConfig | undefined;
|
||||
handleErrorFn: HandleErrorFunction | undefined;
|
||||
};
|
||||
|
||||
@@ -42,7 +40,6 @@ export class TaskExecutor {
|
||||
private _tracingSDK: TracingSDK;
|
||||
private _tracer: TriggerTracer;
|
||||
private _consoleInterceptor: ConsoleInterceptor;
|
||||
private _config: Config;
|
||||
private _importedConfig: TriggerConfig | undefined;
|
||||
private _handleErrorFn: HandleErrorFunction | undefined;
|
||||
|
||||
@@ -53,8 +50,7 @@ export class TaskExecutor {
|
||||
this._tracingSDK = options.tracingSDK;
|
||||
this._tracer = options.tracer;
|
||||
this._consoleInterceptor = options.consoleInterceptor;
|
||||
this._config = options.projectConfig;
|
||||
this._importedConfig = options.importedConfig;
|
||||
this._importedConfig = options.config;
|
||||
this._handleErrorFn = options.handleErrorFn;
|
||||
}
|
||||
|
||||
@@ -79,7 +75,7 @@ export class TaskExecutor {
|
||||
|
||||
this._tracingSDK.asyncResourceDetector.resolveWithAttributes({
|
||||
...taskContext.attributes,
|
||||
[SemanticInternalAttributes.SDK_VERSION]: pkg.version,
|
||||
[SemanticInternalAttributes.SDK_VERSION]: VERSION,
|
||||
[SemanticInternalAttributes.SDK_LANGUAGE]: "typescript",
|
||||
});
|
||||
|
||||
@@ -452,7 +448,7 @@ export class TaskExecutor {
|
||||
| { status: "skipped"; error?: unknown } // skipped is different than noop, it means that the task was skipped from retrying, instead of just not retrying
|
||||
| { status: "noop"; error?: unknown }
|
||||
> {
|
||||
const retriesConfig = this._importedConfig?.retries ?? this._config.retries;
|
||||
const retriesConfig = this._importedConfig?.retries;
|
||||
|
||||
const retry = this.task.retry ?? retriesConfig?.default;
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export const VERSION = "0.0.0";
|
||||
@@ -18,7 +18,8 @@
|
||||
"exports": {
|
||||
"./package.json": "./package.json",
|
||||
".": "./src/index.ts",
|
||||
"./v3": "./src/v3/index.ts"
|
||||
"./v3": "./src/v3/index.ts",
|
||||
"./v3/extensions": "./src/v3/extensions.ts"
|
||||
},
|
||||
"sourceDialects": [
|
||||
"triggerdotdev-source"
|
||||
@@ -26,10 +27,11 @@
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf dist",
|
||||
"prepare": "tshy",
|
||||
"prepare": "tshy && pnpm run update-version",
|
||||
"build": "tshy",
|
||||
"dev": "tshy --watch",
|
||||
"typecheck": "tsc --noEmit"
|
||||
"typecheck": "tsc --noEmit",
|
||||
"update-version": "tsx ../../scripts/updateVersion.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@opentelemetry/api": "1.9.0",
|
||||
@@ -40,11 +42,7 @@
|
||||
"cronstrue": "^2.21.0",
|
||||
"debug": "^4.3.4",
|
||||
"evt": "^2.4.13",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"git-remote-origin-url": "^4.0.0",
|
||||
"git-repo-info": "^2.1.1",
|
||||
"msw": "^2.2.1",
|
||||
"package-json-from-dist": "^1.0.0",
|
||||
"slug": "^6.0.0",
|
||||
"terminal-link": "^3.0.0",
|
||||
"ulid": "^2.3.0",
|
||||
@@ -63,7 +61,8 @@
|
||||
"rimraf": "^3.0.2",
|
||||
"tshy": "^3.0.2",
|
||||
"typed-emitter": "^2.1.0",
|
||||
"typescript": "^5.5.4"
|
||||
"typescript": "^5.5.4",
|
||||
"tsx": "4.17.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.20.0"
|
||||
@@ -91,6 +90,17 @@
|
||||
"types": "./dist/commonjs/v3/index.d.ts",
|
||||
"default": "./dist/commonjs/v3/index.js"
|
||||
}
|
||||
},
|
||||
"./v3/extensions": {
|
||||
"import": {
|
||||
"triggerdotdev-source": "./src/v3/extensions.ts",
|
||||
"types": "./dist/esm/v3/extensions.d.ts",
|
||||
"default": "./dist/esm/v3/extensions.js"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/commonjs/v3/extensions.d.ts",
|
||||
"default": "./dist/commonjs/v3/extensions.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
|
||||
export const pkg = loadPackageJson(__filename);
|
||||
export const pj = findPackageJson(__filename);
|
||||
@@ -1,5 +0,0 @@
|
||||
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
|
||||
//@ts-ignore
|
||||
export const pkg = loadPackageJson(import.meta.url);
|
||||
//@ts-ignore
|
||||
export const pj = findPackageJson(import.meta.url);
|
||||
@@ -0,0 +1 @@
|
||||
export * from "@trigger.dev/core/v3/extensions";
|
||||
@@ -36,10 +36,9 @@ import {
|
||||
taskCatalog,
|
||||
taskContext,
|
||||
} from "@trigger.dev/core/v3";
|
||||
import { tracer } from "./tracer.js";
|
||||
import { PollOptions, RetrieveRunResult, runs } from "./runs.js";
|
||||
import { IdempotencyKey, idempotencyKeys, isIdempotencyKey } from "./idempotencyKeys.js";
|
||||
import { pkg } from "../pkg.js";
|
||||
import { PollOptions, RetrieveRunResult, runs } from "./runs.js";
|
||||
import { tracer } from "./tracer.js";
|
||||
|
||||
export type Context = TaskRunContext;
|
||||
|
||||
@@ -486,7 +485,7 @@ export function createTask<
|
||||
const task: Task<TIdentifier, TInput, TOutput> = {
|
||||
id: params.id,
|
||||
trigger: async (payload, options) => {
|
||||
const taskMetadata = taskCatalog.getTaskMetadata(params.id);
|
||||
const taskMetadata = taskCatalog.getTaskManifest(params.id);
|
||||
|
||||
return await trigger_internal<TInput, TOutput>(
|
||||
taskMetadata && taskMetadata.exportName
|
||||
@@ -501,7 +500,7 @@ export function createTask<
|
||||
);
|
||||
},
|
||||
batchTrigger: async (items) => {
|
||||
const taskMetadata = taskCatalog.getTaskMetadata(params.id);
|
||||
const taskMetadata = taskCatalog.getTaskManifest(params.id);
|
||||
|
||||
return await batchTrigger_internal<TInput, TOutput>(
|
||||
taskMetadata && taskMetadata.exportName
|
||||
@@ -514,7 +513,7 @@ export function createTask<
|
||||
);
|
||||
},
|
||||
triggerAndWait: async (payload, options) => {
|
||||
const taskMetadata = taskCatalog.getTaskMetadata(params.id);
|
||||
const taskMetadata = taskCatalog.getTaskManifest(params.id);
|
||||
|
||||
return await triggerAndWait_internal<TInput, TOutput>(
|
||||
taskMetadata && taskMetadata.exportName
|
||||
@@ -529,7 +528,7 @@ export function createTask<
|
||||
);
|
||||
},
|
||||
batchTriggerAndWait: async (items) => {
|
||||
const taskMetadata = taskCatalog.getTaskMetadata(params.id);
|
||||
const taskMetadata = taskCatalog.getTaskManifest(params.id);
|
||||
|
||||
return await batchTriggerAndWait_internal<TInput, TOutput>(
|
||||
taskMetadata && taskMetadata.exportName
|
||||
@@ -545,7 +544,6 @@ export function createTask<
|
||||
|
||||
taskCatalog.registerTaskMetadata({
|
||||
id: params.id,
|
||||
packageVersion: pkg.version,
|
||||
queue: params.queue,
|
||||
retry: params.retry ? { ...defaultRetryOptions, ...params.retry } : undefined,
|
||||
machine: params.machine,
|
||||
@@ -561,6 +559,9 @@ export function createTask<
|
||||
},
|
||||
});
|
||||
|
||||
// @ts-expect-error
|
||||
task[Symbol.for("trigger.dev/task")] = true;
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { TriggerTracer } from "@trigger.dev/core/v3";
|
||||
import { pkg } from "../pkg.js";
|
||||
import { VERSION } from "../version.js";
|
||||
|
||||
export const tracer = new TriggerTracer({ name: "@trigger.dev/sdk", version: pkg.version });
|
||||
export const tracer = new TriggerTracer({ name: "@trigger.dev/sdk", version: VERSION });
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export const VERSION = "0.0.0";
|
||||
Generated
+66
-62
@@ -53,6 +53,9 @@ importers:
|
||||
eslint-plugin-turbo:
|
||||
specifier: ^2.0.4
|
||||
version: 2.0.5(eslint@8.45.0)
|
||||
pkg-types:
|
||||
specifier: 1.1.3
|
||||
version: 1.1.3
|
||||
prettier:
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0
|
||||
@@ -993,9 +996,6 @@ importers:
|
||||
p-throttle:
|
||||
specifier: ^6.1.0
|
||||
version: 6.1.0
|
||||
package-json-from-dist:
|
||||
specifier: ^1.0.0
|
||||
version: 1.0.0
|
||||
partysocket:
|
||||
specifier: ^0.0.17
|
||||
version: 0.0.17
|
||||
@@ -1078,6 +1078,9 @@ importers:
|
||||
'@types/semver':
|
||||
specifier: ^7.3.13
|
||||
version: 7.5.1
|
||||
'@types/source-map-support':
|
||||
specifier: 0.5.10
|
||||
version: 0.5.10
|
||||
'@types/ws':
|
||||
specifier: ^8.5.3
|
||||
version: 8.5.4
|
||||
@@ -1105,6 +1108,9 @@ importers:
|
||||
tshy:
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
tsx:
|
||||
specifier: 4.17.0
|
||||
version: 4.17.0
|
||||
type-fest:
|
||||
specifier: ^3.6.0
|
||||
version: 3.13.0
|
||||
@@ -1159,9 +1165,6 @@ importers:
|
||||
humanize-duration:
|
||||
specifier: ^3.27.3
|
||||
version: 3.27.3
|
||||
package-json-from-dist:
|
||||
specifier: ^1.0.0
|
||||
version: 1.0.0
|
||||
socket.io-client:
|
||||
specifier: 4.7.5
|
||||
version: 4.7.5
|
||||
@@ -1205,6 +1208,9 @@ importers:
|
||||
tshy:
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
tsx:
|
||||
specifier: 4.17.0
|
||||
version: 4.17.0
|
||||
typescript:
|
||||
specifier: ^5.5.4
|
||||
version: 5.5.4
|
||||
@@ -1328,21 +1334,9 @@ importers:
|
||||
evt:
|
||||
specifier: ^2.4.13
|
||||
version: 2.4.13
|
||||
get-caller-file:
|
||||
specifier: ^2.0.5
|
||||
version: 2.0.5
|
||||
git-remote-origin-url:
|
||||
specifier: ^4.0.0
|
||||
version: 4.0.0
|
||||
git-repo-info:
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1
|
||||
msw:
|
||||
specifier: ^2.2.1
|
||||
version: 2.2.1(typescript@5.5.4)
|
||||
package-json-from-dist:
|
||||
specifier: ^1.0.0
|
||||
version: 1.0.0
|
||||
slug:
|
||||
specifier: ^6.0.0
|
||||
version: 6.1.0
|
||||
@@ -1386,6 +1380,9 @@ importers:
|
||||
tshy:
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
tsx:
|
||||
specifier: 4.17.0
|
||||
version: 4.17.0
|
||||
typed-emitter:
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0
|
||||
@@ -4171,7 +4168,7 @@ packages:
|
||||
resolution: {integrity: sha512-lhc/XLith28QdW0HpHZvZKkorWgmCNT7sVelMHDj3HFdTfdqkwEKvT+aXVQtNAmCC39VJhunDkWhONWB7335mg==}
|
||||
dependencies:
|
||||
'@esbuild-kit/core-utils': 3.0.0
|
||||
get-tsconfig: 4.7.2
|
||||
get-tsconfig: 4.7.6
|
||||
dev: true
|
||||
|
||||
/@esbuild-kit/core-utils@3.0.0:
|
||||
@@ -4185,7 +4182,7 @@ packages:
|
||||
resolution: {integrity: sha512-afmtLf6uqxD5IgwCzomtqCYIgz/sjHzCWZFvfS5+FzeYxOURPUo4QcHtqJxbxWOMOogKriZanN/1bJQE/ZL93A==}
|
||||
dependencies:
|
||||
'@esbuild-kit/core-utils': 3.0.0
|
||||
get-tsconfig: 4.7.2
|
||||
get-tsconfig: 4.7.6
|
||||
dev: true
|
||||
|
||||
/@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19):
|
||||
@@ -13046,6 +13043,12 @@ packages:
|
||||
resolution: {integrity: sha512-yPX0bb1SvrpaGlHuSiz6EicgRI4VBE+LO7IANlZagQwtaoKjLLcZc8y6s13vKp41mYvMCSzjtObxvU7/0JRPaA==}
|
||||
dev: true
|
||||
|
||||
/@types/source-map-support@0.5.10:
|
||||
resolution: {integrity: sha512-tgVP2H469x9zq34Z0m/fgPewGhg/MLClalNOiPIzQlXrSS2YrKu/xCdSCKnEDwkFha51VKEKB6A9wW26/ZNwzA==}
|
||||
dependencies:
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/@types/stack-utils@2.0.1:
|
||||
resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
|
||||
dev: true
|
||||
@@ -13395,7 +13398,7 @@ packages:
|
||||
dependencies:
|
||||
'@vitest/utils': 0.28.5
|
||||
p-limit: 4.0.0
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
dev: true
|
||||
|
||||
/@vitest/runner@1.4.0:
|
||||
@@ -13403,7 +13406,7 @@ packages:
|
||||
dependencies:
|
||||
'@vitest/utils': 1.4.0
|
||||
p-limit: 5.0.0
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
dev: true
|
||||
|
||||
/@vitest/runner@1.6.0:
|
||||
@@ -13411,14 +13414,14 @@ packages:
|
||||
dependencies:
|
||||
'@vitest/utils': 1.6.0
|
||||
p-limit: 5.0.0
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
dev: true
|
||||
|
||||
/@vitest/snapshot@1.4.0:
|
||||
resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==}
|
||||
dependencies:
|
||||
magic-string: 0.30.8
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
pretty-format: 29.7.0
|
||||
dev: true
|
||||
|
||||
@@ -13426,7 +13429,7 @@ packages:
|
||||
resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==}
|
||||
dependencies:
|
||||
magic-string: 0.30.8
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
pretty-format: 29.7.0
|
||||
dev: true
|
||||
|
||||
@@ -13631,13 +13634,6 @@ packages:
|
||||
mime-types: 2.1.35
|
||||
negotiator: 0.6.3
|
||||
|
||||
/acorn-import-assertions@1.9.0(acorn@8.10.0):
|
||||
resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
|
||||
peerDependencies:
|
||||
acorn: ^8
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
|
||||
/acorn-import-assertions@1.9.0(acorn@8.12.1):
|
||||
resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
|
||||
peerDependencies:
|
||||
@@ -13651,6 +13647,15 @@ packages:
|
||||
acorn: ^8
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
dev: false
|
||||
|
||||
/acorn-import-attributes@1.9.5(acorn@8.12.1):
|
||||
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
|
||||
peerDependencies:
|
||||
acorn: ^8
|
||||
dependencies:
|
||||
acorn: 8.12.1
|
||||
dev: true
|
||||
|
||||
/acorn-jsx@5.3.2(acorn@8.10.0):
|
||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||
@@ -13658,6 +13663,7 @@ packages:
|
||||
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
dev: true
|
||||
|
||||
/acorn-jsx@5.3.2(acorn@8.12.1):
|
||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||
@@ -13665,7 +13671,6 @@ packages:
|
||||
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||
dependencies:
|
||||
acorn: 8.12.1
|
||||
dev: true
|
||||
|
||||
/acorn-node@1.8.2:
|
||||
resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
|
||||
@@ -17503,8 +17508,8 @@ packages:
|
||||
resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
acorn-jsx: 5.3.2(acorn@8.10.0)
|
||||
acorn: 8.12.1
|
||||
acorn-jsx: 5.3.2(acorn@8.12.1)
|
||||
eslint-visitor-keys: 3.4.2
|
||||
|
||||
/esprima@4.0.1:
|
||||
@@ -18382,6 +18387,12 @@ packages:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
dev: true
|
||||
|
||||
/get-tsconfig@4.7.6:
|
||||
resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
|
||||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
dev: true
|
||||
|
||||
/get-uri@6.0.1:
|
||||
resolution: {integrity: sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==}
|
||||
engines: {node: '>= 14'}
|
||||
@@ -18419,24 +18430,6 @@ packages:
|
||||
tar: 6.2.1
|
||||
dev: false
|
||||
|
||||
/git-remote-origin-url@4.0.0:
|
||||
resolution: {integrity: sha512-EAxDksNdjuWgmVW9pVvA9jQDi/dmTaiDONktIy7qiRRhBZUI4FQK1YvBvteuTSX24aNKg9lfgxNYJEeeSXe6DA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
dependencies:
|
||||
gitconfiglocal: 2.1.0
|
||||
dev: false
|
||||
|
||||
/git-repo-info@2.1.1:
|
||||
resolution: {integrity: sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==}
|
||||
engines: {node: '>= 4.0'}
|
||||
dev: false
|
||||
|
||||
/gitconfiglocal@2.1.0:
|
||||
resolution: {integrity: sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==}
|
||||
dependencies:
|
||||
ini: 1.3.8
|
||||
dev: false
|
||||
|
||||
/glob-parent@3.1.0:
|
||||
resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
|
||||
dependencies:
|
||||
@@ -19053,16 +19046,16 @@ packages:
|
||||
/import-in-the-middle@1.7.1:
|
||||
resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==}
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
acorn-import-assertions: 1.9.0(acorn@8.10.0)
|
||||
acorn: 8.12.1
|
||||
acorn-import-assertions: 1.9.0(acorn@8.12.1)
|
||||
cjs-module-lexer: 1.2.3
|
||||
module-details-from-path: 1.0.3
|
||||
|
||||
/import-in-the-middle@1.7.4:
|
||||
resolution: {integrity: sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg==}
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
acorn-import-attributes: 1.9.5(acorn@8.10.0)
|
||||
acorn: 8.12.1
|
||||
acorn-import-attributes: 1.9.5(acorn@8.12.1)
|
||||
cjs-module-lexer: 1.2.3
|
||||
module-details-from-path: 1.0.3
|
||||
dev: true
|
||||
@@ -25899,7 +25892,7 @@ packages:
|
||||
/strip-literal@1.0.1:
|
||||
resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
acorn: 8.12.1
|
||||
dev: true
|
||||
|
||||
/strip-literal@2.1.0:
|
||||
@@ -26818,6 +26811,17 @@ packages:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/tsx@4.17.0:
|
||||
resolution: {integrity: sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
esbuild: 0.23.0
|
||||
get-tsconfig: 4.7.6
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/tsx@4.7.1:
|
||||
resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
@@ -27653,7 +27657,7 @@ packages:
|
||||
cac: 6.7.14
|
||||
debug: 4.3.4
|
||||
mlly: 1.7.1
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
picocolors: 1.0.0
|
||||
source-map: 0.6.1
|
||||
source-map-support: 0.5.21
|
||||
@@ -27677,7 +27681,7 @@ packages:
|
||||
cac: 6.7.14
|
||||
debug: 4.3.4
|
||||
mlly: 1.7.1
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
picocolors: 1.0.0
|
||||
source-map: 0.6.1
|
||||
source-map-support: 0.5.21
|
||||
@@ -27700,7 +27704,7 @@ packages:
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.3.4
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
picocolors: 1.0.0
|
||||
vite: 5.2.7(@types/node@18.11.18)
|
||||
transitivePeerDependencies:
|
||||
@@ -27721,7 +27725,7 @@ packages:
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.3.4
|
||||
pathe: 1.1.1
|
||||
pathe: 1.1.2
|
||||
picocolors: 1.0.0
|
||||
vite: 5.2.7(@types/node@20.14.14)
|
||||
transitivePeerDependencies:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { defineConfig } from "@trigger.dev/sdk/v3";
|
||||
import { emitDecoratorMetadata } from "@trigger.dev/sdk/v3/extensions";
|
||||
import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai";
|
||||
|
||||
export default defineConfig({
|
||||
@@ -23,4 +24,8 @@ export default defineConfig({
|
||||
onFailure: async (payload, error, { ctx }) => {
|
||||
console.log(`Task ${ctx.task.id} failed ${ctx.run.id}`);
|
||||
},
|
||||
build: {
|
||||
extensions: [emitDecoratorMetadata()],
|
||||
external: ["@ffmpeg-installer/ffmpeg"],
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import * as fs from "node:fs/promises";
|
||||
import * as path from "node:path";
|
||||
import { readPackageJSON } from "pkg-types";
|
||||
|
||||
// This script will update the VERSION constant in the build output, found at:
|
||||
// {cwd}/dist/esm/version.js
|
||||
// {cwd}/dist/commonjs/version.js
|
||||
//
|
||||
// It fetches the version by reading the package.json file in the root of the project.
|
||||
async function updateVersion() {
|
||||
const localPackageJson = await readPackageJSON(process.cwd());
|
||||
|
||||
if (!localPackageJson.version) {
|
||||
throw new Error("Failed to read version from package.json");
|
||||
}
|
||||
|
||||
const versionFileESM = path.join(process.cwd(), "dist", "esm", "version.js");
|
||||
await updatePlaceholderInFile(versionFileESM, localPackageJson.version);
|
||||
|
||||
const versionFileCJS = path.join(process.cwd(), "dist", "commonjs", "version.js");
|
||||
await updatePlaceholderInFile(versionFileCJS, localPackageJson.version);
|
||||
|
||||
console.log(
|
||||
`Updated packages/${path.basename(process.cwd())} version.js to ${localPackageJson.version}`
|
||||
);
|
||||
}
|
||||
|
||||
async function updatePlaceholderInFile(filePath: string, version: string) {
|
||||
try {
|
||||
const fileContents = await fs.readFile(filePath, "utf-8");
|
||||
const updatedContents = fileContents.replace("0.0.0", version);
|
||||
await fs.writeFile(filePath, updatedContents);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
updateVersion().catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user