@prisma/compute-sdk 0.7.0 → 0.8.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.
- package/dist/auto-build.d.ts +15 -0
- package/dist/auto-build.d.ts.map +1 -0
- package/dist/auto-build.js +35 -0
- package/dist/auto-build.js.map +1 -0
- package/dist/build-strategy.d.ts +2 -0
- package/dist/build-strategy.d.ts.map +1 -1
- package/dist/build-strategy.js +3 -0
- package/dist/build-strategy.js.map +1 -1
- package/dist/bun-build.d.ts +1 -0
- package/dist/bun-build.d.ts.map +1 -1
- package/dist/bun-build.js +3 -0
- package/dist/bun-build.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/nextjs-build.d.ts +14 -0
- package/dist/nextjs-build.d.ts.map +1 -0
- package/dist/nextjs-build.js +138 -0
- package/dist/nextjs-build.js.map +1 -0
- package/package.json +1 -1
- package/src/auto-build.ts +39 -0
- package/src/build-strategy.ts +5 -0
- package/src/bun-build.ts +4 -0
- package/src/index.ts +2 -0
- package/src/nextjs-build.ts +174 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
|
|
2
|
+
/**
|
|
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.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AutoBuild implements BuildStrategy {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options: {
|
|
9
|
+
appPath: string;
|
|
10
|
+
entrypoint?: string;
|
|
11
|
+
});
|
|
12
|
+
canBuild(): Promise<boolean>;
|
|
13
|
+
execute(): Promise<BuildArtifact>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=auto-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-build.d.ts","sourceRoot":"","sources":["../src/auto-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIxE;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;;gBAGjC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAUvD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAS5B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;CAQxC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BunBuild } from "./bun-build.js";
|
|
2
|
+
import { NextjsBuild } from "./nextjs-build.js";
|
|
3
|
+
/**
|
|
4
|
+
* Meta-strategy that auto-detects the appropriate build strategy.
|
|
5
|
+
* Iterates over candidates and delegates to the first one that can handle the app.
|
|
6
|
+
*/
|
|
7
|
+
export class AutoBuild {
|
|
8
|
+
#strategies;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.#strategies = [
|
|
11
|
+
new NextjsBuild({ appPath: options.appPath }),
|
|
12
|
+
new BunBuild({
|
|
13
|
+
appPath: options.appPath,
|
|
14
|
+
entrypoint: options.entrypoint,
|
|
15
|
+
}),
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
async canBuild() {
|
|
19
|
+
for (const strategy of this.#strategies) {
|
|
20
|
+
if (await strategy.canBuild()) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
async execute() {
|
|
27
|
+
for (const strategy of this.#strategies) {
|
|
28
|
+
if (await strategy.canBuild()) {
|
|
29
|
+
return strategy.execute();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
throw new Error("No suitable build strategy found for this application");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=auto-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-build.js","sourceRoot":"","sources":["../src/auto-build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;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,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;QACZ,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO;QACX,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC9B,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
package/dist/build-strategy.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface BuildArtifact {
|
|
|
17
17
|
* A build strategy produces a deployable artifact.
|
|
18
18
|
*/
|
|
19
19
|
export interface BuildStrategy {
|
|
20
|
+
canBuild(): Promise<boolean>;
|
|
20
21
|
execute(): Promise<BuildArtifact>;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
@@ -29,6 +30,7 @@ export declare class PreBuilt implements BuildStrategy {
|
|
|
29
30
|
appPath: string;
|
|
30
31
|
entrypoint: string;
|
|
31
32
|
});
|
|
33
|
+
canBuild(): Promise<boolean>;
|
|
32
34
|
execute(): Promise<BuildArtifact>;
|
|
33
35
|
}
|
|
34
36
|
//# sourceMappingURL=build-strategy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-strategy.d.ts","sourceRoot":"","sources":["../src/build-strategy.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAElB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,QAAS,YAAW,aAAa;;gBAIhC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAKtD,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;CAwBxC"}
|
|
1
|
+
{"version":3,"file":"build-strategy.d.ts","sourceRoot":"","sources":["../src/build-strategy.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAElB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,QAAS,YAAW,aAAa;;gBAIhC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAKtD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;CAwBxC"}
|
package/dist/build-strategy.js
CHANGED
|
@@ -11,6 +11,9 @@ export class PreBuilt {
|
|
|
11
11
|
this.#appPath = options.appPath;
|
|
12
12
|
this.#entrypoint = options.entrypoint;
|
|
13
13
|
}
|
|
14
|
+
async canBuild() {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
14
17
|
async execute() {
|
|
15
18
|
const normalized = path.normalize(this.#entrypoint);
|
|
16
19
|
if (path.isAbsolute(normalized)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-strategy.js","sourceRoot":"","sources":["../src/build-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"build-strategy.js","sourceRoot":"","sources":["../src/build-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AA4B7B;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACV,QAAQ,CAAS;IACjB,WAAW,CAAS;IAE7B,YAAY,OAAgD;QAC1D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,+CAA+C,IAAI,CAAC,WAAW,EAAE,CAClE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SACjD,CAAC;IACJ,CAAC;CACF"}
|
package/dist/bun-build.d.ts
CHANGED
package/dist/bun-build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-build.d.ts","sourceRoot":"","sources":["../src/bun-build.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE;;;GAGG;AACH,qBAAa,QAAS,YAAW,aAAa;;gBAIhC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAKvD,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;CA6JxC"}
|
|
1
|
+
{"version":3,"file":"bun-build.d.ts","sourceRoot":"","sources":["../src/bun-build.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE;;;GAGG;AACH,qBAAa,QAAS,YAAW,aAAa;;gBAIhC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAKvD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;CA6JxC"}
|
package/dist/bun-build.js
CHANGED
|
@@ -13,6 +13,9 @@ export class BunBuild {
|
|
|
13
13
|
this.#appPath = options.appPath;
|
|
14
14
|
this.#entrypoint = options.entrypoint;
|
|
15
15
|
}
|
|
16
|
+
async canBuild() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
16
19
|
async execute() {
|
|
17
20
|
const entrypoint = await this.#resolveEntrypoint();
|
|
18
21
|
const outDir = await mkdtemp(path.join(os.tmpdir(), "compute-build-"));
|
package/dist/bun-build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-build.js","sourceRoot":"","sources":["../src/bun-build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bun-build.js","sourceRoot":"","sources":["../src/bun-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,EAAE,GACH,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACV,QAAQ,CAAS;IACjB,WAAW,CAAU;IAE9B,YAAY,OAAiD;QAC3D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;QACtD,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;QAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,WAAW;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CACrD,SAAS,EACT,SAAS,EACT,kBAAkB,CACnB,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7C,IACE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAC3B,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,EAC/C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,cAAc,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAEjE,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IACE,KAAK,YAAY,KAAK;gBACtB,MAAM,IAAI,KAAK;gBACf,KAAK,CAAC,IAAI,KAAK,QAAQ,EACvB,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,IAAI,KAAK,CACb,kBAAkB,eAAe,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;QAED,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,mBAAmB,eAAe,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChG,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAED,SAAS,CAAC,kBAA0B,EAAE,SAAiB;QACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,QAAQ,CACN,KAAK,EACL;gBACE,OAAO;gBACP,kBAAkB;gBAClB,UAAU;gBACV,SAAS;gBACT,UAAU;gBACV,KAAK;gBACL,sBAAsB;aACvB,EACD,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;gBACzB,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC/C,MAAM,CACJ,IAAI,KAAK,CACP,4FAA4F,CAC7F,CACF,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC;oBAC/C,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC,CAAC;oBACnD,OAAO;gBACT,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB,CACtB,WAAqB,EACrB,SAAiB,EACjB,kBAA0B;QAE1B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,gBAAgB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC;QACrG,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CACnC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,gBAAgB,CACvD,CAAC;QACF,MAAM,QAAQ,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { Err, matchError, matchErrorPartial, Ok, type Result, TaggedError, } from "better-result";
|
|
2
|
+
export { AutoBuild } from "./auto-build.ts";
|
|
2
3
|
export type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
|
|
3
4
|
export { PreBuilt } from "./build-strategy.ts";
|
|
4
5
|
export { BunBuild } from "./bun-build.ts";
|
|
@@ -7,6 +8,7 @@ export type { CreateProjectOptions, CreateServiceOptions, DeleteServiceOptions,
|
|
|
7
8
|
export { ComputeClient } from "./compute-client.ts";
|
|
8
9
|
export type { ApiRequestError, DeployError, DestroyServiceError, DestroyVersionError, PromoteError, UpdateEnvError, VersionOperationError, } from "./errors.ts";
|
|
9
10
|
export { ApiError, ArtifactError, AuthenticationError, BuildError, CancelledError, DestroyAggregateError, InvalidOptionsError, MissingArgumentError, NoExistingVersionError, NoVersionsFoundError, TimeoutError, VersionFailedError, } from "./errors.ts";
|
|
11
|
+
export { NextjsBuild } from "./nextjs-build.ts";
|
|
10
12
|
export type { CreateProjectResult, DatabaseInfo, PortMapping, ProjectInfo, RegionInfo, ResolvedConfig, ServiceDetail, ServiceInfo, VersionDetail, VersionInfo, } from "./types.ts";
|
|
11
13
|
export { KNOWN_REGION_IDS, REGIONS } from "./types.ts";
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,GAAG,EACH,UAAU,EACV,iBAAiB,EACjB,EAAE,EACF,KAAK,MAAM,EACX,WAAW,GACZ,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,GAAG,EACH,UAAU,EACV,iBAAiB,EACjB,EAAE,EACF,KAAK,MAAM,EACX,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
// Re-export Result utilities so consumers don't need a direct better-result dependency
|
|
2
2
|
export { Err, matchError, matchErrorPartial, Ok, TaggedError, } from "better-result";
|
|
3
|
+
export { AutoBuild } from "./auto-build.js";
|
|
3
4
|
export { PreBuilt } from "./build-strategy.js";
|
|
4
5
|
export { BunBuild } from "./bun-build.js";
|
|
5
6
|
// Core client
|
|
6
7
|
export { ComputeClient } from "./compute-client.js";
|
|
7
8
|
// Errors
|
|
8
9
|
export { ApiError, ArtifactError, AuthenticationError, BuildError, CancelledError, DestroyAggregateError, InvalidOptionsError, MissingArgumentError, NoExistingVersionError, NoVersionsFoundError, TimeoutError, VersionFailedError, } from "./errors.js";
|
|
10
|
+
export { NextjsBuild } from "./nextjs-build.js";
|
|
9
11
|
export { KNOWN_REGION_IDS, REGIONS } from "./types.js";
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EACL,GAAG,EACH,UAAU,EACV,iBAAiB,EACjB,EAAE,EAEF,WAAW,GACZ,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EACL,GAAG,EACH,UAAU,EACV,iBAAiB,EACjB,EAAE,EAEF,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAkC1C,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUpD,SAAS;AACT,OAAO,EACL,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Build strategy for Next.js applications using standalone output mode.
|
|
4
|
+
* Runs `next build` and produces an artifact from `.next/standalone`.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NextjsBuild implements BuildStrategy {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options: {
|
|
9
|
+
appPath: string;
|
|
10
|
+
});
|
|
11
|
+
canBuild(): Promise<boolean>;
|
|
12
|
+
execute(): Promise<BuildArtifact>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=nextjs-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextjs-build.d.ts","sourceRoot":"","sources":["../src/nextjs-build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASxE;;;GAGG;AACH,qBAAa,WAAY,YAAW,aAAa;;gBAGnC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAIlC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;CAiJxC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { cp, mkdtemp, readdir, readFile, rm, stat } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
const NEXT_CONFIG_FILENAMES = [
|
|
6
|
+
"next.config.js",
|
|
7
|
+
"next.config.mjs",
|
|
8
|
+
"next.config.ts",
|
|
9
|
+
"next.config.mts",
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Build strategy for Next.js applications using standalone output mode.
|
|
13
|
+
* Runs `next build` and produces an artifact from `.next/standalone`.
|
|
14
|
+
*/
|
|
15
|
+
export class NextjsBuild {
|
|
16
|
+
#appPath;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.#appPath = options.appPath;
|
|
19
|
+
}
|
|
20
|
+
async canBuild() {
|
|
21
|
+
return (await this.#hasNextConfig()) || (await this.#hasNextDependency());
|
|
22
|
+
}
|
|
23
|
+
async execute() {
|
|
24
|
+
await this.#runBuild();
|
|
25
|
+
const standaloneDir = path.join(this.#appPath, ".next", "standalone");
|
|
26
|
+
const standaloneStat = await stat(standaloneDir).catch(() => null);
|
|
27
|
+
if (!standaloneStat?.isDirectory()) {
|
|
28
|
+
throw new Error('Next.js build did not produce standalone output. Add output: "standalone" to your next.config file.');
|
|
29
|
+
}
|
|
30
|
+
const outDir = await mkdtemp(path.join(os.tmpdir(), "compute-build-"));
|
|
31
|
+
try {
|
|
32
|
+
const artifactDir = path.join(outDir, "app");
|
|
33
|
+
await cp(standaloneDir, artifactDir, { recursive: true });
|
|
34
|
+
const publicDir = path.join(this.#appPath, "public");
|
|
35
|
+
if (await this.#directoryExists(publicDir)) {
|
|
36
|
+
await cp(publicDir, path.join(artifactDir, "public"), {
|
|
37
|
+
recursive: true,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const staticDir = path.join(this.#appPath, ".next", "static");
|
|
41
|
+
if (await this.#directoryExists(staticDir)) {
|
|
42
|
+
await cp(staticDir, path.join(artifactDir, ".next", "static"), {
|
|
43
|
+
recursive: true,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
directory: artifactDir,
|
|
48
|
+
entrypoint: "server.js",
|
|
49
|
+
cleanup: () => rm(outDir, { recursive: true, force: true }),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
await rm(outDir, { recursive: true, force: true });
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async #hasNextConfig() {
|
|
58
|
+
let entries;
|
|
59
|
+
try {
|
|
60
|
+
entries = await readdir(this.#appPath);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return entries.some((entry) => NEXT_CONFIG_FILENAMES.includes(entry));
|
|
66
|
+
}
|
|
67
|
+
async #hasNextDependency() {
|
|
68
|
+
const packageJsonPath = path.join(this.#appPath, "package.json");
|
|
69
|
+
let content;
|
|
70
|
+
try {
|
|
71
|
+
content = await readFile(packageJsonPath, "utf-8");
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
let parsed;
|
|
77
|
+
try {
|
|
78
|
+
parsed = JSON.parse(content);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const deps = typeof parsed.dependencies === "object" && parsed.dependencies !== null
|
|
84
|
+
? parsed.dependencies
|
|
85
|
+
: {};
|
|
86
|
+
const devDeps = typeof parsed.devDependencies === "object" &&
|
|
87
|
+
parsed.devDependencies !== null
|
|
88
|
+
? parsed.devDependencies
|
|
89
|
+
: {};
|
|
90
|
+
return "next" in deps || "next" in devDeps;
|
|
91
|
+
}
|
|
92
|
+
async #runBuild() {
|
|
93
|
+
const localBin = path.join(this.#appPath, "node_modules", ".bin", "next");
|
|
94
|
+
const candidates = [
|
|
95
|
+
{ command: localBin, args: ["build"] },
|
|
96
|
+
{ command: "npx", args: ["next", "build"] },
|
|
97
|
+
{ command: "bunx", args: ["next", "build"] },
|
|
98
|
+
];
|
|
99
|
+
for (const { command, args } of candidates) {
|
|
100
|
+
try {
|
|
101
|
+
await this.#exec(command, args);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error instanceof Error &&
|
|
106
|
+
"code" in error &&
|
|
107
|
+
error.code === "ENOENT") {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
throw new Error("Could not find the Next.js CLI. Install it with `npm install next` or ensure npx/bunx is available.");
|
|
114
|
+
}
|
|
115
|
+
#exec(command, args) {
|
|
116
|
+
return new Promise((resolve, reject) => {
|
|
117
|
+
execFile(command, args, { cwd: this.#appPath }, (error, _stdout, stderr) => {
|
|
118
|
+
if (error) {
|
|
119
|
+
if ("code" in error && error.code === "ENOENT") {
|
|
120
|
+
reject(Object.assign(new Error(`${command} not found`), {
|
|
121
|
+
code: "ENOENT",
|
|
122
|
+
}));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const message = stderr.trim() || error.message;
|
|
126
|
+
reject(new Error(`Next.js build failed:\n${message}`));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
resolve();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async #directoryExists(dirPath) {
|
|
134
|
+
const s = await stat(dirPath).catch(() => null);
|
|
135
|
+
return s?.isDirectory() ?? false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=nextjs-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextjs-build.js","sourceRoot":"","sources":["../src/nextjs-build.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
|
|
2
|
+
import { BunBuild } from "./bun-build.ts";
|
|
3
|
+
import { NextjsBuild } from "./nextjs-build.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Meta-strategy that auto-detects the appropriate build strategy.
|
|
7
|
+
* Iterates over candidates and delegates to the first one that can handle the app.
|
|
8
|
+
*/
|
|
9
|
+
export class AutoBuild implements BuildStrategy {
|
|
10
|
+
readonly #strategies: BuildStrategy[];
|
|
11
|
+
|
|
12
|
+
constructor(options: { appPath: string; entrypoint?: string }) {
|
|
13
|
+
this.#strategies = [
|
|
14
|
+
new NextjsBuild({ appPath: options.appPath }),
|
|
15
|
+
new BunBuild({
|
|
16
|
+
appPath: options.appPath,
|
|
17
|
+
entrypoint: options.entrypoint,
|
|
18
|
+
}),
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async canBuild(): Promise<boolean> {
|
|
23
|
+
for (const strategy of this.#strategies) {
|
|
24
|
+
if (await strategy.canBuild()) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async execute(): Promise<BuildArtifact> {
|
|
32
|
+
for (const strategy of this.#strategies) {
|
|
33
|
+
if (await strategy.canBuild()) {
|
|
34
|
+
return strategy.execute();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
throw new Error("No suitable build strategy found for this application");
|
|
38
|
+
}
|
|
39
|
+
}
|
package/src/build-strategy.ts
CHANGED
|
@@ -23,6 +23,7 @@ export interface BuildArtifact {
|
|
|
23
23
|
* A build strategy produces a deployable artifact.
|
|
24
24
|
*/
|
|
25
25
|
export interface BuildStrategy {
|
|
26
|
+
canBuild(): Promise<boolean>;
|
|
26
27
|
execute(): Promise<BuildArtifact>;
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -39,6 +40,10 @@ export class PreBuilt implements BuildStrategy {
|
|
|
39
40
|
this.#entrypoint = options.entrypoint;
|
|
40
41
|
}
|
|
41
42
|
|
|
43
|
+
async canBuild(): Promise<boolean> {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
42
47
|
async execute(): Promise<BuildArtifact> {
|
|
43
48
|
const normalized = path.normalize(this.#entrypoint);
|
|
44
49
|
|
package/src/bun-build.ts
CHANGED
|
@@ -24,6 +24,10 @@ export class BunBuild implements BuildStrategy {
|
|
|
24
24
|
this.#entrypoint = options.entrypoint;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
async canBuild(): Promise<boolean> {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
|
|
27
31
|
async execute(): Promise<BuildArtifact> {
|
|
28
32
|
const entrypoint = await this.#resolveEntrypoint();
|
|
29
33
|
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ export {
|
|
|
7
7
|
type Result,
|
|
8
8
|
TaggedError,
|
|
9
9
|
} from "better-result";
|
|
10
|
+
export { AutoBuild } from "./auto-build.ts";
|
|
10
11
|
// Build strategy
|
|
11
12
|
export type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
|
|
12
13
|
export { PreBuilt } from "./build-strategy.ts";
|
|
@@ -70,6 +71,7 @@ export {
|
|
|
70
71
|
TimeoutError,
|
|
71
72
|
VersionFailedError,
|
|
72
73
|
} from "./errors.ts";
|
|
74
|
+
export { NextjsBuild } from "./nextjs-build.ts";
|
|
73
75
|
// Domain types
|
|
74
76
|
export type {
|
|
75
77
|
CreateProjectResult,
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { cp, mkdtemp, readdir, readFile, rm, stat } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import type { BuildArtifact, BuildStrategy } from "./build-strategy.ts";
|
|
6
|
+
|
|
7
|
+
const NEXT_CONFIG_FILENAMES = [
|
|
8
|
+
"next.config.js",
|
|
9
|
+
"next.config.mjs",
|
|
10
|
+
"next.config.ts",
|
|
11
|
+
"next.config.mts",
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Build strategy for Next.js applications using standalone output mode.
|
|
16
|
+
* Runs `next build` and produces an artifact from `.next/standalone`.
|
|
17
|
+
*/
|
|
18
|
+
export class NextjsBuild implements BuildStrategy {
|
|
19
|
+
readonly #appPath: string;
|
|
20
|
+
|
|
21
|
+
constructor(options: { appPath: string }) {
|
|
22
|
+
this.#appPath = options.appPath;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async canBuild(): Promise<boolean> {
|
|
26
|
+
return (await this.#hasNextConfig()) || (await this.#hasNextDependency());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async execute(): Promise<BuildArtifact> {
|
|
30
|
+
await this.#runBuild();
|
|
31
|
+
|
|
32
|
+
const standaloneDir = path.join(this.#appPath, ".next", "standalone");
|
|
33
|
+
const standaloneStat = await stat(standaloneDir).catch(() => null);
|
|
34
|
+
if (!standaloneStat?.isDirectory()) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
'Next.js build did not produce standalone output. Add output: "standalone" to your next.config file.',
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const outDir = await mkdtemp(path.join(os.tmpdir(), "compute-build-"));
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const artifactDir = path.join(outDir, "app");
|
|
44
|
+
|
|
45
|
+
await cp(standaloneDir, artifactDir, { recursive: true });
|
|
46
|
+
|
|
47
|
+
const publicDir = path.join(this.#appPath, "public");
|
|
48
|
+
if (await this.#directoryExists(publicDir)) {
|
|
49
|
+
await cp(publicDir, path.join(artifactDir, "public"), {
|
|
50
|
+
recursive: true,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const staticDir = path.join(this.#appPath, ".next", "static");
|
|
55
|
+
if (await this.#directoryExists(staticDir)) {
|
|
56
|
+
await cp(staticDir, path.join(artifactDir, ".next", "static"), {
|
|
57
|
+
recursive: true,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
directory: artifactDir,
|
|
63
|
+
entrypoint: "server.js",
|
|
64
|
+
cleanup: () => rm(outDir, { recursive: true, force: true }),
|
|
65
|
+
};
|
|
66
|
+
} catch (error) {
|
|
67
|
+
await rm(outDir, { recursive: true, force: true });
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async #hasNextConfig(): Promise<boolean> {
|
|
73
|
+
let entries: string[];
|
|
74
|
+
try {
|
|
75
|
+
entries = await readdir(this.#appPath);
|
|
76
|
+
} catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return entries.some((entry) => NEXT_CONFIG_FILENAMES.includes(entry));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async #hasNextDependency(): Promise<boolean> {
|
|
83
|
+
const packageJsonPath = path.join(this.#appPath, "package.json");
|
|
84
|
+
|
|
85
|
+
let content: string;
|
|
86
|
+
try {
|
|
87
|
+
content = await readFile(packageJsonPath, "utf-8");
|
|
88
|
+
} catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
let parsed: { dependencies?: unknown; devDependencies?: unknown };
|
|
93
|
+
try {
|
|
94
|
+
parsed = JSON.parse(content) as {
|
|
95
|
+
dependencies?: unknown;
|
|
96
|
+
devDependencies?: unknown;
|
|
97
|
+
};
|
|
98
|
+
} catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const deps =
|
|
103
|
+
typeof parsed.dependencies === "object" && parsed.dependencies !== null
|
|
104
|
+
? parsed.dependencies
|
|
105
|
+
: {};
|
|
106
|
+
const devDeps =
|
|
107
|
+
typeof parsed.devDependencies === "object" &&
|
|
108
|
+
parsed.devDependencies !== null
|
|
109
|
+
? parsed.devDependencies
|
|
110
|
+
: {};
|
|
111
|
+
|
|
112
|
+
return "next" in deps || "next" in devDeps;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async #runBuild(): Promise<void> {
|
|
116
|
+
const localBin = path.join(this.#appPath, "node_modules", ".bin", "next");
|
|
117
|
+
const candidates: Array<{ command: string; args: string[] }> = [
|
|
118
|
+
{ command: localBin, args: ["build"] },
|
|
119
|
+
{ command: "npx", args: ["next", "build"] },
|
|
120
|
+
{ command: "bunx", args: ["next", "build"] },
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
for (const { command, args } of candidates) {
|
|
124
|
+
try {
|
|
125
|
+
await this.#exec(command, args);
|
|
126
|
+
return;
|
|
127
|
+
} catch (error) {
|
|
128
|
+
if (
|
|
129
|
+
error instanceof Error &&
|
|
130
|
+
"code" in error &&
|
|
131
|
+
error.code === "ENOENT"
|
|
132
|
+
) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
throw new Error(
|
|
140
|
+
"Could not find the Next.js CLI. Install it with `npm install next` or ensure npx/bunx is available.",
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#exec(command: string, args: string[]): Promise<void> {
|
|
145
|
+
return new Promise((resolve, reject) => {
|
|
146
|
+
execFile(
|
|
147
|
+
command,
|
|
148
|
+
args,
|
|
149
|
+
{ cwd: this.#appPath },
|
|
150
|
+
(error, _stdout, stderr) => {
|
|
151
|
+
if (error) {
|
|
152
|
+
if ("code" in error && error.code === "ENOENT") {
|
|
153
|
+
reject(
|
|
154
|
+
Object.assign(new Error(`${command} not found`), {
|
|
155
|
+
code: "ENOENT",
|
|
156
|
+
}),
|
|
157
|
+
);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const message = stderr.trim() || error.message;
|
|
161
|
+
reject(new Error(`Next.js build failed:\n${message}`));
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
resolve();
|
|
165
|
+
},
|
|
166
|
+
);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async #directoryExists(dirPath: string): Promise<boolean> {
|
|
171
|
+
const s = await stat(dirPath).catch(() => null);
|
|
172
|
+
return s?.isDirectory() ?? false;
|
|
173
|
+
}
|
|
174
|
+
}
|