Indexing of the v3 catalog

This commit is contained in:
Eric Allam
2024-08-08 13:44:29 +01:00
committed by Eric Allam
parent 98046c58ae
commit de81f046b2
40 changed files with 645 additions and 191 deletions
+2 -1
View File
@@ -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": {
+6 -4
View File
@@ -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",
+12 -25
View File
@@ -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) {
+32
View File
@@ -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",
};
});
},
};
}
+2 -1
View File
@@ -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();
+1 -1
View File
@@ -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(),
+1 -1
View File
@@ -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,
-3
View File
@@ -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;
+22 -2
View File
@@ -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;
}
+6 -1
View File
@@ -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,
+296 -1
View File
@@ -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);
});
-3
View File
@@ -1,3 +0,0 @@
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
export const pkg = loadPackageJson(__filename);
export const pj = findPackageJson(__filename);
-5
View File
@@ -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);
+1 -1
View File
@@ -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 (
+9 -16
View File
@@ -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);
}
+1
View File
@@ -0,0 +1 @@
export const VERSION = "0.0.0";
+16 -3
View File
@@ -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",
-3
View File
@@ -1,3 +0,0 @@
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
export const pkg = loadPackageJson(__filename);
export const pj = findPackageJson(__filename);
-5
View File
@@ -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
+2 -2
View File
@@ -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
+13 -1
View File
@@ -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 };
});
},
};
}
+1
View File
@@ -0,0 +1 @@
export * from "./emitDecoratorMetadata.js";
+2 -2
View File
@@ -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({}))
-1
View File
@@ -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>;
+4 -1
View File
@@ -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,
+2 -1
View File
@@ -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(),
};
+9 -13
View File
@@ -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;
+1
View File
@@ -0,0 +1 @@
export const VERSION = "0.0.0";
+18 -8
View File
@@ -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"
}
}
}
}
-3
View File
@@ -1,3 +0,0 @@
import { findPackageJson, loadPackageJson } from "package-json-from-dist";
export const pkg = loadPackageJson(__filename);
export const pj = findPackageJson(__filename);
-5
View File
@@ -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";
+9 -8
View File
@@ -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;
}
+2 -2
View File
@@ -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 });
+1
View File
@@ -0,0 +1 @@
export const VERSION = "0.0.0";
+66 -62
View File
@@ -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:
+5
View File
@@ -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"],
},
});
+39
View File
@@ -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);
});