@vercel/static-build 2.8.34 → 2.8.36

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.
Files changed (2) hide show
  1. package/dist/index.js +59 -5
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -19753,6 +19753,7 @@ var require_types2 = __commonJS({
19753
19753
  var types_exports = {};
19754
19754
  __export2(types_exports, {
19755
19755
  ENTRYPOINT_EXTENSIONS: () => ENTRYPOINT_EXTENSIONS,
19756
+ ROUTE_OWNING_BUILDERS: () => ROUTE_OWNING_BUILDERS,
19756
19757
  RUNTIME_BUILDERS: () => RUNTIME_BUILDERS,
19757
19758
  STATIC_BUILDERS: () => STATIC_BUILDERS
19758
19759
  });
@@ -19780,6 +19781,10 @@ var require_types2 = __commonJS({
19780
19781
  "@vercel/static-build",
19781
19782
  "@vercel/static"
19782
19783
  ]);
19784
+ var ROUTE_OWNING_BUILDERS = /* @__PURE__ */ new Set([
19785
+ "@vercel/next",
19786
+ "@vercel/backends"
19787
+ ]);
19783
19788
  }
19784
19789
  });
19785
19790
 
@@ -19808,6 +19813,7 @@ var require_utils4 = __commonJS({
19808
19813
  __export2(utils_exports, {
19809
19814
  getBuilderForRuntime: () => getBuilderForRuntime,
19810
19815
  inferServiceRuntime: () => inferServiceRuntime,
19816
+ isRouteOwningBuilder: () => isRouteOwningBuilder2,
19811
19817
  isStaticBuild: () => isStaticBuild2,
19812
19818
  readVercelConfig: () => readVercelConfig
19813
19819
  });
@@ -19824,6 +19830,9 @@ var require_utils4 = __commonJS({
19824
19830
  function isStaticBuild2(service) {
19825
19831
  return import_types.STATIC_BUILDERS.has(service.builder.use);
19826
19832
  }
19833
+ function isRouteOwningBuilder2(service) {
19834
+ return import_types.ROUTE_OWNING_BUILDERS.has(service.builder.use);
19835
+ }
19827
19836
  function inferServiceRuntime(config) {
19828
19837
  if (config.runtime && config.runtime in import_types.RUNTIME_BUILDERS) {
19829
19838
  return config.runtime;
@@ -19916,6 +19925,13 @@ var require_resolve = __commonJS({
19916
19925
  var import_frameworks2 = __toESM2(require_frameworks());
19917
19926
  var frameworksBySlug = new Map(import_frameworks2.default.map((f) => [f.slug, f]));
19918
19927
  var SERVICE_NAME_REGEX = /^[a-zA-Z]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;
19928
+ function normalizeRoutePrefix(routePrefix) {
19929
+ let normalized = routePrefix.startsWith("/") ? routePrefix : `/${routePrefix}`;
19930
+ if (normalized !== "/" && normalized.endsWith("/")) {
19931
+ normalized = normalized.slice(0, -1);
19932
+ }
19933
+ return normalized || "/";
19934
+ }
19919
19935
  function validateServiceConfig(name, config) {
19920
19936
  if (!SERVICE_NAME_REGEX.test(name)) {
19921
19937
  return {
@@ -20018,10 +20034,10 @@ var require_resolve = __commonJS({
20018
20034
  }
20019
20035
  const routePrefix = type === "web" && config.routePrefix ? config.routePrefix.startsWith("/") ? config.routePrefix : `/${config.routePrefix}` : void 0;
20020
20036
  const isRoot = workspace === ".";
20021
- if (!isRoot && !builderSrc.startsWith(workspace + "/")) {
20037
+ if (!isRoot) {
20022
20038
  builderSrc = import_path7.posix.join(workspace, builderSrc);
20023
20039
  }
20024
- const builderConfig = {};
20040
+ const builderConfig = { zeroConfig: true };
20025
20041
  if (config.memory)
20026
20042
  builderConfig.memory = config.memory;
20027
20043
  if (config.maxDuration)
@@ -20036,6 +20052,9 @@ var require_resolve = __commonJS({
20036
20052
  const stripped = routePrefix.startsWith("/") ? routePrefix.slice(1) : routePrefix;
20037
20053
  builderConfig.routePrefix = stripped || ".";
20038
20054
  }
20055
+ if (workspace && workspace !== ".") {
20056
+ builderConfig.workspace = workspace;
20057
+ }
20039
20058
  if (config.framework) {
20040
20059
  builderConfig.framework = config.framework;
20041
20060
  }
@@ -20063,6 +20082,7 @@ var require_resolve = __commonJS({
20063
20082
  function resolveAllConfiguredServices(services) {
20064
20083
  const resolved = [];
20065
20084
  const errors = [];
20085
+ const webServicesByRoutePrefix = /* @__PURE__ */ new Map();
20066
20086
  for (const name of Object.keys(services)) {
20067
20087
  const serviceConfig = services[name];
20068
20088
  const validationError = validateServiceConfig(name, serviceConfig);
@@ -20071,6 +20091,21 @@ var require_resolve = __commonJS({
20071
20091
  continue;
20072
20092
  }
20073
20093
  const service = resolveConfiguredService(name, serviceConfig);
20094
+ if (service.type === "web" && typeof service.routePrefix === "string") {
20095
+ const normalizedRoutePrefix = normalizeRoutePrefix(service.routePrefix);
20096
+ const existingServiceName = webServicesByRoutePrefix.get(
20097
+ normalizedRoutePrefix
20098
+ );
20099
+ if (existingServiceName) {
20100
+ errors.push({
20101
+ code: "DUPLICATE_ROUTE_PREFIX",
20102
+ message: `Web services "${existingServiceName}" and "${name}" cannot share routePrefix "${normalizedRoutePrefix}".`,
20103
+ serviceName: name
20104
+ });
20105
+ continue;
20106
+ }
20107
+ webServicesByRoutePrefix.set(normalizedRoutePrefix, name);
20108
+ }
20074
20109
  resolved.push(service);
20075
20110
  }
20076
20111
  return { services: resolved, errors };
@@ -20587,6 +20622,7 @@ var require_detect_services = __commonJS({
20587
20622
  generateServicesRoutes: () => generateServicesRoutes2
20588
20623
  });
20589
20624
  module2.exports = __toCommonJS2(detect_services_exports);
20625
+ var import_types = require_types2();
20590
20626
  var import_utils = require_utils4();
20591
20627
  var import_resolve = require_resolve();
20592
20628
  var import_auto_detect = require_auto_detect();
@@ -20650,12 +20686,26 @@ var require_detect_services = __commonJS({
20650
20686
  const defaults = [];
20651
20687
  const crons = [];
20652
20688
  const workers = [];
20689
+ const entrypointExtensions = Object.keys(import_types.ENTRYPOINT_EXTENSIONS).sort(
20690
+ (a, b) => b.length - a.length
20691
+ );
20692
+ const stripEntrypointExtension = (entrypoint) => {
20693
+ for (const ext of entrypointExtensions) {
20694
+ if (entrypoint.endsWith(ext)) {
20695
+ return entrypoint.slice(0, -ext.length);
20696
+ }
20697
+ }
20698
+ return entrypoint;
20699
+ };
20653
20700
  const sortedWebServices = services.filter(
20654
20701
  (s) => s.type === "web" && typeof s.routePrefix === "string"
20655
20702
  ).sort((a, b) => b.routePrefix.length - a.routePrefix.length);
20656
20703
  for (const service of sortedWebServices) {
20657
20704
  const { routePrefix } = service;
20658
20705
  const normalizedPrefix = routePrefix.slice(1);
20706
+ if ((0, import_utils.isRouteOwningBuilder)(service)) {
20707
+ continue;
20708
+ }
20659
20709
  if ((0, import_utils.isStaticBuild)(service)) {
20660
20710
  if (routePrefix === "/") {
20661
20711
  defaults.push({ handle: "filesystem" });
@@ -20666,9 +20716,10 @@ var require_detect_services = __commonJS({
20666
20716
  dest: `/${normalizedPrefix}/index.html`
20667
20717
  });
20668
20718
  }
20669
- } else {
20719
+ } else if (service.runtime) {
20670
20720
  const builderSrc = service.builder.src || routePrefix;
20671
- const functionPath = builderSrc.startsWith("/") ? builderSrc : `/${builderSrc}`;
20721
+ const extensionless = stripEntrypointExtension(builderSrc);
20722
+ const functionPath = extensionless.startsWith("/") ? extensionless : `/${extensionless}`;
20672
20723
  if (routePrefix === "/") {
20673
20724
  defaults.push({ src: "^/(.*)$", dest: functionPath, check: true });
20674
20725
  } else {
@@ -20678,6 +20729,8 @@ var require_detect_services = __commonJS({
20678
20729
  check: true
20679
20730
  });
20680
20731
  }
20732
+ } else {
20733
+ continue;
20681
20734
  }
20682
20735
  }
20683
20736
  return { rewrites, defaults, crons, workers };
@@ -21511,7 +21564,7 @@ var require_detect_builders = __commonJS({
21511
21564
  }
21512
21565
  }
21513
21566
  }
21514
- if (frontendBuilder && ((0, import_is_official_runtime.isOfficialRuntime)("express", frontendBuilder.use) || (0, import_is_official_runtime.isOfficialRuntime)("hono", frontendBuilder.use))) {
21567
+ if (frontendBuilder && ((0, import_is_official_runtime.isOfficialRuntime)("express", frontendBuilder.use) || (0, import_is_official_runtime.isOfficialRuntime)("hono", frontendBuilder.use) || (0, import_is_official_runtime.isOfficialRuntime)("backends", frontendBuilder.use))) {
21515
21568
  const validFilenames = [
21516
21569
  "app",
21517
21570
  "index",
@@ -29257,6 +29310,7 @@ var require_dist4 = __commonJS({
29257
29310
  getWorkspacePackagePaths: () => import_get_workspace_package_paths.getWorkspacePackagePaths,
29258
29311
  getWorkspaces: () => import_get_workspaces.getWorkspaces,
29259
29312
  isOfficialRuntime: () => import_is_official_runtime.isOfficialRuntime,
29313
+ isRouteOwningBuilder: () => import_utils.isRouteOwningBuilder,
29260
29314
  isStaticBuild: () => import_utils.isStaticBuild,
29261
29315
  isStaticRuntime: () => import_is_official_runtime.isStaticRuntime,
29262
29316
  monorepoManagers: () => import_monorepo_managers.monorepoManagers,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/static-build",
3
- "version": "2.8.34",
3
+ "version": "2.8.36",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index",
6
6
  "homepage": "https://vercel.com/docs/build-step",
@@ -15,7 +15,7 @@
15
15
  "dependencies": {
16
16
  "ts-morph": "12.0.0",
17
17
  "@vercel/gatsby-plugin-vercel-analytics": "1.0.11",
18
- "@vercel/gatsby-plugin-vercel-builder": "2.0.132",
18
+ "@vercel/gatsby-plugin-vercel-builder": "2.0.134",
19
19
  "@vercel/static-config": "3.1.2"
20
20
  },
21
21
  "devDependencies": {
@@ -38,11 +38,11 @@
38
38
  "rc9": "1.2.0",
39
39
  "semver": "7.5.2",
40
40
  "tree-kill": "1.2.2",
41
- "@vercel/build-utils": "13.3.3",
41
+ "@vercel/build-utils": "13.3.5",
42
42
  "@vercel/error-utils": "2.0.3",
43
- "@vercel/fs-detectors": "5.8.3",
44
- "@vercel/routing-utils": "5.3.2",
45
- "@vercel/frameworks": "3.17.1"
43
+ "@vercel/frameworks": "3.17.1",
44
+ "@vercel/fs-detectors": "5.8.5",
45
+ "@vercel/routing-utils": "5.3.2"
46
46
  },
47
47
  "scripts": {
48
48
  "build": "node ../../utils/build-builder.mjs",