@trigger.dev/build 4.5.13 → 4.5.15

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trigger.dev/build",
3
- "version": "4.5.13",
3
+ "version": "4.5.15",
4
4
  "description": "trigger.dev build extensions",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -17,6 +17,9 @@
17
17
  ],
18
18
  "tshy": {
19
19
  "selfLink": false,
20
+ "exclude": [
21
+ "src/**/*.test.ts"
22
+ ],
20
23
  "main": true,
21
24
  "module": true,
22
25
  "project": "./tsconfig.src.json",
@@ -70,7 +73,7 @@
70
73
  },
71
74
  "dependencies": {
72
75
  "@prisma/config": "^6.10.0",
73
- "@trigger.dev/core": "4.5.13",
76
+ "@trigger.dev/core": "4.5.15",
74
77
  "mlly": "^1.7.1",
75
78
  "pkg-types": "^1.1.3",
76
79
  "tinyglobby": "^0.2.2",
@@ -1 +0,0 @@
1
- export {};
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const syncEnvVars_js_1 = require("./syncEnvVars.js");
5
- async function runExtension(fn) {
6
- let captured;
7
- const context = {
8
- target: "deploy",
9
- config: { project: "proj_test" },
10
- logger: {
11
- spinner: () => ({ stop: () => { } }),
12
- },
13
- addLayer: (layer) => {
14
- captured = layer;
15
- },
16
- };
17
- const manifest = {
18
- deploy: { env: {} },
19
- environment: "prod",
20
- branch: undefined,
21
- };
22
- const extension = (0, syncEnvVars_js_1.syncEnvVars)(fn);
23
- await extension.onBuildComplete(context, manifest);
24
- return captured;
25
- }
26
- (0, vitest_1.describe)("syncEnvVars isSecret", () => {
27
- (0, vitest_1.it)("partitions secret and non-secret vars across child and parent", async () => {
28
- const layer = await runExtension(() => [
29
- { name: "PUBLIC_URL", value: "https://example.com" },
30
- { name: "API_KEY", value: "secret-key", isSecret: true },
31
- { name: "PARENT_PUBLIC", value: "parent", isParentEnv: true },
32
- { name: "PARENT_SECRET", value: "parent-secret", isParentEnv: true, isSecret: true },
33
- ]);
34
- (0, vitest_1.expect)(layer?.deploy?.env).toEqual({ PUBLIC_URL: "https://example.com" });
35
- (0, vitest_1.expect)(layer?.deploy?.secretEnv).toEqual({ API_KEY: "secret-key" });
36
- (0, vitest_1.expect)(layer?.deploy?.parentEnv).toEqual({ PARENT_PUBLIC: "parent" });
37
- (0, vitest_1.expect)(layer?.deploy?.secretParentEnv).toEqual({ PARENT_SECRET: "parent-secret" });
38
- });
39
- (0, vitest_1.it)("treats the record form as all non-secret", async () => {
40
- const layer = await runExtension(() => ({ DATABASE_URL: "postgres://..." }));
41
- (0, vitest_1.expect)(layer?.deploy?.env).toEqual({ DATABASE_URL: "postgres://..." });
42
- (0, vitest_1.expect)(layer?.deploy?.secretEnv).toBeUndefined();
43
- (0, vitest_1.expect)(layer?.deploy?.secretParentEnv).toBeUndefined();
44
- });
45
- (0, vitest_1.it)("omits secret buckets when no var is marked secret", async () => {
46
- const layer = await runExtension(() => [{ name: "PUBLIC_URL", value: "https://example.com" }]);
47
- (0, vitest_1.expect)(layer?.deploy?.env).toEqual({ PUBLIC_URL: "https://example.com" });
48
- (0, vitest_1.expect)(layer?.deploy?.secretEnv).toBeUndefined();
49
- (0, vitest_1.expect)(layer?.deploy?.secretParentEnv).toBeUndefined();
50
- });
51
- });
52
- //# sourceMappingURL=syncEnvVars.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncEnvVars.test.js","sourceRoot":"","sources":["../../../../src/extensions/core/syncEnvVars.test.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_module_1 = require("node:module");
4
- const node_fs_1 = require("node:fs");
5
- const node_os_1 = require("node:os");
6
- const node_path_1 = require("node:path");
7
- const vitest_1 = require("vitest");
8
- const loadTypescript_js_1 = require("./loadTypescript.js");
9
- const packageRequire = (0, node_module_1.createRequire)((0, node_path_1.join)(process.cwd(), "package.json"));
10
- const projectDirs = new Set();
11
- function createProject(packages) {
12
- const projectDir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "trigger-typescript-"));
13
- projectDirs.add(projectDir);
14
- const nodeModulesDir = (0, node_path_1.join)(projectDir, "node_modules");
15
- (0, node_fs_1.mkdirSync)(nodeModulesDir);
16
- (0, node_fs_1.writeFileSync)((0, node_path_1.join)(projectDir, "package.json"), JSON.stringify({ private: true }));
17
- for (const [installedName, sourceName] of Object.entries(packages)) {
18
- const target = (0, node_path_1.dirname)(packageRequire.resolve(`${sourceName}/package.json`));
19
- const destination = (0, node_path_1.join)(nodeModulesDir, installedName);
20
- (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(destination), { recursive: true });
21
- (0, node_fs_1.symlinkSync)(target, destination, "junction");
22
- }
23
- return projectDir;
24
- }
25
- function createBrokenCompiler(projectDir, packageName = "typescript") {
26
- const packageDir = (0, node_path_1.join)(projectDir, "node_modules", packageName);
27
- (0, node_fs_1.mkdirSync)(packageDir, { recursive: true });
28
- (0, node_fs_1.writeFileSync)((0, node_path_1.join)(packageDir, "package.json"), JSON.stringify({ name: packageName, main: "index.cjs" }));
29
- (0, node_fs_1.writeFileSync)((0, node_path_1.join)(packageDir, "index.cjs"), 'throw new Error("broken compiler");');
30
- }
31
- (0, vitest_1.describe)("loadTypescript", () => {
32
- (0, vitest_1.afterEach)(() => {
33
- for (const projectDir of projectDirs) {
34
- (0, node_fs_1.rmSync)(projectDir, { recursive: true, force: true });
35
- }
36
- projectDirs.clear();
37
- });
38
- (0, vitest_1.it)("loads the consumer's TypeScript 5 compiler", () => {
39
- const compiler = (0, loadTypescript_js_1.loadTypescript)(createProject({ typescript: "typescript5" }));
40
- (0, vitest_1.expect)(compiler.version).toMatch(/^5\./);
41
- (0, vitest_1.expect)(typeof compiler.transpileModule).toBe("function");
42
- });
43
- (0, vitest_1.it)("loads the consumer's TypeScript 6 compiler", () => {
44
- const compiler = (0, loadTypescript_js_1.loadTypescript)(createProject({ typescript: "typescript" }));
45
- (0, vitest_1.expect)(compiler.version).toMatch(/^6\./);
46
- (0, vitest_1.expect)(typeof compiler.transpileModule).toBe("function");
47
- });
48
- (0, vitest_1.it)("returns an actionable error for TypeScript 7 without the compatibility package", () => {
49
- const projectDir = createProject({ typescript: "typescript7" });
50
- const requireFromProject = (0, node_module_1.createRequire)((0, node_path_1.join)(projectDir, "package.json"));
51
- (0, vitest_1.expect)(typeof requireFromProject("typescript").transpileModule).toBe("undefined");
52
- (0, vitest_1.expect)(() => (0, loadTypescript_js_1.loadTypescript)(projectDir, ["typescript"])).toThrowError(vitest_1.expect.objectContaining({
53
- message: vitest_1.expect.stringContaining("npm install --save-dev @typescript/typescript6"),
54
- }));
55
- });
56
- (0, vitest_1.it)("surfaces errors from an installed compiler package", () => {
57
- const projectDir = createProject({});
58
- createBrokenCompiler(projectDir);
59
- (0, vitest_1.expect)(() => (0, loadTypescript_js_1.loadTypescript)(projectDir, ["typescript"])).toThrowError(`Failed to load "typescript" from ${projectDir}.`);
60
- });
61
- (0, vitest_1.it)("falls back when an earlier compiler package fails to load", () => {
62
- const projectDir = createProject({
63
- "@typescript/typescript6": "@typescript/typescript6",
64
- });
65
- createBrokenCompiler(projectDir);
66
- const compiler = (0, loadTypescript_js_1.loadTypescript)(projectDir);
67
- (0, vitest_1.expect)(compiler.version).toMatch(/^6\./);
68
- (0, vitest_1.expect)(typeof compiler.transpileModule).toBe("function");
69
- });
70
- (0, vitest_1.it)("falls back to the TypeScript 6 compatibility package for TypeScript 7", () => {
71
- const compiler = (0, loadTypescript_js_1.loadTypescript)(createProject({
72
- typescript: "typescript7",
73
- "@typescript/typescript6": "@typescript/typescript6",
74
- }));
75
- const output = compiler.transpileModule(`
76
- class Dependency {}
77
- function injectable<T extends new (...args: any[]) => object>(target: T) {}
78
-
79
- @injectable
80
- class Service {
81
- constructor(public dependency: Dependency) {}
82
- }
83
- `, {
84
- compilerOptions: {
85
- experimentalDecorators: true,
86
- emitDecoratorMetadata: true,
87
- },
88
- }).outputText;
89
- (0, vitest_1.expect)(compiler.version).toMatch(/^6\./);
90
- (0, vitest_1.expect)(output).toContain('__metadata("design:paramtypes", [Dependency])');
91
- });
92
- (0, vitest_1.it)("supports aliasing TypeScript to the compatibility package", () => {
93
- const compiler = (0, loadTypescript_js_1.loadTypescript)(createProject({ typescript: "@typescript/typescript6" }));
94
- (0, vitest_1.expect)(compiler.version).toMatch(/^6\./);
95
- (0, vitest_1.expect)(typeof compiler.transpileModule).toBe("function");
96
- });
97
- });
98
- //# sourceMappingURL=loadTypescript.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadTypescript.test.js","sourceRoot":"","sources":["../../../../src/extensions/internal/loadTypescript.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,50 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { syncEnvVars } from "./syncEnvVars.js";
3
- async function runExtension(fn) {
4
- let captured;
5
- const context = {
6
- target: "deploy",
7
- config: { project: "proj_test" },
8
- logger: {
9
- spinner: () => ({ stop: () => { } }),
10
- },
11
- addLayer: (layer) => {
12
- captured = layer;
13
- },
14
- };
15
- const manifest = {
16
- deploy: { env: {} },
17
- environment: "prod",
18
- branch: undefined,
19
- };
20
- const extension = syncEnvVars(fn);
21
- await extension.onBuildComplete(context, manifest);
22
- return captured;
23
- }
24
- describe("syncEnvVars isSecret", () => {
25
- it("partitions secret and non-secret vars across child and parent", async () => {
26
- const layer = await runExtension(() => [
27
- { name: "PUBLIC_URL", value: "https://example.com" },
28
- { name: "API_KEY", value: "secret-key", isSecret: true },
29
- { name: "PARENT_PUBLIC", value: "parent", isParentEnv: true },
30
- { name: "PARENT_SECRET", value: "parent-secret", isParentEnv: true, isSecret: true },
31
- ]);
32
- expect(layer?.deploy?.env).toEqual({ PUBLIC_URL: "https://example.com" });
33
- expect(layer?.deploy?.secretEnv).toEqual({ API_KEY: "secret-key" });
34
- expect(layer?.deploy?.parentEnv).toEqual({ PARENT_PUBLIC: "parent" });
35
- expect(layer?.deploy?.secretParentEnv).toEqual({ PARENT_SECRET: "parent-secret" });
36
- });
37
- it("treats the record form as all non-secret", async () => {
38
- const layer = await runExtension(() => ({ DATABASE_URL: "postgres://..." }));
39
- expect(layer?.deploy?.env).toEqual({ DATABASE_URL: "postgres://..." });
40
- expect(layer?.deploy?.secretEnv).toBeUndefined();
41
- expect(layer?.deploy?.secretParentEnv).toBeUndefined();
42
- });
43
- it("omits secret buckets when no var is marked secret", async () => {
44
- const layer = await runExtension(() => [{ name: "PUBLIC_URL", value: "https://example.com" }]);
45
- expect(layer?.deploy?.env).toEqual({ PUBLIC_URL: "https://example.com" });
46
- expect(layer?.deploy?.secretEnv).toBeUndefined();
47
- expect(layer?.deploy?.secretParentEnv).toBeUndefined();
48
- });
49
- });
50
- //# sourceMappingURL=syncEnvVars.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncEnvVars.test.js","sourceRoot":"","sources":["../../../../src/extensions/core/syncEnvVars.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,96 +0,0 @@
1
- import { createRequire } from "node:module";
2
- import { mkdtempSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
3
- import { tmpdir } from "node:os";
4
- import { dirname, join } from "node:path";
5
- import { afterEach, describe, expect, it } from "vitest";
6
- import { loadTypescript } from "./loadTypescript.js";
7
- const packageRequire = createRequire(join(process.cwd(), "package.json"));
8
- const projectDirs = new Set();
9
- function createProject(packages) {
10
- const projectDir = mkdtempSync(join(tmpdir(), "trigger-typescript-"));
11
- projectDirs.add(projectDir);
12
- const nodeModulesDir = join(projectDir, "node_modules");
13
- mkdirSync(nodeModulesDir);
14
- writeFileSync(join(projectDir, "package.json"), JSON.stringify({ private: true }));
15
- for (const [installedName, sourceName] of Object.entries(packages)) {
16
- const target = dirname(packageRequire.resolve(`${sourceName}/package.json`));
17
- const destination = join(nodeModulesDir, installedName);
18
- mkdirSync(dirname(destination), { recursive: true });
19
- symlinkSync(target, destination, "junction");
20
- }
21
- return projectDir;
22
- }
23
- function createBrokenCompiler(projectDir, packageName = "typescript") {
24
- const packageDir = join(projectDir, "node_modules", packageName);
25
- mkdirSync(packageDir, { recursive: true });
26
- writeFileSync(join(packageDir, "package.json"), JSON.stringify({ name: packageName, main: "index.cjs" }));
27
- writeFileSync(join(packageDir, "index.cjs"), 'throw new Error("broken compiler");');
28
- }
29
- describe("loadTypescript", () => {
30
- afterEach(() => {
31
- for (const projectDir of projectDirs) {
32
- rmSync(projectDir, { recursive: true, force: true });
33
- }
34
- projectDirs.clear();
35
- });
36
- it("loads the consumer's TypeScript 5 compiler", () => {
37
- const compiler = loadTypescript(createProject({ typescript: "typescript5" }));
38
- expect(compiler.version).toMatch(/^5\./);
39
- expect(typeof compiler.transpileModule).toBe("function");
40
- });
41
- it("loads the consumer's TypeScript 6 compiler", () => {
42
- const compiler = loadTypescript(createProject({ typescript: "typescript" }));
43
- expect(compiler.version).toMatch(/^6\./);
44
- expect(typeof compiler.transpileModule).toBe("function");
45
- });
46
- it("returns an actionable error for TypeScript 7 without the compatibility package", () => {
47
- const projectDir = createProject({ typescript: "typescript7" });
48
- const requireFromProject = createRequire(join(projectDir, "package.json"));
49
- expect(typeof requireFromProject("typescript").transpileModule).toBe("undefined");
50
- expect(() => loadTypescript(projectDir, ["typescript"])).toThrowError(expect.objectContaining({
51
- message: expect.stringContaining("npm install --save-dev @typescript/typescript6"),
52
- }));
53
- });
54
- it("surfaces errors from an installed compiler package", () => {
55
- const projectDir = createProject({});
56
- createBrokenCompiler(projectDir);
57
- expect(() => loadTypescript(projectDir, ["typescript"])).toThrowError(`Failed to load "typescript" from ${projectDir}.`);
58
- });
59
- it("falls back when an earlier compiler package fails to load", () => {
60
- const projectDir = createProject({
61
- "@typescript/typescript6": "@typescript/typescript6",
62
- });
63
- createBrokenCompiler(projectDir);
64
- const compiler = loadTypescript(projectDir);
65
- expect(compiler.version).toMatch(/^6\./);
66
- expect(typeof compiler.transpileModule).toBe("function");
67
- });
68
- it("falls back to the TypeScript 6 compatibility package for TypeScript 7", () => {
69
- const compiler = loadTypescript(createProject({
70
- typescript: "typescript7",
71
- "@typescript/typescript6": "@typescript/typescript6",
72
- }));
73
- const output = compiler.transpileModule(`
74
- class Dependency {}
75
- function injectable<T extends new (...args: any[]) => object>(target: T) {}
76
-
77
- @injectable
78
- class Service {
79
- constructor(public dependency: Dependency) {}
80
- }
81
- `, {
82
- compilerOptions: {
83
- experimentalDecorators: true,
84
- emitDecoratorMetadata: true,
85
- },
86
- }).outputText;
87
- expect(compiler.version).toMatch(/^6\./);
88
- expect(output).toContain('__metadata("design:paramtypes", [Dependency])');
89
- });
90
- it("supports aliasing TypeScript to the compatibility package", () => {
91
- const compiler = loadTypescript(createProject({ typescript: "@typescript/typescript6" }));
92
- expect(compiler.version).toMatch(/^6\./);
93
- expect(typeof compiler.transpileModule).toBe("function");
94
- });
95
- });
96
- //# sourceMappingURL=loadTypescript.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadTypescript.test.js","sourceRoot":"","sources":["../../../../src/extensions/internal/loadTypescript.test.ts"],"names":[],"mappings":"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"}