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