@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 +29 -0
- package/dist/artifact-stage.d.ts +8 -0
- package/dist/artifact-stage.d.ts.map +1 -1
- package/dist/artifact-stage.js +10 -1
- package/dist/artifact-stage.js.map +1 -1
- package/dist/config/detect-app.d.ts +32 -0
- package/dist/config/detect-app.d.ts.map +1 -0
- package/dist/config/detect-app.js +160 -0
- package/dist/config/detect-app.js.map +1 -0
- package/dist/config/frameworks.js +1 -1
- package/dist/config/frameworks.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/package.json +1 -1
- package/src/artifact-stage.ts +26 -0
- package/src/config/detect-app.ts +246 -0
- package/src/config/frameworks.ts +1 -1
- package/src/config/index.ts +6 -0
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`):
|
package/dist/artifact-stage.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/artifact-stage.js
CHANGED
|
@@ -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":"AAAA,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,IAAI,
|
|
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":"AAuCA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAEX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAmC;IACxD;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC;QACtC,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,iBAAiB,EAAE,qBAAqB;QACxC,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,MAAM;QACX,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;QACtC,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,iBAAiB,EAAE,qBAAqB;QACxC,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,OAAO;QACZ,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,iBAAiB,EAAE,sBAAsB;QACzC,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,MAAM;QACX,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,iBAAiB,EAAE,EAAE;QACrB,cAAc,EAAE,IAAI;QACpB,iBAAiB,EAAE,cAAc;QACjC,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,CAAC,cAAc,CAAC;QAChC,iBAAiB,EAAE,CAAC,eAAe,CAAC;QACpC,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,gBAAgB;QACrB,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE;YACP,gBAAgB;YAChB,UAAU;YACV,uBAAuB;YACvB,uBAAuB;SACxB;QACD,cAAc,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;QAClE,iBAAiB,EAAE,EAAE;QACrB,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,EAAE;QACrB,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,IAAI;KACtB;IACD;QACE,GAAG,EAAE,KAAK;QACV,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,cAAc,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../src/config/frameworks.ts"],"names":[],"mappings":"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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/config/index.js
CHANGED
|
@@ -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";
|
package/dist/config/index.js.map
CHANGED
|
@@ -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
package/src/artifact-stage.ts
CHANGED
|
@@ -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
|
+
}
|
package/src/config/frameworks.ts
CHANGED
|
@@ -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,
|
package/src/config/index.ts
CHANGED
|
@@ -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,
|