@trigger.dev/build 0.0.0-chat-prerelease-20260401205942

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/commonjs/extensions/audioWaveform.d.ts +6 -0
  4. package/dist/commonjs/extensions/audioWaveform.js +45 -0
  5. package/dist/commonjs/extensions/audioWaveform.js.map +1 -0
  6. package/dist/commonjs/extensions/core/additionalFiles.d.ts +5 -0
  7. package/dist/commonjs/extensions/core/additionalFiles.js +13 -0
  8. package/dist/commonjs/extensions/core/additionalFiles.js.map +1 -0
  9. package/dist/commonjs/extensions/core/additionalPackages.d.ts +15 -0
  10. package/dist/commonjs/extensions/core/additionalPackages.js +77 -0
  11. package/dist/commonjs/extensions/core/additionalPackages.js.map +1 -0
  12. package/dist/commonjs/extensions/core/aptGet.d.ts +5 -0
  13. package/dist/commonjs/extensions/core/aptGet.js +23 -0
  14. package/dist/commonjs/extensions/core/aptGet.js.map +1 -0
  15. package/dist/commonjs/extensions/core/ffmpeg.d.ts +22 -0
  16. package/dist/commonjs/extensions/core/ffmpeg.js +68 -0
  17. package/dist/commonjs/extensions/core/ffmpeg.js.map +1 -0
  18. package/dist/commonjs/extensions/core/neonSyncEnvVars.d.ts +14 -0
  19. package/dist/commonjs/extensions/core/neonSyncEnvVars.js +202 -0
  20. package/dist/commonjs/extensions/core/neonSyncEnvVars.js.map +1 -0
  21. package/dist/commonjs/extensions/core/syncEnvVars.d.ts +18 -0
  22. package/dist/commonjs/extensions/core/syncEnvVars.js +150 -0
  23. package/dist/commonjs/extensions/core/syncEnvVars.js.map +1 -0
  24. package/dist/commonjs/extensions/core/syncSupabaseEnvVars.d.ts +12 -0
  25. package/dist/commonjs/extensions/core/syncSupabaseEnvVars.js +169 -0
  26. package/dist/commonjs/extensions/core/syncSupabaseEnvVars.js.map +1 -0
  27. package/dist/commonjs/extensions/core/vercelSyncEnvVars.d.ts +11 -0
  28. package/dist/commonjs/extensions/core/vercelSyncEnvVars.js +85 -0
  29. package/dist/commonjs/extensions/core/vercelSyncEnvVars.js.map +1 -0
  30. package/dist/commonjs/extensions/core.d.ts +8 -0
  31. package/dist/commonjs/extensions/core.js +25 -0
  32. package/dist/commonjs/extensions/core.js.map +1 -0
  33. package/dist/commonjs/extensions/index.d.ts +3 -0
  34. package/dist/commonjs/extensions/index.js +7 -0
  35. package/dist/commonjs/extensions/index.js.map +1 -0
  36. package/dist/commonjs/extensions/lightpanda.d.ts +7 -0
  37. package/dist/commonjs/extensions/lightpanda.js +30 -0
  38. package/dist/commonjs/extensions/lightpanda.js.map +1 -0
  39. package/dist/commonjs/extensions/playwright.d.ts +55 -0
  40. package/dist/commonjs/extensions/playwright.js +308 -0
  41. package/dist/commonjs/extensions/playwright.js.map +1 -0
  42. package/dist/commonjs/extensions/prisma.d.ts +192 -0
  43. package/dist/commonjs/extensions/prisma.js +560 -0
  44. package/dist/commonjs/extensions/prisma.js.map +1 -0
  45. package/dist/commonjs/extensions/puppeteer.d.ts +8 -0
  46. package/dist/commonjs/extensions/puppeteer.js +36 -0
  47. package/dist/commonjs/extensions/puppeteer.js.map +1 -0
  48. package/dist/commonjs/extensions/secureExec.d.ts +35 -0
  49. package/dist/commonjs/extensions/secureExec.js +139 -0
  50. package/dist/commonjs/extensions/secureExec.js.map +1 -0
  51. package/dist/commonjs/extensions/typescript.d.ts +2 -0
  52. package/dist/commonjs/extensions/typescript.js +62 -0
  53. package/dist/commonjs/extensions/typescript.js.map +1 -0
  54. package/dist/commonjs/imports/mlly-cjs.cjs.map +1 -0
  55. package/dist/commonjs/imports/mlly.d.ts +1 -0
  56. package/dist/commonjs/imports/mlly.js +7 -0
  57. package/dist/commonjs/index.d.ts +1 -0
  58. package/dist/commonjs/index.js +19 -0
  59. package/dist/commonjs/index.js.map +1 -0
  60. package/dist/commonjs/internal/additionalFiles.d.ts +6 -0
  61. package/dist/commonjs/internal/additionalFiles.js +63 -0
  62. package/dist/commonjs/internal/additionalFiles.js.map +1 -0
  63. package/dist/commonjs/internal.d.ts +1 -0
  64. package/dist/commonjs/internal.js +18 -0
  65. package/dist/commonjs/internal.js.map +1 -0
  66. package/dist/commonjs/package.json +3 -0
  67. package/dist/commonjs/version.d.ts +1 -0
  68. package/dist/commonjs/version.js +5 -0
  69. package/dist/commonjs/version.js.map +1 -0
  70. package/dist/esm/extensions/audioWaveform.d.ts +6 -0
  71. package/dist/esm/extensions/audioWaveform.js +42 -0
  72. package/dist/esm/extensions/audioWaveform.js.map +1 -0
  73. package/dist/esm/extensions/core/additionalFiles.d.ts +5 -0
  74. package/dist/esm/extensions/core/additionalFiles.js +10 -0
  75. package/dist/esm/extensions/core/additionalFiles.js.map +1 -0
  76. package/dist/esm/extensions/core/additionalPackages.d.ts +15 -0
  77. package/dist/esm/extensions/core/additionalPackages.js +74 -0
  78. package/dist/esm/extensions/core/additionalPackages.js.map +1 -0
  79. package/dist/esm/extensions/core/aptGet.d.ts +5 -0
  80. package/dist/esm/extensions/core/aptGet.js +20 -0
  81. package/dist/esm/extensions/core/aptGet.js.map +1 -0
  82. package/dist/esm/extensions/core/ffmpeg.d.ts +22 -0
  83. package/dist/esm/extensions/core/ffmpeg.js +65 -0
  84. package/dist/esm/extensions/core/ffmpeg.js.map +1 -0
  85. package/dist/esm/extensions/core/neonSyncEnvVars.d.ts +14 -0
  86. package/dist/esm/extensions/core/neonSyncEnvVars.js +198 -0
  87. package/dist/esm/extensions/core/neonSyncEnvVars.js.map +1 -0
  88. package/dist/esm/extensions/core/syncEnvVars.d.ts +18 -0
  89. package/dist/esm/extensions/core/syncEnvVars.js +147 -0
  90. package/dist/esm/extensions/core/syncEnvVars.js.map +1 -0
  91. package/dist/esm/extensions/core/syncSupabaseEnvVars.d.ts +12 -0
  92. package/dist/esm/extensions/core/syncSupabaseEnvVars.js +165 -0
  93. package/dist/esm/extensions/core/syncSupabaseEnvVars.js.map +1 -0
  94. package/dist/esm/extensions/core/vercelSyncEnvVars.d.ts +11 -0
  95. package/dist/esm/extensions/core/vercelSyncEnvVars.js +82 -0
  96. package/dist/esm/extensions/core/vercelSyncEnvVars.js.map +1 -0
  97. package/dist/esm/extensions/core.d.ts +8 -0
  98. package/dist/esm/extensions/core.js +9 -0
  99. package/dist/esm/extensions/core.js.map +1 -0
  100. package/dist/esm/extensions/index.d.ts +3 -0
  101. package/dist/esm/extensions/index.js +2 -0
  102. package/dist/esm/extensions/index.js.map +1 -0
  103. package/dist/esm/extensions/lightpanda.d.ts +7 -0
  104. package/dist/esm/extensions/lightpanda.js +26 -0
  105. package/dist/esm/extensions/lightpanda.js.map +1 -0
  106. package/dist/esm/extensions/playwright.d.ts +55 -0
  107. package/dist/esm/extensions/playwright.js +305 -0
  108. package/dist/esm/extensions/playwright.js.map +1 -0
  109. package/dist/esm/extensions/prisma.d.ts +192 -0
  110. package/dist/esm/extensions/prisma.js +550 -0
  111. package/dist/esm/extensions/prisma.js.map +1 -0
  112. package/dist/esm/extensions/puppeteer.d.ts +8 -0
  113. package/dist/esm/extensions/puppeteer.js +33 -0
  114. package/dist/esm/extensions/puppeteer.js.map +1 -0
  115. package/dist/esm/extensions/secureExec.d.ts +35 -0
  116. package/dist/esm/extensions/secureExec.js +136 -0
  117. package/dist/esm/extensions/secureExec.js.map +1 -0
  118. package/dist/esm/extensions/typescript.d.ts +2 -0
  119. package/dist/esm/extensions/typescript.js +56 -0
  120. package/dist/esm/extensions/typescript.js.map +1 -0
  121. package/dist/esm/imports/mlly.d.ts +2 -0
  122. package/dist/esm/imports/mlly.js +5 -0
  123. package/dist/esm/imports/mlly.js.map +1 -0
  124. package/dist/esm/index.d.ts +1 -0
  125. package/dist/esm/index.js +3 -0
  126. package/dist/esm/index.js.map +1 -0
  127. package/dist/esm/internal/additionalFiles.d.ts +6 -0
  128. package/dist/esm/internal/additionalFiles.js +60 -0
  129. package/dist/esm/internal/additionalFiles.js.map +1 -0
  130. package/dist/esm/internal.d.ts +1 -0
  131. package/dist/esm/internal.js +2 -0
  132. package/dist/esm/internal.js.map +1 -0
  133. package/dist/esm/package.json +3 -0
  134. package/dist/esm/version.d.ts +1 -0
  135. package/dist/esm/version.js +2 -0
  136. package/dist/esm/version.js.map +1 -0
  137. package/package.json +230 -0
@@ -0,0 +1,550 @@
1
+ import { binaryForRuntime } from "@trigger.dev/core/v3/build";
2
+ import assert from "node:assert";
3
+ import { existsSync, statSync } from "node:fs";
4
+ import { cp, readdir, readFile } from "node:fs/promises";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { resolvePathSync as esmResolveSync } from "../imports/mlly.js";
7
+ import { resolvePackageJSON } from "pkg-types";
8
+ const BINARY_TARGET = "linux-arm64-openssl-3.0.x";
9
+ /**
10
+ * Attempts to resolve the Prisma client version from the project.
11
+ * Tries @prisma/client first, then falls back to the prisma package.
12
+ */
13
+ async function resolvePrismaClientVersion(workingDir, logger) {
14
+ // Try @prisma/client first
15
+ const clientVersion = await tryResolvePrismaPackageVersion("@prisma/client", workingDir, logger);
16
+ if (clientVersion) {
17
+ return clientVersion;
18
+ }
19
+ // Fall back to prisma package
20
+ const prismaVersion = await tryResolvePrismaPackageVersion("prisma", workingDir, logger);
21
+ if (prismaVersion) {
22
+ return prismaVersion;
23
+ }
24
+ return undefined;
25
+ }
26
+ /**
27
+ * Attempts to resolve a specific Prisma package and extract its version
28
+ */
29
+ async function tryResolvePrismaPackageVersion(packageName, workingDir, logger) {
30
+ try {
31
+ // Try to resolve the package using esmResolveSync
32
+ const resolvedPath = esmResolveSync(packageName, {
33
+ url: workingDir,
34
+ });
35
+ logger.debug(`Resolved ${packageName} module path`, {
36
+ resolvedPath,
37
+ workingDir,
38
+ packageName,
39
+ });
40
+ // Find the package.json for this resolved module
41
+ const packageJsonPath = await resolvePackageJSON(dirname(resolvedPath), {
42
+ test: async (filePath) => {
43
+ try {
44
+ const content = await readFile(filePath, "utf-8");
45
+ const candidate = JSON.parse(content);
46
+ // Exclude esm type markers
47
+ return Object.keys(candidate).length > 1 || !candidate.type;
48
+ }
49
+ catch (error) {
50
+ logger.debug("Error during package.json test", {
51
+ error: error instanceof Error ? error.message : error,
52
+ filePath,
53
+ });
54
+ return false;
55
+ }
56
+ },
57
+ });
58
+ if (!packageJsonPath) {
59
+ logger.debug(`No package.json found for ${packageName}`, {
60
+ resolvedPath,
61
+ });
62
+ return undefined;
63
+ }
64
+ logger.debug(`Found package.json for ${packageName}`, {
65
+ packageJsonPath,
66
+ });
67
+ // Read and parse the package.json
68
+ const packageJsonContent = await readFile(packageJsonPath, "utf-8");
69
+ const packageJson = JSON.parse(packageJsonContent);
70
+ if (packageJson.name === packageName && packageJson.version) {
71
+ logger.debug(`Detected ${packageName} version`, {
72
+ version: packageJson.version,
73
+ });
74
+ return packageJson.version;
75
+ }
76
+ logger.debug(`Package name mismatch or no version in package.json for ${packageName}`, {
77
+ expectedName: packageName,
78
+ actualName: packageJson.name,
79
+ version: packageJson.version,
80
+ });
81
+ return undefined;
82
+ }
83
+ catch (error) {
84
+ logger.debug(`Failed to resolve ${packageName}`, {
85
+ error: error instanceof Error ? error.message : error,
86
+ workingDir,
87
+ });
88
+ return undefined;
89
+ }
90
+ }
91
+ /**
92
+ * Loads a Prisma config file using @prisma/config and extracts the schema path and other configuration
93
+ */
94
+ async function loadPrismaConfig(configFilePath, workingDir, logger) {
95
+ try {
96
+ // Resolve the config file path relative to the working directory
97
+ const resolvedConfigPath = resolve(workingDir, configFilePath);
98
+ logger.debug(`[PrismaExtension] loadPrismaConfig called`, {
99
+ configFilePath,
100
+ resolvedConfigPath,
101
+ workingDir,
102
+ });
103
+ // Check that the config file exists
104
+ if (!existsSync(resolvedConfigPath)) {
105
+ throw new Error(`Prisma config file not found at ${resolvedConfigPath}. Make sure the path is correct: ${configFilePath}, relative to the working dir ${workingDir}`);
106
+ }
107
+ logger.debug(`[PrismaExtension] Config file exists, loading with @prisma/config`);
108
+ // Dynamically import @prisma/config
109
+ const { loadConfigFromFile } = await import("@prisma/config");
110
+ // Load the config using @prisma/config
111
+ const configResult = await loadConfigFromFile({
112
+ configFile: resolvedConfigPath,
113
+ configRoot: workingDir,
114
+ });
115
+ logger.debug(`[PrismaExtension] loadConfigFromFile completed`, {
116
+ hasError: !!configResult.error,
117
+ errorTag: configResult.error?._tag,
118
+ });
119
+ function prettyConfigError(error) {
120
+ switch (error._tag) {
121
+ case "ConfigFileNotFound":
122
+ return `Config file not found at ${resolvedConfigPath}`;
123
+ case "ConfigLoadError":
124
+ return `Config file parse error: ${error.error.message}`;
125
+ case "ConfigFileSyntaxError":
126
+ return `Config file syntax error: ${error.error.message}`;
127
+ default:
128
+ return `Unknown config error: ${String(error.error.message)}`;
129
+ }
130
+ }
131
+ if (configResult.error) {
132
+ throw new Error(`Failed to load Prisma config from ${resolvedConfigPath}: ${prettyConfigError(configResult.error)}`);
133
+ }
134
+ logger.debug(`[PrismaExtension] Config parsed successfully`, {
135
+ schema: configResult.config.schema,
136
+ migrationsPath: configResult.config.migrations?.path,
137
+ fullMigrations: configResult.config.migrations,
138
+ });
139
+ // Extract the schema path
140
+ if (!configResult.config.schema) {
141
+ throw new Error(`Prisma config file at ${resolvedConfigPath} does not specify a schema path`);
142
+ }
143
+ const result = {
144
+ schema: configResult.config.schema,
145
+ migrationsPath: configResult.config.migrations?.path,
146
+ };
147
+ logger.debug(`[PrismaExtension] Returning config result`, result);
148
+ return result;
149
+ }
150
+ catch (error) {
151
+ logger.debug(`[PrismaExtension] Error loading config`, {
152
+ error: error instanceof Error ? error.message : error,
153
+ stack: error instanceof Error ? error.stack : undefined,
154
+ });
155
+ throw new Error(`Failed to load Prisma config from ${configFilePath}: ${error instanceof Error ? error.message : error}`);
156
+ }
157
+ }
158
+ /**
159
+ * Prisma build extension for Trigger.dev deployments.
160
+ *
161
+ * **Three modes available:**
162
+ * - `"legacy"` - Prisma 5.x/6.x with `prisma-client-js`, automatic generation
163
+ * - `"engine-only"` - Custom output paths, manual generation control
164
+ * - `"modern"` - Prisma 6.16+/7.x with `prisma-client` provider
165
+ *
166
+ * @example Legacy mode (most common)
167
+ * ```ts
168
+ * prismaExtension({
169
+ * mode: "legacy",
170
+ * schema: "prisma/schema.prisma",
171
+ * migrate: true,
172
+ * typedSql: true,
173
+ * });
174
+ * ```
175
+ *
176
+ * @example Engine-only mode (custom output)
177
+ * ```ts
178
+ * prismaExtension({
179
+ * mode: "engine-only",
180
+ * version: "6.19.0",
181
+ * });
182
+ * ```
183
+ *
184
+ * @example Modern mode (Prisma 7)
185
+ * ```ts
186
+ * prismaExtension({
187
+ * mode: "modern",
188
+ * });
189
+ * ```
190
+ */
191
+ export function prismaExtension(options) {
192
+ switch (options.mode) {
193
+ case "legacy":
194
+ return new PrismaLegacyModeExtension(options);
195
+ case "engine-only":
196
+ return new PrismaEngineOnlyModeExtension(options);
197
+ case "modern":
198
+ return new PrismaEngineModernModeExtension(options);
199
+ default:
200
+ return new PrismaLegacyModeExtension(options);
201
+ }
202
+ }
203
+ export class PrismaLegacyModeExtension {
204
+ options;
205
+ moduleExternals;
206
+ name = "PrismaExtension";
207
+ _resolvedSchemaPath;
208
+ _loadedConfig;
209
+ constructor(options) {
210
+ this.options = options;
211
+ this.moduleExternals = ["@prisma/client", "@prisma/engines"];
212
+ }
213
+ externalsForTarget(target) {
214
+ if (target === "dev") {
215
+ return [];
216
+ }
217
+ return this.moduleExternals;
218
+ }
219
+ async onBuildStart(context) {
220
+ if (context.target === "dev") {
221
+ return;
222
+ }
223
+ context.logger.debug(`[PrismaExtension] onBuildStart called`, {
224
+ workingDir: context.workingDir,
225
+ options: {
226
+ schema: this.options.schema,
227
+ configFile: this.options.configFile,
228
+ migrate: this.options.migrate,
229
+ version: this.options.version,
230
+ typedSql: this.options.typedSql,
231
+ clientGenerator: this.options.clientGenerator,
232
+ directUrlEnvVarName: this.options.directUrlEnvVarName,
233
+ },
234
+ });
235
+ // Validate that either schema or configFile is provided, but not both
236
+ if (!this.options.schema && !this.options.configFile) {
237
+ throw new Error(`PrismaExtension requires either 'schema' or 'configFile' to be specified in the options`);
238
+ }
239
+ if (this.options.schema && this.options.configFile) {
240
+ throw new Error(`PrismaExtension cannot have both 'schema' and 'configFile' specified. Please use only one.`);
241
+ }
242
+ let schemaPath;
243
+ // If configFile is specified, load it and extract the schema path
244
+ if (this.options.configFile) {
245
+ context.logger.debug(`[PrismaExtension] Loading Prisma config from ${this.options.configFile}`);
246
+ this._loadedConfig = await loadPrismaConfig(this.options.configFile, context.workingDir, context.logger);
247
+ schemaPath = this._loadedConfig.schema;
248
+ context.logger.debug(`[PrismaExtension] Config loaded successfully`, {
249
+ schema: this._loadedConfig.schema,
250
+ migrationsPath: this._loadedConfig.migrationsPath,
251
+ });
252
+ }
253
+ else {
254
+ schemaPath = this.options.schema;
255
+ context.logger.debug(`[PrismaExtension] Using schema from options: ${schemaPath}`);
256
+ }
257
+ // Resolve the path to the prisma schema, relative to the config.directory
258
+ this._resolvedSchemaPath = resolve(context.workingDir, schemaPath);
259
+ context.logger.debug(`[PrismaExtension] Resolved schema path`, {
260
+ schemaPath,
261
+ resolvedSchemaPath: this._resolvedSchemaPath,
262
+ workingDir: context.workingDir,
263
+ });
264
+ // Check that the prisma schema exists
265
+ if (!existsSync(this._resolvedSchemaPath)) {
266
+ throw new Error(`PrismaExtension could not find the prisma schema at ${this._resolvedSchemaPath}. Make sure the path is correct: ${schemaPath}, relative to the working dir ${context.workingDir}`);
267
+ }
268
+ context.logger.debug(`[PrismaExtension] Schema file exists at ${this._resolvedSchemaPath}`);
269
+ }
270
+ async onBuildComplete(context, manifest) {
271
+ if (context.target === "dev") {
272
+ return;
273
+ }
274
+ context.logger.debug(`[PrismaExtension] onBuildComplete called`);
275
+ assert(this._resolvedSchemaPath, "Resolved schema path is not set");
276
+ context.logger.debug(`[PrismaExtension] Looking for @prisma/client in the externals`, {
277
+ externals: manifest.externals,
278
+ });
279
+ const prismaExternal = manifest.externals?.find((external) => external.name === "@prisma/client");
280
+ let version = prismaExternal?.version ?? this.options.version;
281
+ // If we couldn't find the version in externals or options, try to resolve it from the filesystem
282
+ if (!version) {
283
+ context.logger.debug(`[PrismaExtension] Version not found in externals, attempting to detect from filesystem`);
284
+ version = await resolvePrismaClientVersion(context.workingDir, context.logger);
285
+ if (version) {
286
+ context.logger.debug(`[PrismaExtension] Detected version from filesystem: ${version}`);
287
+ }
288
+ }
289
+ if (!version) {
290
+ throw new Error(`PrismaExtension could not determine the version of @prisma/client. It's possible that the @prisma/client was not used in the project. If this isn't the case, please provide a version in the PrismaExtension options.`);
291
+ }
292
+ context.logger.debug(`[PrismaExtension] Using Prisma version ${version}`, {
293
+ source: prismaExternal ? "externals" : this.options.version ? "options" : "filesystem",
294
+ });
295
+ // Detect if this is a multi-file schema (directory) or single file schema
296
+ const isMultiFileSchema = statSync(this._resolvedSchemaPath).isDirectory();
297
+ const usingSchemaFolder = !isMultiFileSchema && dirname(this._resolvedSchemaPath).endsWith("schema");
298
+ context.logger.debug(`Schema detection`, {
299
+ isMultiFileSchema,
300
+ usingSchemaFolder,
301
+ resolvedSchemaPath: this._resolvedSchemaPath,
302
+ });
303
+ let commands = [];
304
+ let prismaDir;
305
+ const generatorFlags = [];
306
+ if (this.options.clientGenerator) {
307
+ generatorFlags.push(`--generator=${this.options.clientGenerator}`);
308
+ }
309
+ if (this.options.typedSql) {
310
+ generatorFlags.push(`--sql`);
311
+ // Determine the prisma directory based on the schema structure
312
+ let prismaDirForSql;
313
+ if (isMultiFileSchema) {
314
+ // For multi-file schemas, the resolved path IS the prisma directory
315
+ prismaDirForSql = this._resolvedSchemaPath;
316
+ }
317
+ else if (usingSchemaFolder) {
318
+ // For schema folders (e.g., prisma/schema/*.prisma), go up two levels
319
+ prismaDirForSql = dirname(dirname(this._resolvedSchemaPath));
320
+ }
321
+ else {
322
+ // For single file schemas (e.g., prisma/schema.prisma), go up one level
323
+ prismaDirForSql = dirname(this._resolvedSchemaPath);
324
+ }
325
+ context.logger.debug(`Using typedSql`, {
326
+ prismaDirForSql,
327
+ });
328
+ // Find all the files prisma/sql/*.sql
329
+ const sqlFiles = await readdir(join(prismaDirForSql, "sql")).then((files) => files.filter((file) => file.endsWith(".sql")));
330
+ context.logger.debug(`Found sql files`, {
331
+ sqlFiles,
332
+ });
333
+ const sqlDestinationPath = join(manifest.outputPath, "prisma", "sql");
334
+ for (const file of sqlFiles) {
335
+ const destination = join(sqlDestinationPath, file);
336
+ const source = join(prismaDirForSql, "sql", file);
337
+ context.logger.debug(`Copying the sql from ${source} to ${destination}`);
338
+ await cp(source, destination);
339
+ }
340
+ }
341
+ if (isMultiFileSchema) {
342
+ // For multi-file schemas, the resolved path IS the prisma directory
343
+ prismaDir = this._resolvedSchemaPath;
344
+ context.logger.debug(`Using multi-file schema directory: ${prismaDir}`);
345
+ // Copy the entire prisma directory to the build output path
346
+ const prismaDestinationPath = join(manifest.outputPath, "prisma");
347
+ context.logger.debug(`Copying the prisma directory from ${prismaDir} to ${prismaDestinationPath}`);
348
+ const prismaDirForFilter = prismaDir;
349
+ await cp(prismaDir, prismaDestinationPath, {
350
+ recursive: true,
351
+ // Filter out migrations and sql directories as they're handled separately if needed
352
+ filter: (source) => {
353
+ const relativePath = source.replace(prismaDirForFilter, "");
354
+ // Skip migrations and sql directories during initial copy
355
+ return !relativePath.startsWith("/migrations") && !relativePath.startsWith("/sql");
356
+ },
357
+ });
358
+ commands.push(`${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js generate ${generatorFlags.join(" ")}` // Don't add the --schema flag when using directory
359
+ );
360
+ }
361
+ else if (usingSchemaFolder) {
362
+ const schemaDir = dirname(this._resolvedSchemaPath);
363
+ prismaDir = dirname(schemaDir);
364
+ context.logger.debug(`Using the schema folder: ${schemaDir}`);
365
+ // Find all the files in schemaDir that end with .prisma (excluding the schema.prisma file)
366
+ const prismaFiles = await readdir(schemaDir).then((files) => files.filter((file) => file.endsWith(".prisma")));
367
+ context.logger.debug(`Found prisma files in the schema folder`, {
368
+ prismaFiles,
369
+ });
370
+ const schemaDestinationPath = join(manifest.outputPath, "prisma", "schema");
371
+ const allPrismaFiles = [...prismaFiles];
372
+ for (const file of allPrismaFiles) {
373
+ const destination = join(schemaDestinationPath, file);
374
+ const source = join(schemaDir, file);
375
+ context.logger.debug(`Copying the prisma schema from ${source} to ${destination}`);
376
+ await cp(source, destination);
377
+ }
378
+ commands.push(`${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js generate ${generatorFlags.join(" ")}` // Don't add the --schema flag or this will fail
379
+ );
380
+ }
381
+ else {
382
+ prismaDir = dirname(this._resolvedSchemaPath);
383
+ // Now we need to add a layer that:
384
+ // Copies the prisma schema to the build outputPath
385
+ // Adds the `prisma` CLI dependency to the dependencies
386
+ // Adds the `prisma generate` command, which generates the Prisma client
387
+ const schemaDestinationPath = join(manifest.outputPath, "prisma", "schema.prisma");
388
+ // Copy the prisma schema to the build output path
389
+ context.logger.debug(`Copying the prisma schema from ${this._resolvedSchemaPath} to ${schemaDestinationPath}`);
390
+ await cp(this._resolvedSchemaPath, schemaDestinationPath);
391
+ commands.push(`${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js generate --schema=./prisma/schema.prisma ${generatorFlags.join(" ")}`);
392
+ }
393
+ const env = {};
394
+ context.logger.debug(`[PrismaExtension] Checking if migrations are enabled`, {
395
+ migrate: this.options.migrate,
396
+ loadedConfigMigrationsPath: this._loadedConfig?.migrationsPath,
397
+ prismaDir,
398
+ });
399
+ if (this.options.migrate) {
400
+ context.logger.debug(`[PrismaExtension] Migrations enabled, determining migrations directory`);
401
+ // Determine the migrations directory path
402
+ let migrationsDir;
403
+ if (this._loadedConfig?.migrationsPath) {
404
+ // Use the migrations path from the config file
405
+ migrationsDir = resolve(context.workingDir, this._loadedConfig.migrationsPath);
406
+ context.logger.debug(`[PrismaExtension] Using migrations path from config`, {
407
+ configMigrationsPath: this._loadedConfig.migrationsPath,
408
+ resolvedMigrationsDir: migrationsDir,
409
+ workingDir: context.workingDir,
410
+ });
411
+ }
412
+ else {
413
+ // Fall back to the default migrations directory
414
+ migrationsDir = join(prismaDir, "migrations");
415
+ context.logger.debug(`[PrismaExtension] Using default migrations path`, {
416
+ prismaDir,
417
+ migrationsDir,
418
+ });
419
+ }
420
+ const migrationsDestinationPath = join(manifest.outputPath, "prisma", "migrations");
421
+ context.logger.debug(`[PrismaExtension] Checking if migrations directory exists`, {
422
+ migrationsDir,
423
+ exists: existsSync(migrationsDir),
424
+ });
425
+ if (!existsSync(migrationsDir)) {
426
+ context.logger.warn(`[PrismaExtension] Migrations directory not found at ${migrationsDir}. Skipping migrations copy.`);
427
+ }
428
+ else {
429
+ context.logger.debug(`[PrismaExtension] Copying prisma migrations from ${migrationsDir} to ${migrationsDestinationPath}`);
430
+ await cp(migrationsDir, migrationsDestinationPath, { recursive: true });
431
+ context.logger.debug(`[PrismaExtension] Migrations copied successfully`);
432
+ commands = [
433
+ `${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js migrate deploy`,
434
+ ...commands,
435
+ ];
436
+ context.logger.debug(`[PrismaExtension] Added migrate deploy command to commands array`);
437
+ }
438
+ }
439
+ else {
440
+ context.logger.debug(`[PrismaExtension] Migrations not enabled (migrate: ${this.options.migrate})`);
441
+ }
442
+ env.DATABASE_URL = manifest.deploy.env?.DATABASE_URL;
443
+ // Handle directUrl environment variable configuration
444
+ if (this.options.directUrlEnvVarName) {
445
+ env[this.options.directUrlEnvVarName] =
446
+ manifest.deploy.env?.[this.options.directUrlEnvVarName] ??
447
+ process.env[this.options.directUrlEnvVarName];
448
+ if (!env[this.options.directUrlEnvVarName]) {
449
+ context.logger.warn(`prismaExtension could not resolve the ${this.options.directUrlEnvVarName} environment variable. Make sure you add it to your environment variables or provide it as an environment variable to the deploy CLI command. See our docs for more info: https://trigger.dev/docs/deploy-environment-variables`);
450
+ }
451
+ }
452
+ else {
453
+ env.DIRECT_URL = manifest.deploy.env?.DIRECT_URL;
454
+ env.DIRECT_DATABASE_URL = manifest.deploy.env?.DIRECT_DATABASE_URL;
455
+ }
456
+ if (!env.DATABASE_URL) {
457
+ context.logger.warn(`prismaExtension could not resolve the DATABASE_URL environment variable. Make sure you add it to your environment variables. See our docs for more info: https://trigger.dev/docs/deploy-environment-variables`);
458
+ }
459
+ context.logger.debug(`[PrismaExtension] Final layer configuration`, {
460
+ commands,
461
+ commandsCount: commands.length,
462
+ env: Object.keys(env),
463
+ dependencies: {
464
+ prisma: version,
465
+ },
466
+ });
467
+ context.logger.debug(`[PrismaExtension] Commands to be executed:`, {
468
+ commands: commands.map((cmd, idx) => `${idx + 1}. ${cmd}`),
469
+ });
470
+ context.addLayer({
471
+ id: "prisma",
472
+ commands,
473
+ dependencies: {
474
+ prisma: version,
475
+ },
476
+ build: {
477
+ env,
478
+ },
479
+ });
480
+ context.logger.debug(`[PrismaExtension] Layer added successfully`);
481
+ }
482
+ }
483
+ export class PrismaEngineOnlyModeExtension {
484
+ options;
485
+ name = "PrismaEngineOnlyModeExtension";
486
+ _binaryTarget;
487
+ constructor(options) {
488
+ this.options = options;
489
+ this._binaryTarget = options.binaryTarget ?? "debian-openssl-3.0.x";
490
+ }
491
+ async onBuildComplete(context, manifest) {
492
+ if (context.target === "dev") {
493
+ return;
494
+ }
495
+ // Try to detect the version if not provided
496
+ let version = this.options.version;
497
+ if (!version) {
498
+ context.logger.debug("Attempting to detect @prisma/client version from the project");
499
+ version = await resolvePrismaClientVersion(context.workingDir, context.logger);
500
+ if (version) {
501
+ // Log a nice message to the user which version was detected, and give them instructions on how to override it
502
+ context.logger.progress(`prismaExtension: detected prisma ${version}. Override via prismaExtension({ mode: "engine-only", version: "6.19.0" })`);
503
+ }
504
+ }
505
+ if (!version) {
506
+ throw new Error(`PrismaEngineOnlyModeExtension could not determine the version of @prisma/client. Please provide a version in the PrismaExtension options: prismaExtension({ mode: "engine-only", version: "6.19.0" })`);
507
+ }
508
+ context.logger.debug(`PrismaEngineOnlyModeExtension is installing engines for version ${version}`);
509
+ const commands = [
510
+ // Install the engines package
511
+ `npm install @prisma/engines@${version}`,
512
+ ...generateCpCommandsForLocation("/app/prisma-engines", this._binaryTarget),
513
+ ];
514
+ context.addLayer({
515
+ id: "prisma-engines",
516
+ commands,
517
+ deploy: {
518
+ env: {
519
+ PRISMA_QUERY_ENGINE_LIBRARY: `/app/prisma-engines/libquery_engine-${this._binaryTarget}.so.node`,
520
+ PRISMA_QUERY_ENGINE_SCHEMA_ENGINE: `/app/prisma-engines/schema-engine-${this._binaryTarget}`,
521
+ },
522
+ },
523
+ });
524
+ if (!this.options.silent) {
525
+ context.logger.progress("prismaExtension: setting PRISMA_QUERY_ENGINE_LIBRARY and PRISMA_QUERY_ENGINE_SCHEMA_ENGINE env variables");
526
+ // Now logs output a pretty message to the user that they need to make sure they have already run `prisma generate` and they also have added
527
+ // the binary target to the prisma schema file like so: binaryTargets = ["native", "debian-openssl-3.0.x"]
528
+ context.logger.progress(`prismaExtension: in engine-only mode you are required to run \`prisma generate\` and ensure your schema.prisma file has binaryTargets = ["native", "${this._binaryTarget}"]`);
529
+ }
530
+ }
531
+ }
532
+ function generateCpCommandsForLocation(location, binaryTarget) {
533
+ return [
534
+ `mkdir -p ${location} && cp node_modules/@prisma/engines/libquery_engine-${binaryTarget}.so.node ${location}/`,
535
+ `mkdir -p ${location} && cp node_modules/@prisma/engines/schema-engine-${binaryTarget} ${location}/`,
536
+ ];
537
+ }
538
+ export class PrismaEngineModernModeExtension {
539
+ options;
540
+ moduleExternals;
541
+ name = "PrismaEngineModernModeExtension";
542
+ constructor(options) {
543
+ this.options = options;
544
+ this.moduleExternals = ["@prisma/client"];
545
+ }
546
+ externalsForTarget(target) {
547
+ return this.moduleExternals;
548
+ }
549
+ }
550
+ //# sourceMappingURL=prisma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../../src/extensions/prisma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { BuildManifest } from "@trigger.dev/core/v3";
2
+ import { BuildContext, BuildExtension } from "@trigger.dev/core/v3/build";
3
+ export declare function puppeteer(): PuppeteerExtension;
4
+ declare class PuppeteerExtension implements BuildExtension {
5
+ readonly name = "PuppeteerExtension";
6
+ onBuildComplete(context: BuildContext, manifest: BuildManifest): Promise<void>;
7
+ }
8
+ export {};
@@ -0,0 +1,33 @@
1
+ export function puppeteer() {
2
+ return new PuppeteerExtension();
3
+ }
4
+ class PuppeteerExtension {
5
+ name = "PuppeteerExtension";
6
+ async onBuildComplete(context, manifest) {
7
+ if (context.target === "dev") {
8
+ return;
9
+ }
10
+ context.logger.debug(`Adding ${this.name} to the build`);
11
+ const instructions = [
12
+ `RUN apt-get update && apt-get install curl gnupg -y \
13
+ && curl --location --silent https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
14
+ && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
15
+ && apt-get update \
16
+ && apt-get install google-chrome-stable -y --no-install-recommends \
17
+ && rm -rf /var/lib/apt/lists/*`,
18
+ ];
19
+ context.addLayer({
20
+ id: "puppeteer",
21
+ image: {
22
+ instructions,
23
+ },
24
+ deploy: {
25
+ env: {
26
+ PUPPETEER_EXECUTABLE_PATH: "/usr/bin/google-chrome-stable",
27
+ },
28
+ override: true,
29
+ },
30
+ });
31
+ }
32
+ }
33
+ //# sourceMappingURL=puppeteer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../../../src/extensions/puppeteer.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,kBAAkB;IACN,IAAI,GAAG,oBAAoB,CAAC;IAE5C,KAAK,CAAC,eAAe,CAAC,OAAqB,EAAE,QAAuB;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG;YACnB;;;;;iCAK2B;SAC5B,CAAC;QAEF,OAAO,CAAC,QAAQ,CAAC;YACf,EAAE,EAAE,WAAW;YACf,KAAK,EAAE;gBACL,YAAY;aACb;YACD,MAAM,EAAE;gBACN,GAAG,EAAE;oBACH,yBAAyB,EAAE,+BAA+B;iBAC3D;gBACD,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import { BuildExtension } from "@trigger.dev/core/v3/build";
2
+ export type SecureExecOptions = {
3
+ /**
4
+ * Packages available inside the sandbox at runtime.
5
+ *
6
+ * These are `require()`'d inside the V8 isolate at runtime — the bundler
7
+ * never sees them statically. They are marked external and installed as
8
+ * deploy dependencies.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * secureExec({ packages: ["jszip", "lodash"] })
13
+ * ```
14
+ */
15
+ packages?: string[];
16
+ };
17
+ /**
18
+ * Build extension for [secure-exec](https://secureexec.dev) — run untrusted
19
+ * JavaScript/TypeScript in V8 isolates with configurable permissions.
20
+ *
21
+ * Handles the esbuild workarounds needed for secure-exec's runtime
22
+ * `require.resolve` calls, native binaries, and module-scope resolution.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { secureExec } from "@trigger.dev/build/extensions/secureExec";
27
+ *
28
+ * export default defineConfig({
29
+ * build: {
30
+ * extensions: [secureExec()],
31
+ * },
32
+ * });
33
+ * ```
34
+ */
35
+ export declare function secureExec(options?: SecureExecOptions): BuildExtension;