@prisma/compute-sdk 0.7.0 → 0.9.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.
@@ -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"}
@@ -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"}
@@ -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;AA2B7B;;;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,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"}
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"}
@@ -9,6 +9,7 @@ export declare class BunBuild implements BuildStrategy {
9
9
  appPath: string;
10
10
  entrypoint?: string;
11
11
  });
12
+ canBuild(): Promise<boolean>;
12
13
  execute(): Promise<BuildArtifact>;
13
14
  }
14
15
  //# sourceMappingURL=bun-build.d.ts.map
@@ -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-"));
@@ -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":"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"}
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
@@ -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;AAEvB,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;AAErB,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"}
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;AAGvB,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,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/compute-sdk",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "TypeScript SDK for deploying and managing applications on Prisma Compute",
5
5
  "license": "Apache-2.0",
6
6
  "repository": "prisma/project-compute",
@@ -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
+ }
@@ -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
+ }