@prisma/compute-sdk 0.25.0 → 0.27.0

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 (71) hide show
  1. package/dist/artifact-stage.d.ts +24 -0
  2. package/dist/artifact-stage.d.ts.map +1 -0
  3. package/dist/artifact-stage.js +165 -0
  4. package/dist/artifact-stage.js.map +1 -0
  5. package/dist/astro-build.d.ts +2 -0
  6. package/dist/astro-build.d.ts.map +1 -1
  7. package/dist/astro-build.js +10 -1
  8. package/dist/astro-build.js.map +1 -1
  9. package/dist/auto-build.d.ts +7 -4
  10. package/dist/auto-build.d.ts.map +1 -1
  11. package/dist/auto-build.js +25 -33
  12. package/dist/auto-build.js.map +1 -1
  13. package/dist/build-settings.d.ts +55 -0
  14. package/dist/build-settings.d.ts.map +1 -0
  15. package/dist/build-settings.js +301 -0
  16. package/dist/build-settings.js.map +1 -0
  17. package/dist/build-strategy.d.ts +4 -0
  18. package/dist/build-strategy.d.ts.map +1 -1
  19. package/dist/build-strategy.js +13 -20
  20. package/dist/build-strategy.js.map +1 -1
  21. package/dist/build.d.ts +45 -0
  22. package/dist/build.d.ts.map +1 -0
  23. package/dist/build.js +86 -0
  24. package/dist/build.js.map +1 -0
  25. package/dist/bun-build.d.ts +8 -0
  26. package/dist/bun-build.d.ts.map +1 -1
  27. package/dist/bun-build.js +49 -23
  28. package/dist/bun-build.js.map +1 -1
  29. package/dist/config/frameworks.d.ts +8 -1
  30. package/dist/config/frameworks.d.ts.map +1 -1
  31. package/dist/config/frameworks.js +28 -0
  32. package/dist/config/frameworks.js.map +1 -1
  33. package/dist/config/index.d.ts +1 -1
  34. package/dist/config/index.d.ts.map +1 -1
  35. package/dist/config/index.js +1 -1
  36. package/dist/config/index.js.map +1 -1
  37. package/dist/index.d.ts +4 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +4 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/nextjs-build.d.ts +12 -2
  42. package/dist/nextjs-build.d.ts.map +1 -1
  43. package/dist/nextjs-build.js +158 -76
  44. package/dist/nextjs-build.js.map +1 -1
  45. package/dist/nuxt-build.d.ts +2 -0
  46. package/dist/nuxt-build.d.ts.map +1 -1
  47. package/dist/nuxt-build.js +10 -1
  48. package/dist/nuxt-build.js.map +1 -1
  49. package/dist/tanstack-start-build.d.ts +6 -1
  50. package/dist/tanstack-start-build.d.ts.map +1 -1
  51. package/dist/tanstack-start-build.js +39 -16
  52. package/dist/tanstack-start-build.js.map +1 -1
  53. package/dist/workspace.d.ts +90 -0
  54. package/dist/workspace.d.ts.map +1 -0
  55. package/dist/workspace.js +205 -0
  56. package/dist/workspace.js.map +1 -0
  57. package/package.json +4 -3
  58. package/src/artifact-stage.ts +280 -0
  59. package/src/astro-build.ts +13 -2
  60. package/src/auto-build.ts +28 -34
  61. package/src/build-settings.ts +430 -0
  62. package/src/build-strategy.ts +22 -29
  63. package/src/build.ts +124 -0
  64. package/src/bun-build.ts +62 -27
  65. package/src/config/frameworks.ts +38 -0
  66. package/src/config/index.ts +1 -0
  67. package/src/index.ts +28 -0
  68. package/src/nextjs-build.ts +208 -104
  69. package/src/nuxt-build.ts +13 -2
  70. package/src/tanstack-start-build.ts +48 -19
  71. package/src/workspace.ts +319 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Stages a framework's standalone output (e.g. Next.js `.next/standalone`)
3
+ * into a deployable artifact directory, materializing the symlinks the output
4
+ * carries into the workspace `node_modules` and hoisting isolated-store
5
+ * dependencies (pnpm `.pnpm`, bun `.bun`) so Node resolution works once the
6
+ * artifact is unpacked elsewhere.
7
+ *
8
+ * Location-agnostic: the workspace boundary is resolved from `appPath`, not
9
+ * the current working directory.
10
+ */
11
+ export declare function stageStandaloneArtifact(options: {
12
+ standaloneDir: string;
13
+ artifactDir: string;
14
+ appPath: string;
15
+ signal?: AbortSignal;
16
+ }): Promise<void>;
17
+ /**
18
+ * pnpm and bun (isolated linker) both keep packages in a virtual store with a
19
+ * shared symlink farm (`.pnpm/node_modules`, `.bun/node_modules`). Hoist the
20
+ * farm entries to the artifact's `node_modules` root so Node-style resolution
21
+ * works after symlinks are materialized.
22
+ */
23
+ export declare function hoistIsolatedStoreDependencies(nodeModulesDir: string, signal?: AbortSignal): Promise<void>;
24
+ //# sourceMappingURL=artifact-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-stage.d.ts","sourceRoot":"","sources":["../src/artifact-stage.ts"],"names":[],"mappings":"AAaA;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAaD;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,165 @@
1
+ import { chmod, copyFile, lstat, mkdir, readdir, readlink, stat, } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { resolveSourceRoot } from "./config/source-root.js";
4
+ /**
5
+ * Stages a framework's standalone output (e.g. Next.js `.next/standalone`)
6
+ * into a deployable artifact directory, materializing the symlinks the output
7
+ * carries into the workspace `node_modules` and hoisting isolated-store
8
+ * dependencies (pnpm `.pnpm`, bun `.bun`) so Node resolution works once the
9
+ * artifact is unpacked elsewhere.
10
+ *
11
+ * Location-agnostic: the workspace boundary is resolved from `appPath`, not
12
+ * the current working directory.
13
+ */
14
+ export async function stageStandaloneArtifact(options) {
15
+ const standaloneRoot = path.resolve(options.standaloneDir);
16
+ const artifactRoot = path.resolve(options.artifactDir);
17
+ const appRoot = path.resolve(options.appPath);
18
+ const sourceRoot = await resolveSourceRoot(appRoot, options.signal);
19
+ await copyPathMaterializingSymlinks(standaloneRoot, artifactRoot, {
20
+ standaloneRoot,
21
+ appRoot,
22
+ sourceRoot,
23
+ signal: options.signal,
24
+ });
25
+ await hoistIsolatedStoreDependencies(path.join(artifactRoot, "node_modules"), options.signal);
26
+ }
27
+ /**
28
+ * pnpm and bun (isolated linker) both keep packages in a virtual store with a
29
+ * shared symlink farm (`.pnpm/node_modules`, `.bun/node_modules`). Hoist the
30
+ * farm entries to the artifact's `node_modules` root so Node-style resolution
31
+ * works after symlinks are materialized.
32
+ */
33
+ export async function hoistIsolatedStoreDependencies(nodeModulesDir, signal) {
34
+ await hoistStoreDependencies(nodeModulesDir, path.join(nodeModulesDir, ".pnpm", "node_modules"), signal);
35
+ await hoistStoreDependencies(nodeModulesDir, path.join(nodeModulesDir, ".bun", "node_modules"), signal);
36
+ }
37
+ async function hoistStoreDependencies(nodeModulesDir, storeNodeModulesDir, signal) {
38
+ if (!(await directoryExists(storeNodeModulesDir, signal))) {
39
+ return;
40
+ }
41
+ const entries = await readEntries(storeNodeModulesDir, signal);
42
+ for (const entry of entries) {
43
+ const sourcePath = path.join(storeNodeModulesDir, entry.name);
44
+ if (entry.name.startsWith("@") && entry.isDirectory()) {
45
+ const scopedEntries = await readEntries(sourcePath, signal);
46
+ for (const scopedEntry of scopedEntries) {
47
+ const scopedDestination = path.join(nodeModulesDir, entry.name, scopedEntry.name);
48
+ if (await pathExists(scopedDestination, signal)) {
49
+ continue;
50
+ }
51
+ signal?.throwIfAborted();
52
+ await mkdir(path.dirname(scopedDestination), { recursive: true });
53
+ await copyPathMaterializingSymlinks(path.join(sourcePath, scopedEntry.name), scopedDestination, storeMaterializeOptions(storeNodeModulesDir, nodeModulesDir, signal));
54
+ }
55
+ continue;
56
+ }
57
+ const destinationPath = path.join(nodeModulesDir, entry.name);
58
+ if (await pathExists(destinationPath, signal)) {
59
+ continue;
60
+ }
61
+ await copyPathMaterializingSymlinks(sourcePath, destinationPath, storeMaterializeOptions(storeNodeModulesDir, nodeModulesDir, signal));
62
+ }
63
+ }
64
+ function storeMaterializeOptions(storeNodeModulesDir, nodeModulesDir, signal) {
65
+ return {
66
+ standaloneRoot: storeNodeModulesDir,
67
+ appRoot: nodeModulesDir,
68
+ sourceRoot: nodeModulesDir,
69
+ signal,
70
+ };
71
+ }
72
+ async function copyPathMaterializingSymlinks(sourcePath, destinationPath, options) {
73
+ options.signal?.throwIfAborted();
74
+ const sourceStat = await lstat(sourcePath);
75
+ if (sourceStat.isSymbolicLink()) {
76
+ const resolvedTarget = await resolveSymlinkTarget(sourcePath, options);
77
+ if (resolvedTarget === null) {
78
+ return;
79
+ }
80
+ await copyPathMaterializingSymlinks(resolvedTarget, destinationPath, options);
81
+ return;
82
+ }
83
+ if (sourceStat.isDirectory()) {
84
+ await mkdir(destinationPath, { recursive: true });
85
+ const entries = await readEntries(sourcePath, options.signal);
86
+ for (const entry of entries) {
87
+ await copyPathMaterializingSymlinks(path.join(sourcePath, entry.name), path.join(destinationPath, entry.name), options);
88
+ }
89
+ return;
90
+ }
91
+ if (sourceStat.isFile()) {
92
+ await mkdir(path.dirname(destinationPath), { recursive: true });
93
+ await copyFile(sourcePath, destinationPath);
94
+ await chmod(destinationPath, sourceStat.mode);
95
+ }
96
+ }
97
+ async function resolveSymlinkTarget(symlinkPath, options) {
98
+ options.signal?.throwIfAborted();
99
+ const linkTarget = await readlink(symlinkPath);
100
+ const resolvedTarget = path.resolve(path.dirname(symlinkPath), linkTarget);
101
+ if (await pathExists(resolvedTarget, options.signal)) {
102
+ if (!isPathWithin(options.appRoot, resolvedTarget) &&
103
+ !isPathWithinWorkspaceDependency(options.sourceRoot, resolvedTarget)) {
104
+ throw new Error(`Build artifact symlink escapes the app directory: ${resolvedTarget}`);
105
+ }
106
+ return resolvedTarget;
107
+ }
108
+ if (isPathWithin(options.standaloneRoot, resolvedTarget)) {
109
+ const fallbackTarget = path.join(options.appRoot, path.relative(options.standaloneRoot, resolvedTarget));
110
+ if (await pathExists(fallbackTarget, options.signal)) {
111
+ return fallbackTarget;
112
+ }
113
+ }
114
+ // pnpm's hoist layer (.pnpm/node_modules/*) contains speculative links that
115
+ // are routinely dangling — Next's tracer doesn't always align with what pnpm
116
+ // populated. Drop these silently. Dangling links elsewhere still throw so a
117
+ // real missing dep doesn't get masked.
118
+ if (isPnpmHoistLink(symlinkPath)) {
119
+ return null;
120
+ }
121
+ throw new Error(`Standalone symlink target is missing: ${symlinkPath} -> ${linkTarget} (resolved to ${resolvedTarget})`);
122
+ }
123
+ function isPnpmHoistLink(symlinkPath) {
124
+ const parts = path.dirname(symlinkPath).split(path.sep);
125
+ for (let i = 0; i < parts.length - 1; i++) {
126
+ if (parts[i] === ".pnpm" && parts[i + 1] === "node_modules") {
127
+ return true;
128
+ }
129
+ }
130
+ return false;
131
+ }
132
+ function isPathWithin(rootPath, candidatePath) {
133
+ const relativePath = path.relative(rootPath, candidatePath);
134
+ return (relativePath === "" ||
135
+ (!relativePath.startsWith(`..${path.sep}`) &&
136
+ relativePath !== ".." &&
137
+ !path.isAbsolute(relativePath)));
138
+ }
139
+ function isPathWithinWorkspaceDependency(sourceRoot, candidatePath) {
140
+ return isPathWithin(path.join(sourceRoot, "node_modules"), candidatePath);
141
+ }
142
+ async function readEntries(directory, signal) {
143
+ signal?.throwIfAborted();
144
+ return readdir(directory, { withFileTypes: true });
145
+ }
146
+ async function pathExists(targetPath, signal) {
147
+ signal?.throwIfAborted();
148
+ try {
149
+ await stat(targetPath);
150
+ return true;
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
156
+ async function directoryExists(targetPath, signal) {
157
+ signal?.throwIfAborted();
158
+ try {
159
+ return (await stat(targetPath)).isDirectory();
160
+ }
161
+ catch {
162
+ return false;
163
+ }
164
+ }
165
+ //# sourceMappingURL=artifact-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-stage.js","sourceRoot":"","sources":["../src/artifact-stage.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
2
+ import type { BuildCommandIo } from "./workspace.ts";
2
3
  /**
3
4
  * Build strategy for Astro applications using the @astrojs/node adapter
4
5
  * in standalone mode. Runs `astro build` and produces an artifact from `dist/`.
@@ -7,6 +8,7 @@ export declare class AstroBuild implements BuildStrategy {
7
8
  #private;
8
9
  constructor(options: {
9
10
  appPath: string;
11
+ io?: BuildCommandIo;
10
12
  });
11
13
  canBuild(signal?: AbortSignal): Promise<boolean>;
12
14
  execute(signal?: AbortSignal): Promise<BuildArtifact>;
@@ -1 +1 @@
1
- {"version":3,"file":"astro-build.d.ts","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAexE;;;GAGG;AACH,qBAAa,UAAW,YAAW,aAAa;;gBAGlC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAIlC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAOhD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAyC5D"}
1
+ {"version":3,"file":"astro-build.d.ts","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUrD;;;GAGG;AACH,qBAAa,UAAW,YAAW,aAAa;;gBAIlC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,cAAc,CAAA;KAAE;IAKvD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAOhD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CA8C5D"}
@@ -1,7 +1,9 @@
1
1
  import { cp, mkdtemp, rm, stat } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
+ import { normalizeArtifactSymlinks } from "./artifact-postprocess.js";
4
5
  import { hasPackageDependency, hasRootFile, runPackageCli, } from "./build-strategy.js";
6
+ import { defaultHttpPortForBuildType } from "./config/frameworks.js";
5
7
  const ASTRO_CONFIG_FILENAMES = [
6
8
  "astro.config.js",
7
9
  "astro.config.mjs",
@@ -15,8 +17,10 @@ const ASTRO_CONFIG_FILENAMES = [
15
17
  */
16
18
  export class AstroBuild {
17
19
  #appPath;
20
+ #io;
18
21
  constructor(options) {
19
22
  this.#appPath = options.appPath;
23
+ this.#io = options.io;
20
24
  }
21
25
  async canBuild(signal) {
22
26
  return ((await hasRootFile(this.#appPath, ASTRO_CONFIG_FILENAMES, signal)) ||
@@ -30,6 +34,8 @@ export class AstroBuild {
30
34
  args: ["build"],
31
35
  failurePrefix: "Astro",
32
36
  missingMessage: "Could not find the Astro CLI. Install it with `npm install astro` or ensure npx/bunx is available.",
37
+ env: this.#io?.env,
38
+ onOutput: this.#io?.onOutput,
33
39
  signal,
34
40
  });
35
41
  const distDir = path.join(this.#appPath, "dist");
@@ -45,10 +51,13 @@ export class AstroBuild {
45
51
  recursive: true,
46
52
  verbatimSymlinks: true,
47
53
  });
54
+ // Materialize any symlinks into the app/workspace node_modules so the
55
+ // artifact is self-contained once unpacked elsewhere.
56
+ await normalizeArtifactSymlinks(artifactDir, this.#appPath, signal);
48
57
  return {
49
58
  directory: artifactDir,
50
59
  entrypoint: "server/entry.mjs",
51
- defaultPortMapping: { http: 4321 },
60
+ defaultPortMapping: { http: defaultHttpPortForBuildType("astro") },
52
61
  cleanup: () => rm(outDir, { recursive: true, force: true }),
53
62
  };
54
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"astro-build.js","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,sBAAsB,GAAG;IAC7B,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAS;IAE1B,YAAY,OAA4B;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAoB;QACjC,OAAO,CACL,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;YAClE,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAC/D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,aAAa,CAAC;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,OAAO,CAAC;YACf,aAAa,EAAE,OAAO;YACtB,cAAc,EACZ,oGAAoG;YACtG,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,0KAA0K,CAC3K,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE;gBAC7B,SAAS,EAAE,IAAI;gBACf,gBAAgB,EAAE,IAAI;aACvB,CAAC,CAAC;YAEH,OAAO;gBACL,SAAS,EAAE,WAAW;gBACtB,UAAU,EAAE,kBAAkB;gBAC9B,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;gBAClC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"astro-build.js","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,18 @@
1
+ import { type BuildStrategyHooks } from "./build.ts";
1
2
  import type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
2
3
  /**
3
- * Meta-strategy that auto-detects the appropriate build strategy.
4
- * Iterates over candidates and delegates to the first one that can handle the app.
4
+ * Meta-strategy that auto-detects the appropriate framework build strategy and
5
+ * delegates to it. Detection runs in registry order with bun as the universal
6
+ * fallback, so a buildable strategy always resolves. Use `resolveBuildStrategy`
7
+ * directly when the resolved build type is also needed.
5
8
  */
6
9
  export declare class AutoBuild implements BuildStrategy {
7
10
  #private;
8
11
  constructor(options: {
9
12
  appPath: string;
10
13
  entrypoint?: string;
11
- });
12
- canBuild(signal?: AbortSignal): Promise<boolean>;
14
+ } & BuildStrategyHooks);
15
+ canBuild(_signal?: AbortSignal): Promise<boolean>;
13
16
  execute(signal?: AbortSignal): Promise<BuildArtifact>;
14
17
  }
15
18
  //# sourceMappingURL=auto-build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-build.d.ts","sourceRoot":"","sources":["../src/auto-build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMxE;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;;gBAGjC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAavD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAS5D"}
1
+ {"version":3,"file":"auto-build.d.ts","sourceRoot":"","sources":["../src/auto-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAwB,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,SAAU,YAAW,aAAa;;gBAM3C,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB;IAUlE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAU5D"}
@@ -1,43 +1,35 @@
1
- import { AstroBuild } from "./astro-build.js";
2
- import { BunBuild } from "./bun-build.js";
3
- import { NextjsBuild } from "./nextjs-build.js";
4
- import { NuxtBuild } from "./nuxt-build.js";
5
- import { TanstackStartBuild } from "./tanstack-start-build.js";
1
+ import { resolveBuildStrategy } from "./build.js";
6
2
  /**
7
- * Meta-strategy that auto-detects the appropriate build strategy.
8
- * Iterates over candidates and delegates to the first one that can handle the app.
3
+ * Meta-strategy that auto-detects the appropriate framework build strategy and
4
+ * delegates to it. Detection runs in registry order with bun as the universal
5
+ * fallback, so a buildable strategy always resolves. Use `resolveBuildStrategy`
6
+ * directly when the resolved build type is also needed.
9
7
  */
10
8
  export class AutoBuild {
11
- #strategies;
9
+ #appPath;
10
+ #entrypoint;
11
+ #hooks;
12
12
  constructor(options) {
13
- this.#strategies = [
14
- new NextjsBuild({ appPath: options.appPath }),
15
- new NuxtBuild({ appPath: options.appPath }),
16
- new AstroBuild({ appPath: options.appPath }),
17
- new TanstackStartBuild({ appPath: options.appPath }),
18
- new BunBuild({
19
- appPath: options.appPath,
20
- entrypoint: options.entrypoint,
21
- }),
22
- ];
13
+ this.#appPath = options.appPath;
14
+ this.#entrypoint = options.entrypoint;
15
+ this.#hooks = {
16
+ io: options.io,
17
+ requireStandalone: options.requireStandalone,
18
+ };
23
19
  }
24
- async canBuild(signal) {
25
- for (const strategy of this.#strategies) {
26
- signal?.throwIfAborted();
27
- if (await strategy.canBuild(signal)) {
28
- return true;
29
- }
30
- }
31
- return false;
20
+ async canBuild(_signal) {
21
+ // Detection always resolves (bun is the universal fallback).
22
+ return true;
32
23
  }
33
24
  async execute(signal) {
34
- for (const strategy of this.#strategies) {
35
- signal?.throwIfAborted();
36
- if (await strategy.canBuild(signal)) {
37
- return strategy.execute(signal);
38
- }
39
- }
40
- throw new Error("No suitable build strategy found for this application");
25
+ const { strategy } = await resolveBuildStrategy({
26
+ appPath: this.#appPath,
27
+ entrypoint: this.#entrypoint,
28
+ buildType: "auto",
29
+ signal,
30
+ ...this.#hooks,
31
+ });
32
+ return strategy.execute(signal);
41
33
  }
42
34
  }
43
35
  //# sourceMappingURL=auto-build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-build.js","sourceRoot":"","sources":["../src/auto-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;GAGG;AACH,MAAM,OAAO,SAAS;IACX,WAAW,CAAkB;IAEtC,YAAY,OAAiD;QAC3D,IAAI,CAAC,WAAW,GAAG;YACjB,IAAI,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3C,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YACpD,IAAI,QAAQ,CAAC;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC;SACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAoB;QACjC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;CACF"}
1
+ {"version":3,"file":"auto-build.js","sourceRoot":"","sources":["../src/auto-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG3E;;;;;GAKG;AACH,MAAM,OAAO,SAAS;IACX,QAAQ,CAAS;IACjB,WAAW,CAAU;IACrB,MAAM,CAAqB;IAEpC,YACE,OAAsE;QAEtE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAqB;QAClC,6DAA6D;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC;YAC9C,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS,EAAE,MAAM;YACjB,MAAM;YACN,GAAG,IAAI,CAAC,MAAM;SACf,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import type { FrameworkBuildType } from "./config/frameworks.ts";
2
+ /**
3
+ * The build command and output directory for a framework build, with a
4
+ * human-readable source for each value (for display by a consumer). Resolving
5
+ * settings is location-agnostic: package manager and binaries come from the
6
+ * app's workspace, not the current working directory.
7
+ */
8
+ export interface BuildSettings {
9
+ buildCommand: string | null;
10
+ buildCommandSource: string | null;
11
+ outputDirectory: string;
12
+ outputDirectorySource: string | null;
13
+ }
14
+ /**
15
+ * Resolves build settings from framework inference: the user's
16
+ * `package.json` build script (run via the detected package manager) over the
17
+ * framework default, plus the framework's output directory (reading
18
+ * `next.config` `distDir` for Next.js).
19
+ */
20
+ export declare function resolveBuildSettings(options: {
21
+ appPath: string;
22
+ buildType: FrameworkBuildType;
23
+ signal?: AbortSignal;
24
+ }): Promise<BuildSettings>;
25
+ /**
26
+ * Build settings when committed config owns them: configured fields win,
27
+ * omitted fields fall back to framework inference. `source` labels configured
28
+ * values with the config filename so a consumer can show provenance.
29
+ */
30
+ export declare function resolveConfiguredBuildSettings(options: {
31
+ appPath: string;
32
+ buildType: FrameworkBuildType;
33
+ configured: {
34
+ command: string | null | undefined;
35
+ outputDirectory: string | undefined;
36
+ };
37
+ /** Label for configured values, e.g. the config file basename. */
38
+ source: string;
39
+ signal?: AbortSignal;
40
+ }): Promise<BuildSettings>;
41
+ /** Joins posix-style path segments, collapsing duplicate separators. */
42
+ export declare function joinPosix(...parts: string[]): string;
43
+ /**
44
+ * Maps a Next.js standalone output directory (e.g. ".next/standalone") back to
45
+ * its output root (".next"), so static assets can be staged alongside it.
46
+ */
47
+ export declare function nextOutputRootFromStandaloneDirectory(outputDirectory: string): string;
48
+ interface StaticNextConfig {
49
+ distDir?: string;
50
+ output?: "standalone" | "export";
51
+ }
52
+ /** Best-effort static read of `distDir`/`output` from a next.config source. */
53
+ export declare function readStaticNextConfig(content: string): StaticNextConfig;
54
+ export {};
55
+ //# sourceMappingURL=build-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-settings.d.ts","sourceRoot":"","sources":["../src/build-settings.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQjE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,aAAa,CAAC,CA8EzB;AAED;;;;GAIG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,EAAE;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QACnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC,CAAC;IACF,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuBzB;AAmBD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,eAAe,EAAE,MAAM,GACtB,MAAM,CAWR;AAED,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;CAClC;AAwCD,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAwBtE"}