@vercel/static-build 10.0.1 → 10.0.2
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/index.js +850 -33
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -19035,6 +19035,187 @@ var require_semver3 = __commonJS({
|
|
|
19035
19035
|
}
|
|
19036
19036
|
});
|
|
19037
19037
|
|
|
19038
|
+
// ../../internals/runtimes/dist/constants.js
|
|
19039
|
+
var require_constants2 = __commonJS({
|
|
19040
|
+
"../../internals/runtimes/dist/constants.js"(exports, module2) {
|
|
19041
|
+
"use strict";
|
|
19042
|
+
var __defProp2 = Object.defineProperty;
|
|
19043
|
+
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
19044
|
+
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
19045
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
19046
|
+
var __export2 = (target, all) => {
|
|
19047
|
+
for (var name in all)
|
|
19048
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
19049
|
+
};
|
|
19050
|
+
var __copyProps2 = (to, from, except, desc) => {
|
|
19051
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
19052
|
+
for (let key of __getOwnPropNames2(from))
|
|
19053
|
+
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
19054
|
+
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
19055
|
+
}
|
|
19056
|
+
return to;
|
|
19057
|
+
};
|
|
19058
|
+
var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
19059
|
+
var constants_exports = {};
|
|
19060
|
+
__export2(constants_exports, {
|
|
19061
|
+
BUILDER_RUNTIMES: () => BUILDER_RUNTIMES,
|
|
19062
|
+
CONTAINER_ENTRYPOINT_CANDIDATES: () => CONTAINER_ENTRYPOINT_CANDIDATES,
|
|
19063
|
+
ENTRYPOINT_EXTENSIONS: () => ENTRYPOINT_EXTENSIONS,
|
|
19064
|
+
ROUTE_OWNING_BUILDERS: () => ROUTE_OWNING_BUILDERS,
|
|
19065
|
+
RUNTIME_BUILDERS: () => RUNTIME_BUILDERS,
|
|
19066
|
+
RUNTIME_MANIFESTS: () => RUNTIME_MANIFESTS,
|
|
19067
|
+
STATIC_BUILDERS: () => STATIC_BUILDERS
|
|
19068
|
+
});
|
|
19069
|
+
module2.exports = __toCommonJS2(constants_exports);
|
|
19070
|
+
var RUNTIME_BUILDERS = {
|
|
19071
|
+
node: "@vercel/backends",
|
|
19072
|
+
python: "@vercel/python",
|
|
19073
|
+
go: "@vercel/go",
|
|
19074
|
+
rust: "@vercel/rust",
|
|
19075
|
+
ruby: "@vercel/ruby",
|
|
19076
|
+
container: "@vercel/container"
|
|
19077
|
+
};
|
|
19078
|
+
var RUNTIME_MANIFESTS = {
|
|
19079
|
+
node: ["package.json"],
|
|
19080
|
+
python: [
|
|
19081
|
+
"pyproject.toml",
|
|
19082
|
+
"requirements.txt",
|
|
19083
|
+
"Pipfile",
|
|
19084
|
+
"pylock.yml",
|
|
19085
|
+
"uv.lock",
|
|
19086
|
+
"setup.py"
|
|
19087
|
+
],
|
|
19088
|
+
go: ["go.mod"],
|
|
19089
|
+
ruby: ["Gemfile"],
|
|
19090
|
+
rust: ["Cargo.toml"]
|
|
19091
|
+
};
|
|
19092
|
+
var ENTRYPOINT_EXTENSIONS = {
|
|
19093
|
+
".ts": "node",
|
|
19094
|
+
".mts": "node",
|
|
19095
|
+
".js": "node",
|
|
19096
|
+
".mjs": "node",
|
|
19097
|
+
".cjs": "node",
|
|
19098
|
+
".py": "python",
|
|
19099
|
+
".go": "go",
|
|
19100
|
+
".rs": "rust",
|
|
19101
|
+
".rb": "ruby",
|
|
19102
|
+
".ru": "ruby"
|
|
19103
|
+
};
|
|
19104
|
+
var BUILDER_RUNTIMES = Object.fromEntries(
|
|
19105
|
+
Object.entries(RUNTIME_BUILDERS).map(([runtime, builder]) => [
|
|
19106
|
+
builder,
|
|
19107
|
+
runtime
|
|
19108
|
+
])
|
|
19109
|
+
);
|
|
19110
|
+
var STATIC_BUILDERS = /* @__PURE__ */ new Set([
|
|
19111
|
+
"@vercel/static-build",
|
|
19112
|
+
"@vercel/static"
|
|
19113
|
+
]);
|
|
19114
|
+
var ROUTE_OWNING_BUILDERS = /* @__PURE__ */ new Set([
|
|
19115
|
+
"@vercel/next",
|
|
19116
|
+
"@vercel/backends"
|
|
19117
|
+
]);
|
|
19118
|
+
var CONTAINER_ENTRYPOINT_CANDIDATES = [
|
|
19119
|
+
"Dockerfile.vercel",
|
|
19120
|
+
"Containerfile.vercel",
|
|
19121
|
+
"Dockerfile",
|
|
19122
|
+
"Containerfile"
|
|
19123
|
+
];
|
|
19124
|
+
}
|
|
19125
|
+
});
|
|
19126
|
+
|
|
19127
|
+
// ../../internals/runtimes/dist/framework.js
|
|
19128
|
+
var require_framework = __commonJS({
|
|
19129
|
+
"../../internals/runtimes/dist/framework.js"(exports, module2) {
|
|
19130
|
+
"use strict";
|
|
19131
|
+
var __defProp2 = Object.defineProperty;
|
|
19132
|
+
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
19133
|
+
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
19134
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
19135
|
+
var __export2 = (target, all) => {
|
|
19136
|
+
for (var name in all)
|
|
19137
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
19138
|
+
};
|
|
19139
|
+
var __copyProps2 = (to, from, except, desc) => {
|
|
19140
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
19141
|
+
for (let key of __getOwnPropNames2(from))
|
|
19142
|
+
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
19143
|
+
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
19144
|
+
}
|
|
19145
|
+
return to;
|
|
19146
|
+
};
|
|
19147
|
+
var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
19148
|
+
var framework_exports = {};
|
|
19149
|
+
__export2(framework_exports, {
|
|
19150
|
+
DETECTION_FRAMEWORKS: () => DETECTION_FRAMEWORKS,
|
|
19151
|
+
filterFrameworksByRuntime: () => filterFrameworksByRuntime,
|
|
19152
|
+
frameworksBySlug: () => frameworksBySlug,
|
|
19153
|
+
inferBuilderRuntimeFromFramework: () => inferBuilderRuntimeFromFramework,
|
|
19154
|
+
inferRuntimeFromFramework: () => inferRuntimeFromFramework,
|
|
19155
|
+
isBFFFramework: () => isBFFFramework,
|
|
19156
|
+
isFrontendFramework: () => isFrontendFramework
|
|
19157
|
+
});
|
|
19158
|
+
module2.exports = __toCommonJS2(framework_exports);
|
|
19159
|
+
var import_build_utils5 = require("@vercel/build-utils");
|
|
19160
|
+
var import_frameworks2 = require_frameworks();
|
|
19161
|
+
var import_constants = require_constants2();
|
|
19162
|
+
var frameworksBySlug = new Map(
|
|
19163
|
+
import_frameworks2.frameworkList.flatMap((f) => typeof f.slug === "string" ? [[f.slug, f]] : [])
|
|
19164
|
+
);
|
|
19165
|
+
var DETECTION_FRAMEWORKS = import_frameworks2.frameworkList.filter(
|
|
19166
|
+
(framework) => !framework.experimental || framework.runtimeFramework
|
|
19167
|
+
);
|
|
19168
|
+
function inferRuntimeFromFramework(framework) {
|
|
19169
|
+
if (!framework)
|
|
19170
|
+
return void 0;
|
|
19171
|
+
if (framework in import_constants.RUNTIME_BUILDERS)
|
|
19172
|
+
return framework;
|
|
19173
|
+
if ((0, import_build_utils5.isPythonFramework)(framework))
|
|
19174
|
+
return "python";
|
|
19175
|
+
if ((0, import_build_utils5.isBackendFramework)(framework))
|
|
19176
|
+
return "node";
|
|
19177
|
+
return void 0;
|
|
19178
|
+
}
|
|
19179
|
+
var STATIC_BUILDER_RUNTIMES = {
|
|
19180
|
+
hugo: "go",
|
|
19181
|
+
jekyll: "ruby",
|
|
19182
|
+
middleman: "ruby",
|
|
19183
|
+
zola: "rust"
|
|
19184
|
+
};
|
|
19185
|
+
function inferBuilderRuntimeFromFramework(framework) {
|
|
19186
|
+
if (!framework || framework === "container" || framework === "services")
|
|
19187
|
+
return void 0;
|
|
19188
|
+
const f = frameworksBySlug.get(framework);
|
|
19189
|
+
const declaredBuilder = f?.useRuntime?.use;
|
|
19190
|
+
if (declaredBuilder)
|
|
19191
|
+
return import_constants.BUILDER_RUNTIMES[declaredBuilder];
|
|
19192
|
+
const detectorItems = [
|
|
19193
|
+
...f?.detectors?.every ?? [],
|
|
19194
|
+
...f?.detectors?.some ?? []
|
|
19195
|
+
];
|
|
19196
|
+
return STATIC_BUILDER_RUNTIMES[framework] ?? (detectorItems.some((d) => d.matchPackage !== void 0) ? "node" : void 0);
|
|
19197
|
+
}
|
|
19198
|
+
function isFrontendFramework(framework) {
|
|
19199
|
+
return !!framework && !inferRuntimeFromFramework(framework);
|
|
19200
|
+
}
|
|
19201
|
+
var BFF_FRAMEWORKS = /* @__PURE__ */ new Set([
|
|
19202
|
+
"nextjs",
|
|
19203
|
+
"nuxtjs",
|
|
19204
|
+
"sveltekit",
|
|
19205
|
+
"remix",
|
|
19206
|
+
"solidstart"
|
|
19207
|
+
]);
|
|
19208
|
+
function isBFFFramework(framework) {
|
|
19209
|
+
return !!framework && BFF_FRAMEWORKS.has(framework);
|
|
19210
|
+
}
|
|
19211
|
+
function filterFrameworksByRuntime(frameworks2, runtime) {
|
|
19212
|
+
if (!runtime)
|
|
19213
|
+
return [...frameworks2];
|
|
19214
|
+
return frameworks2.filter((f) => inferRuntimeFromFramework(f.slug) === runtime);
|
|
19215
|
+
}
|
|
19216
|
+
}
|
|
19217
|
+
});
|
|
19218
|
+
|
|
19038
19219
|
// ../fs-detectors/dist/is-official-runtime.js
|
|
19039
19220
|
var require_is_official_runtime = __commonJS({
|
|
19040
19221
|
"../fs-detectors/dist/is-official-runtime.js"(exports, module2) {
|
|
@@ -32212,6 +32393,56 @@ var require_python = __commonJS({
|
|
|
32212
32393
|
}
|
|
32213
32394
|
});
|
|
32214
32395
|
|
|
32396
|
+
// ../fs-detectors/dist/buildpack-runtimes.js
|
|
32397
|
+
var require_buildpack_runtimes = __commonJS({
|
|
32398
|
+
"../fs-detectors/dist/buildpack-runtimes.js"(exports, module2) {
|
|
32399
|
+
"use strict";
|
|
32400
|
+
var __defProp2 = Object.defineProperty;
|
|
32401
|
+
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
32402
|
+
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
32403
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
32404
|
+
var __export2 = (target, all) => {
|
|
32405
|
+
for (var name in all)
|
|
32406
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
32407
|
+
};
|
|
32408
|
+
var __copyProps2 = (to, from, except, desc) => {
|
|
32409
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
32410
|
+
for (let key of __getOwnPropNames2(from))
|
|
32411
|
+
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
32412
|
+
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
32413
|
+
}
|
|
32414
|
+
return to;
|
|
32415
|
+
};
|
|
32416
|
+
var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
32417
|
+
var buildpack_runtimes_exports = {};
|
|
32418
|
+
__export2(buildpack_runtimes_exports, {
|
|
32419
|
+
BUILDPACK_PROJECT_MARKERS: () => BUILDPACK_PROJECT_MARKERS,
|
|
32420
|
+
hasBuildpackProjectMarker: () => hasBuildpackProjectMarker,
|
|
32421
|
+
isBuildpackRuntimeEnabled: () => isBuildpackRuntimeEnabled,
|
|
32422
|
+
toBuildpackRuntime: () => toBuildpackRuntime
|
|
32423
|
+
});
|
|
32424
|
+
module2.exports = __toCommonJS2(buildpack_runtimes_exports);
|
|
32425
|
+
var BUILDPACK_PROJECT_MARKERS = /* @__PURE__ */ new Map([["ruby", ["Gemfile"]]]);
|
|
32426
|
+
function isBuildpackRuntimeEnabled(runtime) {
|
|
32427
|
+
return process.env[`VERCEL_EXPERIMENTAL_BUILDPACK_${runtime.toUpperCase()}`] === "1";
|
|
32428
|
+
}
|
|
32429
|
+
function toBuildpackRuntime(runtime) {
|
|
32430
|
+
if (!runtime || !BUILDPACK_PROJECT_MARKERS.has(runtime) || !isBuildpackRuntimeEnabled(runtime)) {
|
|
32431
|
+
return void 0;
|
|
32432
|
+
}
|
|
32433
|
+
return runtime;
|
|
32434
|
+
}
|
|
32435
|
+
async function hasBuildpackProjectMarker(runtime, hasFile) {
|
|
32436
|
+
for (const marker of BUILDPACK_PROJECT_MARKERS.get(runtime) ?? []) {
|
|
32437
|
+
if (await hasFile(marker)) {
|
|
32438
|
+
return true;
|
|
32439
|
+
}
|
|
32440
|
+
}
|
|
32441
|
+
return false;
|
|
32442
|
+
}
|
|
32443
|
+
}
|
|
32444
|
+
});
|
|
32445
|
+
|
|
32215
32446
|
// ../fs-detectors/dist/detect-builders.js
|
|
32216
32447
|
var require_detect_builders = __commonJS({
|
|
32217
32448
|
"../fs-detectors/dist/detect-builders.js"(exports, module2) {
|
|
@@ -32263,9 +32494,12 @@ var require_detect_builders = __commonJS({
|
|
|
32263
32494
|
var import_semver2 = require_semver3();
|
|
32264
32495
|
var import_path7 = require("path");
|
|
32265
32496
|
var import_frameworks2 = require_frameworks();
|
|
32497
|
+
var import_framework = require_framework();
|
|
32498
|
+
var import_constants = require_constants2();
|
|
32266
32499
|
var import_is_official_runtime = require_is_official_runtime();
|
|
32267
32500
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
32268
32501
|
var import_python = require_python();
|
|
32502
|
+
var import_buildpack_runtimes = require_buildpack_runtimes();
|
|
32269
32503
|
var REGEX_MIDDLEWARE_FILES = "middleware.[jt]s";
|
|
32270
32504
|
var VERCEL_PLATFORM_FILES = [
|
|
32271
32505
|
"api/**",
|
|
@@ -32291,9 +32525,6 @@ var require_detect_builders = __commonJS({
|
|
|
32291
32525
|
].join(",")}}`;
|
|
32292
32526
|
}
|
|
32293
32527
|
var REGEX_NON_VERCEL_PLATFORM_FILES2 = getStaticFilesPattern();
|
|
32294
|
-
var slugToFramework = new Map(
|
|
32295
|
-
import_frameworks2.frameworkList.map((f) => [f.slug, f])
|
|
32296
|
-
);
|
|
32297
32528
|
var builderToFrameworks2 = (() => {
|
|
32298
32529
|
const map = /* @__PURE__ */ new Map();
|
|
32299
32530
|
for (const f of import_frameworks2.frameworkList) {
|
|
@@ -32378,7 +32609,7 @@ var require_detect_builders = __commonJS({
|
|
|
32378
32609
|
};
|
|
32379
32610
|
const absolutePathCache = /* @__PURE__ */ new Map();
|
|
32380
32611
|
const { buildCommand, outputDirectory } = projectSettings;
|
|
32381
|
-
const frameworkConfig =
|
|
32612
|
+
const frameworkConfig = import_framework.frameworksBySlug.get(framework || "");
|
|
32382
32613
|
const rustStaticOutput = isRustStaticOutput(framework, projectSettings);
|
|
32383
32614
|
const ignoreRuntimes = new Set(
|
|
32384
32615
|
rustStaticOutput ? void 0 : frameworkConfig?.ignoreRuntimes
|
|
@@ -32749,6 +32980,14 @@ var require_detect_builders = __commonJS({
|
|
|
32749
32980
|
message: `The \`proxy\` property cannot be used with ${framework === "nextjs" ? "Next.js" : "Astro"} because the framework builds its own routing middleware.`
|
|
32750
32981
|
};
|
|
32751
32982
|
}
|
|
32983
|
+
const appRuntime = (0, import_framework.inferBuilderRuntimeFromFramework)(framework);
|
|
32984
|
+
const proxyRuntime = import_constants.ENTRYPOINT_EXTENSIONS[(0, import_path7.extname)(proxy.entrypoint)];
|
|
32985
|
+
if (appRuntime !== void 0 && proxyRuntime !== void 0 && appRuntime !== proxyRuntime) {
|
|
32986
|
+
return {
|
|
32987
|
+
code: "proxy_runtime_mismatch",
|
|
32988
|
+
message: `The proxy entrypoint \`${proxy.entrypoint}\` uses the ${proxyRuntime} runtime, but the app uses the ${appRuntime} runtime. The proxy and app must use the same runtime.`
|
|
32989
|
+
};
|
|
32990
|
+
}
|
|
32752
32991
|
return null;
|
|
32753
32992
|
}
|
|
32754
32993
|
function hasBuildScript(pkg) {
|
|
@@ -32803,8 +33042,19 @@ var require_detect_builders = __commonJS({
|
|
|
32803
33042
|
}
|
|
32804
33043
|
});
|
|
32805
33044
|
}
|
|
32806
|
-
const f =
|
|
33045
|
+
const f = import_framework.frameworksBySlug.get(framework || "");
|
|
32807
33046
|
if (f && f.useRuntime && !isRustStaticOutput(framework, projectSettings)) {
|
|
33047
|
+
const buildpackRuntime = (0, import_buildpack_runtimes.toBuildpackRuntime)(framework);
|
|
33048
|
+
if (buildpackRuntime && (import_buildpack_runtimes.BUILDPACK_PROJECT_MARKERS.get(buildpackRuntime) ?? []).some(
|
|
33049
|
+
(marker) => files.includes(marker)
|
|
33050
|
+
)) {
|
|
33051
|
+
config.buildpack = buildpackRuntime;
|
|
33052
|
+
return {
|
|
33053
|
+
src: "<detect>",
|
|
33054
|
+
use: `@vercel/container${withTag}`,
|
|
33055
|
+
config
|
|
33056
|
+
};
|
|
33057
|
+
}
|
|
32808
33058
|
const { src, use } = f.useRuntime;
|
|
32809
33059
|
const shouldUseUnifiedBackend = (0, import_build_utils5.isExperimentalBackendsEnabled)() && import_build_utils5.BACKEND_BUILDERS.includes(use);
|
|
32810
33060
|
const finalUse = shouldUseUnifiedBackend ? import_build_utils5.UNIFIED_BACKEND_BUILDER : use;
|
|
@@ -33111,7 +33361,7 @@ var require_detect_builders = __commonJS({
|
|
|
33111
33361
|
const framework = frontendBuilder?.config?.framework || "";
|
|
33112
33362
|
const isGatsby = framework === "gatsby";
|
|
33113
33363
|
const isNextjs = framework === "nextjs" || (0, import_is_official_runtime.isOfficialRuntime)("next", frontendBuilder?.use);
|
|
33114
|
-
const ignoreRuntimes =
|
|
33364
|
+
const ignoreRuntimes = import_framework.frameworksBySlug.get(framework)?.ignoreRuntimes;
|
|
33115
33365
|
if (apiRoutes && apiRoutes.length > 0) {
|
|
33116
33366
|
if (options.featHandleMiss) {
|
|
33117
33367
|
const extSet = detectApiExtensions2(apiBuilders);
|
|
@@ -35982,7 +36232,7 @@ var require_dist8 = __commonJS({
|
|
|
35982
36232
|
});
|
|
35983
36233
|
|
|
35984
36234
|
// ../fs-detectors/dist/services/runtimes/constants.js
|
|
35985
|
-
var
|
|
36235
|
+
var require_constants3 = __commonJS({
|
|
35986
36236
|
"../fs-detectors/dist/services/runtimes/constants.js"(exports, module2) {
|
|
35987
36237
|
"use strict";
|
|
35988
36238
|
var __defProp2 = Object.defineProperty;
|
|
@@ -36064,7 +36314,7 @@ var require_constants2 = __commonJS({
|
|
|
36064
36314
|
});
|
|
36065
36315
|
|
|
36066
36316
|
// ../fs-detectors/dist/services/runtimes/framework.js
|
|
36067
|
-
var
|
|
36317
|
+
var require_framework2 = __commonJS({
|
|
36068
36318
|
"../fs-detectors/dist/services/runtimes/framework.js"(exports, module2) {
|
|
36069
36319
|
"use strict";
|
|
36070
36320
|
var __defProp2 = Object.defineProperty;
|
|
@@ -36095,7 +36345,7 @@ var require_framework = __commonJS({
|
|
|
36095
36345
|
module2.exports = __toCommonJS2(framework_exports);
|
|
36096
36346
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
36097
36347
|
var import_frameworks2 = require_frameworks();
|
|
36098
|
-
var import_constants =
|
|
36348
|
+
var import_constants = require_constants3();
|
|
36099
36349
|
var DETECTION_FRAMEWORKS = import_frameworks2.frameworkList.filter(
|
|
36100
36350
|
(framework) => !framework.experimental || framework.runtimeFramework
|
|
36101
36351
|
);
|
|
@@ -37089,8 +37339,8 @@ var require_utils5 = __commonJS({
|
|
|
37089
37339
|
});
|
|
37090
37340
|
module2.exports = __toCommonJS2(utils_exports);
|
|
37091
37341
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
37092
|
-
var import_constants =
|
|
37093
|
-
var import_framework =
|
|
37342
|
+
var import_constants = require_constants3();
|
|
37343
|
+
var import_framework = require_framework2();
|
|
37094
37344
|
async function hasFile(fs5, filePath) {
|
|
37095
37345
|
try {
|
|
37096
37346
|
return await fs5.isFile(filePath);
|
|
@@ -37214,8 +37464,8 @@ var require_runtime = __commonJS({
|
|
|
37214
37464
|
inferRuntime: () => inferRuntime
|
|
37215
37465
|
});
|
|
37216
37466
|
module2.exports = __toCommonJS2(runtime_exports);
|
|
37217
|
-
var import_constants =
|
|
37218
|
-
var import_framework =
|
|
37467
|
+
var import_constants = require_constants3();
|
|
37468
|
+
var import_framework = require_framework2();
|
|
37219
37469
|
function getBuilderForRuntime(runtime) {
|
|
37220
37470
|
const builder = import_constants.RUNTIME_BUILDERS[runtime];
|
|
37221
37471
|
if (!builder)
|
|
@@ -37278,7 +37528,7 @@ var require_entrypoint = __commonJS({
|
|
|
37278
37528
|
});
|
|
37279
37529
|
module2.exports = __toCommonJS2(entrypoint_exports);
|
|
37280
37530
|
var import_path7 = require("path");
|
|
37281
|
-
var import_constants =
|
|
37531
|
+
var import_constants = require_constants3();
|
|
37282
37532
|
var PYTHON_MODULE_ATTR_RE = /^([A-Za-z_][\w]*(?:\.[A-Za-z_][\w]*)*):([A-Za-z_][\w]*)$/;
|
|
37283
37533
|
function parsePyModuleAttrEntrypoint(entrypoint) {
|
|
37284
37534
|
const match = PYTHON_MODULE_ATTR_RE.exec(entrypoint);
|
|
@@ -37339,6 +37589,7 @@ var require_detect_framework = __commonJS({
|
|
|
37339
37589
|
module2.exports = __toCommonJS2(detect_framework_exports);
|
|
37340
37590
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
37341
37591
|
var import_child_process2 = require("child_process");
|
|
37592
|
+
var import_buildpack_runtimes = require_buildpack_runtimes();
|
|
37342
37593
|
function shouldIncludeExperimentalFrameworks(useExperimentalFrameworks) {
|
|
37343
37594
|
if (typeof useExperimentalFrameworks === "boolean") {
|
|
37344
37595
|
return useExperimentalFrameworks;
|
|
@@ -37353,7 +37604,10 @@ var require_detect_framework = __commonJS({
|
|
|
37353
37604
|
}
|
|
37354
37605
|
return frameworkList.filter((f) => {
|
|
37355
37606
|
const experimental = f.experimental;
|
|
37356
|
-
|
|
37607
|
+
if (!experimental) {
|
|
37608
|
+
return true;
|
|
37609
|
+
}
|
|
37610
|
+
return (0, import_buildpack_runtimes.toBuildpackRuntime)(f.slug) !== void 0;
|
|
37357
37611
|
});
|
|
37358
37612
|
}
|
|
37359
37613
|
async function matches(fs5, framework) {
|
|
@@ -37583,7 +37837,7 @@ var require_resolve = __commonJS({
|
|
|
37583
37837
|
detectFrameworkFromWorkspace: () => detectFrameworkFromWorkspace,
|
|
37584
37838
|
getServiceFs: () => getServiceFs,
|
|
37585
37839
|
inferWorkspaceFromNearestManifest: () => inferWorkspaceFromNearestManifest,
|
|
37586
|
-
resolveAllConfiguredServices: () =>
|
|
37840
|
+
resolveAllConfiguredServices: () => resolveAllConfiguredServices2,
|
|
37587
37841
|
resolveConfiguredService: () => resolveConfiguredService,
|
|
37588
37842
|
resolveEntrypointPath: () => resolveEntrypointPath,
|
|
37589
37843
|
validateServiceConfig: () => validateServiceConfig,
|
|
@@ -37592,8 +37846,9 @@ var require_resolve = __commonJS({
|
|
|
37592
37846
|
module2.exports = __toCommonJS2(resolve_exports);
|
|
37593
37847
|
var import_path7 = require("path");
|
|
37594
37848
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
37595
|
-
var import_constants =
|
|
37596
|
-
var
|
|
37849
|
+
var import_constants = require_constants3();
|
|
37850
|
+
var import_buildpack_runtimes = require_buildpack_runtimes();
|
|
37851
|
+
var import_framework = require_framework2();
|
|
37597
37852
|
var import_runtime3 = require_runtime();
|
|
37598
37853
|
var import_entrypoint = require_entrypoint();
|
|
37599
37854
|
var import_utils = require_utils5();
|
|
@@ -38073,6 +38328,15 @@ var require_resolve = __commonJS({
|
|
|
38073
38328
|
};
|
|
38074
38329
|
}
|
|
38075
38330
|
if (hasBuilderOrRuntime && !hasFramework && !hasEntrypoint) {
|
|
38331
|
+
const buildpackRuntime = config.builder ? void 0 : (0, import_buildpack_runtimes.toBuildpackRuntime)(config.runtime);
|
|
38332
|
+
if (buildpackRuntime) {
|
|
38333
|
+
const markers = import_buildpack_runtimes.BUILDPACK_PROJECT_MARKERS.get(buildpackRuntime) ?? [];
|
|
38334
|
+
return {
|
|
38335
|
+
code: "BUILDPACK_REQUIRES_SERVICES",
|
|
38336
|
+
message: `Service "${name}" must specify "entrypoint" when using "runtime" with "experimentalServices". Move it to "services" to build without an "entrypoint" from a ${markers.join(" or ")} at the service root.`,
|
|
38337
|
+
serviceName: name
|
|
38338
|
+
};
|
|
38339
|
+
}
|
|
38076
38340
|
return {
|
|
38077
38341
|
code: "MISSING_ENTRYPOINT",
|
|
38078
38342
|
message: `Service "${name}" must specify "entrypoint" when using "${config.builder ? "builder" : "runtime"}".`,
|
|
@@ -38273,7 +38537,7 @@ var require_resolve = __commonJS({
|
|
|
38273
38537
|
env: config.env
|
|
38274
38538
|
};
|
|
38275
38539
|
}
|
|
38276
|
-
async function
|
|
38540
|
+
async function resolveAllConfiguredServices2(services, fs5, routePrefixSource = "configured", options = {}) {
|
|
38277
38541
|
const resolved = [];
|
|
38278
38542
|
const errors = [];
|
|
38279
38543
|
const webServicesByRoutePrefix = /* @__PURE__ */ new Map();
|
|
@@ -38484,11 +38748,13 @@ var require_resolve_v2 = __commonJS({
|
|
|
38484
38748
|
var import_path7 = require("path");
|
|
38485
38749
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
38486
38750
|
var import_frameworks2 = require_frameworks();
|
|
38487
|
-
var import_constants =
|
|
38488
|
-
var import_framework =
|
|
38751
|
+
var import_constants = require_constants3();
|
|
38752
|
+
var import_framework = require_framework2();
|
|
38489
38753
|
var import_runtime3 = require_runtime();
|
|
38490
38754
|
var import_entrypoint = require_entrypoint();
|
|
38755
|
+
var import_buildpack_runtimes = require_buildpack_runtimes();
|
|
38491
38756
|
var import_resolve = require_resolve();
|
|
38757
|
+
var import_utils = require_utils5();
|
|
38492
38758
|
var frameworksBySlug = new Map(import_frameworks2.frameworkList.map((f) => [f.slug, f]));
|
|
38493
38759
|
var MAX_SERVICE_NAME_LENGTH = 64;
|
|
38494
38760
|
var SERVICE_NAME_REGEX = /^[a-z]([a-z_-]*[a-z])?$/;
|
|
@@ -38692,7 +38958,23 @@ var require_resolve_v2 = __commonJS({
|
|
|
38692
38958
|
entrypoint: entrypointFile
|
|
38693
38959
|
});
|
|
38694
38960
|
}
|
|
38695
|
-
|
|
38961
|
+
const flaggedBuildpackRuntime = (0, import_buildpack_runtimes.toBuildpackRuntime)(
|
|
38962
|
+
inferredRuntime
|
|
38963
|
+
);
|
|
38964
|
+
if (flaggedBuildpackRuntime && config.command !== void 0) {
|
|
38965
|
+
return {
|
|
38966
|
+
error: {
|
|
38967
|
+
code: "INVALID_COMMAND",
|
|
38968
|
+
message: `Service "${name}" can only specify "command" when using runtime "container".`,
|
|
38969
|
+
serviceName: name
|
|
38970
|
+
}
|
|
38971
|
+
};
|
|
38972
|
+
}
|
|
38973
|
+
const buildpackRuntime = flaggedBuildpackRuntime && !entrypointFile && !(0, import_framework.isFrontendFramework)(framework) && await (0, import_buildpack_runtimes.hasBuildpackProjectMarker)(
|
|
38974
|
+
flaggedBuildpackRuntime,
|
|
38975
|
+
(marker) => (0, import_utils.hasFile)(serviceFs, marker)
|
|
38976
|
+
) ? flaggedBuildpackRuntime : void 0;
|
|
38977
|
+
if (entrypointIsDirectory && !framework && !buildpackRuntime) {
|
|
38696
38978
|
return {
|
|
38697
38979
|
error: {
|
|
38698
38980
|
code: "MISSING_SERVICE_FRAMEWORK",
|
|
@@ -38702,7 +38984,7 @@ var require_resolve_v2 = __commonJS({
|
|
|
38702
38984
|
};
|
|
38703
38985
|
}
|
|
38704
38986
|
const frameworkRuntime = (0, import_framework.inferRuntimeFromFramework)(framework);
|
|
38705
|
-
if (detectedFramework && frameworkRuntime && !entrypointFile) {
|
|
38987
|
+
if (detectedFramework && frameworkRuntime && !entrypointFile && !buildpackRuntime) {
|
|
38706
38988
|
return {
|
|
38707
38989
|
error: {
|
|
38708
38990
|
code: "MISSING_SERVICE_CONFIG",
|
|
@@ -38714,7 +38996,10 @@ var require_resolve_v2 = __commonJS({
|
|
|
38714
38996
|
const frameworkDefinition = framework ? frameworksBySlug.get(framework) : void 0;
|
|
38715
38997
|
let builderUse;
|
|
38716
38998
|
let builderSrc;
|
|
38717
|
-
if (
|
|
38999
|
+
if (buildpackRuntime) {
|
|
39000
|
+
builderUse = "@vercel/container";
|
|
39001
|
+
builderSrc = "<detect>";
|
|
39002
|
+
} else if (framework) {
|
|
38718
39003
|
builderUse = (0, import_build_utils5.isNodeBackendFramework)(framework) ? "@vercel/backends" : frameworkDefinition?.useRuntime?.use || "@vercel/static-build";
|
|
38719
39004
|
builderSrc = entrypointFile || frameworkDefinition?.useRuntime?.src || "package.json";
|
|
38720
39005
|
} else {
|
|
@@ -38749,6 +39034,9 @@ var require_resolve_v2 = __commonJS({
|
|
|
38749
39034
|
if (framework) {
|
|
38750
39035
|
builderConfig.framework = framework;
|
|
38751
39036
|
}
|
|
39037
|
+
if (buildpackRuntime) {
|
|
39038
|
+
builderConfig.buildpack = buildpackRuntime;
|
|
39039
|
+
}
|
|
38752
39040
|
if (config.outputDirectory) {
|
|
38753
39041
|
builderConfig.outputDirectory = config.outputDirectory;
|
|
38754
39042
|
}
|
|
@@ -38864,7 +39152,7 @@ var require_auto_detect = __commonJS({
|
|
|
38864
39152
|
module2.exports = __toCommonJS2(auto_detect_exports);
|
|
38865
39153
|
var import_detect_framework = require_detect_framework();
|
|
38866
39154
|
var import_frameworks2 = require_frameworks();
|
|
38867
|
-
var import_framework =
|
|
39155
|
+
var import_framework = require_framework2();
|
|
38868
39156
|
var import_utils = require_utils5();
|
|
38869
39157
|
var FRONTEND_DIR = "frontend";
|
|
38870
39158
|
var APPS_WEB_DIR = "apps/web";
|
|
@@ -39146,7 +39434,7 @@ var require_detect_railway = __commonJS({
|
|
|
39146
39434
|
var import_path7 = require("path");
|
|
39147
39435
|
var import_smol_toml = __toESM2(require_dist());
|
|
39148
39436
|
var import_detect_framework = require_detect_framework();
|
|
39149
|
-
var import_framework =
|
|
39437
|
+
var import_framework = require_framework2();
|
|
39150
39438
|
var import_utils = require_utils5();
|
|
39151
39439
|
var RAILWAY_JSON = "railway.json";
|
|
39152
39440
|
var RAILWAY_TOML = "railway.toml";
|
|
@@ -42255,8 +42543,8 @@ var require_detect_render = __commonJS({
|
|
|
42255
42543
|
module2.exports = __toCommonJS2(detect_render_exports);
|
|
42256
42544
|
var import_js_yaml = __toESM2(require_js_yaml4());
|
|
42257
42545
|
var import_detect_framework = require_detect_framework();
|
|
42258
|
-
var import_constants =
|
|
42259
|
-
var import_framework =
|
|
42546
|
+
var import_constants = require_constants3();
|
|
42547
|
+
var import_framework = require_framework2();
|
|
42260
42548
|
var import_utils = require_utils5();
|
|
42261
42549
|
var RENDER_YAML = "render.yaml";
|
|
42262
42550
|
var SERVICE_TYPE_MAP = {
|
|
@@ -42477,7 +42765,7 @@ var require_detect_procfile = __commonJS({
|
|
|
42477
42765
|
});
|
|
42478
42766
|
module2.exports = __toCommonJS2(detect_procfile_exports);
|
|
42479
42767
|
var import_detect_framework = require_detect_framework();
|
|
42480
|
-
var import_framework =
|
|
42768
|
+
var import_framework = require_framework2();
|
|
42481
42769
|
var import_utils = require_utils5();
|
|
42482
42770
|
var PROCFILE = "Procfile";
|
|
42483
42771
|
var PROCFILE_LINE_RE = /^\s*([A-Za-z_][A-Za-z0-9_-]*):\s*(.+)/;
|
|
@@ -42732,7 +43020,8 @@ var require_detect_services = __commonJS({
|
|
|
42732
43020
|
module2.exports = __toCommonJS2(detect_services_exports);
|
|
42733
43021
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
42734
43022
|
var import_routing_utils = require_dist8();
|
|
42735
|
-
var
|
|
43023
|
+
var import_buildpack_runtimes = require_buildpack_runtimes();
|
|
43024
|
+
var import_framework = require_framework2();
|
|
42736
43025
|
var import_utils = require_utils5();
|
|
42737
43026
|
var import_resolve = require_resolve();
|
|
42738
43027
|
var import_resolve_v2 = require_resolve_v2();
|
|
@@ -42767,6 +43056,11 @@ var require_detect_services = __commonJS({
|
|
|
42767
43056
|
inferred
|
|
42768
43057
|
};
|
|
42769
43058
|
}
|
|
43059
|
+
function isBuildpackInferredService(svc) {
|
|
43060
|
+
return (0, import_buildpack_runtimes.toBuildpackRuntime)(
|
|
43061
|
+
svc.runtime ?? (0, import_framework.inferRuntimeFromFramework)(svc.framework)
|
|
43062
|
+
) !== void 0;
|
|
43063
|
+
}
|
|
42770
43064
|
function toInferredLayoutConfig(services) {
|
|
42771
43065
|
const inferredConfig = {};
|
|
42772
43066
|
for (const [name, service] of Object.entries(services)) {
|
|
@@ -42776,7 +43070,7 @@ var require_detect_services = __commonJS({
|
|
|
42776
43070
|
if (service.type) {
|
|
42777
43071
|
serviceConfig.type = service.type;
|
|
42778
43072
|
}
|
|
42779
|
-
if (typeof service.entrypoint === "string") {
|
|
43073
|
+
if (typeof service.entrypoint === "string" && !isBuildpackInferredService(service)) {
|
|
42780
43074
|
serviceConfig.entrypoint = service.entrypoint;
|
|
42781
43075
|
}
|
|
42782
43076
|
if (typeof service.mountPath === "string") {
|
|
@@ -42919,7 +43213,7 @@ var require_detect_services = __commonJS({
|
|
|
42919
43213
|
v2Services[name] = {
|
|
42920
43214
|
root: svc.root,
|
|
42921
43215
|
...svc.framework ? { framework: svc.framework } : {},
|
|
42922
|
-
...svc.entrypoint ? { entrypoint: svc.entrypoint } : {}
|
|
43216
|
+
...svc.entrypoint && !isBuildpackInferredService(svc) ? { entrypoint: svc.entrypoint } : {}
|
|
42923
43217
|
};
|
|
42924
43218
|
}
|
|
42925
43219
|
const result2 = await (0, import_resolve_v2.resolveAllConfiguredServicesV2)(v2Services, scopedFs);
|
|
@@ -42952,7 +43246,7 @@ var require_detect_services = __commonJS({
|
|
|
42952
43246
|
v1Services[name] = {
|
|
42953
43247
|
root: svc.root === "." ? void 0 : svc.root,
|
|
42954
43248
|
...svc.framework ? { framework: svc.framework } : {},
|
|
42955
|
-
...svc.entrypoint ? { entrypoint: svc.entrypoint } : {},
|
|
43249
|
+
...svc.entrypoint && !isBuildpackInferredService(svc) ? { entrypoint: svc.entrypoint } : {},
|
|
42956
43250
|
...svc.type ? { type: svc.type } : {},
|
|
42957
43251
|
...svc.buildCommand ? { buildCommand: svc.buildCommand } : {},
|
|
42958
43252
|
...svc.preDeployCommand ? { preDeployCommand: svc.preDeployCommand } : {},
|
|
@@ -43126,6 +43420,523 @@ var require_detect_services = __commonJS({
|
|
|
43126
43420
|
}
|
|
43127
43421
|
});
|
|
43128
43422
|
|
|
43423
|
+
// ../fs-detectors/dist/services/migrate.js
|
|
43424
|
+
var require_migrate = __commonJS({
|
|
43425
|
+
"../fs-detectors/dist/services/migrate.js"(exports, module2) {
|
|
43426
|
+
"use strict";
|
|
43427
|
+
var __defProp2 = Object.defineProperty;
|
|
43428
|
+
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
43429
|
+
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
43430
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
43431
|
+
var __export2 = (target, all) => {
|
|
43432
|
+
for (var name in all)
|
|
43433
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
43434
|
+
};
|
|
43435
|
+
var __copyProps2 = (to, from, except, desc) => {
|
|
43436
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
43437
|
+
for (let key of __getOwnPropNames2(from))
|
|
43438
|
+
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
43439
|
+
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
43440
|
+
}
|
|
43441
|
+
return to;
|
|
43442
|
+
};
|
|
43443
|
+
var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
43444
|
+
var migrate_exports = {};
|
|
43445
|
+
__export2(migrate_exports, {
|
|
43446
|
+
hasLegacyServicesConfig: () => hasLegacyServicesConfig2,
|
|
43447
|
+
migrateExperimentalServices: () => migrateExperimentalServices2,
|
|
43448
|
+
planExperimentalServicesMigration: () => planExperimentalServicesMigration2
|
|
43449
|
+
});
|
|
43450
|
+
module2.exports = __toCommonJS2(migrate_exports);
|
|
43451
|
+
var import_path7 = require("path");
|
|
43452
|
+
var import_frameworks2 = require_frameworks();
|
|
43453
|
+
var import_constants = require_constants3();
|
|
43454
|
+
var import_resolve = require_resolve();
|
|
43455
|
+
var import_resolve_v2 = require_resolve_v2();
|
|
43456
|
+
var import_utils = require_utils5();
|
|
43457
|
+
var SERVICES_DOCS_URL = "https://vercel.com/docs/services";
|
|
43458
|
+
var SERVICES_ROUTING_DOCS_URL = "https://vercel.com/docs/services/routing";
|
|
43459
|
+
var SERVICES_BINDINGS_DOCS_URL = "https://vercel.com/docs/services/bindings";
|
|
43460
|
+
var EXPERIMENTAL_SERVICES_DOCS_URL = "https://vercel.com/docs/services/experimental";
|
|
43461
|
+
var TOP_LEVEL_BUILD_KEYS = [
|
|
43462
|
+
"functions",
|
|
43463
|
+
"installCommand",
|
|
43464
|
+
"buildCommand",
|
|
43465
|
+
"devCommand",
|
|
43466
|
+
"ignoreCommand",
|
|
43467
|
+
"outputDirectory",
|
|
43468
|
+
"framework"
|
|
43469
|
+
];
|
|
43470
|
+
var PREVIEW_DOMAIN_MISSING = [
|
|
43471
|
+
{ type: "host", value: { suf: ".vercel.app" } },
|
|
43472
|
+
{ type: "host", value: { suf: ".vercel.dev" } }
|
|
43473
|
+
];
|
|
43474
|
+
function hasLegacyServicesConfig2(config) {
|
|
43475
|
+
return isNonEmptyObject(config?.experimentalServices) || isNonEmptyObject(config?.experimentalServicesV2);
|
|
43476
|
+
}
|
|
43477
|
+
function isNonEmptyObject(value) {
|
|
43478
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length > 0;
|
|
43479
|
+
}
|
|
43480
|
+
function getServicesConfigConflict(config) {
|
|
43481
|
+
const keys = ["services", "experimentalServices", "experimentalServicesV2"].filter((key) => config[key] !== void 0);
|
|
43482
|
+
if (keys.length > 1) {
|
|
43483
|
+
return {
|
|
43484
|
+
code: "CONFLICTING_SERVICES_CONFIG",
|
|
43485
|
+
message: `Cannot migrate a configuration containing ${keys.map((key) => `\`${key}\``).join(" and ")}. Keep only the configuration you intend to migrate; existing services will not be overwritten or discarded.`
|
|
43486
|
+
};
|
|
43487
|
+
}
|
|
43488
|
+
return void 0;
|
|
43489
|
+
}
|
|
43490
|
+
function normalizePrefix(prefix) {
|
|
43491
|
+
const withSlash = prefix.startsWith("/") ? prefix : `/${prefix}`;
|
|
43492
|
+
return withSlash !== "/" ? withSlash.replace(/\/+$/, "") : withSlash;
|
|
43493
|
+
}
|
|
43494
|
+
function publicRewrite(prefix, service) {
|
|
43495
|
+
return {
|
|
43496
|
+
source: prefix === "/" ? "/(.*)" : `${prefix}(/.*)?`,
|
|
43497
|
+
destination: { service }
|
|
43498
|
+
};
|
|
43499
|
+
}
|
|
43500
|
+
function planExperimentalServicesMigration2(config, resolvedServices) {
|
|
43501
|
+
const conflict = getServicesConfigConflict(config);
|
|
43502
|
+
if (conflict)
|
|
43503
|
+
return emptyPlanWithErrors([conflict]);
|
|
43504
|
+
const plan = emptyPlanWithErrors([]);
|
|
43505
|
+
const legacy = config.experimentalServices;
|
|
43506
|
+
if (isNonEmptyObject(config.experimentalServicesV2)) {
|
|
43507
|
+
plan.patch.services = { ...config.experimentalServicesV2 };
|
|
43508
|
+
plan.removeKeys.push("experimentalServicesV2");
|
|
43509
|
+
return plan;
|
|
43510
|
+
}
|
|
43511
|
+
if (!isNonEmptyObject(legacy)) {
|
|
43512
|
+
plan.errors.push({
|
|
43513
|
+
code: "NO_LEGACY_SERVICES",
|
|
43514
|
+
message: "No `experimentalServices` configuration found to migrate."
|
|
43515
|
+
});
|
|
43516
|
+
return plan;
|
|
43517
|
+
}
|
|
43518
|
+
plan.removeKeys.push("experimentalServices");
|
|
43519
|
+
if (config.experimentalServiceGroups !== void 0) {
|
|
43520
|
+
plan.removeKeys.push("experimentalServiceGroups");
|
|
43521
|
+
plan.warnings.push({
|
|
43522
|
+
code: "SERVICE_GROUPS_DROPPED",
|
|
43523
|
+
message: "`experimentalServiceGroups` has no equivalent in `services` and was removed.",
|
|
43524
|
+
link: SERVICES_DOCS_URL
|
|
43525
|
+
});
|
|
43526
|
+
}
|
|
43527
|
+
const webServices = [];
|
|
43528
|
+
const resolvedByName = new Map(resolvedServices.map((s) => [s.name, s]));
|
|
43529
|
+
for (const [legacyName, serviceConfig] of Object.entries(legacy)) {
|
|
43530
|
+
const resolved = resolvedByName.get(legacyName);
|
|
43531
|
+
if (!resolved) {
|
|
43532
|
+
plan.errors.push({
|
|
43533
|
+
code: "UNRESOLVED_SERVICE",
|
|
43534
|
+
serviceName: legacyName,
|
|
43535
|
+
message: `Service "${legacyName}" could not be resolved. Fix the errors reported for it before migrating.`
|
|
43536
|
+
});
|
|
43537
|
+
continue;
|
|
43538
|
+
}
|
|
43539
|
+
if (resolved.type !== "web") {
|
|
43540
|
+
plan.unmigrated.push(getUnmigratedNote(legacyName, resolved));
|
|
43541
|
+
continue;
|
|
43542
|
+
}
|
|
43543
|
+
const name = legacyName.toLowerCase();
|
|
43544
|
+
if (name.length > 64 || !/^[a-z]([a-z_-]*[a-z])?$/.test(name)) {
|
|
43545
|
+
plan.errors.push({
|
|
43546
|
+
code: "INVALID_SERVICE_NAME",
|
|
43547
|
+
serviceName: legacyName,
|
|
43548
|
+
message: `Service name "${legacyName}" is not valid for \`services\`. Names must be 1-64 characters, start and end with a lowercase letter, and contain only lowercase letters, hyphens, and underscores. Rename it in \`experimentalServices\` first.`
|
|
43549
|
+
});
|
|
43550
|
+
continue;
|
|
43551
|
+
}
|
|
43552
|
+
const conflict2 = webServices.find((s) => s.name === name);
|
|
43553
|
+
if (conflict2) {
|
|
43554
|
+
plan.errors.push({
|
|
43555
|
+
code: "DUPLICATE_SERVICE_NAME",
|
|
43556
|
+
serviceName: legacyName,
|
|
43557
|
+
message: `Services "${conflict2.resolved.name}" and "${legacyName}" both map to "${name}". Rename one of them first.`
|
|
43558
|
+
});
|
|
43559
|
+
continue;
|
|
43560
|
+
}
|
|
43561
|
+
if (name !== legacyName) {
|
|
43562
|
+
plan.renamedServices.push({ from: legacyName, to: name });
|
|
43563
|
+
}
|
|
43564
|
+
webServices.push({
|
|
43565
|
+
name,
|
|
43566
|
+
resolved,
|
|
43567
|
+
config: serviceConfig,
|
|
43568
|
+
prefix: normalizePrefix(resolved.routePrefix ?? "/")
|
|
43569
|
+
});
|
|
43570
|
+
}
|
|
43571
|
+
if (plan.errors.length > 0)
|
|
43572
|
+
return plan;
|
|
43573
|
+
if (webServices.length === 0) {
|
|
43574
|
+
plan.errors.push({
|
|
43575
|
+
code: "NO_WEB_SERVICES",
|
|
43576
|
+
message: "None of the configured services are web services. `services` only describes web services; see the manual steps for the others."
|
|
43577
|
+
});
|
|
43578
|
+
return plan;
|
|
43579
|
+
}
|
|
43580
|
+
for (const consumer of webServices) {
|
|
43581
|
+
plan.patch.services[consumer.name] = convertWebService(
|
|
43582
|
+
consumer,
|
|
43583
|
+
webServices,
|
|
43584
|
+
plan,
|
|
43585
|
+
config.build?.env ?? {}
|
|
43586
|
+
);
|
|
43587
|
+
}
|
|
43588
|
+
const subpaths = webServices.filter((svc) => svc.prefix !== "/").sort((a, b) => b.prefix.length - a.prefix.length);
|
|
43589
|
+
plan.patch.rewrites = subpaths.map(
|
|
43590
|
+
(svc) => publicRewrite(svc.prefix, svc.name)
|
|
43591
|
+
);
|
|
43592
|
+
for (const { name, prefix, resolved } of subpaths) {
|
|
43593
|
+
const { subdomain } = resolved;
|
|
43594
|
+
if (!subdomain)
|
|
43595
|
+
continue;
|
|
43596
|
+
const hostRewrite = {
|
|
43597
|
+
source: "/(.*)",
|
|
43598
|
+
has: [{ type: "host", value: { pre: `${subdomain}.` } }],
|
|
43599
|
+
missing: PREVIEW_DOMAIN_MISSING,
|
|
43600
|
+
destination: { service: name }
|
|
43601
|
+
};
|
|
43602
|
+
if (resolved.builder.use === "@vercel/next") {
|
|
43603
|
+
plan.patch.rewrites.push({
|
|
43604
|
+
...hostRewrite,
|
|
43605
|
+
source: "/",
|
|
43606
|
+
destination: { service: name, path: prefix }
|
|
43607
|
+
});
|
|
43608
|
+
hostRewrite.source = "/:path(.*)";
|
|
43609
|
+
hostRewrite.destination = { service: name, path: `${prefix}/:path` };
|
|
43610
|
+
}
|
|
43611
|
+
plan.patch.rewrites.push(hostRewrite);
|
|
43612
|
+
plan.warnings.push({
|
|
43613
|
+
code: "SUBDOMAIN_ROUTING",
|
|
43614
|
+
serviceName: resolved.name,
|
|
43615
|
+
message: `"${subdomain}.<your-domain>" routes to "${resolved.name}". Explicit service prefixes take precedence. Host routing still applies only to custom domains, not preview URLs.`,
|
|
43616
|
+
link: SERVICES_ROUTING_DOCS_URL
|
|
43617
|
+
});
|
|
43618
|
+
}
|
|
43619
|
+
plan.patch.rewrites.push(
|
|
43620
|
+
...webServices.filter((svc) => svc.prefix === "/").map((svc) => publicRewrite("/", svc.name))
|
|
43621
|
+
);
|
|
43622
|
+
const rootService = webServices.find((s) => s.resolved.workspace === ".");
|
|
43623
|
+
for (const key of TOP_LEVEL_BUILD_KEYS) {
|
|
43624
|
+
const value = config[key];
|
|
43625
|
+
if (value === void 0)
|
|
43626
|
+
continue;
|
|
43627
|
+
plan.removeKeys.push(key);
|
|
43628
|
+
if (key === "framework" && (value === "services" || value === null))
|
|
43629
|
+
continue;
|
|
43630
|
+
if (!rootService) {
|
|
43631
|
+
plan.errors.push({
|
|
43632
|
+
code: "TOP_LEVEL_SETTING_WITHOUT_ROOT_SERVICE",
|
|
43633
|
+
message: `Top-level \`${key}\` is not allowed with \`services\` and there is no service with root "." to receive it. Move it into the relevant service manually.`
|
|
43634
|
+
});
|
|
43635
|
+
continue;
|
|
43636
|
+
}
|
|
43637
|
+
const target = plan.patch.services[rootService.name];
|
|
43638
|
+
if (key === "functions") {
|
|
43639
|
+
target.functions = {
|
|
43640
|
+
...value,
|
|
43641
|
+
...target.functions
|
|
43642
|
+
};
|
|
43643
|
+
} else if (value !== null && target[key] !== void 0) {
|
|
43644
|
+
plan.warnings.push({
|
|
43645
|
+
code: "TOP_LEVEL_SETTING_CONFLICT",
|
|
43646
|
+
serviceName: rootService.resolved.name,
|
|
43647
|
+
message: `Top-level \`${key}\` was dropped because service "${rootService.resolved.name}" already defines it.`
|
|
43648
|
+
});
|
|
43649
|
+
continue;
|
|
43650
|
+
} else if (value !== null) {
|
|
43651
|
+
target[key] = value;
|
|
43652
|
+
}
|
|
43653
|
+
plan.movedTopLevelKeys.push({ key, service: rootService.name });
|
|
43654
|
+
}
|
|
43655
|
+
if (Array.isArray(config.rewrites) && config.rewrites.length > 0) {
|
|
43656
|
+
plan.warnings.push({
|
|
43657
|
+
code: "EXISTING_REWRITES",
|
|
43658
|
+
message: "Your existing top-level `rewrites` are kept ahead of the generated service rewrites. They are evaluated before a request is routed into a service, so rewrites that target a path inside a specific service should move into that service's own `rewrites`.",
|
|
43659
|
+
link: SERVICES_ROUTING_DOCS_URL
|
|
43660
|
+
});
|
|
43661
|
+
}
|
|
43662
|
+
return plan;
|
|
43663
|
+
}
|
|
43664
|
+
function convertWebService(consumer, webServices, plan, existingBuildEnv) {
|
|
43665
|
+
const { resolved, config: serviceConfig, prefix } = consumer;
|
|
43666
|
+
const { name: legacyName, entrypoint } = resolved;
|
|
43667
|
+
const service = { root: resolved.workspace };
|
|
43668
|
+
const warn = (code, message, link) => {
|
|
43669
|
+
plan.warnings.push({
|
|
43670
|
+
code,
|
|
43671
|
+
serviceName: legacyName,
|
|
43672
|
+
message: `Service "${legacyName}": ${message}`,
|
|
43673
|
+
...link ? { link } : {}
|
|
43674
|
+
});
|
|
43675
|
+
};
|
|
43676
|
+
if (serviceConfig.framework)
|
|
43677
|
+
service.framework = serviceConfig.framework;
|
|
43678
|
+
const runtime = serviceConfig.runtime;
|
|
43679
|
+
if (runtime) {
|
|
43680
|
+
if (runtime in import_constants.RUNTIME_BUILDERS) {
|
|
43681
|
+
service.runtime = runtime;
|
|
43682
|
+
} else {
|
|
43683
|
+
warn(
|
|
43684
|
+
"RUNTIME_DROPPED",
|
|
43685
|
+
`Runtime "${runtime}" is not supported (${Object.keys(import_constants.RUNTIME_BUILDERS).join(", ")}); it will be inferred from the entrypoint instead.`
|
|
43686
|
+
);
|
|
43687
|
+
}
|
|
43688
|
+
}
|
|
43689
|
+
if (entrypoint) {
|
|
43690
|
+
const handler = resolved.builder.config?.handlerFunction;
|
|
43691
|
+
service.entrypoint = typeof handler === "string" && entrypoint.endsWith(".py") ? `${entrypoint.slice(0, -3).replace(/\//g, ".")}:${handler}` : entrypoint;
|
|
43692
|
+
}
|
|
43693
|
+
if (serviceConfig.command !== void 0) {
|
|
43694
|
+
service.command = serviceConfig.command;
|
|
43695
|
+
}
|
|
43696
|
+
if (serviceConfig.installCommand !== void 0) {
|
|
43697
|
+
service.installCommand = serviceConfig.installCommand;
|
|
43698
|
+
}
|
|
43699
|
+
const buildCommand = (0, import_utils.combineBuildCommand)(
|
|
43700
|
+
serviceConfig.buildCommand,
|
|
43701
|
+
serviceConfig.preDeployCommand
|
|
43702
|
+
);
|
|
43703
|
+
if (buildCommand !== void 0)
|
|
43704
|
+
service.buildCommand = buildCommand;
|
|
43705
|
+
if (serviceConfig.preDeployCommand) {
|
|
43706
|
+
warn(
|
|
43707
|
+
"PRE_DEPLOY_COMMAND_FOLDED",
|
|
43708
|
+
"`preDeployCommand` was appended to `buildCommand` and now runs at build time, not right before deployment."
|
|
43709
|
+
);
|
|
43710
|
+
}
|
|
43711
|
+
if (serviceConfig.builder) {
|
|
43712
|
+
warn(
|
|
43713
|
+
"BUILDER_DROPPED",
|
|
43714
|
+
`Builder "${serviceConfig.builder}" was removed; \`services\` selects it from the framework and runtime.`
|
|
43715
|
+
);
|
|
43716
|
+
}
|
|
43717
|
+
if (serviceConfig.workspace) {
|
|
43718
|
+
warn("WORKSPACE_REPLACED", "`workspace` is now expressed by `root`.");
|
|
43719
|
+
}
|
|
43720
|
+
const fnConfig = {};
|
|
43721
|
+
for (const key of ["maxDuration", "includeFiles", "excludeFiles"]) {
|
|
43722
|
+
if (serviceConfig[key] !== void 0)
|
|
43723
|
+
fnConfig[key] = serviceConfig[key];
|
|
43724
|
+
}
|
|
43725
|
+
if (serviceConfig.memory !== void 0) {
|
|
43726
|
+
warn(
|
|
43727
|
+
"MEMORY_DROPPED",
|
|
43728
|
+
"`memory` cannot be configured in vercel.json with Fluid compute; use the project's Functions settings instead.",
|
|
43729
|
+
"https://vercel.com/docs/functions/configuring-functions/memory"
|
|
43730
|
+
);
|
|
43731
|
+
}
|
|
43732
|
+
if (Object.keys(fnConfig).length > 0) {
|
|
43733
|
+
if (entrypoint && resolved.runtime !== "container") {
|
|
43734
|
+
service.functions = {
|
|
43735
|
+
[import_path7.posix.normalize(entrypoint)]: fnConfig
|
|
43736
|
+
};
|
|
43737
|
+
} else {
|
|
43738
|
+
warn(
|
|
43739
|
+
"FUNCTION_CONFIG_DROPPED",
|
|
43740
|
+
`No file entrypoint for ${Object.keys(fnConfig).join(", ")}; configure them under this service's \`functions\` manually.`
|
|
43741
|
+
);
|
|
43742
|
+
}
|
|
43743
|
+
}
|
|
43744
|
+
const isStatic = (0, import_utils.isStaticBuild)(resolved);
|
|
43745
|
+
const rewrites = [];
|
|
43746
|
+
if (prefix !== "/") {
|
|
43747
|
+
if (isStatic || resolved.builder.use !== "@vercel/next") {
|
|
43748
|
+
rewrites.push({ source: `${prefix}/:path(.*)?`, destination: "/:path" });
|
|
43749
|
+
}
|
|
43750
|
+
if (isStatic) {
|
|
43751
|
+
rewrites.push({ source: "/:path*", destination: "/index.html" });
|
|
43752
|
+
warn(
|
|
43753
|
+
"STATIC_SUBPATH",
|
|
43754
|
+
`Static output is no longer nested under "${prefix}"; a service rewrite maps "${prefix}/*" onto it. Keep the framework base path (e.g. Vite \`base\`) at "${prefix}/".`,
|
|
43755
|
+
SERVICES_ROUTING_DOCS_URL
|
|
43756
|
+
);
|
|
43757
|
+
} else if (resolved.builder.use === "@vercel/next") {
|
|
43758
|
+
warn("NEXT_SUBPATH", `Keep \`basePath\` in next.config at "${prefix}".`);
|
|
43759
|
+
} else {
|
|
43760
|
+
warn(
|
|
43761
|
+
"PREFIX_STRIP",
|
|
43762
|
+
`A service rewrite keeps stripping "${prefix}", but ASGI \`root_path\` / WSGI \`SCRIPT_NAME\` is no longer set. Check redirects and generated URLs; remove the rewrite if the app should handle the prefix itself.`,
|
|
43763
|
+
SERVICES_ROUTING_DOCS_URL
|
|
43764
|
+
);
|
|
43765
|
+
}
|
|
43766
|
+
} else if (isStatic) {
|
|
43767
|
+
rewrites.push({ source: "/(.*)", destination: "/index.html" });
|
|
43768
|
+
}
|
|
43769
|
+
if (rewrites.length > 0)
|
|
43770
|
+
service.rewrites = rewrites;
|
|
43771
|
+
const bindings = [];
|
|
43772
|
+
const seenEnv = /* @__PURE__ */ new Set();
|
|
43773
|
+
const consumerPrefix = import_frameworks2.frameworkList.find(
|
|
43774
|
+
(f) => f.slug === resolved.framework
|
|
43775
|
+
)?.envPrefix;
|
|
43776
|
+
const bindingsUnsupported = resolved.runtime === "go" || resolved.runtime === "rust";
|
|
43777
|
+
const implicit = [];
|
|
43778
|
+
const clientSide = [];
|
|
43779
|
+
const unsupported = [];
|
|
43780
|
+
const add = (target, env, explicit) => {
|
|
43781
|
+
if (seenEnv.has(env))
|
|
43782
|
+
return;
|
|
43783
|
+
seenEnv.add(env);
|
|
43784
|
+
if (consumerPrefix && env.startsWith(consumerPrefix)) {
|
|
43785
|
+
if (Object.prototype.hasOwnProperty.call(existingBuildEnv, env))
|
|
43786
|
+
return;
|
|
43787
|
+
const defaults = (plan.patch.build ??= { env: {} }).env;
|
|
43788
|
+
if (defaults[env] !== void 0 && defaults[env] !== target.prefix) {
|
|
43789
|
+
plan.errors.push({
|
|
43790
|
+
code: "CONFLICTING_BUILD_ENV",
|
|
43791
|
+
serviceName: legacyName,
|
|
43792
|
+
message: `Services use \`${env}\` for different public paths. Set a shared value in \`build.env\` or use distinct environment variable names before migrating.`
|
|
43793
|
+
});
|
|
43794
|
+
} else {
|
|
43795
|
+
defaults[env] = target.prefix;
|
|
43796
|
+
}
|
|
43797
|
+
return;
|
|
43798
|
+
}
|
|
43799
|
+
if (isStatic) {
|
|
43800
|
+
if (explicit) {
|
|
43801
|
+
clientSide.push(`\`${env}="${target.prefix}"\``);
|
|
43802
|
+
}
|
|
43803
|
+
return;
|
|
43804
|
+
}
|
|
43805
|
+
if (bindingsUnsupported) {
|
|
43806
|
+
unsupported.push(`\`${env}\``);
|
|
43807
|
+
return;
|
|
43808
|
+
}
|
|
43809
|
+
if (!explicit)
|
|
43810
|
+
implicit.push(`\`${env}\``);
|
|
43811
|
+
bindings.push({
|
|
43812
|
+
type: "service",
|
|
43813
|
+
service: target.name,
|
|
43814
|
+
format: "url",
|
|
43815
|
+
env
|
|
43816
|
+
});
|
|
43817
|
+
};
|
|
43818
|
+
for (const [env, ref] of Object.entries(serviceConfig.env ?? {})) {
|
|
43819
|
+
if (ref?.type !== "service-ref")
|
|
43820
|
+
continue;
|
|
43821
|
+
const target = webServices.find((s) => s.resolved.name === ref.service);
|
|
43822
|
+
if (!target) {
|
|
43823
|
+
warn(
|
|
43824
|
+
"SERVICE_REF_DROPPED",
|
|
43825
|
+
`\`${env}\` referenced "${ref.service}", which is not a web service and cannot be bound.`
|
|
43826
|
+
);
|
|
43827
|
+
continue;
|
|
43828
|
+
}
|
|
43829
|
+
add(target, env, true);
|
|
43830
|
+
}
|
|
43831
|
+
for (const target of webServices) {
|
|
43832
|
+
const env = `${target.resolved.name.replace(/-/g, "_").toUpperCase()}_URL`;
|
|
43833
|
+
if (target !== consumer) {
|
|
43834
|
+
add(target, env, false);
|
|
43835
|
+
} else if (!seenEnv.has(env)) {
|
|
43836
|
+
seenEnv.add(env);
|
|
43837
|
+
warn(
|
|
43838
|
+
"SELF_SERVICE_URL_DROPPED",
|
|
43839
|
+
`Implicit self URL \`${env}\` is no longer injected; no self-binding was generated. If used at build time or on the server, define a project environment variable with the absolute public URL for "${prefix}" (including the origin), or derive it from the request.`,
|
|
43840
|
+
SERVICES_BINDINGS_DOCS_URL
|
|
43841
|
+
);
|
|
43842
|
+
}
|
|
43843
|
+
if (consumerPrefix)
|
|
43844
|
+
add(target, `${consumerPrefix}${env}`, false);
|
|
43845
|
+
}
|
|
43846
|
+
if (implicit.length > 0) {
|
|
43847
|
+
warn(
|
|
43848
|
+
"IMPLICIT_URL_TO_BINDING",
|
|
43849
|
+
`Previously implicit URLs now use bindings: ${implicit.join(", ")}. These resolve to internal URLs; remove unused bindings.`,
|
|
43850
|
+
SERVICES_BINDINGS_DOCS_URL
|
|
43851
|
+
);
|
|
43852
|
+
}
|
|
43853
|
+
if (clientSide.length > 0) {
|
|
43854
|
+
warn(
|
|
43855
|
+
"CLIENT_SIDE_SERVICE_URL",
|
|
43856
|
+
`Bindings only cover server-side calls. Define any client-side URLs still in use as project environment variables: ${clientSide.join(", ")}.`,
|
|
43857
|
+
SERVICES_BINDINGS_DOCS_URL
|
|
43858
|
+
);
|
|
43859
|
+
}
|
|
43860
|
+
if (unsupported.length > 0) {
|
|
43861
|
+
warn(
|
|
43862
|
+
"BINDINGS_UNSUPPORTED_RUNTIME",
|
|
43863
|
+
`The ${resolved.runtime} runtime does not support bindings; ${unsupported.join(", ")} will no longer be injected. Build a container image to use bindings, or call other services through public URLs.`,
|
|
43864
|
+
SERVICES_BINDINGS_DOCS_URL
|
|
43865
|
+
);
|
|
43866
|
+
}
|
|
43867
|
+
if (bindings.length > 0)
|
|
43868
|
+
service.bindings = bindings;
|
|
43869
|
+
return service;
|
|
43870
|
+
}
|
|
43871
|
+
function getUnmigratedNote(legacyName, resolved) {
|
|
43872
|
+
const isPython = resolved.runtime === "python";
|
|
43873
|
+
let guidance;
|
|
43874
|
+
if (resolved.type === "cron" || resolved.trigger === "schedule") {
|
|
43875
|
+
guidance = isPython ? "Declare the schedule in your Python app (for example with APScheduler in the web service) or expose the job as a route and add it to top-level `crons`." : "Expose the job as a route in a web service and add it to top-level `crons`.";
|
|
43876
|
+
} else if (resolved.trigger === "workflow") {
|
|
43877
|
+
guidance = isPython ? "Declare it as a `[[tool.vercel.workflows]]` entry in the owning service's pyproject.toml." : "Move it into a web service that uses the Workflow SDK.";
|
|
43878
|
+
} else {
|
|
43879
|
+
guidance = isPython ? "Declare it as a `[[tool.vercel.subscribers]]` entry in the owning service's pyproject.toml." : "Move the queue consumer into a web service that subscribes to the topic.";
|
|
43880
|
+
}
|
|
43881
|
+
return {
|
|
43882
|
+
code: "UNSUPPORTED_SERVICE_TYPE",
|
|
43883
|
+
serviceName: legacyName,
|
|
43884
|
+
message: `"${legacyName}" (type "${resolved.type}"${resolved.trigger ? `, trigger "${resolved.trigger}"` : ""}) has no equivalent in \`services\` and was left out. ${guidance}`,
|
|
43885
|
+
link: EXPERIMENTAL_SERVICES_DOCS_URL
|
|
43886
|
+
};
|
|
43887
|
+
}
|
|
43888
|
+
async function migrateExperimentalServices2(options) {
|
|
43889
|
+
const { fs: fs5 } = options;
|
|
43890
|
+
let { config, resolvedServices } = options;
|
|
43891
|
+
if (!config) {
|
|
43892
|
+
const read = await (0, import_utils.readVercelConfig)(fs5);
|
|
43893
|
+
if (read.error)
|
|
43894
|
+
return emptyPlanWithErrors([read.error]);
|
|
43895
|
+
config = read.config ?? {};
|
|
43896
|
+
}
|
|
43897
|
+
const conflict = getServicesConfigConflict(config);
|
|
43898
|
+
if (conflict)
|
|
43899
|
+
return emptyPlanWithErrors([conflict]);
|
|
43900
|
+
if (!resolvedServices && isNonEmptyObject(config.experimentalServices)) {
|
|
43901
|
+
const result = await (0, import_resolve.resolveAllConfiguredServices)(
|
|
43902
|
+
config.experimentalServices,
|
|
43903
|
+
fs5,
|
|
43904
|
+
"configured"
|
|
43905
|
+
);
|
|
43906
|
+
if (result.errors.length > 0) {
|
|
43907
|
+
return emptyPlanWithErrors(result.errors);
|
|
43908
|
+
}
|
|
43909
|
+
resolvedServices = result.services;
|
|
43910
|
+
}
|
|
43911
|
+
const plan = planExperimentalServicesMigration2(
|
|
43912
|
+
config,
|
|
43913
|
+
resolvedServices ?? []
|
|
43914
|
+
);
|
|
43915
|
+
if (plan.errors.length > 0)
|
|
43916
|
+
return plan;
|
|
43917
|
+
const check = await (0, import_resolve_v2.resolveAllConfiguredServicesV2)(plan.patch.services, fs5);
|
|
43918
|
+
plan.errors.push(
|
|
43919
|
+
...check.errors.map((error) => ({
|
|
43920
|
+
...error,
|
|
43921
|
+
message: `Generated \`services\` config is invalid: ${error.message}`
|
|
43922
|
+
}))
|
|
43923
|
+
);
|
|
43924
|
+
return plan;
|
|
43925
|
+
}
|
|
43926
|
+
function emptyPlanWithErrors(errors) {
|
|
43927
|
+
return {
|
|
43928
|
+
patch: { services: {}, rewrites: [] },
|
|
43929
|
+
removeKeys: [],
|
|
43930
|
+
movedTopLevelKeys: [],
|
|
43931
|
+
renamedServices: [],
|
|
43932
|
+
warnings: [],
|
|
43933
|
+
unmigrated: [],
|
|
43934
|
+
errors
|
|
43935
|
+
};
|
|
43936
|
+
}
|
|
43937
|
+
}
|
|
43938
|
+
});
|
|
43939
|
+
|
|
43129
43940
|
// ../fs-detectors/dist/detect-file-system-api.js
|
|
43130
43941
|
var require_detect_file_system_api = __commonJS({
|
|
43131
43942
|
"../fs-detectors/dist/detect-file-system-api.js"(exports, module2) {
|
|
@@ -47915,14 +48726,18 @@ var require_dist9 = __commonJS({
|
|
|
47915
48726
|
getProxyBuilder: () => import_detect_builders.getProxyBuilder,
|
|
47916
48727
|
getWorkspacePackagePaths: () => import_get_workspace_package_paths.getWorkspacePackagePaths,
|
|
47917
48728
|
getWorkspaces: () => import_get_workspaces.getWorkspaces,
|
|
48729
|
+
hasLegacyServicesConfig: () => import_migrate.hasLegacyServicesConfig,
|
|
47918
48730
|
isExperimentalService: () => import_build_utils5.isExperimentalService,
|
|
47919
48731
|
isExperimentalServiceV2: () => import_build_utils5.isExperimentalServiceV2,
|
|
47920
48732
|
isOfficialRuntime: () => import_is_official_runtime.isOfficialRuntime,
|
|
47921
48733
|
isRouteOwningBuilder: () => import_utils.isRouteOwningBuilder,
|
|
47922
48734
|
isStaticBuild: () => import_utils.isStaticBuild,
|
|
47923
48735
|
isStaticRuntime: () => import_is_official_runtime.isStaticRuntime,
|
|
48736
|
+
migrateExperimentalServices: () => import_migrate.migrateExperimentalServices,
|
|
47924
48737
|
monorepoManagers: () => import_monorepo_managers.monorepoManagers,
|
|
47925
48738
|
packageManagers: () => import_package_managers.packageManagers,
|
|
48739
|
+
planExperimentalServicesMigration: () => import_migrate.planExperimentalServicesMigration,
|
|
48740
|
+
resolveAllConfiguredServices: () => import_resolve.resolveAllConfiguredServices,
|
|
47926
48741
|
resolveAllConfiguredServicesV2: () => import_resolve_v2.resolveAllConfiguredServicesV2,
|
|
47927
48742
|
resolveConfiguredServiceV2: () => import_resolve_v2.resolveConfiguredServiceV2,
|
|
47928
48743
|
validateProxy: () => import_detect_builders.validateProxy,
|
|
@@ -47934,6 +48749,8 @@ var require_dist9 = __commonJS({
|
|
|
47934
48749
|
var import_detect_builders = require_detect_builders();
|
|
47935
48750
|
var import_detect_services = require_detect_services();
|
|
47936
48751
|
var import_resolve_v2 = require_resolve_v2();
|
|
48752
|
+
var import_resolve = require_resolve();
|
|
48753
|
+
var import_migrate = require_migrate();
|
|
47937
48754
|
var import_build_utils5 = require("@vercel/build-utils");
|
|
47938
48755
|
var import_auto_detect = require_auto_detect();
|
|
47939
48756
|
var import_utils = require_utils5();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vercel/static-build",
|
|
3
|
-
"version": "10.0.
|
|
3
|
+
"version": "10.0.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index",
|
|
6
6
|
"homepage": "https://vercel.com/docs/build-step",
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"ts-morph": "12.0.0",
|
|
17
|
+
"@vercel/gatsby-plugin-vercel-builder": "2.2.58",
|
|
17
18
|
"@vercel/gatsby-plugin-vercel-analytics": "1.0.12",
|
|
18
|
-
"@vercel/static-config": "3.4.3"
|
|
19
|
-
"@vercel/gatsby-plugin-vercel-builder": "2.2.57"
|
|
19
|
+
"@vercel/static-config": "3.4.3"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"@vercel/build-utils": "14.10.
|
|
22
|
+
"@vercel/build-utils": "14.10.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/aws-lambda": "8.10.64",
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
"tree-kill": "1.2.2",
|
|
42
42
|
"vitest": "4.1.10",
|
|
43
43
|
"@vercel/error-utils": "2.2.1",
|
|
44
|
-
"@vercel/build-utils": "14.10.1",
|
|
45
44
|
"@vercel/frameworks": "3.34.0",
|
|
45
|
+
"@vercel/build-utils": "14.10.2",
|
|
46
46
|
"@vercel/routing-utils": "6.6.0",
|
|
47
|
-
"@vercel/fs-detectors": "7.
|
|
47
|
+
"@vercel/fs-detectors": "7.6.1"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "node ../../utils/build-builder.mjs",
|