@prisma/compute-sdk 0.36.0 → 0.38.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/README.md CHANGED
@@ -361,6 +361,35 @@ await compute.stopDeployment({ deploymentId: "dep_abc" });
361
361
  await compute.deleteDeployment({ deploymentId: "dep_abc" });
362
362
  ```
363
363
 
364
+ ## Repository snapshot detection
365
+
366
+ Use `detectComputeApp` when a consumer already has repository metadata but no
367
+ local checkout, such as a GitHub import flow. Detection is scoped to one app
368
+ root, so monorepo consumers enumerate workspace packages and call it once per
369
+ candidate.
370
+
371
+ ```ts
372
+ import { detectComputeApp } from "@prisma/compute-sdk/config";
373
+
374
+ const detected = detectComputeApp({
375
+ root: "apps/server",
376
+ manifest: {
377
+ main: "src/index.ts",
378
+ dependencies: { elysia: "1.3.0" },
379
+ },
380
+ filePaths: [
381
+ "apps/server/package.json",
382
+ "apps/server/src/index.ts",
383
+ ],
384
+ });
385
+ ```
386
+
387
+ The result includes the Compute framework, build type, HTTP port, inferred
388
+ entrypoint, and the dependency, config file, or runtime script that provided
389
+ the detection evidence. It returns `null` when the package has no deployable
390
+ framework or runtime signal, so shared workspace libraries are not treated as
391
+ apps.
392
+
364
393
  ## Build strategies
365
394
 
366
395
  A build strategy produces a deployable artifact (a directory with an entrypoint file). The SDK ships with two built-in general-purpose strategies (plus framework-specific ones used internally by `AutoBuild`):
@@ -18,6 +18,14 @@ export declare function stageStandaloneArtifact(options: {
18
18
  export interface MaterializeOptions {
19
19
  /** Root of the standalone output being copied (for fallback resolution). */
20
20
  standaloneRoot?: string;
21
+ /**
22
+ * Where `standaloneRoot` is being copied to. When set, symlinks whose target
23
+ * resolves inside `standaloneRoot` are recreated as relative symlinks in the
24
+ * destination instead of materialized: bun/pnpm isolated stores resolve a
25
+ * package's dependencies through the link's *location* in the store, which
26
+ * materializing destroys. Only out-of-tree targets are safe to materialize.
27
+ */
28
+ destinationRoot?: string;
21
29
  /** The app directory; symlink targets here are materialized. */
22
30
  appRoot: string;
23
31
  /** The workspace/source root; targets in its node_modules are materialized. */
@@ -1 +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;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,yBAAyB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AA+DD,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AA2DD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAQ7E"}
1
+ {"version":3,"file":"artifact-stage.d.ts","sourceRoot":"","sources":["../src/artifact-stage.ts"],"names":[],"mappings":"AAcA;;;;;;;;;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,CAiBhB;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,yBAAyB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AA+DD,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Df;AA2DD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAQ7E"}
@@ -1,4 +1,4 @@
1
- import { chmod, copyFile, lstat, mkdir, readdir, readlink, stat, } from "node:fs/promises";
1
+ import { chmod, copyFile, lstat, mkdir, readdir, readlink, stat, symlink, } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { resolveSourceRoot } from "./config/source-root.js";
4
4
  /**
@@ -18,6 +18,7 @@ export async function stageStandaloneArtifact(options) {
18
18
  const sourceRoot = await resolveSourceRoot(appRoot, options.signal);
19
19
  await copyPathMaterializingSymlinks(standaloneRoot, artifactRoot, {
20
20
  standaloneRoot,
21
+ destinationRoot: artifactRoot,
21
22
  appRoot,
22
23
  sourceRoot,
23
24
  signal: options.signal,
@@ -85,6 +86,14 @@ export async function copyPathMaterializingSymlinks(sourcePath, destinationPath,
85
86
  if (resolvedTarget === null) {
86
87
  return;
87
88
  }
89
+ if (options.standaloneRoot &&
90
+ options.destinationRoot &&
91
+ isPathWithin(options.standaloneRoot, resolvedTarget)) {
92
+ const destinationTarget = path.join(options.destinationRoot, path.relative(options.standaloneRoot, resolvedTarget));
93
+ await mkdir(path.dirname(destinationPath), { recursive: true });
94
+ await symlink(path.relative(path.dirname(destinationPath), destinationTarget) || ".", destinationPath);
95
+ return;
96
+ }
88
97
  await copyPathMaterializingSymlinks(resolvedTarget, destinationPath, options);
89
98
  return;
90
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-stage.js","sourceRoot":"","sources":["../src/artifact-stage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifact-stage.js","sourceRoot":"","sources":["../src/artifact-stage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type FrameworkBuildType } from "./frameworks.ts";
2
+ import type { ComputeFramework } from "./types.ts";
3
+ export interface ComputeAppManifest {
4
+ main?: unknown;
5
+ scripts?: unknown;
6
+ dependencies?: unknown;
7
+ devDependencies?: unknown;
8
+ peerDependencies?: unknown;
9
+ }
10
+ export interface DetectComputeAppInput {
11
+ root: string;
12
+ manifest: ComputeAppManifest;
13
+ filePaths: Iterable<string>;
14
+ }
15
+ export interface DetectedComputeApp {
16
+ framework: ComputeFramework;
17
+ frameworkName: string;
18
+ buildType: FrameworkBuildType;
19
+ httpPort: number;
20
+ entrypoint: string | null;
21
+ evidence: {
22
+ kind: "dependency" | "config" | "entrypoint";
23
+ path: string;
24
+ value: string;
25
+ };
26
+ }
27
+ /**
28
+ * Detects one deployable app from an in-memory repository snapshot.
29
+ * Paths are repository-relative so remote consumers do not need a checkout.
30
+ */
31
+ export declare function detectComputeApp(input: DetectComputeAppInput): DetectedComputeApp | null;
32
+ //# sourceMappingURL=detect-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-app.d.ts","sourceRoot":"","sources":["../../src/config/detect-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;QAC7C,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAC3B,kBAAkB,GAAG,IAAI,CA4D3B"}
@@ -0,0 +1,160 @@
1
+ import { FRAMEWORKS, frameworkByKey, } from "./frameworks.js";
2
+ /**
3
+ * Detects one deployable app from an in-memory repository snapshot.
4
+ * Paths are repository-relative so remote consumers do not need a checkout.
5
+ */
6
+ export function detectComputeApp(input) {
7
+ const root = normalizeRoot(input.root);
8
+ const filePaths = new Set(input.filePaths);
9
+ const dependencies = new Set([
10
+ ...recordKeys(input.manifest.dependencies),
11
+ ...recordKeys(input.manifest.devDependencies),
12
+ ]);
13
+ for (const framework of FRAMEWORKS) {
14
+ const dependency = framework.detectPackages.find((name) => dependencies.has(name));
15
+ if (dependency) {
16
+ return detectedApp(framework, inferEntrypoint(framework, input, filePaths), {
17
+ kind: "dependency",
18
+ path: joinRepoPath(root, "package.json"),
19
+ value: dependency,
20
+ });
21
+ }
22
+ const configFile = framework.detectConfigFiles.find((fileName) => filePaths.has(joinRepoPath(root, fileName)));
23
+ if (configFile) {
24
+ return detectedApp(framework, inferEntrypoint(framework, input, filePaths), {
25
+ kind: "config",
26
+ path: joinRepoPath(root, configFile),
27
+ value: configFile,
28
+ });
29
+ }
30
+ }
31
+ const runtimeScript = readRuntimeScript(input.manifest.scripts);
32
+ if (runtimeScript) {
33
+ const bun = frameworkByKey("bun");
34
+ const scriptedEntrypoint = extractScriptEntrypoint(runtimeScript.command);
35
+ const scriptReferencesExistingFile = scriptedEntrypoint !== null &&
36
+ filePaths.has(joinRepoPath(root, scriptedEntrypoint));
37
+ const entrypoint = scriptReferencesExistingFile
38
+ ? scriptedEntrypoint
39
+ : inferEntrypoint(bun, input, filePaths);
40
+ if (entrypoint) {
41
+ return detectedApp(bun, entrypoint, {
42
+ kind: "entrypoint",
43
+ path: joinRepoPath(root, entrypoint),
44
+ value: `scripts.${runtimeScript.name}`,
45
+ });
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ function detectedApp(framework, entrypoint, evidence) {
51
+ return {
52
+ framework: framework.key,
53
+ frameworkName: framework.displayName,
54
+ buildType: framework.buildType,
55
+ httpPort: framework.defaultHttpPort,
56
+ entrypoint,
57
+ evidence,
58
+ };
59
+ }
60
+ function inferEntrypoint(framework, input, filePaths) {
61
+ if (!framework.usesEntrypoint) {
62
+ return null;
63
+ }
64
+ const root = normalizeRoot(input.root);
65
+ if (typeof input.manifest.main === "string") {
66
+ const main = normalizeEntrypoint(input.manifest.main);
67
+ if (main && filePaths.has(joinRepoPath(root, main))) {
68
+ return main;
69
+ }
70
+ }
71
+ const candidates = [
72
+ framework.defaultEntrypoint,
73
+ "src/index.ts",
74
+ "src/index.js",
75
+ "src/server.ts",
76
+ "src/server.js",
77
+ "index.ts",
78
+ "index.js",
79
+ "server.ts",
80
+ "server.js",
81
+ ].filter((value) => Boolean(value));
82
+ return (candidates.find((candidate) => filePaths.has(joinRepoPath(root, candidate))) ?? null);
83
+ }
84
+ function normalizeEntrypoint(value) {
85
+ if (!value ||
86
+ value.startsWith("/") ||
87
+ value.startsWith("\\") ||
88
+ value.includes("\\") ||
89
+ /^[A-Za-z]:/.test(value)) {
90
+ return null;
91
+ }
92
+ const normalized = value.replace(/^\.\/+/, "").replace(/\/+/g, "/");
93
+ if (!normalized ||
94
+ normalized === "." ||
95
+ normalized.split("/").some((segment) => segment === "..")) {
96
+ return null;
97
+ }
98
+ return normalized;
99
+ }
100
+ function readRuntimeScript(scripts) {
101
+ if (!scripts || typeof scripts !== "object") {
102
+ return null;
103
+ }
104
+ const values = scripts;
105
+ for (const name of ["start", "serve"]) {
106
+ const command = values[name];
107
+ if (typeof command === "string" && command.trim()) {
108
+ return { name, command };
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ const SCRIPT_OPTIONS_WITH_FILE_ARGUMENT = [
114
+ "--experimental-loader",
115
+ "--import",
116
+ "--loader",
117
+ "--preload",
118
+ "--require",
119
+ "-r",
120
+ ];
121
+ function extractScriptEntrypoint(command) {
122
+ const tokens = command.match(/"[^"]*"|'[^']*'|`[^`]*`|\S+/g) ?? [];
123
+ const candidates = [];
124
+ let skipNextToken = false;
125
+ for (const rawToken of tokens) {
126
+ if (skipNextToken) {
127
+ skipNextToken = false;
128
+ continue;
129
+ }
130
+ const quote = rawToken[0];
131
+ const token = (quote === '"' || quote === "'" || quote === "`") &&
132
+ rawToken.at(-1) === quote
133
+ ? rawToken.slice(1, -1)
134
+ : rawToken;
135
+ const optionWithFileArgument = SCRIPT_OPTIONS_WITH_FILE_ARGUMENT.find((option) => token === option || token.startsWith(`${option}=`));
136
+ if (optionWithFileArgument) {
137
+ skipNextToken = token === optionWithFileArgument;
138
+ continue;
139
+ }
140
+ if (!/^(?:\.{1,2}\/)?[\w@./-]+\.(?:[cm]?[jt]sx?)$/.test(token)) {
141
+ continue;
142
+ }
143
+ const candidate = normalizeEntrypoint(token);
144
+ if (candidate) {
145
+ candidates.push(candidate);
146
+ }
147
+ }
148
+ return candidates.length === 1 ? (candidates[0] ?? null) : null;
149
+ }
150
+ function recordKeys(value) {
151
+ return value && typeof value === "object" ? Object.keys(value) : [];
152
+ }
153
+ function normalizeRoot(root) {
154
+ const normalized = root.replace(/^\.?\/+|\/+$/g, "");
155
+ return normalized === "." ? "" : normalized;
156
+ }
157
+ function joinRepoPath(...parts) {
158
+ return parts.filter(Boolean).join("/").replace(/\/+/g, "/");
159
+ }
160
+ //# sourceMappingURL=detect-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-app.js","sourceRoot":"","sources":["../../src/config/detect-app.ts"],"names":[],"mappings":"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"}
@@ -114,7 +114,7 @@ export const FRAMEWORKS = [
114
114
  displayName: "Bun",
115
115
  buildType: "bun",
116
116
  aliases: ["bun"],
117
- detectPackages: [],
117
+ detectPackages: ["elysia", "express", "fastify"],
118
118
  detectConfigFiles: [],
119
119
  usesEntrypoint: true,
120
120
  defaultEntrypoint: null,
@@ -1 +1 @@
1
- {"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../src/config/frameworks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../src/config/frameworks.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * of the platform reads the same deploy graph. Consumer-specific concerns —
7
7
  * project/branch resolution, prompts, flag precedence — stay with consumers.
8
8
  */
9
+ export { type ComputeAppManifest, type DetectComputeAppInput, type DetectedComputeApp, detectComputeApp, } from "./detect-app.ts";
9
10
  export { ASTRO_CONFIG_FILENAMES, CONFIG_BACKED_BUILD_TYPES, type ConfigBackedBuildType, defaultHttpPortForBuildType, ENTRYPOINT_BUILD_TYPES, FRAMEWORK_KEYS, FRAMEWORKS, type FrameworkBuildType, type FrameworkDescriptor, frameworkByKey, frameworkFromAlias, isConfigBackedBuildType, LOCAL_DEV_BUILD_TYPES, NEXT_CONFIG_FILENAMES, NUXT_CONFIG_FILENAMES, } from "./frameworks.ts";
10
11
  export { COMPUTE_CONFIG_JSON_SCHEMA, COMPUTE_CONFIG_JSON_SCHEMA_URL, } from "./json-schema.ts";
11
12
  export { COMPUTE_CONFIG_FILENAME, COMPUTE_CONFIG_FILENAMES, COMPUTE_CONFIG_JSON_FILENAME, ComputeConfigAmbiguousError, type ComputeConfigError, ComputeConfigLoadError, findComputeConfigCandidates, findComputeConfigDir, loadComputeConfig, } from "./load.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
@@ -6,6 +6,7 @@
6
6
  * of the platform reads the same deploy graph. Consumer-specific concerns —
7
7
  * project/branch resolution, prompts, flag precedence — stay with consumers.
8
8
  */
9
+ export { detectComputeApp, } from "./detect-app.js";
9
10
  export { ASTRO_CONFIG_FILENAMES, CONFIG_BACKED_BUILD_TYPES, defaultHttpPortForBuildType, ENTRYPOINT_BUILD_TYPES, FRAMEWORK_KEYS, FRAMEWORKS, frameworkByKey, frameworkFromAlias, isConfigBackedBuildType, LOCAL_DEV_BUILD_TYPES, NEXT_CONFIG_FILENAMES, NUXT_CONFIG_FILENAMES, } from "./frameworks.js";
10
11
  export { COMPUTE_CONFIG_JSON_SCHEMA, COMPUTE_CONFIG_JSON_SCHEMA_URL, } from "./json-schema.js";
11
12
  export { COMPUTE_CONFIG_FILENAME, COMPUTE_CONFIG_FILENAMES, COMPUTE_CONFIG_JSON_FILENAME, ComputeConfigAmbiguousError, ComputeConfigLoadError, findComputeConfigCandidates, findComputeConfigDir, loadComputeConfig, } from "./load.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EAEzB,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,UAAU,EAGV,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAE3B,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EAEzB,gCAAgC,EAChC,+BAA+B,EAG/B,mBAAmB,EACnB,yBAAyB,EAEzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,eAAe,EAQf,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAIL,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EAEzB,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,UAAU,EAGV,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAE3B,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EAEzB,gCAAgC,EAChC,+BAA+B,EAG/B,mBAAmB,EACnB,yBAAyB,EAEzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,eAAe,EAQf,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/compute-sdk",
3
- "version": "0.36.0",
3
+ "version": "0.38.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",
@@ -6,6 +6,7 @@ import {
6
6
  readdir,
7
7
  readlink,
8
8
  stat,
9
+ symlink,
9
10
  } from "node:fs/promises";
10
11
  import path from "node:path";
11
12
 
@@ -34,6 +35,7 @@ export async function stageStandaloneArtifact(options: {
34
35
 
35
36
  await copyPathMaterializingSymlinks(standaloneRoot, artifactRoot, {
36
37
  standaloneRoot,
38
+ destinationRoot: artifactRoot,
37
39
  appRoot,
38
40
  sourceRoot,
39
41
  signal: options.signal,
@@ -48,6 +50,14 @@ export async function stageStandaloneArtifact(options: {
48
50
  export interface MaterializeOptions {
49
51
  /** Root of the standalone output being copied (for fallback resolution). */
50
52
  standaloneRoot?: string;
53
+ /**
54
+ * Where `standaloneRoot` is being copied to. When set, symlinks whose target
55
+ * resolves inside `standaloneRoot` are recreated as relative symlinks in the
56
+ * destination instead of materialized: bun/pnpm isolated stores resolve a
57
+ * package's dependencies through the link's *location* in the store, which
58
+ * materializing destroys. Only out-of-tree targets are safe to materialize.
59
+ */
60
+ destinationRoot?: string;
51
61
  /** The app directory; symlink targets here are materialized. */
52
62
  appRoot: string;
53
63
  /** The workspace/source root; targets in its node_modules are materialized. */
@@ -166,6 +176,22 @@ export async function copyPathMaterializingSymlinks(
166
176
  if (resolvedTarget === null) {
167
177
  return;
168
178
  }
179
+ if (
180
+ options.standaloneRoot &&
181
+ options.destinationRoot &&
182
+ isPathWithin(options.standaloneRoot, resolvedTarget)
183
+ ) {
184
+ const destinationTarget = path.join(
185
+ options.destinationRoot,
186
+ path.relative(options.standaloneRoot, resolvedTarget),
187
+ );
188
+ await mkdir(path.dirname(destinationPath), { recursive: true });
189
+ await symlink(
190
+ path.relative(path.dirname(destinationPath), destinationTarget) || ".",
191
+ destinationPath,
192
+ );
193
+ return;
194
+ }
169
195
  await copyPathMaterializingSymlinks(
170
196
  resolvedTarget,
171
197
  destinationPath,
@@ -0,0 +1,246 @@
1
+ import {
2
+ FRAMEWORKS,
3
+ type FrameworkBuildType,
4
+ type FrameworkDescriptor,
5
+ frameworkByKey,
6
+ } from "./frameworks.ts";
7
+ import type { ComputeFramework } from "./types.ts";
8
+
9
+ export interface ComputeAppManifest {
10
+ main?: unknown;
11
+ scripts?: unknown;
12
+ dependencies?: unknown;
13
+ devDependencies?: unknown;
14
+ peerDependencies?: unknown;
15
+ }
16
+
17
+ export interface DetectComputeAppInput {
18
+ root: string;
19
+ manifest: ComputeAppManifest;
20
+ filePaths: Iterable<string>;
21
+ }
22
+
23
+ export interface DetectedComputeApp {
24
+ framework: ComputeFramework;
25
+ frameworkName: string;
26
+ buildType: FrameworkBuildType;
27
+ httpPort: number;
28
+ entrypoint: string | null;
29
+ evidence: {
30
+ kind: "dependency" | "config" | "entrypoint";
31
+ path: string;
32
+ value: string;
33
+ };
34
+ }
35
+
36
+ /**
37
+ * Detects one deployable app from an in-memory repository snapshot.
38
+ * Paths are repository-relative so remote consumers do not need a checkout.
39
+ */
40
+ export function detectComputeApp(
41
+ input: DetectComputeAppInput,
42
+ ): DetectedComputeApp | null {
43
+ const root = normalizeRoot(input.root);
44
+ const filePaths = new Set(input.filePaths);
45
+ const dependencies = new Set([
46
+ ...recordKeys(input.manifest.dependencies),
47
+ ...recordKeys(input.manifest.devDependencies),
48
+ ]);
49
+
50
+ for (const framework of FRAMEWORKS) {
51
+ const dependency = framework.detectPackages.find((name) =>
52
+ dependencies.has(name),
53
+ );
54
+ if (dependency) {
55
+ return detectedApp(
56
+ framework,
57
+ inferEntrypoint(framework, input, filePaths),
58
+ {
59
+ kind: "dependency",
60
+ path: joinRepoPath(root, "package.json"),
61
+ value: dependency,
62
+ },
63
+ );
64
+ }
65
+
66
+ const configFile = framework.detectConfigFiles.find((fileName) =>
67
+ filePaths.has(joinRepoPath(root, fileName)),
68
+ );
69
+ if (configFile) {
70
+ return detectedApp(
71
+ framework,
72
+ inferEntrypoint(framework, input, filePaths),
73
+ {
74
+ kind: "config",
75
+ path: joinRepoPath(root, configFile),
76
+ value: configFile,
77
+ },
78
+ );
79
+ }
80
+ }
81
+
82
+ const runtimeScript = readRuntimeScript(input.manifest.scripts);
83
+ if (runtimeScript) {
84
+ const bun = frameworkByKey("bun");
85
+ const scriptedEntrypoint = extractScriptEntrypoint(runtimeScript.command);
86
+ const scriptReferencesExistingFile =
87
+ scriptedEntrypoint !== null &&
88
+ filePaths.has(joinRepoPath(root, scriptedEntrypoint));
89
+ const entrypoint = scriptReferencesExistingFile
90
+ ? scriptedEntrypoint
91
+ : inferEntrypoint(bun, input, filePaths);
92
+ if (entrypoint) {
93
+ return detectedApp(bun, entrypoint, {
94
+ kind: "entrypoint",
95
+ path: joinRepoPath(root, entrypoint),
96
+ value: `scripts.${runtimeScript.name}`,
97
+ });
98
+ }
99
+ }
100
+
101
+ return null;
102
+ }
103
+
104
+ function detectedApp(
105
+ framework: FrameworkDescriptor,
106
+ entrypoint: string | null,
107
+ evidence: DetectedComputeApp["evidence"],
108
+ ): DetectedComputeApp {
109
+ return {
110
+ framework: framework.key,
111
+ frameworkName: framework.displayName,
112
+ buildType: framework.buildType,
113
+ httpPort: framework.defaultHttpPort,
114
+ entrypoint,
115
+ evidence,
116
+ };
117
+ }
118
+
119
+ function inferEntrypoint(
120
+ framework: FrameworkDescriptor,
121
+ input: DetectComputeAppInput,
122
+ filePaths: Set<string>,
123
+ ): string | null {
124
+ if (!framework.usesEntrypoint) {
125
+ return null;
126
+ }
127
+ const root = normalizeRoot(input.root);
128
+ if (typeof input.manifest.main === "string") {
129
+ const main = normalizeEntrypoint(input.manifest.main);
130
+ if (main && filePaths.has(joinRepoPath(root, main))) {
131
+ return main;
132
+ }
133
+ }
134
+ const candidates = [
135
+ framework.defaultEntrypoint,
136
+ "src/index.ts",
137
+ "src/index.js",
138
+ "src/server.ts",
139
+ "src/server.js",
140
+ "index.ts",
141
+ "index.js",
142
+ "server.ts",
143
+ "server.js",
144
+ ].filter((value): value is string => Boolean(value));
145
+ return (
146
+ candidates.find((candidate) =>
147
+ filePaths.has(joinRepoPath(root, candidate)),
148
+ ) ?? null
149
+ );
150
+ }
151
+
152
+ function normalizeEntrypoint(value: string): string | null {
153
+ if (
154
+ !value ||
155
+ value.startsWith("/") ||
156
+ value.startsWith("\\") ||
157
+ value.includes("\\") ||
158
+ /^[A-Za-z]:/.test(value)
159
+ ) {
160
+ return null;
161
+ }
162
+ const normalized = value.replace(/^\.\/+/, "").replace(/\/+/g, "/");
163
+ if (
164
+ !normalized ||
165
+ normalized === "." ||
166
+ normalized.split("/").some((segment) => segment === "..")
167
+ ) {
168
+ return null;
169
+ }
170
+ return normalized;
171
+ }
172
+
173
+ function readRuntimeScript(
174
+ scripts: unknown,
175
+ ): { name: "start" | "serve"; command: string } | null {
176
+ if (!scripts || typeof scripts !== "object") {
177
+ return null;
178
+ }
179
+ const values = scripts as Record<string, unknown>;
180
+ for (const name of ["start", "serve"] as const) {
181
+ const command = values[name];
182
+ if (typeof command === "string" && command.trim()) {
183
+ return { name, command };
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+
189
+ const SCRIPT_OPTIONS_WITH_FILE_ARGUMENT = [
190
+ "--experimental-loader",
191
+ "--import",
192
+ "--loader",
193
+ "--preload",
194
+ "--require",
195
+ "-r",
196
+ ] as const;
197
+
198
+ function extractScriptEntrypoint(command: string): string | null {
199
+ const tokens = command.match(/"[^"]*"|'[^']*'|`[^`]*`|\S+/g) ?? [];
200
+ const candidates: string[] = [];
201
+ let skipNextToken = false;
202
+
203
+ for (const rawToken of tokens) {
204
+ if (skipNextToken) {
205
+ skipNextToken = false;
206
+ continue;
207
+ }
208
+
209
+ const quote = rawToken[0];
210
+ const token =
211
+ (quote === '"' || quote === "'" || quote === "`") &&
212
+ rawToken.at(-1) === quote
213
+ ? rawToken.slice(1, -1)
214
+ : rawToken;
215
+ const optionWithFileArgument = SCRIPT_OPTIONS_WITH_FILE_ARGUMENT.find(
216
+ (option) => token === option || token.startsWith(`${option}=`),
217
+ );
218
+ if (optionWithFileArgument) {
219
+ skipNextToken = token === optionWithFileArgument;
220
+ continue;
221
+ }
222
+ if (!/^(?:\.{1,2}\/)?[\w@./-]+\.(?:[cm]?[jt]sx?)$/.test(token)) {
223
+ continue;
224
+ }
225
+
226
+ const candidate = normalizeEntrypoint(token);
227
+ if (candidate) {
228
+ candidates.push(candidate);
229
+ }
230
+ }
231
+
232
+ return candidates.length === 1 ? (candidates[0] ?? null) : null;
233
+ }
234
+
235
+ function recordKeys(value: unknown): string[] {
236
+ return value && typeof value === "object" ? Object.keys(value) : [];
237
+ }
238
+
239
+ function normalizeRoot(root: string): string {
240
+ const normalized = root.replace(/^\.?\/+|\/+$/g, "");
241
+ return normalized === "." ? "" : normalized;
242
+ }
243
+
244
+ function joinRepoPath(...parts: string[]): string {
245
+ return parts.filter(Boolean).join("/").replace(/\/+/g, "/");
246
+ }
@@ -156,7 +156,7 @@ export const FRAMEWORKS: readonly FrameworkDescriptor[] = [
156
156
  displayName: "Bun",
157
157
  buildType: "bun",
158
158
  aliases: ["bun"],
159
- detectPackages: [],
159
+ detectPackages: ["elysia", "express", "fastify"],
160
160
  detectConfigFiles: [],
161
161
  usesEntrypoint: true,
162
162
  defaultEntrypoint: null,
@@ -7,6 +7,12 @@
7
7
  * project/branch resolution, prompts, flag precedence — stay with consumers.
8
8
  */
9
9
 
10
+ export {
11
+ type ComputeAppManifest,
12
+ type DetectComputeAppInput,
13
+ type DetectedComputeApp,
14
+ detectComputeApp,
15
+ } from "./detect-app.ts";
10
16
  export {
11
17
  ASTRO_CONFIG_FILENAMES,
12
18
  CONFIG_BACKED_BUILD_TYPES,