@prisma/compute-sdk 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifact-stage.d.ts +19 -0
- package/dist/artifact-stage.d.ts.map +1 -1
- package/dist/artifact-stage.js +24 -10
- package/dist/artifact-stage.js.map +1 -1
- package/dist/astro-build.d.ts.map +1 -1
- package/dist/astro-build.js +1 -0
- package/dist/astro-build.js.map +1 -1
- package/dist/configured-artifact-trace.d.ts +15 -0
- package/dist/configured-artifact-trace.d.ts.map +1 -0
- package/dist/configured-artifact-trace.js +58 -0
- package/dist/configured-artifact-trace.js.map +1 -0
- package/dist/configured-artifact.d.ts +1 -0
- package/dist/configured-artifact.d.ts.map +1 -1
- package/dist/configured-artifact.js +10 -0
- package/dist/configured-artifact.js.map +1 -1
- package/package.json +1 -1
- package/src/artifact-stage.ts +38 -18
- package/src/astro-build.ts +1 -0
- package/src/configured-artifact-trace.ts +98 -0
- package/src/configured-artifact.ts +11 -0
package/dist/artifact-stage.d.ts
CHANGED
|
@@ -14,6 +14,23 @@ export declare function stageStandaloneArtifact(options: {
|
|
|
14
14
|
appPath: string;
|
|
15
15
|
signal?: AbortSignal;
|
|
16
16
|
}): Promise<void>;
|
|
17
|
+
/** Options shared by the symlink-materializing copy walk. */
|
|
18
|
+
export interface MaterializeOptions {
|
|
19
|
+
/** Root of the standalone output being copied (for fallback resolution). */
|
|
20
|
+
standaloneRoot?: string;
|
|
21
|
+
/** The app directory; symlink targets here are materialized. */
|
|
22
|
+
appRoot: string;
|
|
23
|
+
/** The workspace/source root; targets in its node_modules are materialized. */
|
|
24
|
+
sourceRoot: string;
|
|
25
|
+
/**
|
|
26
|
+
* Roots a symlink may resolve into. Defaults to the app root and workspace
|
|
27
|
+
* node_modules, matching standalone framework artifacts.
|
|
28
|
+
*/
|
|
29
|
+
allowedSymlinkTargetRoots?: readonly string[];
|
|
30
|
+
/** Ignore a missing source path instead of throwing. Useful for trace lists. */
|
|
31
|
+
ignoreMissingSource?: boolean;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
}
|
|
17
34
|
/**
|
|
18
35
|
* pnpm and bun (isolated linker) both keep packages in a virtual store with a
|
|
19
36
|
* shared symlink farm (`.pnpm/node_modules`, `.bun/node_modules`). Hoist the
|
|
@@ -21,4 +38,6 @@ export declare function stageStandaloneArtifact(options: {
|
|
|
21
38
|
* works after symlinks are materialized.
|
|
22
39
|
*/
|
|
23
40
|
export declare function hoistIsolatedStoreDependencies(nodeModulesDir: string, signal?: AbortSignal): Promise<void>;
|
|
41
|
+
export declare function copyPathMaterializingSymlinks(sourcePath: string, destinationPath: string, options: MaterializeOptions): Promise<void>;
|
|
42
|
+
export declare function isPathWithin(rootPath: string, candidatePath: string): boolean;
|
|
24
43
|
//# sourceMappingURL=artifact-stage.d.ts.map
|
|
@@ -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;
|
|
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"}
|
package/dist/artifact-stage.js
CHANGED
|
@@ -69,9 +69,17 @@ function storeMaterializeOptions(storeNodeModulesDir, nodeModulesDir, signal) {
|
|
|
69
69
|
signal,
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
-
async function copyPathMaterializingSymlinks(sourcePath, destinationPath, options) {
|
|
72
|
+
export async function copyPathMaterializingSymlinks(sourcePath, destinationPath, options) {
|
|
73
73
|
options.signal?.throwIfAborted();
|
|
74
|
-
const sourceStat = await lstat(sourcePath)
|
|
74
|
+
const sourceStat = await lstat(sourcePath).catch((error) => {
|
|
75
|
+
if (options.ignoreMissingSource && isENOENT(error)) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
});
|
|
80
|
+
if (!sourceStat) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
75
83
|
if (sourceStat.isSymbolicLink()) {
|
|
76
84
|
const resolvedTarget = await resolveSymlinkTarget(sourcePath, options);
|
|
77
85
|
if (resolvedTarget === null) {
|
|
@@ -99,13 +107,17 @@ async function resolveSymlinkTarget(symlinkPath, options) {
|
|
|
99
107
|
const linkTarget = await readlink(symlinkPath);
|
|
100
108
|
const resolvedTarget = path.resolve(path.dirname(symlinkPath), linkTarget);
|
|
101
109
|
if (await pathExists(resolvedTarget, options.signal)) {
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
const allowedRoots = options.allowedSymlinkTargetRoots ?? [
|
|
111
|
+
options.appRoot,
|
|
112
|
+
path.join(options.sourceRoot, "node_modules"),
|
|
113
|
+
];
|
|
114
|
+
if (!allowedRoots.some((root) => isPathWithin(root, resolvedTarget))) {
|
|
104
115
|
throw new Error(`Build artifact symlink escapes the app directory: ${resolvedTarget}`);
|
|
105
116
|
}
|
|
106
117
|
return resolvedTarget;
|
|
107
118
|
}
|
|
108
|
-
if (
|
|
119
|
+
if (options.standaloneRoot &&
|
|
120
|
+
isPathWithin(options.standaloneRoot, resolvedTarget)) {
|
|
109
121
|
const fallbackTarget = path.join(options.appRoot, path.relative(options.standaloneRoot, resolvedTarget));
|
|
110
122
|
if (await pathExists(fallbackTarget, options.signal)) {
|
|
111
123
|
return fallbackTarget;
|
|
@@ -118,7 +130,7 @@ async function resolveSymlinkTarget(symlinkPath, options) {
|
|
|
118
130
|
if (isPnpmHoistLink(symlinkPath)) {
|
|
119
131
|
return null;
|
|
120
132
|
}
|
|
121
|
-
throw new Error(`
|
|
133
|
+
throw new Error(`Build artifact symlink target is missing: ${symlinkPath} -> ${linkTarget} (resolved to ${resolvedTarget})`);
|
|
122
134
|
}
|
|
123
135
|
function isPnpmHoistLink(symlinkPath) {
|
|
124
136
|
const parts = path.dirname(symlinkPath).split(path.sep);
|
|
@@ -129,16 +141,13 @@ function isPnpmHoistLink(symlinkPath) {
|
|
|
129
141
|
}
|
|
130
142
|
return false;
|
|
131
143
|
}
|
|
132
|
-
function isPathWithin(rootPath, candidatePath) {
|
|
144
|
+
export function isPathWithin(rootPath, candidatePath) {
|
|
133
145
|
const relativePath = path.relative(rootPath, candidatePath);
|
|
134
146
|
return (relativePath === "" ||
|
|
135
147
|
(!relativePath.startsWith(`..${path.sep}`) &&
|
|
136
148
|
relativePath !== ".." &&
|
|
137
149
|
!path.isAbsolute(relativePath)));
|
|
138
150
|
}
|
|
139
|
-
function isPathWithinWorkspaceDependency(sourceRoot, candidatePath) {
|
|
140
|
-
return isPathWithin(path.join(sourceRoot, "node_modules"), candidatePath);
|
|
141
|
-
}
|
|
142
151
|
async function readEntries(directory, signal) {
|
|
143
152
|
signal?.throwIfAborted();
|
|
144
153
|
return readdir(directory, { withFileTypes: true });
|
|
@@ -153,6 +162,11 @@ async function pathExists(targetPath, signal) {
|
|
|
153
162
|
return false;
|
|
154
163
|
}
|
|
155
164
|
}
|
|
165
|
+
function isENOENT(error) {
|
|
166
|
+
return (error instanceof Error &&
|
|
167
|
+
"code" in error &&
|
|
168
|
+
error.code === "ENOENT");
|
|
169
|
+
}
|
|
156
170
|
async function directoryExists(targetPath, signal) {
|
|
157
171
|
signal?.throwIfAborted();
|
|
158
172
|
try {
|
|
@@ -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,GACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAK7C;IACC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpE,MAAM,6BAA6B,CAAC,cAAc,EAAE,YAAY,EAAE;QAChE,cAAc;QACd,OAAO;QACP,UAAU;QACV,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,MAAM,8BAA8B,CAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EACvC,OAAO,CAAC,MAAM,CACf,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact-stage.js","sourceRoot":"","sources":["../src/artifact-stage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro-build.d.ts","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUrD;;;GAGG;AACH,qBAAa,UAAW,YAAW,aAAa;;gBAKlC,OAAO,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,EAAE,CAAC,EAAE,cAAc,CAAC;KACrB;IAMK,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAOhD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"astro-build.d.ts","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUrD;;;GAGG;AACH,qBAAa,UAAW,YAAW,aAAa;;gBAKlC,OAAO,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,EAAE,CAAC,EAAE,cAAc,CAAC;KACrB;IAMK,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAOhD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAsC5D"}
|
package/dist/astro-build.js
CHANGED
|
@@ -55,6 +55,7 @@ export class AstroBuild {
|
|
|
55
55
|
missingEntrypointMessage: settings.entrypoint
|
|
56
56
|
? undefined
|
|
57
57
|
: 'Astro build did not produce a standalone server entrypoint. Install @astrojs/node and configure it with adapter: node({ mode: "standalone" }) in your astro.config file.',
|
|
58
|
+
traceDependencies: true,
|
|
58
59
|
signal,
|
|
59
60
|
});
|
|
60
61
|
}
|
package/dist/astro-build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro-build.js","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,MAAM,sBAAsB,GAAG;IAC7B,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAS;IACjB,cAAc,CAAiB;IAC/B,GAAG,CAAkB;IAE9B,YAAY,OAIX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAoB;QACjC,OAAO,CACL,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;YAClE,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAC/D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,QAAQ,GACZ,IAAI,CAAC,cAAc;YACnB,CAAC,MAAM,oBAAoB,CAAC;gBAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,SAAS,EAAE,OAAO;gBAClB,MAAM;aACP,CAAC,CAAC,CAAC;QAEN,MAAM,uBAAuB,CAAC;YAC5B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,QAAQ;YACR,aAAa,EAAE,OAAO;YACtB,UAAU,EAAE;gBACV,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,cAAc,EACZ,oGAAoG;aACvG;YACD,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,uBAAuB,CAAC;YAC7B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,kBAAkB;YACrD,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,OAAO;YACd,wBAAwB,EAAE,QAAQ,CAAC,UAAU;gBAC3C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,0KAA0K;YAC9K,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"astro-build.js","sourceRoot":"","sources":["../src/astro-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,MAAM,sBAAsB,GAAG;IAC7B,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAS;IACjB,cAAc,CAAiB;IAC/B,GAAG,CAAkB;IAE9B,YAAY,OAIX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAoB;QACjC,OAAO,CACL,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;YAClE,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAC/D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,QAAQ,GACZ,IAAI,CAAC,cAAc;YACnB,CAAC,MAAM,oBAAoB,CAAC;gBAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,SAAS,EAAE,OAAO;gBAClB,MAAM;aACP,CAAC,CAAC,CAAC;QAEN,MAAM,uBAAuB,CAAC;YAC5B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,QAAQ;YACR,aAAa,EAAE,OAAO;YACtB,UAAU,EAAE;gBACV,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,cAAc,EACZ,oGAAoG;aACvG;YACD,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,uBAAuB,CAAC;YAC7B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,kBAAkB;YACrD,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,OAAO;YACd,wBAAwB,EAAE,QAAQ,CAAC,UAAU;gBAC3C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,0KAA0K;YAC9K,iBAAiB,EAAE,IAAI;YACvB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configured artifacts copy an output directory's contents to the artifact
|
|
3
|
+
* root. Runtime dependencies traced from that output need the same relocation:
|
|
4
|
+
* app-local node_modules become artifact-root node_modules, while hoisted
|
|
5
|
+
* workspace deps and workspace packages keep enough source-root layout for
|
|
6
|
+
* bare imports and package symlinks to resolve after unpacking.
|
|
7
|
+
*/
|
|
8
|
+
export declare function stageConfiguredArtifactDependencies(options: {
|
|
9
|
+
appPath: string;
|
|
10
|
+
artifactDir: string;
|
|
11
|
+
outputDirectory: string;
|
|
12
|
+
entrypoint: string;
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=configured-artifact-trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configured-artifact-trace.d.ts","sourceRoot":"","sources":["../src/configured-artifact-trace.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,wBAAsB,mCAAmC,CAAC,OAAO,EAAE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { realpath } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { nodeFileTrace } from "@vercel/nft";
|
|
4
|
+
import { copyPathMaterializingSymlinks, hoistIsolatedStoreDependencies, isPathWithin, } from "./artifact-stage.js";
|
|
5
|
+
import { resolveSourceRoot } from "./config/source-root.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configured artifacts copy an output directory's contents to the artifact
|
|
8
|
+
* root. Runtime dependencies traced from that output need the same relocation:
|
|
9
|
+
* app-local node_modules become artifact-root node_modules, while hoisted
|
|
10
|
+
* workspace deps and workspace packages keep enough source-root layout for
|
|
11
|
+
* bare imports and package symlinks to resolve after unpacking.
|
|
12
|
+
*/
|
|
13
|
+
export async function stageConfiguredArtifactDependencies(options) {
|
|
14
|
+
const [appRoot, outputRoot] = await Promise.all([
|
|
15
|
+
realpath(path.resolve(options.appPath)),
|
|
16
|
+
realpath(path.resolve(options.outputDirectory)),
|
|
17
|
+
]);
|
|
18
|
+
const sourceRoot = await resolveSourceRoot(appRoot, options.signal);
|
|
19
|
+
const entrypointPath = path.join(outputRoot, options.entrypoint);
|
|
20
|
+
options.signal?.throwIfAborted();
|
|
21
|
+
const { fileList } = await nodeFileTrace([entrypointPath], {
|
|
22
|
+
base: sourceRoot,
|
|
23
|
+
});
|
|
24
|
+
for (const relativePath of fileList) {
|
|
25
|
+
options.signal?.throwIfAborted();
|
|
26
|
+
const sourcePath = path.join(sourceRoot, relativePath);
|
|
27
|
+
if (isPathWithin(outputRoot, sourcePath)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
await copyPathMaterializingSymlinks(sourcePath, path.join(options.artifactDir, artifactRelativePathForTrace(sourcePath, {
|
|
31
|
+
appRoot,
|
|
32
|
+
sourceRoot,
|
|
33
|
+
})), {
|
|
34
|
+
appRoot,
|
|
35
|
+
sourceRoot,
|
|
36
|
+
allowedSymlinkTargetRoots: [appRoot, sourceRoot],
|
|
37
|
+
ignoreMissingSource: true,
|
|
38
|
+
signal: options.signal,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
await hoistIsolatedStoreDependencies(path.join(options.artifactDir, "node_modules"), options.signal);
|
|
42
|
+
}
|
|
43
|
+
function artifactRelativePathForTrace(sourcePath, options) {
|
|
44
|
+
const resolvedSource = path.resolve(sourcePath);
|
|
45
|
+
const appNodeModules = path.join(options.appRoot, "node_modules");
|
|
46
|
+
const sourceNodeModules = path.join(options.sourceRoot, "node_modules");
|
|
47
|
+
if (isPathWithin(appNodeModules, resolvedSource)) {
|
|
48
|
+
return path.join("node_modules", path.relative(appNodeModules, resolvedSource));
|
|
49
|
+
}
|
|
50
|
+
if (isPathWithin(options.appRoot, resolvedSource)) {
|
|
51
|
+
return path.relative(options.appRoot, resolvedSource);
|
|
52
|
+
}
|
|
53
|
+
if (isPathWithin(sourceNodeModules, resolvedSource)) {
|
|
54
|
+
return path.join("node_modules", path.relative(sourceNodeModules, resolvedSource));
|
|
55
|
+
}
|
|
56
|
+
return path.relative(options.sourceRoot, resolvedSource);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=configured-artifact-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configured-artifact-trace.js","sourceRoot":"","sources":["../src/configured-artifact-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export declare function stageConfiguredArtifact(options: {
|
|
|
7
7
|
buildType: FrameworkBuildType;
|
|
8
8
|
label: string;
|
|
9
9
|
missingEntrypointMessage?: string;
|
|
10
|
+
traceDependencies?: boolean;
|
|
10
11
|
signal?: AbortSignal;
|
|
11
12
|
}): Promise<BuildArtifact>;
|
|
12
13
|
export declare function resolveConfiguredArtifactEntrypoint(options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configured-artifact.d.ts","sourceRoot":"","sources":["../src/configured-artifact.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"configured-artifact.d.ts","sourceRoot":"","sources":["../src/configured-artifact.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkEzB;AAED,wBAAsB,mCAAmC,CAAC,OAAO,EAAE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlB;AAED,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,MAAM,CAoBR"}
|
|
@@ -3,6 +3,7 @@ import os from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { normalizeArtifactSymlinks } from "./artifact-postprocess.js";
|
|
5
5
|
import { defaultHttpPortForBuildType, } from "./config/frameworks.js";
|
|
6
|
+
import { stageConfiguredArtifactDependencies } from "./configured-artifact-trace.js";
|
|
6
7
|
export async function stageConfiguredArtifact(options) {
|
|
7
8
|
options.signal?.throwIfAborted();
|
|
8
9
|
const outputDir = resolvePathInside(options.appPath, options.outputDirectory, `${options.label} build output directory must be a relative path inside the app directory`);
|
|
@@ -32,6 +33,15 @@ export async function stageConfiguredArtifact(options) {
|
|
|
32
33
|
verbatimSymlinks: true,
|
|
33
34
|
});
|
|
34
35
|
await normalizeArtifactSymlinks(artifactDir, options.appPath, options.signal);
|
|
36
|
+
if (options.traceDependencies) {
|
|
37
|
+
await stageConfiguredArtifactDependencies({
|
|
38
|
+
appPath: realAppPath,
|
|
39
|
+
artifactDir,
|
|
40
|
+
outputDirectory: realOutputDir,
|
|
41
|
+
entrypoint,
|
|
42
|
+
signal: options.signal,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
35
45
|
return {
|
|
36
46
|
directory: artifactDir,
|
|
37
47
|
entrypoint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configured-artifact.js","sourceRoot":"","sources":["../src/configured-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EACL,2BAA2B,GAE5B,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"configured-artifact.js","sourceRoot":"","sources":["../src/configured-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EACL,2BAA2B,GAE5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AAErF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAS7C;IACC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,iBAAiB,CACjC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,eAAe,EACvB,GAAG,OAAO,CAAC,KAAK,0EAA0E,CAC3F,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,2CAA2C,OAAO,CAAC,eAAe,EAAE,CACrF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,SAAS,CAAC;KACpB,CAAC,CAAC;IACH,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,4DAA4D,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,mCAAmC,CAAC;QAC3D,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,gBAAgB,EAAE,OAAO,CAAC,eAAe;QACzC,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;KAC3D,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI;YACf,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,MAAM,yBAAyB,CAC7B,WAAW,EACX,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,CACf,CAAC;QACF,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,MAAM,mCAAmC,CAAC;gBACxC,OAAO,EAAE,WAAW;gBACpB,WAAW;gBACX,eAAe,EAAE,aAAa;gBAC9B,UAAU;gBACV,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,SAAS,EAAE,WAAW;YACtB,UAAU;YACV,kBAAkB,EAAE;gBAClB,IAAI,EAAE,2BAA2B,CAAC,OAAO,CAAC,SAAS,CAAC;aACrD;YACD,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CAAC,OAMzD;IACC,MAAM,UAAU,GAAG,qCAAqC,CACtD,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,KAAK,CACd,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,qCAAqC,SAAS,IAAI,UAAU,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,UAAkB,EAClB,KAAa;IAEb,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CACrC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACtC,CAAC;IACF,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,UAAU,KAAK,GAAG;QAClB,UAAU,KAAK,IAAI;QACnB,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,uEAAuE,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,YAAoB,EACpB,YAAoB;IAEpB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7C,IACE,GAAG,CAAC,MAAM,KAAK,CAAC;QAChB,UAAU,KAAK,IAAI;QACnB,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,IACE,QAAQ,KAAK,IAAI;QACjB,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,SAAiB;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,OAAO,CACL,QAAQ,KAAK,EAAE;QACf,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,QAAQ,KAAK,IAAI;YACjB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAC9B,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
package/src/artifact-stage.ts
CHANGED
|
@@ -45,13 +45,20 @@ export async function stageStandaloneArtifact(options: {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/** Options shared by the symlink-materializing copy walk. */
|
|
48
|
-
interface MaterializeOptions {
|
|
48
|
+
export interface MaterializeOptions {
|
|
49
49
|
/** Root of the standalone output being copied (for fallback resolution). */
|
|
50
|
-
standaloneRoot
|
|
50
|
+
standaloneRoot?: string;
|
|
51
51
|
/** The app directory; symlink targets here are materialized. */
|
|
52
52
|
appRoot: string;
|
|
53
53
|
/** The workspace/source root; targets in its node_modules are materialized. */
|
|
54
54
|
sourceRoot: string;
|
|
55
|
+
/**
|
|
56
|
+
* Roots a symlink may resolve into. Defaults to the app root and workspace
|
|
57
|
+
* node_modules, matching standalone framework artifacts.
|
|
58
|
+
*/
|
|
59
|
+
allowedSymlinkTargetRoots?: readonly string[];
|
|
60
|
+
/** Ignore a missing source path instead of throwing. Useful for trace lists. */
|
|
61
|
+
ignoreMissingSource?: boolean;
|
|
55
62
|
signal?: AbortSignal;
|
|
56
63
|
}
|
|
57
64
|
|
|
@@ -138,13 +145,21 @@ function storeMaterializeOptions(
|
|
|
138
145
|
};
|
|
139
146
|
}
|
|
140
147
|
|
|
141
|
-
async function copyPathMaterializingSymlinks(
|
|
148
|
+
export async function copyPathMaterializingSymlinks(
|
|
142
149
|
sourcePath: string,
|
|
143
150
|
destinationPath: string,
|
|
144
151
|
options: MaterializeOptions,
|
|
145
152
|
): Promise<void> {
|
|
146
153
|
options.signal?.throwIfAborted();
|
|
147
|
-
const sourceStat = await lstat(sourcePath)
|
|
154
|
+
const sourceStat = await lstat(sourcePath).catch((error) => {
|
|
155
|
+
if (options.ignoreMissingSource && isENOENT(error)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
throw error;
|
|
159
|
+
});
|
|
160
|
+
if (!sourceStat) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
148
163
|
|
|
149
164
|
if (sourceStat.isSymbolicLink()) {
|
|
150
165
|
const resolvedTarget = await resolveSymlinkTarget(sourcePath, options);
|
|
@@ -188,10 +203,11 @@ async function resolveSymlinkTarget(
|
|
|
188
203
|
const resolvedTarget = path.resolve(path.dirname(symlinkPath), linkTarget);
|
|
189
204
|
|
|
190
205
|
if (await pathExists(resolvedTarget, options.signal)) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
206
|
+
const allowedRoots = options.allowedSymlinkTargetRoots ?? [
|
|
207
|
+
options.appRoot,
|
|
208
|
+
path.join(options.sourceRoot, "node_modules"),
|
|
209
|
+
];
|
|
210
|
+
if (!allowedRoots.some((root) => isPathWithin(root, resolvedTarget))) {
|
|
195
211
|
throw new Error(
|
|
196
212
|
`Build artifact symlink escapes the app directory: ${resolvedTarget}`,
|
|
197
213
|
);
|
|
@@ -199,7 +215,10 @@ async function resolveSymlinkTarget(
|
|
|
199
215
|
return resolvedTarget;
|
|
200
216
|
}
|
|
201
217
|
|
|
202
|
-
if (
|
|
218
|
+
if (
|
|
219
|
+
options.standaloneRoot &&
|
|
220
|
+
isPathWithin(options.standaloneRoot, resolvedTarget)
|
|
221
|
+
) {
|
|
203
222
|
const fallbackTarget = path.join(
|
|
204
223
|
options.appRoot,
|
|
205
224
|
path.relative(options.standaloneRoot, resolvedTarget),
|
|
@@ -218,7 +237,7 @@ async function resolveSymlinkTarget(
|
|
|
218
237
|
}
|
|
219
238
|
|
|
220
239
|
throw new Error(
|
|
221
|
-
`
|
|
240
|
+
`Build artifact symlink target is missing: ${symlinkPath} -> ${linkTarget} (resolved to ${resolvedTarget})`,
|
|
222
241
|
);
|
|
223
242
|
}
|
|
224
243
|
|
|
@@ -232,7 +251,7 @@ function isPnpmHoistLink(symlinkPath: string): boolean {
|
|
|
232
251
|
return false;
|
|
233
252
|
}
|
|
234
253
|
|
|
235
|
-
function isPathWithin(rootPath: string, candidatePath: string): boolean {
|
|
254
|
+
export function isPathWithin(rootPath: string, candidatePath: string): boolean {
|
|
236
255
|
const relativePath = path.relative(rootPath, candidatePath);
|
|
237
256
|
return (
|
|
238
257
|
relativePath === "" ||
|
|
@@ -242,13 +261,6 @@ function isPathWithin(rootPath: string, candidatePath: string): boolean {
|
|
|
242
261
|
);
|
|
243
262
|
}
|
|
244
263
|
|
|
245
|
-
function isPathWithinWorkspaceDependency(
|
|
246
|
-
sourceRoot: string,
|
|
247
|
-
candidatePath: string,
|
|
248
|
-
): boolean {
|
|
249
|
-
return isPathWithin(path.join(sourceRoot, "node_modules"), candidatePath);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
264
|
async function readEntries(directory: string, signal?: AbortSignal) {
|
|
253
265
|
signal?.throwIfAborted();
|
|
254
266
|
return readdir(directory, { withFileTypes: true });
|
|
@@ -267,6 +279,14 @@ async function pathExists(
|
|
|
267
279
|
}
|
|
268
280
|
}
|
|
269
281
|
|
|
282
|
+
function isENOENT(error: unknown): boolean {
|
|
283
|
+
return (
|
|
284
|
+
error instanceof Error &&
|
|
285
|
+
"code" in error &&
|
|
286
|
+
(error as { code?: string }).code === "ENOENT"
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
|
|
270
290
|
async function directoryExists(
|
|
271
291
|
targetPath: string,
|
|
272
292
|
signal?: AbortSignal,
|
package/src/astro-build.ts
CHANGED
|
@@ -76,6 +76,7 @@ export class AstroBuild implements BuildStrategy {
|
|
|
76
76
|
missingEntrypointMessage: settings.entrypoint
|
|
77
77
|
? undefined
|
|
78
78
|
: 'Astro build did not produce a standalone server entrypoint. Install @astrojs/node and configure it with adapter: node({ mode: "standalone" }) in your astro.config file.',
|
|
79
|
+
traceDependencies: true,
|
|
79
80
|
signal,
|
|
80
81
|
});
|
|
81
82
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { realpath } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
import { nodeFileTrace } from "@vercel/nft";
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
copyPathMaterializingSymlinks,
|
|
8
|
+
hoistIsolatedStoreDependencies,
|
|
9
|
+
isPathWithin,
|
|
10
|
+
} from "./artifact-stage.ts";
|
|
11
|
+
import { resolveSourceRoot } from "./config/source-root.ts";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Configured artifacts copy an output directory's contents to the artifact
|
|
15
|
+
* root. Runtime dependencies traced from that output need the same relocation:
|
|
16
|
+
* app-local node_modules become artifact-root node_modules, while hoisted
|
|
17
|
+
* workspace deps and workspace packages keep enough source-root layout for
|
|
18
|
+
* bare imports and package symlinks to resolve after unpacking.
|
|
19
|
+
*/
|
|
20
|
+
export async function stageConfiguredArtifactDependencies(options: {
|
|
21
|
+
appPath: string;
|
|
22
|
+
artifactDir: string;
|
|
23
|
+
outputDirectory: string;
|
|
24
|
+
entrypoint: string;
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
}): Promise<void> {
|
|
27
|
+
const [appRoot, outputRoot] = await Promise.all([
|
|
28
|
+
realpath(path.resolve(options.appPath)),
|
|
29
|
+
realpath(path.resolve(options.outputDirectory)),
|
|
30
|
+
]);
|
|
31
|
+
const sourceRoot = await resolveSourceRoot(appRoot, options.signal);
|
|
32
|
+
const entrypointPath = path.join(outputRoot, options.entrypoint);
|
|
33
|
+
|
|
34
|
+
options.signal?.throwIfAborted();
|
|
35
|
+
const { fileList } = await nodeFileTrace([entrypointPath], {
|
|
36
|
+
base: sourceRoot,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
for (const relativePath of fileList) {
|
|
40
|
+
options.signal?.throwIfAborted();
|
|
41
|
+
const sourcePath = path.join(sourceRoot, relativePath);
|
|
42
|
+
if (isPathWithin(outputRoot, sourcePath)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await copyPathMaterializingSymlinks(
|
|
47
|
+
sourcePath,
|
|
48
|
+
path.join(
|
|
49
|
+
options.artifactDir,
|
|
50
|
+
artifactRelativePathForTrace(sourcePath, {
|
|
51
|
+
appRoot,
|
|
52
|
+
sourceRoot,
|
|
53
|
+
}),
|
|
54
|
+
),
|
|
55
|
+
{
|
|
56
|
+
appRoot,
|
|
57
|
+
sourceRoot,
|
|
58
|
+
allowedSymlinkTargetRoots: [appRoot, sourceRoot],
|
|
59
|
+
ignoreMissingSource: true,
|
|
60
|
+
signal: options.signal,
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
await hoistIsolatedStoreDependencies(
|
|
66
|
+
path.join(options.artifactDir, "node_modules"),
|
|
67
|
+
options.signal,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function artifactRelativePathForTrace(
|
|
72
|
+
sourcePath: string,
|
|
73
|
+
options: { appRoot: string; sourceRoot: string },
|
|
74
|
+
): string {
|
|
75
|
+
const resolvedSource = path.resolve(sourcePath);
|
|
76
|
+
const appNodeModules = path.join(options.appRoot, "node_modules");
|
|
77
|
+
const sourceNodeModules = path.join(options.sourceRoot, "node_modules");
|
|
78
|
+
|
|
79
|
+
if (isPathWithin(appNodeModules, resolvedSource)) {
|
|
80
|
+
return path.join(
|
|
81
|
+
"node_modules",
|
|
82
|
+
path.relative(appNodeModules, resolvedSource),
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (isPathWithin(options.appRoot, resolvedSource)) {
|
|
87
|
+
return path.relative(options.appRoot, resolvedSource);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (isPathWithin(sourceNodeModules, resolvedSource)) {
|
|
91
|
+
return path.join(
|
|
92
|
+
"node_modules",
|
|
93
|
+
path.relative(sourceNodeModules, resolvedSource),
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return path.relative(options.sourceRoot, resolvedSource);
|
|
98
|
+
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
defaultHttpPortForBuildType,
|
|
9
9
|
type FrameworkBuildType,
|
|
10
10
|
} from "./config/frameworks.ts";
|
|
11
|
+
import { stageConfiguredArtifactDependencies } from "./configured-artifact-trace.ts";
|
|
11
12
|
|
|
12
13
|
export async function stageConfiguredArtifact(options: {
|
|
13
14
|
appPath: string;
|
|
@@ -16,6 +17,7 @@ export async function stageConfiguredArtifact(options: {
|
|
|
16
17
|
buildType: FrameworkBuildType;
|
|
17
18
|
label: string;
|
|
18
19
|
missingEntrypointMessage?: string;
|
|
20
|
+
traceDependencies?: boolean;
|
|
19
21
|
signal?: AbortSignal;
|
|
20
22
|
}): Promise<BuildArtifact> {
|
|
21
23
|
options.signal?.throwIfAborted();
|
|
@@ -61,6 +63,15 @@ export async function stageConfiguredArtifact(options: {
|
|
|
61
63
|
options.appPath,
|
|
62
64
|
options.signal,
|
|
63
65
|
);
|
|
66
|
+
if (options.traceDependencies) {
|
|
67
|
+
await stageConfiguredArtifactDependencies({
|
|
68
|
+
appPath: realAppPath,
|
|
69
|
+
artifactDir,
|
|
70
|
+
outputDirectory: realOutputDir,
|
|
71
|
+
entrypoint,
|
|
72
|
+
signal: options.signal,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
64
75
|
|
|
65
76
|
return {
|
|
66
77
|
directory: artifactDir,
|