vercel 53.3.2 → 53.4.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/chunks/{add-3SVEYCYO.js → add-FYITUY65.js} +4 -4
- package/dist/chunks/{chunk-ADLCFLGH.js → chunk-44EL4BJL.js} +5 -5
- package/dist/chunks/{chunk-KSF2MOCF.js → chunk-54T7XV3H.js} +1 -1
- package/dist/chunks/{chunk-435PAKFA.js → chunk-5HTDIHTQ.js} +2 -2
- package/dist/chunks/{chunk-6ESUYMQ6.js → chunk-6447C5WV.js} +1 -1
- package/dist/chunks/{chunk-LQOXSEJW.js → chunk-6EI6XOUG.js} +2 -2
- package/dist/chunks/{chunk-SIRIGCP6.js → chunk-73EVSBLA.js} +1 -1
- package/dist/chunks/{chunk-HENJXUSM.js → chunk-7TCOOSFP.js} +1 -1
- package/dist/chunks/{chunk-3JREBTWA.js → chunk-CMAHZSFA.js} +12 -2
- package/dist/chunks/{chunk-HFCK3QBJ.js → chunk-IVC36JQ5.js} +3 -3
- package/dist/chunks/{chunk-K5WXYAUP.js → chunk-KHDOCVQF.js} +1 -1
- package/dist/chunks/{chunk-FVDSS6AL.js → chunk-KM7WTYJ4.js} +2 -2
- package/dist/chunks/{chunk-5V2IIK5P.js → chunk-KTULXE6M.js} +1 -1
- package/dist/chunks/{chunk-Z2O2S6ZA.js → chunk-LBP7YFBV.js} +336 -51
- package/dist/chunks/{chunk-E4OPPX7M.js → chunk-MW7BI4C2.js} +1 -1
- package/dist/chunks/{chunk-E6EUZBB3.js → chunk-PU7YKGJI.js} +4 -4
- package/dist/chunks/{chunk-OY4HIPQO.js → chunk-SLWOG5CX.js} +60 -2
- package/dist/chunks/{chunk-U7NBRDCA.js → chunk-WZO6BNJ7.js} +1 -1
- package/dist/chunks/{chunk-H2IRGYM2.js → chunk-YWCYZANP.js} +3 -3
- package/dist/chunks/{chunk-P6Z4AGTA.js → chunk-Z2ES2XHU.js} +1 -1
- package/dist/chunks/{chunk-X32G5X53.js → chunk-ZY4YCCXG.js} +1 -1
- package/dist/chunks/{compile-vercel-config-LDMZFRM6.js → compile-vercel-config-ED6WXKEL.js} +1 -1
- package/dist/chunks/{delete-Y2K2SKOJ.js → delete-FYRG67YL.js} +2 -2
- package/dist/chunks/{disable-P72GFXPO.js → disable-T6JFY4LL.js} +2 -2
- package/dist/chunks/{discard-PJICIKZS.js → discard-OLVACEPN.js} +2 -2
- package/dist/chunks/{edit-UBF4GZ74.js → edit-JI2VCMGG.js} +3 -3
- package/dist/chunks/{enable-WKNZCBBP.js → enable-2W35HGRM.js} +2 -2
- package/dist/chunks/{export-47S3H44M.js → export-FFMFMPGE.js} +2 -2
- package/dist/chunks/{inspect-VN5RPWZ4.js → inspect-RDRV6BUD.js} +3 -3
- package/dist/chunks/{list-2MOCSIVK.js → list-5WGQ7F6P.js} +2 -2
- package/dist/chunks/{list-E2776667.js → list-F2GP6UZ7.js} +3 -3
- package/dist/chunks/{ls-K6VVPESL.js → ls-ZLHJPSZZ.js} +4 -4
- package/dist/chunks/{publish-YTJF333F.js → publish-S2PGRBDP.js} +2 -2
- package/dist/chunks/{query-573BCOCL.js → query-G5K7DLLJ.js} +5 -5
- package/dist/chunks/{reorder-WGMITOMK.js → reorder-K5VXZ7F5.js} +2 -2
- package/dist/chunks/{restore-R5SP6QDT.js → restore-QJYBYUIZ.js} +2 -2
- package/dist/chunks/{rm-3CARKENK.js → rm-WCHM3XXB.js} +4 -4
- package/dist/chunks/{rule-inspect-N6HDKT6I.js → rule-inspect-VMWUI4WH.js} +4 -4
- package/dist/chunks/{rules-D32GEN6D.js → rules-SOQXK4AE.js} +6 -6
- package/dist/chunks/{schema-7I3UHM6W.js → schema-2H2WLFJN.js} +2 -2
- package/dist/chunks/{update-RQ7YZS6M.js → update-W6DZOFHV.js} +4 -4
- package/dist/commands/build/index.js +52 -45
- package/dist/commands/deploy/index.js +10 -10
- package/dist/commands/dev/index.js +209 -32
- package/dist/commands/env/index.js +5 -5
- package/dist/commands/link/index.js +7 -7
- package/dist/commands/list/index.js +3 -3
- package/dist/commands-bulk.js +1756 -1257
- package/dist/index.js +9 -9
- package/dist/version.mjs +1 -1
- package/package.json +22 -22
|
@@ -15966,6 +15966,40 @@ var require_frameworks = __commonJS({
|
|
|
15966
15966
|
}
|
|
15967
15967
|
]
|
|
15968
15968
|
},
|
|
15969
|
+
{
|
|
15970
|
+
name: "Ash",
|
|
15971
|
+
slug: "ash",
|
|
15972
|
+
logo: "https://api-frameworks.vercel.sh/framework-logos/ash.svg",
|
|
15973
|
+
darkModeLogo: "https://api-frameworks.vercel.sh/framework-logos/ash-dark.svg",
|
|
15974
|
+
tagline: "A filesystem-first framework for durable backend agents on Vercel.",
|
|
15975
|
+
description: "An Ash app: agents authored as a directory of files, compiled and served on Vercel.",
|
|
15976
|
+
detectors: {
|
|
15977
|
+
every: [
|
|
15978
|
+
{
|
|
15979
|
+
path: "package.json",
|
|
15980
|
+
matchContent: '"(dev)?(d|D)ependencies":\\s*{[^}]*"experimental-ash":\\s*".+?"[^}]*}'
|
|
15981
|
+
}
|
|
15982
|
+
]
|
|
15983
|
+
},
|
|
15984
|
+
settings: {
|
|
15985
|
+
installCommand: {
|
|
15986
|
+
placeholder: "`pnpm install`, `yarn install`, or `npm install`"
|
|
15987
|
+
},
|
|
15988
|
+
buildCommand: {
|
|
15989
|
+
value: "ash build",
|
|
15990
|
+
placeholder: "`npm run build` or `ash build`"
|
|
15991
|
+
},
|
|
15992
|
+
devCommand: {
|
|
15993
|
+
value: "ash dev",
|
|
15994
|
+
placeholder: "ash dev"
|
|
15995
|
+
},
|
|
15996
|
+
outputDirectory: {
|
|
15997
|
+
value: ".output"
|
|
15998
|
+
}
|
|
15999
|
+
},
|
|
16000
|
+
getOutputDirName: async () => ".output",
|
|
16001
|
+
experimental: true
|
|
16002
|
+
},
|
|
15969
16003
|
{
|
|
15970
16004
|
name: "Sanity (v3)",
|
|
15971
16005
|
slug: "sanity-v3",
|
|
@@ -22640,9 +22674,11 @@ var require_utils3 = __commonJS({
|
|
|
22640
22674
|
inferRuntimeFromFramework: () => inferRuntimeFromFramework,
|
|
22641
22675
|
inferServiceRuntime: () => inferServiceRuntime,
|
|
22642
22676
|
isFrontendFramework: () => isFrontendFramework,
|
|
22677
|
+
isPublicServicesEnabled: () => isPublicServicesEnabled2,
|
|
22643
22678
|
isRouteOwningBuilder: () => isRouteOwningBuilder2,
|
|
22644
22679
|
isStaticBuild: () => isStaticBuild2,
|
|
22645
|
-
readVercelConfig: () => readVercelConfig
|
|
22680
|
+
readVercelConfig: () => readVercelConfig,
|
|
22681
|
+
validateServicesConfigGate: () => validateServicesConfigGate
|
|
22646
22682
|
});
|
|
22647
22683
|
module.exports = __toCommonJS2(utils_exports);
|
|
22648
22684
|
var import_framework_helpers = __require("@vercel/build-utils/dist/framework-helpers");
|
|
@@ -22655,6 +22691,18 @@ var require_utils3 = __commonJS({
|
|
|
22655
22691
|
return false;
|
|
22656
22692
|
}
|
|
22657
22693
|
}
|
|
22694
|
+
function isPublicServicesEnabled2() {
|
|
22695
|
+
return process.env.VERCEL_USE_SERVICES === "1" || process.env.VERCEL_USE_SERVICES?.toLowerCase() === "true";
|
|
22696
|
+
}
|
|
22697
|
+
function validateServicesConfigGate(config) {
|
|
22698
|
+
if (config?.services !== void 0 && !isPublicServicesEnabled2()) {
|
|
22699
|
+
return {
|
|
22700
|
+
code: "INVALID_VERCEL_CONFIG",
|
|
22701
|
+
message: "Invalid vercel.json - should NOT have additional property `services`. Please remove it."
|
|
22702
|
+
};
|
|
22703
|
+
}
|
|
22704
|
+
return null;
|
|
22705
|
+
}
|
|
22658
22706
|
var INTERNAL_QUEUES_PREFIX = "/_svc/_queues";
|
|
22659
22707
|
function normalizeInternalServiceEntrypoint(entrypoint) {
|
|
22660
22708
|
const normalized = entrypoint.replace(/\\/g, "/").replace(/^\/+/, "").replace(/\.[^/.]+$/, "");
|
|
@@ -22739,6 +22787,10 @@ var require_utils3 = __commonJS({
|
|
|
22739
22787
|
try {
|
|
22740
22788
|
const content = await fs5.readFile("vercel.json");
|
|
22741
22789
|
const config = JSON.parse(content.toString());
|
|
22790
|
+
const gateError = validateServicesConfigGate(config);
|
|
22791
|
+
if (gateError) {
|
|
22792
|
+
return { config: null, error: gateError };
|
|
22793
|
+
}
|
|
22742
22794
|
return { config, error: null };
|
|
22743
22795
|
} catch {
|
|
22744
22796
|
return {
|
|
@@ -22756,6 +22808,10 @@ var require_utils3 = __commonJS({
|
|
|
22756
22808
|
const { parse: tomlParse3 } = await import("smol-toml");
|
|
22757
22809
|
const content = await fs5.readFile("vercel.toml");
|
|
22758
22810
|
const config = tomlParse3(content.toString());
|
|
22811
|
+
const gateError = validateServicesConfigGate(config);
|
|
22812
|
+
if (gateError) {
|
|
22813
|
+
return { config: null, error: gateError };
|
|
22814
|
+
}
|
|
22759
22815
|
return { config, error: null };
|
|
22760
22816
|
} catch {
|
|
22761
22817
|
return {
|
|
@@ -23075,6 +23131,11 @@ var require_resolve2 = __commonJS({
|
|
|
23075
23131
|
var SERVICE_NAME_REGEX = /^[a-zA-Z]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;
|
|
23076
23132
|
var DNS_LABEL_RE = /^(?!-)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i;
|
|
23077
23133
|
var ENV_PREFIX_RE = /^[A-Z][A-Z0-9_]*_$/;
|
|
23134
|
+
var ENTRYPOINT_REQUIRED_RUNTIMES = /* @__PURE__ */ new Set([
|
|
23135
|
+
"node",
|
|
23136
|
+
"python",
|
|
23137
|
+
"go"
|
|
23138
|
+
]);
|
|
23078
23139
|
async function getServiceFs(fs5, serviceName, root) {
|
|
23079
23140
|
if (!root) {
|
|
23080
23141
|
return { fs: fs5 };
|
|
@@ -23106,6 +23167,38 @@ var require_resolve2 = __commonJS({
|
|
|
23106
23167
|
const normalized = import_path11.posix.normalize(entrypoint);
|
|
23107
23168
|
return normalized === "" ? "." : normalized;
|
|
23108
23169
|
}
|
|
23170
|
+
function getEffectiveServiceTrigger(config) {
|
|
23171
|
+
if (config.type === "cron") {
|
|
23172
|
+
return "schedule";
|
|
23173
|
+
}
|
|
23174
|
+
if (config.type === "worker") {
|
|
23175
|
+
return "queue";
|
|
23176
|
+
}
|
|
23177
|
+
if (config.type !== "job") {
|
|
23178
|
+
return void 0;
|
|
23179
|
+
}
|
|
23180
|
+
return config.trigger;
|
|
23181
|
+
}
|
|
23182
|
+
function getEntrypointRequiredRuntime(config) {
|
|
23183
|
+
if (config.runtime && config.runtime in import_types.RUNTIME_BUILDERS) {
|
|
23184
|
+
return config.runtime;
|
|
23185
|
+
}
|
|
23186
|
+
return (0, import_utils4.inferRuntimeFromFramework)(config.framework);
|
|
23187
|
+
}
|
|
23188
|
+
function validateBackendFileEntrypoint(name, config, resolvedEntrypoint, options) {
|
|
23189
|
+
if (!options.requireFileEntrypointForBackendRuntimes || !resolvedEntrypoint?.isDirectory) {
|
|
23190
|
+
return null;
|
|
23191
|
+
}
|
|
23192
|
+
const runtime = getEntrypointRequiredRuntime(config);
|
|
23193
|
+
if (!runtime || !ENTRYPOINT_REQUIRED_RUNTIMES.has(runtime)) {
|
|
23194
|
+
return null;
|
|
23195
|
+
}
|
|
23196
|
+
return {
|
|
23197
|
+
code: "INVALID_ENTRYPOINT",
|
|
23198
|
+
message: `Service "${name}" must specify a file "entrypoint" when using "${config.runtime ? "runtime" : "framework"}" "${config.runtime || config.framework}".`,
|
|
23199
|
+
serviceName: name
|
|
23200
|
+
};
|
|
23201
|
+
}
|
|
23109
23202
|
async function resolveEntrypointPath({
|
|
23110
23203
|
fs: fs5,
|
|
23111
23204
|
serviceName,
|
|
@@ -23200,7 +23293,7 @@ var require_resolve2 = __commonJS({
|
|
|
23200
23293
|
return {
|
|
23201
23294
|
error: {
|
|
23202
23295
|
code: "MULTIPLE_FRAMEWORKS_SERVICE",
|
|
23203
|
-
message: `Multiple frameworks detected in ${workspace === "." ? "project root" : `${workspace}/`}: ${frameworkNames}. Specify "framework" explicitly in
|
|
23296
|
+
message: `Multiple frameworks detected in ${workspace === "." ? "project root" : `${workspace}/`}: ${frameworkNames}. Specify "framework" explicitly in services.`,
|
|
23204
23297
|
serviceName
|
|
23205
23298
|
}
|
|
23206
23299
|
};
|
|
@@ -23294,7 +23387,7 @@ var require_resolve2 = __commonJS({
|
|
|
23294
23387
|
}
|
|
23295
23388
|
};
|
|
23296
23389
|
}
|
|
23297
|
-
function validateServiceConfig(name, config) {
|
|
23390
|
+
function validateServiceConfig(name, config, options = {}) {
|
|
23298
23391
|
if (!SERVICE_NAME_REGEX.test(name)) {
|
|
23299
23392
|
return {
|
|
23300
23393
|
code: "INVALID_SERVICE_NAME",
|
|
@@ -23310,13 +23403,15 @@ var require_resolve2 = __commonJS({
|
|
|
23310
23403
|
};
|
|
23311
23404
|
}
|
|
23312
23405
|
const serviceType = config.type || "web";
|
|
23313
|
-
const
|
|
23314
|
-
const
|
|
23406
|
+
const effectiveTrigger = getEffectiveServiceTrigger(config);
|
|
23407
|
+
const effectiveService = {
|
|
23315
23408
|
type: serviceType,
|
|
23316
|
-
trigger:
|
|
23317
|
-
}
|
|
23318
|
-
const
|
|
23319
|
-
const
|
|
23409
|
+
trigger: effectiveTrigger
|
|
23410
|
+
};
|
|
23411
|
+
const isJobService = serviceType === "job" || serviceType === "cron";
|
|
23412
|
+
const isScheduleJobService = (0, import_build_utils5.isScheduleTriggeredService)(effectiveService);
|
|
23413
|
+
const isQueueJobService = serviceType === "job" && (0, import_build_utils5.isQueueTriggeredService)(effectiveService);
|
|
23414
|
+
const isWorkflowService = serviceType === "job" && effectiveTrigger === "workflow";
|
|
23320
23415
|
const isNonWebService = serviceType === "worker" || isJobService;
|
|
23321
23416
|
const serviceTypeLabel = isJobService ? "Job" : serviceType === "worker" ? "Worker" : "Web";
|
|
23322
23417
|
const routingResult = resolveServiceRoutingConfig(name, config);
|
|
@@ -23362,17 +23457,17 @@ var require_resolve2 = __commonJS({
|
|
|
23362
23457
|
serviceName: name
|
|
23363
23458
|
};
|
|
23364
23459
|
}
|
|
23365
|
-
if (serviceType === "job" &&
|
|
23460
|
+
if (serviceType === "job" && effectiveTrigger === void 0) {
|
|
23366
23461
|
return {
|
|
23367
23462
|
code: "MISSING_JOB_TRIGGER",
|
|
23368
23463
|
message: `Job service "${name}" is missing required "trigger" field.`,
|
|
23369
23464
|
serviceName: name
|
|
23370
23465
|
};
|
|
23371
23466
|
}
|
|
23372
|
-
if (serviceType === "job" &&
|
|
23467
|
+
if (serviceType === "job" && effectiveTrigger && !import_build_utils5.JOB_TRIGGERS.includes(effectiveTrigger)) {
|
|
23373
23468
|
return {
|
|
23374
23469
|
code: "INVALID_JOB_TRIGGER",
|
|
23375
|
-
message: `Job service "${name}" has invalid trigger "${
|
|
23470
|
+
message: `Job service "${name}" has invalid trigger "${effectiveTrigger}". Expected ${import_build_utils5.JOB_TRIGGERS.map((t) => `"${t}"`).join(", ")}.`,
|
|
23376
23471
|
serviceName: name
|
|
23377
23472
|
};
|
|
23378
23473
|
}
|
|
@@ -23450,6 +23545,7 @@ var require_resolve2 = __commonJS({
|
|
|
23450
23545
|
const hasFramework = Boolean(config.framework);
|
|
23451
23546
|
const hasBuilderOrRuntime = Boolean(config.builder || config.runtime);
|
|
23452
23547
|
const hasEntrypoint = Boolean(config.entrypoint);
|
|
23548
|
+
const entrypointRequiredRuntime = getEntrypointRequiredRuntime(config);
|
|
23453
23549
|
if (!hasFramework && !hasBuilderOrRuntime && !hasEntrypoint) {
|
|
23454
23550
|
return {
|
|
23455
23551
|
code: "MISSING_SERVICE_CONFIG",
|
|
@@ -23457,6 +23553,13 @@ var require_resolve2 = __commonJS({
|
|
|
23457
23553
|
serviceName: name
|
|
23458
23554
|
};
|
|
23459
23555
|
}
|
|
23556
|
+
if (options.requireFileEntrypointForBackendRuntimes && !hasEntrypoint && entrypointRequiredRuntime && ENTRYPOINT_REQUIRED_RUNTIMES.has(entrypointRequiredRuntime)) {
|
|
23557
|
+
return {
|
|
23558
|
+
code: "MISSING_ENTRYPOINT",
|
|
23559
|
+
message: `Service "${name}" must specify "entrypoint" when using "${config.runtime ? "runtime" : "framework"}" "${config.runtime || config.framework}".`,
|
|
23560
|
+
serviceName: name
|
|
23561
|
+
};
|
|
23562
|
+
}
|
|
23460
23563
|
if (hasBuilderOrRuntime && !hasFramework && !hasEntrypoint) {
|
|
23461
23564
|
return {
|
|
23462
23565
|
code: "MISSING_ENTRYPOINT",
|
|
@@ -23494,7 +23597,7 @@ var require_resolve2 = __commonJS({
|
|
|
23494
23597
|
routePrefixSource = "configured"
|
|
23495
23598
|
} = options;
|
|
23496
23599
|
const type = config.type || "web";
|
|
23497
|
-
const trigger =
|
|
23600
|
+
const trigger = getEffectiveServiceTrigger(config);
|
|
23498
23601
|
const rawEntrypoint = config.entrypoint;
|
|
23499
23602
|
const moduleAttrParsed = typeof rawEntrypoint === "string" ? parsePyModuleAttrEntrypoint(rawEntrypoint) : null;
|
|
23500
23603
|
const routingResult = resolveServiceRoutingConfig(name, config);
|
|
@@ -23640,13 +23743,13 @@ var require_resolve2 = __commonJS({
|
|
|
23640
23743
|
envPrefix: config.envPrefix
|
|
23641
23744
|
};
|
|
23642
23745
|
}
|
|
23643
|
-
async function resolveAllConfiguredServices(services, fs5, routePrefixSource = "configured") {
|
|
23746
|
+
async function resolveAllConfiguredServices(services, fs5, routePrefixSource = "configured", options = {}) {
|
|
23644
23747
|
const resolved = [];
|
|
23645
23748
|
const errors = [];
|
|
23646
23749
|
const webServicesByRoutePrefix = /* @__PURE__ */ new Map();
|
|
23647
23750
|
for (const name of Object.keys(services)) {
|
|
23648
23751
|
const serviceConfig = services[name];
|
|
23649
|
-
const validationError = validateServiceConfig(name, serviceConfig);
|
|
23752
|
+
const validationError = validateServiceConfig(name, serviceConfig, options);
|
|
23650
23753
|
if (validationError) {
|
|
23651
23754
|
errors.push(validationError);
|
|
23652
23755
|
continue;
|
|
@@ -23684,6 +23787,16 @@ var require_resolve2 = __commonJS({
|
|
|
23684
23787
|
continue;
|
|
23685
23788
|
}
|
|
23686
23789
|
}
|
|
23790
|
+
const explicitBackendEntrypointError = validateBackendFileEntrypoint(
|
|
23791
|
+
name,
|
|
23792
|
+
serviceConfig,
|
|
23793
|
+
resolvedEntrypoint,
|
|
23794
|
+
options
|
|
23795
|
+
);
|
|
23796
|
+
if (explicitBackendEntrypointError) {
|
|
23797
|
+
errors.push(explicitBackendEntrypointError);
|
|
23798
|
+
continue;
|
|
23799
|
+
}
|
|
23687
23800
|
let resolvedConfig = serviceConfig;
|
|
23688
23801
|
if (!serviceConfig.framework && resolvedEntrypoint) {
|
|
23689
23802
|
if (resolvedEntrypoint.isDirectory) {
|
|
@@ -23740,6 +23853,16 @@ var require_resolve2 = __commonJS({
|
|
|
23740
23853
|
}
|
|
23741
23854
|
}
|
|
23742
23855
|
}
|
|
23856
|
+
const backendEntrypointError = validateBackendFileEntrypoint(
|
|
23857
|
+
name,
|
|
23858
|
+
resolvedConfig,
|
|
23859
|
+
resolvedEntrypoint,
|
|
23860
|
+
options
|
|
23861
|
+
);
|
|
23862
|
+
if (backendEntrypointError) {
|
|
23863
|
+
errors.push(backendEntrypointError);
|
|
23864
|
+
continue;
|
|
23865
|
+
}
|
|
23743
23866
|
const service = await resolveConfiguredService({
|
|
23744
23867
|
name,
|
|
23745
23868
|
config: resolvedConfig,
|
|
@@ -23819,7 +23942,7 @@ var require_auto_detect = __commonJS({
|
|
|
23819
23942
|
errors: [
|
|
23820
23943
|
{
|
|
23821
23944
|
code: "MULTIPLE_FRAMEWORKS_ROOT",
|
|
23822
|
-
message: `Multiple frameworks detected at root: ${frameworkNames}. Use explicit
|
|
23945
|
+
message: `Multiple frameworks detected at root: ${frameworkNames}. Use explicit services config.`
|
|
23823
23946
|
}
|
|
23824
23947
|
]
|
|
23825
23948
|
};
|
|
@@ -23844,7 +23967,7 @@ var require_auto_detect = __commonJS({
|
|
|
23844
23967
|
errors: [
|
|
23845
23968
|
{
|
|
23846
23969
|
code: "MULTIPLE_FRAMEWORKS_SERVICE",
|
|
23847
|
-
message: `Multiple frameworks detected in ${frontendLocation}/: ${frameworkNames}. Use explicit
|
|
23970
|
+
message: `Multiple frameworks detected in ${frontendLocation}/: ${frameworkNames}. Use explicit services config.`
|
|
23848
23971
|
}
|
|
23849
23972
|
]
|
|
23850
23973
|
};
|
|
@@ -23862,7 +23985,7 @@ var require_auto_detect = __commonJS({
|
|
|
23862
23985
|
errors: [
|
|
23863
23986
|
{
|
|
23864
23987
|
code: "NO_SERVICES_CONFIGURED",
|
|
23865
|
-
message: "No services detected. Configure
|
|
23988
|
+
message: "No services detected. Configure services in vercel.json or ensure a framework exists at project root, frontend/, or apps/web/."
|
|
23866
23989
|
}
|
|
23867
23990
|
]
|
|
23868
23991
|
};
|
|
@@ -23943,7 +24066,7 @@ var require_auto_detect = __commonJS({
|
|
|
23943
24066
|
services: {},
|
|
23944
24067
|
error: {
|
|
23945
24068
|
code: "SERVICE_NAME_CONFLICT",
|
|
23946
|
-
message: `Service name conflict: "${serviceName}" exists in both ${BACKEND_DIR}/ and ${SERVICES_DIR}/${serviceName}/. Rename one of the directories or use explicit
|
|
24069
|
+
message: `Service name conflict: "${serviceName}" exists in both ${BACKEND_DIR}/ and ${SERVICES_DIR}/${serviceName}/. Rename one of the directories or use explicit services config.`,
|
|
23947
24070
|
serviceName
|
|
23948
24071
|
}
|
|
23949
24072
|
};
|
|
@@ -23992,7 +24115,7 @@ var require_auto_detect = __commonJS({
|
|
|
23992
24115
|
return {
|
|
23993
24116
|
error: {
|
|
23994
24117
|
code: "MULTIPLE_FRAMEWORKS_SERVICE",
|
|
23995
|
-
message: `Multiple frameworks detected in ${dirPath}/: ${frameworkNames}. Use explicit
|
|
24118
|
+
message: `Multiple frameworks detected in ${dirPath}/: ${frameworkNames}. Use explicit services config.`,
|
|
23996
24119
|
serviceName
|
|
23997
24120
|
}
|
|
23998
24121
|
};
|
|
@@ -24126,7 +24249,7 @@ var require_detect_railway = __commonJS({
|
|
|
24126
24249
|
if (frameworks.length === 0) {
|
|
24127
24250
|
warnings.push({
|
|
24128
24251
|
code: "SERVICE_SKIPPED",
|
|
24129
|
-
message: `Skipped service in ${dirLabel}/: no framework detected. Configure it manually in
|
|
24252
|
+
message: `Skipped service in ${dirLabel}/: no framework detected. Configure it manually in services.`
|
|
24130
24253
|
});
|
|
24131
24254
|
continue;
|
|
24132
24255
|
}
|
|
@@ -24134,7 +24257,7 @@ var require_detect_railway = __commonJS({
|
|
|
24134
24257
|
const names = frameworks.map((f) => f.name).join(", ");
|
|
24135
24258
|
errors.push({
|
|
24136
24259
|
code: "MULTIPLE_FRAMEWORKS_SERVICE",
|
|
24137
|
-
message: `Multiple frameworks detected in ${dirLabel}/: ${names}. Use explicit
|
|
24260
|
+
message: `Multiple frameworks detected in ${dirLabel}/: ${names}. Use explicit services config.`,
|
|
24138
24261
|
serviceName
|
|
24139
24262
|
});
|
|
24140
24263
|
continue;
|
|
@@ -24376,7 +24499,8 @@ var require_detect_services = __commonJS({
|
|
|
24376
24499
|
warnings: []
|
|
24377
24500
|
});
|
|
24378
24501
|
}
|
|
24379
|
-
const
|
|
24502
|
+
const hasNonEmptyPublicServicesConfig = vercelConfig?.services && Object.keys(vercelConfig.services).length > 0;
|
|
24503
|
+
const configuredServices = hasNonEmptyPublicServicesConfig ? vercelConfig.services : vercelConfig?.experimentalServices;
|
|
24380
24504
|
const hasConfiguredServices = configuredServices && Object.keys(configuredServices).length > 0;
|
|
24381
24505
|
if (!hasConfiguredServices) {
|
|
24382
24506
|
const railwayResult = await (0, import_detect_railway.detectRailwayServices)({ fs: scopedFs });
|
|
@@ -24453,7 +24577,7 @@ var require_detect_services = __commonJS({
|
|
|
24453
24577
|
errors: [
|
|
24454
24578
|
{
|
|
24455
24579
|
code: "NO_SERVICES_CONFIGURED",
|
|
24456
|
-
message: "No services configured. Add `
|
|
24580
|
+
message: "No services configured. Add `services` to vercel.json."
|
|
24457
24581
|
}
|
|
24458
24582
|
],
|
|
24459
24583
|
warnings: []
|
|
@@ -24462,7 +24586,12 @@ var require_detect_services = __commonJS({
|
|
|
24462
24586
|
const result = await (0, import_resolve.resolveAllConfiguredServices)(
|
|
24463
24587
|
configuredServices,
|
|
24464
24588
|
scopedFs,
|
|
24465
|
-
"configured"
|
|
24589
|
+
"configured",
|
|
24590
|
+
{
|
|
24591
|
+
requireFileEntrypointForBackendRuntimes: Boolean(
|
|
24592
|
+
hasNonEmptyPublicServicesConfig
|
|
24593
|
+
)
|
|
24594
|
+
}
|
|
24466
24595
|
);
|
|
24467
24596
|
const routes = generateServicesRoutes2(result.services);
|
|
24468
24597
|
return withResolvedResult({
|
|
@@ -24890,7 +25019,7 @@ var require_get_services_builders = __commonJS({
|
|
|
24890
25019
|
errors: [
|
|
24891
25020
|
{
|
|
24892
25021
|
code: "NO_SERVICES_CONFIGURED",
|
|
24893
|
-
message: "No services configured. Add `
|
|
25022
|
+
message: "No services configured. Add `services` to vercel.json."
|
|
24894
25023
|
}
|
|
24895
25024
|
],
|
|
24896
25025
|
warnings: warningResponses,
|
|
@@ -25020,13 +25149,14 @@ var require_detect_builders = __commonJS({
|
|
|
25020
25149
|
return publicBuilder ? publicBuilder.src.replace("/**/*", "") : null;
|
|
25021
25150
|
}
|
|
25022
25151
|
async function detectBuilders2(files, pkg, options = {}) {
|
|
25023
|
-
const {
|
|
25152
|
+
const { services, experimentalServices, projectSettings = {} } = options;
|
|
25024
25153
|
const { framework } = projectSettings;
|
|
25025
|
-
const
|
|
25154
|
+
const configuredServices = services ?? experimentalServices;
|
|
25155
|
+
const hasServicesConfig = configuredServices != null && typeof configuredServices === "object";
|
|
25026
25156
|
if (hasServicesConfig || framework === "services") {
|
|
25027
25157
|
return (0, import_get_services_builders.getServicesBuilders)({
|
|
25028
25158
|
workPath: options.workPath,
|
|
25029
|
-
configuredServices
|
|
25159
|
+
configuredServices,
|
|
25030
25160
|
projectFramework: framework
|
|
25031
25161
|
});
|
|
25032
25162
|
}
|
|
@@ -38908,7 +39038,7 @@ var require_package = __commonJS({
|
|
|
38908
39038
|
"../client/package.json"(exports, module) {
|
|
38909
39039
|
module.exports = {
|
|
38910
39040
|
name: "@vercel/client",
|
|
38911
|
-
version: "17.4.
|
|
39041
|
+
version: "17.4.3",
|
|
38912
39042
|
main: "dist/index.js",
|
|
38913
39043
|
typings: "dist/index.d.ts",
|
|
38914
39044
|
homepage: "https://vercel.com",
|
|
@@ -55193,6 +55323,9 @@ var envTargetChoices = import_constants.PROJECT_ENV_TARGET.map((t) => ({
|
|
|
55193
55323
|
name: (0, import_title.default)(t),
|
|
55194
55324
|
value: t
|
|
55195
55325
|
}));
|
|
55326
|
+
function isValidEnvTarget(target) {
|
|
55327
|
+
return typeof target === "undefined" || envTargetChoices.map((c) => c.value).includes(target);
|
|
55328
|
+
}
|
|
55196
55329
|
function getEnvTargetPlaceholder() {
|
|
55197
55330
|
return `<${envTargetChoices.map((c) => c.value).join(" | ")}>`;
|
|
55198
55331
|
}
|
|
@@ -55965,7 +56098,7 @@ var cronsSchema = {
|
|
|
55965
56098
|
}
|
|
55966
56099
|
}
|
|
55967
56100
|
};
|
|
55968
|
-
var
|
|
56101
|
+
var experimentalServicesMountSchema = {
|
|
55969
56102
|
oneOf: [
|
|
55970
56103
|
{
|
|
55971
56104
|
type: "string",
|
|
@@ -55991,10 +56124,46 @@ var serviceMountSchema = {
|
|
|
55991
56124
|
}
|
|
55992
56125
|
]
|
|
55993
56126
|
};
|
|
55994
|
-
var
|
|
56127
|
+
var servicesMountSchema = {
|
|
56128
|
+
oneOf: [
|
|
56129
|
+
{
|
|
56130
|
+
type: "string",
|
|
56131
|
+
minLength: 1,
|
|
56132
|
+
maxLength: 512
|
|
56133
|
+
},
|
|
56134
|
+
{
|
|
56135
|
+
type: "object",
|
|
56136
|
+
additionalProperties: false,
|
|
56137
|
+
required: ["path"],
|
|
56138
|
+
properties: {
|
|
56139
|
+
path: {
|
|
56140
|
+
type: "string",
|
|
56141
|
+
minLength: 1,
|
|
56142
|
+
maxLength: 512
|
|
56143
|
+
}
|
|
56144
|
+
}
|
|
56145
|
+
}
|
|
56146
|
+
]
|
|
56147
|
+
};
|
|
56148
|
+
var staticServiceScheduleSchema = {
|
|
55995
56149
|
type: "string",
|
|
55996
56150
|
minLength: 9,
|
|
55997
|
-
maxLength: 256
|
|
56151
|
+
maxLength: 256,
|
|
56152
|
+
not: { const: "<dynamic>" }
|
|
56153
|
+
};
|
|
56154
|
+
var serviceScheduleSchema = {
|
|
56155
|
+
oneOf: [
|
|
56156
|
+
{
|
|
56157
|
+
type: "string",
|
|
56158
|
+
minLength: 9,
|
|
56159
|
+
maxLength: 256
|
|
56160
|
+
},
|
|
56161
|
+
{
|
|
56162
|
+
type: "array",
|
|
56163
|
+
minItems: 1,
|
|
56164
|
+
items: staticServiceScheduleSchema
|
|
56165
|
+
}
|
|
56166
|
+
]
|
|
55998
56167
|
};
|
|
55999
56168
|
var serviceQueueTopicSchema = {
|
|
56000
56169
|
type: "object",
|
|
@@ -56036,13 +56205,18 @@ var serviceTopicsSchema = {
|
|
|
56036
56205
|
}
|
|
56037
56206
|
]
|
|
56038
56207
|
};
|
|
56039
|
-
var
|
|
56208
|
+
var experimentalServicesCommonProperties = {
|
|
56209
|
+
entrypoint: {
|
|
56210
|
+
type: "string",
|
|
56211
|
+
minLength: 1,
|
|
56212
|
+
maxLength: 512
|
|
56213
|
+
},
|
|
56040
56214
|
root: {
|
|
56041
56215
|
type: "string",
|
|
56042
56216
|
minLength: 1,
|
|
56043
56217
|
maxLength: 512
|
|
56044
56218
|
},
|
|
56045
|
-
|
|
56219
|
+
workspace: {
|
|
56046
56220
|
type: "string",
|
|
56047
56221
|
minLength: 1,
|
|
56048
56222
|
maxLength: 512
|
|
@@ -56072,6 +56246,11 @@ var serviceCommonProperties = {
|
|
|
56072
56246
|
minLength: 1,
|
|
56073
56247
|
maxLength: 2048
|
|
56074
56248
|
},
|
|
56249
|
+
preDeployCommand: {
|
|
56250
|
+
type: "string",
|
|
56251
|
+
minLength: 1,
|
|
56252
|
+
maxLength: 2048
|
|
56253
|
+
},
|
|
56075
56254
|
memory: {
|
|
56076
56255
|
type: "integer",
|
|
56077
56256
|
minimum: 128,
|
|
@@ -56102,8 +56281,8 @@ var serviceCommonProperties = {
|
|
|
56102
56281
|
]
|
|
56103
56282
|
}
|
|
56104
56283
|
};
|
|
56105
|
-
var
|
|
56106
|
-
mount:
|
|
56284
|
+
var experimentalServicesRoutableProperties = {
|
|
56285
|
+
mount: experimentalServicesMountSchema,
|
|
56107
56286
|
routePrefix: {
|
|
56108
56287
|
type: "string",
|
|
56109
56288
|
minLength: 1,
|
|
@@ -56115,14 +56294,30 @@ var serviceRoutableProperties = {
|
|
|
56115
56294
|
maxLength: 63
|
|
56116
56295
|
}
|
|
56117
56296
|
};
|
|
56118
|
-
var
|
|
56297
|
+
var servicesCommonProperties = {
|
|
56298
|
+
entrypoint: experimentalServicesCommonProperties.entrypoint,
|
|
56299
|
+
root: experimentalServicesCommonProperties.root,
|
|
56300
|
+
framework: experimentalServicesCommonProperties.framework,
|
|
56301
|
+
runtime: experimentalServicesCommonProperties.runtime,
|
|
56302
|
+
buildCommand: experimentalServicesCommonProperties.buildCommand,
|
|
56303
|
+
preDeployCommand: experimentalServicesCommonProperties.preDeployCommand,
|
|
56304
|
+
memory: experimentalServicesCommonProperties.memory,
|
|
56305
|
+
maxDuration: experimentalServicesCommonProperties.maxDuration,
|
|
56306
|
+
includeFiles: experimentalServicesCommonProperties.includeFiles,
|
|
56307
|
+
excludeFiles: experimentalServicesCommonProperties.excludeFiles
|
|
56308
|
+
};
|
|
56309
|
+
var servicesRoutableProperties = {
|
|
56310
|
+
mount: servicesMountSchema
|
|
56311
|
+
};
|
|
56312
|
+
var servicesRequiredProperties = ["type", "root"];
|
|
56313
|
+
var experimentalServicesServiceConfigSchema = {
|
|
56119
56314
|
oneOf: [
|
|
56120
56315
|
{
|
|
56121
56316
|
type: "object",
|
|
56122
56317
|
additionalProperties: false,
|
|
56123
56318
|
properties: {
|
|
56124
|
-
...
|
|
56125
|
-
...
|
|
56319
|
+
...experimentalServicesCommonProperties,
|
|
56320
|
+
...experimentalServicesRoutableProperties,
|
|
56126
56321
|
type: {
|
|
56127
56322
|
enum: ["web"]
|
|
56128
56323
|
}
|
|
@@ -56133,7 +56328,7 @@ var serviceConfigSchema = {
|
|
|
56133
56328
|
additionalProperties: false,
|
|
56134
56329
|
required: ["type", "trigger", "schedule"],
|
|
56135
56330
|
properties: {
|
|
56136
|
-
...
|
|
56331
|
+
...experimentalServicesCommonProperties,
|
|
56137
56332
|
type: {
|
|
56138
56333
|
const: "job"
|
|
56139
56334
|
},
|
|
@@ -56148,7 +56343,7 @@ var serviceConfigSchema = {
|
|
|
56148
56343
|
additionalProperties: false,
|
|
56149
56344
|
required: ["type", "trigger", "topics"],
|
|
56150
56345
|
properties: {
|
|
56151
|
-
...
|
|
56346
|
+
...experimentalServicesCommonProperties,
|
|
56152
56347
|
type: {
|
|
56153
56348
|
const: "job"
|
|
56154
56349
|
},
|
|
@@ -56168,7 +56363,7 @@ var serviceConfigSchema = {
|
|
|
56168
56363
|
additionalProperties: false,
|
|
56169
56364
|
required: ["type", "trigger", "entrypoint"],
|
|
56170
56365
|
properties: {
|
|
56171
|
-
...
|
|
56366
|
+
...experimentalServicesCommonProperties,
|
|
56172
56367
|
type: {
|
|
56173
56368
|
const: "job"
|
|
56174
56369
|
},
|
|
@@ -56182,7 +56377,7 @@ var serviceConfigSchema = {
|
|
|
56182
56377
|
additionalProperties: false,
|
|
56183
56378
|
required: ["type"],
|
|
56184
56379
|
properties: {
|
|
56185
|
-
...
|
|
56380
|
+
...experimentalServicesCommonProperties,
|
|
56186
56381
|
type: {
|
|
56187
56382
|
const: "worker"
|
|
56188
56383
|
},
|
|
@@ -56207,7 +56402,7 @@ var serviceConfigSchema = {
|
|
|
56207
56402
|
additionalProperties: false,
|
|
56208
56403
|
required: ["type", "schedule"],
|
|
56209
56404
|
properties: {
|
|
56210
|
-
...
|
|
56405
|
+
...experimentalServicesCommonProperties,
|
|
56211
56406
|
type: {
|
|
56212
56407
|
const: "cron"
|
|
56213
56408
|
},
|
|
@@ -56216,13 +56411,81 @@ var serviceConfigSchema = {
|
|
|
56216
56411
|
}
|
|
56217
56412
|
]
|
|
56218
56413
|
};
|
|
56414
|
+
var servicesServiceConfigSchema = {
|
|
56415
|
+
oneOf: [
|
|
56416
|
+
{
|
|
56417
|
+
type: "object",
|
|
56418
|
+
additionalProperties: false,
|
|
56419
|
+
required: servicesRequiredProperties,
|
|
56420
|
+
properties: {
|
|
56421
|
+
...servicesCommonProperties,
|
|
56422
|
+
...servicesRoutableProperties,
|
|
56423
|
+
type: {
|
|
56424
|
+
enum: ["web"]
|
|
56425
|
+
}
|
|
56426
|
+
}
|
|
56427
|
+
},
|
|
56428
|
+
{
|
|
56429
|
+
type: "object",
|
|
56430
|
+
additionalProperties: false,
|
|
56431
|
+
required: [...servicesRequiredProperties, "trigger", "schedule"],
|
|
56432
|
+
properties: {
|
|
56433
|
+
...servicesCommonProperties,
|
|
56434
|
+
type: {
|
|
56435
|
+
const: "job"
|
|
56436
|
+
},
|
|
56437
|
+
trigger: {
|
|
56438
|
+
const: "schedule"
|
|
56439
|
+
},
|
|
56440
|
+
schedule: serviceScheduleSchema
|
|
56441
|
+
}
|
|
56442
|
+
},
|
|
56443
|
+
{
|
|
56444
|
+
type: "object",
|
|
56445
|
+
additionalProperties: false,
|
|
56446
|
+
required: [...servicesRequiredProperties, "trigger", "topics"],
|
|
56447
|
+
properties: {
|
|
56448
|
+
...servicesCommonProperties,
|
|
56449
|
+
type: {
|
|
56450
|
+
const: "job"
|
|
56451
|
+
},
|
|
56452
|
+
trigger: {
|
|
56453
|
+
const: "queue"
|
|
56454
|
+
},
|
|
56455
|
+
topics: serviceTopicsSchema
|
|
56456
|
+
}
|
|
56457
|
+
},
|
|
56458
|
+
{
|
|
56459
|
+
type: "object",
|
|
56460
|
+
additionalProperties: false,
|
|
56461
|
+
required: [...servicesRequiredProperties, "trigger", "entrypoint"],
|
|
56462
|
+
properties: {
|
|
56463
|
+
...servicesCommonProperties,
|
|
56464
|
+
type: {
|
|
56465
|
+
const: "job"
|
|
56466
|
+
},
|
|
56467
|
+
trigger: {
|
|
56468
|
+
const: "workflow"
|
|
56469
|
+
}
|
|
56470
|
+
}
|
|
56471
|
+
}
|
|
56472
|
+
]
|
|
56473
|
+
};
|
|
56474
|
+
var servicesSchema = {
|
|
56475
|
+
type: "object",
|
|
56476
|
+
propertyNames: {
|
|
56477
|
+
pattern: "^[a-zA-Z]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$",
|
|
56478
|
+
maxLength: 64
|
|
56479
|
+
},
|
|
56480
|
+
additionalProperties: servicesServiceConfigSchema
|
|
56481
|
+
};
|
|
56219
56482
|
var experimentalServicesSchema = {
|
|
56220
56483
|
type: "object",
|
|
56221
56484
|
propertyNames: {
|
|
56222
56485
|
pattern: "^[a-zA-Z]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$",
|
|
56223
56486
|
maxLength: 64
|
|
56224
56487
|
},
|
|
56225
|
-
additionalProperties:
|
|
56488
|
+
additionalProperties: experimentalServicesServiceConfigSchema
|
|
56226
56489
|
};
|
|
56227
56490
|
var experimentalServiceGroupsSchema = {
|
|
56228
56491
|
type: "object",
|
|
@@ -56256,13 +56519,26 @@ var vercelConfigSchema = {
|
|
|
56256
56519
|
images: imagesSchema,
|
|
56257
56520
|
crons: cronsSchema,
|
|
56258
56521
|
bunVersion: { type: "string" },
|
|
56522
|
+
services: servicesSchema,
|
|
56259
56523
|
experimentalServices: experimentalServicesSchema,
|
|
56260
56524
|
experimentalServiceGroups: experimentalServiceGroupsSchema
|
|
56261
56525
|
}
|
|
56262
56526
|
};
|
|
56263
56527
|
var ajv = new import_ajv.default();
|
|
56264
56528
|
var validate = ajv.compile(vercelConfigSchema);
|
|
56529
|
+
function isPublicServicesEnabled() {
|
|
56530
|
+
return process.env.VERCEL_USE_SERVICES === "1" || process.env.VERCEL_USE_SERVICES?.toLowerCase() === "true";
|
|
56531
|
+
}
|
|
56265
56532
|
function validateConfig(config) {
|
|
56533
|
+
if (Object.prototype.hasOwnProperty.call(config, "services") && !isPublicServicesEnabled()) {
|
|
56534
|
+
const fileName = config[import_client.fileNameSymbol] || "vercel.json";
|
|
56535
|
+
const niceError = getPrettyError({
|
|
56536
|
+
dataPath: "",
|
|
56537
|
+
params: { additionalProperty: "services" }
|
|
56538
|
+
});
|
|
56539
|
+
niceError.message = `Invalid ${fileName} - ${niceError.message}`;
|
|
56540
|
+
return niceError;
|
|
56541
|
+
}
|
|
56266
56542
|
if (!validate(config)) {
|
|
56267
56543
|
if (validate.errors && validate.errors[0]) {
|
|
56268
56544
|
const error = validate.errors[0];
|
|
@@ -56279,16 +56555,24 @@ function validateConfig(config) {
|
|
|
56279
56555
|
link: "https://vercel.link/functions-and-builds"
|
|
56280
56556
|
});
|
|
56281
56557
|
}
|
|
56282
|
-
|
|
56558
|
+
const hasServices = Boolean(config.services);
|
|
56559
|
+
const hasExperimentalServices = Boolean(config.experimentalServices);
|
|
56560
|
+
if (hasServices && hasExperimentalServices) {
|
|
56561
|
+
return new NowBuildError({
|
|
56562
|
+
code: "SERVICES_AND_EXPERIMENTAL_SERVICES",
|
|
56563
|
+
message: "The `services` property cannot be used in conjunction with the `experimentalServices` property. Please remove one of them."
|
|
56564
|
+
});
|
|
56565
|
+
}
|
|
56566
|
+
if ((hasServices || hasExperimentalServices) && config.builds) {
|
|
56283
56567
|
return new NowBuildError({
|
|
56284
56568
|
code: "SERVICES_AND_BUILDS",
|
|
56285
|
-
message: "The `
|
|
56569
|
+
message: "The `services` property cannot be used in conjunction with the `builds` property. Please remove one of them."
|
|
56286
56570
|
});
|
|
56287
56571
|
}
|
|
56288
|
-
if (
|
|
56572
|
+
if ((hasServices || hasExperimentalServices) && config.functions) {
|
|
56289
56573
|
return new NowBuildError({
|
|
56290
56574
|
code: "SERVICES_AND_FUNCTIONS",
|
|
56291
|
-
message: "The `
|
|
56575
|
+
message: "The `services` property cannot be used in conjunction with the `functions` property. Please remove one of them."
|
|
56292
56576
|
});
|
|
56293
56577
|
}
|
|
56294
56578
|
if (config.experimentalServiceGroups && !config.experimentalServices) {
|
|
@@ -56314,7 +56598,7 @@ async function hasExperimentalServicesConfig(cwd) {
|
|
|
56314
56598
|
);
|
|
56315
56599
|
if (!config || config instanceof Error)
|
|
56316
56600
|
return false;
|
|
56317
|
-
return config.experimentalServices != null && typeof config.experimentalServices === "object";
|
|
56601
|
+
return config.services != null && typeof config.services === "object" || config.experimentalServices != null && typeof config.experimentalServices === "object";
|
|
56318
56602
|
} catch {
|
|
56319
56603
|
return false;
|
|
56320
56604
|
}
|
|
@@ -57135,6 +57419,7 @@ export {
|
|
|
57135
57419
|
require_lib2 as require_lib,
|
|
57136
57420
|
humanizePath,
|
|
57137
57421
|
envTargetChoices,
|
|
57422
|
+
isValidEnvTarget,
|
|
57138
57423
|
getEnvTargetPlaceholder,
|
|
57139
57424
|
listSubcommand,
|
|
57140
57425
|
addSubcommand,
|