@vercel/next 4.15.1 → 4.15.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.
Files changed (2) hide show
  1. package/dist/index.js +154 -52
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -10822,13 +10822,13 @@ var import_escape_string_regexp3 = __toESM(require_escape_string_regexp());
10822
10822
  var import_find_up = __toESM(require_find_up());
10823
10823
  var import_fs_extra6 = __toESM(require_lib2());
10824
10824
  var import_path6 = __toESM(require("path"));
10825
- var import_semver4 = __toESM(require_semver());
10825
+ var import_semver5 = __toESM(require_semver());
10826
10826
  var import_url2 = __toESM(require("url"));
10827
10827
 
10828
10828
  // src/create-serverless-config.ts
10829
10829
  var import_fs_extra4 = __toESM(require_lib2());
10830
10830
  var import_path4 = __toESM(require("path"));
10831
- var import_semver2 = __toESM(require_semver());
10831
+ var import_semver3 = __toESM(require_semver());
10832
10832
 
10833
10833
  // src/utils.ts
10834
10834
  var import_build_utils = require("@vercel/build-utils");
@@ -10836,7 +10836,7 @@ var import_async_sema = __toESM(require_lib());
10836
10836
  var import_buffer_crc32 = __toESM(require_buffer_crc32());
10837
10837
  var import_fs_extra3 = __toESM(require_lib2());
10838
10838
  var import_path3 = __toESM(require("path"));
10839
- var import_semver = __toESM(require_semver());
10839
+ var import_semver2 = __toESM(require_semver());
10840
10840
  var import_url = __toESM(require("url"));
10841
10841
  var import_module = require("module");
10842
10842
  var import_escape_string_regexp = __toESM(require_escape_string_regexp());
@@ -11112,6 +11112,107 @@ function getAppRouterPathnameFilesMap(files) {
11112
11112
  return appPathnameFilesMap;
11113
11113
  }
11114
11114
 
11115
+ // src/is-dynamic-route.ts
11116
+ var import_semver = __toESM(require_semver());
11117
+ function ensureLeadingSlash(path6) {
11118
+ return path6.startsWith("/") ? path6 : `/${path6}`;
11119
+ }
11120
+ function isGroupSegment(segment) {
11121
+ return segment[0] === "(" && segment.endsWith(")");
11122
+ }
11123
+ function normalizeAppPath2(route) {
11124
+ return ensureLeadingSlash(
11125
+ route.split("/").reduce((pathname, segment, index, segments) => {
11126
+ if (!segment) {
11127
+ return pathname;
11128
+ }
11129
+ if (isGroupSegment(segment)) {
11130
+ return pathname;
11131
+ }
11132
+ if (segment[0] === "@") {
11133
+ return pathname;
11134
+ }
11135
+ if ((segment === "page" || segment === "route") && index === segments.length - 1) {
11136
+ return pathname;
11137
+ }
11138
+ return `${pathname}/${segment}`;
11139
+ }, "")
11140
+ );
11141
+ }
11142
+ var INTERCEPTION_ROUTE_MARKERS = [
11143
+ "(..)(..)",
11144
+ "(.)",
11145
+ "(..)",
11146
+ "(...)"
11147
+ ];
11148
+ function isInterceptionRouteAppPath(path6) {
11149
+ return path6.split("/").some(
11150
+ (segment) => INTERCEPTION_ROUTE_MARKERS.some((m) => segment.startsWith(m))
11151
+ );
11152
+ }
11153
+ function extractInterceptionRouteInformation(path6) {
11154
+ let interceptingRoute;
11155
+ let marker;
11156
+ let interceptedRoute;
11157
+ for (const segment of path6.split("/")) {
11158
+ marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m));
11159
+ if (marker) {
11160
+ [interceptingRoute, interceptedRoute] = path6.split(marker, 2);
11161
+ break;
11162
+ }
11163
+ }
11164
+ if (!interceptingRoute || !marker || !interceptedRoute) {
11165
+ throw new Error(
11166
+ `Invalid interception route: ${path6}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`
11167
+ );
11168
+ }
11169
+ interceptingRoute = normalizeAppPath2(interceptingRoute);
11170
+ switch (marker) {
11171
+ case "(.)":
11172
+ if (interceptingRoute === "/") {
11173
+ interceptedRoute = `/${interceptedRoute}`;
11174
+ } else {
11175
+ interceptedRoute = interceptingRoute + "/" + interceptedRoute;
11176
+ }
11177
+ break;
11178
+ case "(..)":
11179
+ if (interceptingRoute === "/") {
11180
+ throw new Error(
11181
+ `Invalid interception route: ${path6}. Cannot use (..) marker at the root level, use (.) instead.`
11182
+ );
11183
+ }
11184
+ interceptedRoute = interceptingRoute.split("/").slice(0, -1).concat(interceptedRoute).join("/");
11185
+ break;
11186
+ case "(...)":
11187
+ interceptedRoute = "/" + interceptedRoute;
11188
+ break;
11189
+ case "(..)(..)": {
11190
+ const splitInterceptingRoute = interceptingRoute.split("/");
11191
+ if (splitInterceptingRoute.length <= 2) {
11192
+ throw new Error(
11193
+ `Invalid interception route: ${path6}. Cannot use (..)(..) marker at the root level or one level up.`
11194
+ );
11195
+ }
11196
+ interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join("/");
11197
+ break;
11198
+ }
11199
+ default:
11200
+ throw new Error("Invariant: unexpected marker");
11201
+ }
11202
+ return { interceptingRoute, interceptedRoute };
11203
+ }
11204
+ var TEST_DYNAMIC_ROUTE = /\/\[[^\/]+?\](?=\/|$)/;
11205
+ function isDynamicRoute(route, nextVersion) {
11206
+ const coerced = nextVersion ? import_semver.default.coerce(nextVersion) : null;
11207
+ if (coerced && import_semver.default.gte(coerced, "16.0.0", {
11208
+ loose: true,
11209
+ includePrerelease: true
11210
+ }) && isInterceptionRouteAppPath(route)) {
11211
+ route = extractInterceptionRouteInformation(route).interceptedRoute;
11212
+ }
11213
+ return TEST_DYNAMIC_ROUTE.test(ensureLeadingSlash(route));
11214
+ }
11215
+
11115
11216
  // src/utils.ts
11116
11217
  var require_ = (0, import_module.createRequire)(__filename);
11117
11218
  var RSC_CONTENT_TYPE = "x-component";
@@ -11125,11 +11226,6 @@ function getMaxUncompressedLambdaSize(runtime) {
11125
11226
  var skipDefaultLocaleRewrite = Boolean(
11126
11227
  process.env.NEXT_EXPERIMENTAL_DEFER_DEFAULT_LOCALE_REWRITE
11127
11228
  );
11128
- var TEST_DYNAMIC_ROUTE = /\/\[[^\/]+?\](?=\/|$)/;
11129
- function isDynamicRoute(route) {
11130
- route = route.startsWith("/") ? route : `/${route}`;
11131
- return TEST_DYNAMIC_ROUTE.test(route);
11132
- }
11133
11229
  function validateEntrypoint(entrypoint) {
11134
11230
  if (!/package\.json$/.exec(entrypoint) && !/next\.config\.js$/.exec(entrypoint)) {
11135
11231
  throw new import_build_utils.NowBuildError({
@@ -11221,7 +11317,7 @@ function normalizePage(page) {
11221
11317
  return page;
11222
11318
  }
11223
11319
  async function getRoutesManifest(entryPath, outputDirectory, nextVersion) {
11224
- const shouldHaveManifest = nextVersion && import_semver.default.gte(nextVersion, "9.1.4-canary.0");
11320
+ const shouldHaveManifest = nextVersion && import_semver2.default.gte(nextVersion, "9.1.4-canary.0");
11225
11321
  if (!shouldHaveManifest)
11226
11322
  return;
11227
11323
  const pathRoutesManifest = import_path3.default.join(
@@ -11511,7 +11607,7 @@ async function getImagesManifest(entryPath, outputDirectory) {
11511
11607
  }
11512
11608
  return import_fs_extra3.default.readJson(pathImagesManifest);
11513
11609
  }
11514
- function filterStaticPages(staticPageFiles, dynamicPages, entryDirectory, htmlContentType2, prerenderManifest, routesManifest) {
11610
+ function filterStaticPages(staticPageFiles, dynamicPages, entryDirectory, htmlContentType2, prerenderManifest, nextVersion, routesManifest) {
11515
11611
  const staticPages = {};
11516
11612
  Object.keys(staticPageFiles).forEach((page) => {
11517
11613
  const pathname = page.replace(/\.html$/, "");
@@ -11525,7 +11621,7 @@ function filterStaticPages(staticPageFiles, dynamicPages, entryDirectory, htmlCo
11525
11621
  const staticRoute = import_path3.default.posix.join(entryDirectory, pathname);
11526
11622
  staticPages[staticRoute] = staticPageFiles[page];
11527
11623
  staticPages[staticRoute].contentType = htmlContentType2;
11528
- if (isDynamicRoute(pathname)) {
11624
+ if (isDynamicRoute(pathname, nextVersion)) {
11529
11625
  dynamicPages.push(routeName);
11530
11626
  return;
11531
11627
  }
@@ -11971,7 +12067,7 @@ async function getSourceFilePathFromPage({
11971
12067
  }) {
11972
12068
  const usesSrcDir = await usesSrcDirectory(workPath);
11973
12069
  const extensionsToTry = pageExtensions || ["js", "jsx", "ts", "tsx"];
11974
- const isNextJs16Plus = nextVersion && import_semver.default.gte(nextVersion, "16.0.0");
12070
+ const isNextJs16Plus = nextVersion && import_semver2.default.gte(nextVersion, "16.0.0");
11975
12071
  const pagesToCheck = page === "middleware" && isNextJs16Plus ? ["proxy", "middleware"] : [page];
11976
12072
  for (const pageToCheck of pagesToCheck) {
11977
12073
  for (const pageType of [
@@ -12374,7 +12470,8 @@ var onPrerenderRoute = (prerenderRouteArgs) => async (routeKey, {
12374
12470
  isAppPPREnabled,
12375
12471
  isAppClientSegmentCacheEnabled,
12376
12472
  isAppClientParamParsingEnabled,
12377
- appPathnameFilesMap
12473
+ appPathnameFilesMap,
12474
+ nextVersion
12378
12475
  } = prerenderRouteArgs;
12379
12476
  if (isBlocking && isFallback) {
12380
12477
  throw new import_build_utils.NowBuildError({
@@ -12663,7 +12760,7 @@ var onPrerenderRoute = (prerenderRouteArgs) => async (routeKey, {
12663
12760
  const route = routesManifest?.dynamicRoutes.find(
12664
12761
  (r) => r.page === pageKey && !("isMiddleware" in r)
12665
12762
  );
12666
- const isDynamic = isDynamicRoute(routeKey);
12763
+ const isDynamic = isDynamicRoute(routeKey, nextVersion);
12667
12764
  const routeKeys = route?.routeKeys;
12668
12765
  let allowQuery;
12669
12766
  if (isEmptyAllowQueryForPrendered) {
@@ -12673,7 +12770,7 @@ var onPrerenderRoute = (prerenderRouteArgs) => async (routeKey, {
12673
12770
  allowQuery = Object.values(routeKeys);
12674
12771
  }
12675
12772
  } else {
12676
- const isDynamic2 = isDynamicRoute(pageKey);
12773
+ const isDynamic2 = isDynamicRoute(pageKey, nextVersion);
12677
12774
  if (routeKeys) {
12678
12775
  allowQuery = Object.values(routeKeys);
12679
12776
  } else if (!isDynamic2) {
@@ -13018,7 +13115,7 @@ function normalizeIndexOutput(outputName, isServerMode) {
13018
13115
  return outputName;
13019
13116
  }
13020
13117
  function getNextServerPath(nextVersion) {
13021
- return import_semver.default.gte(nextVersion, "v11.0.2-canary.4") ? "next/dist/server" : "next/dist/next-server/server";
13118
+ return import_semver2.default.gte(nextVersion, "v11.0.2-canary.4") ? "next/dist/server" : "next/dist/next-server/server";
13022
13119
  }
13023
13120
  function pathnameToOutputName(entryDirectory, pathname) {
13024
13121
  if (pathname === "/") {
@@ -13416,7 +13513,7 @@ async function getMiddlewareBundle({
13416
13513
  if (isCorrectMiddlewareOrder) {
13417
13514
  route.override = true;
13418
13515
  }
13419
- if (routesManifest.version > 3 && isDynamicRoute(worker.page)) {
13516
+ if (routesManifest.version > 3 && isDynamicRoute(worker.page, nextVersion)) {
13420
13517
  source.dynamicRouteMap.set(worker.page, route);
13421
13518
  } else {
13422
13519
  source.staticRoutes.push(route);
@@ -13746,7 +13843,7 @@ async function createServerlessConfig(workPath, entryPath, nextVersion) {
13746
13843
  let target = "serverless";
13747
13844
  if (nextVersion) {
13748
13845
  try {
13749
- if (import_semver2.default.gte(nextVersion, ExperimentalTraceVersion)) {
13846
+ if (import_semver3.default.gte(nextVersion, ExperimentalTraceVersion)) {
13750
13847
  target = "experimental-serverless-trace";
13751
13848
  }
13752
13849
  } catch (_ignored) {
@@ -14118,7 +14215,7 @@ var legacy_versions_default = [
14118
14215
 
14119
14216
  // src/server-build.ts
14120
14217
  var import_path5 = __toESM(require("path"));
14121
- var import_semver3 = __toESM(require_semver());
14218
+ var import_semver4 = __toESM(require_semver());
14122
14219
  var import_async_sema2 = __toESM(require_lib());
14123
14220
  var import_build_utils2 = require("@vercel/build-utils");
14124
14221
  var import_nft = require("@vercel/nft");
@@ -14220,7 +14317,7 @@ async function serverBuild({
14220
14317
  const prerenders = {};
14221
14318
  const lambdaPageKeys = Object.keys(lambdaPages);
14222
14319
  const pageBuildTraces = await (0, import_build_utils2.glob)("**/*.js.nft.json", pagesDir);
14223
- const isEmptyAllowQueryForPrendered = import_semver3.default.gte(
14320
+ const isEmptyAllowQueryForPrendered = import_semver4.default.gte(
14224
14321
  nextVersion,
14225
14322
  EMPTY_ALLOW_QUERY_FOR_PRERENDERED_VERSION
14226
14323
  );
@@ -14336,15 +14433,15 @@ async function serverBuild({
14336
14433
  modifyRewrites(afterFilesRewrites, true);
14337
14434
  modifyRewrites(fallbackRewrites);
14338
14435
  }
14339
- const isCorrectNotFoundRoutes = import_semver3.default.gte(
14436
+ const isCorrectNotFoundRoutes = import_semver4.default.gte(
14340
14437
  nextVersion,
14341
14438
  CORRECT_NOT_FOUND_ROUTES_VERSION
14342
14439
  );
14343
- const isCorrectMiddlewareOrder = import_semver3.default.gte(
14440
+ const isCorrectMiddlewareOrder = import_semver4.default.gte(
14344
14441
  nextVersion,
14345
14442
  CORRECT_MIDDLEWARE_ORDER_VERSION
14346
14443
  );
14347
- const isCorrectManifests = !experimentalAllowBundling && import_semver3.default.gte(nextVersion, CORRECTED_MANIFESTS_VERSION);
14444
+ const isCorrectManifests = !experimentalAllowBundling && import_semver4.default.gte(nextVersion, CORRECTED_MANIFESTS_VERSION);
14348
14445
  let hasStatic500 = !!staticPages[import_path5.default.posix.join(entryDirectory, "500")];
14349
14446
  if (lambdaPageKeys.length === 0) {
14350
14447
  throw new import_build_utils2.NowBuildError({
@@ -14415,7 +14512,7 @@ async function serverBuild({
14415
14512
  let initialFileReasons;
14416
14513
  let nextServerBuildTrace;
14417
14514
  let instrumentationHookBuildTrace;
14418
- const useBundledServer = import_semver3.default.gte(nextVersion, BUNDLED_SERVER_NEXT_VERSION) && process.env.VERCEL_NEXT_BUNDLED_SERVER === "1";
14515
+ const useBundledServer = import_semver4.default.gte(nextVersion, BUNDLED_SERVER_NEXT_VERSION) && process.env.VERCEL_NEXT_BUNDLED_SERVER === "1";
14419
14516
  if (useBundledServer) {
14420
14517
  (0, import_build_utils2.debug)("Using bundled Next.js server");
14421
14518
  }
@@ -14527,7 +14624,7 @@ async function serverBuild({
14527
14624
  return;
14528
14625
  }
14529
14626
  const normalizedPathname = normalizePage(pathname);
14530
- if (isDynamicRoute(normalizedPathname)) {
14627
+ if (isDynamicRoute(normalizedPathname, nextVersion)) {
14531
14628
  dynamicPages.push(normalizedPathname);
14532
14629
  }
14533
14630
  if (lambdaAppPaths[page]) {
@@ -14986,7 +15083,7 @@ ${JSON.stringify(
14986
15083
  }
14987
15084
  case "server/pages-manifest.json": {
14988
15085
  for (const key of Object.keys(manifestData)) {
14989
- if (isDynamicRoute(key) && !normalizedPages.has(key)) {
15086
+ if (isDynamicRoute(key, nextVersion) && !normalizedPages.has(key)) {
14990
15087
  delete manifestData[key];
14991
15088
  }
14992
15089
  }
@@ -14995,7 +15092,7 @@ ${JSON.stringify(
14995
15092
  case "server/app-paths-manifest.json": {
14996
15093
  for (const key of Object.keys(manifestData)) {
14997
15094
  const normalizedKey = appPathRoutesManifest?.[key] || key.replace(/(^|\/)(page|route)$/, "");
14998
- if (isDynamicRoute(normalizedKey) && !normalizedPages.has(normalizedKey)) {
15095
+ if (isDynamicRoute(normalizedKey, nextVersion) && !normalizedPages.has(normalizedKey)) {
14999
15096
  delete manifestData[key];
15000
15097
  }
15001
15098
  }
@@ -15249,7 +15346,8 @@ ${JSON.stringify(
15249
15346
  isAppPPREnabled,
15250
15347
  isAppClientSegmentCacheEnabled,
15251
15348
  isAppClientParamParsingEnabled,
15252
- appPathnameFilesMap: getAppRouterPathnameFilesMap(files)
15349
+ appPathnameFilesMap: getAppRouterPathnameFilesMap(files),
15350
+ nextVersion
15253
15351
  });
15254
15352
  await Promise.all(
15255
15353
  Object.keys(prerenderManifest.staticRoutes).map(
@@ -15283,7 +15381,7 @@ ${JSON.stringify(
15283
15381
  // we can't delete dynamic app route lambdas just because
15284
15382
  // they are in the prerender manifest since a dynamic
15285
15383
  // route can have some prerendered paths and the rest SSR
15286
- inversedAppPathManifest[route] && isDynamicRoute(route)
15384
+ inversedAppPathManifest[route] && isDynamicRoute(route, nextVersion)
15287
15385
  ) {
15288
15386
  return;
15289
15387
  }
@@ -15292,7 +15390,7 @@ ${JSON.stringify(
15292
15390
  true
15293
15391
  )];
15294
15392
  });
15295
- const isNextDataServerResolving = (middleware.staticRoutes.length > 0 || nodeMiddleware) && import_semver3.default.gte(nextVersion, NEXT_DATA_MIDDLEWARE_RESOLVING_VERSION);
15393
+ const isNextDataServerResolving = (middleware.staticRoutes.length > 0 || nodeMiddleware) && import_semver4.default.gte(nextVersion, NEXT_DATA_MIDDLEWARE_RESOLVING_VERSION);
15296
15394
  const dynamicRoutes = await getDynamicRoutes({
15297
15395
  entryPath,
15298
15396
  entryDirectory,
@@ -16028,7 +16126,10 @@ ${JSON.stringify(
16028
16126
  ...denormalizeNextDataRoute(),
16029
16127
  ...isNextDataServerResolving ? dataRoutes.filter((route) => {
16030
16128
  const { pathname } = new URL(route.dest || "/", "http://n");
16031
- return !isDynamicRoute(pathname.replace(/(\\)?\.json$/, ""));
16129
+ return !isDynamicRoute(
16130
+ pathname.replace(/(\\)?\.json$/, ""),
16131
+ nextVersion
16132
+ );
16032
16133
  }) : [],
16033
16134
  // /_next/data routes for getServerProps/getStaticProps pages
16034
16135
  ...isNextDataServerResolving ? (
@@ -16305,7 +16406,7 @@ function isLegacyNext(nextVersion) {
16305
16406
  if (legacy_versions_default.indexOf(nextVersion) !== -1) {
16306
16407
  return true;
16307
16408
  }
16308
- const maxSatisfying = import_semver4.default.maxSatisfying(legacy_versions_default, nextVersion);
16409
+ const maxSatisfying = import_semver5.default.maxSatisfying(legacy_versions_default, nextVersion);
16309
16410
  if (maxSatisfying === null) {
16310
16411
  return false;
16311
16412
  }
@@ -16359,18 +16460,17 @@ var build = async (buildOptions) => {
16359
16460
  let pkg = await readPackageJson(entryPath);
16360
16461
  const nextVersionRange = await getNextVersionRange(entryPath);
16361
16462
  const nodeVersion = await (0, import_build_utils3.getNodeVersion)(entryPath, void 0, config, meta);
16362
- const spawnOpts = (0, import_build_utils3.getSpawnOptions)(meta, nodeVersion);
16363
16463
  const {
16364
16464
  cliType,
16365
16465
  lockfileVersion,
16366
16466
  packageJsonPackageManager,
16367
16467
  turboSupportsCorepackHome
16368
16468
  } = await (0, import_build_utils3.scanParentDirs)(entryPath, true);
16369
- spawnOpts.env = (0, import_build_utils3.getEnvForPackageManager)({
16469
+ const spawnEnv = (0, import_build_utils3.getEnvForPackageManager)({
16370
16470
  cliType,
16371
16471
  lockfileVersion,
16372
16472
  packageJsonPackageManager,
16373
- env: spawnOpts.env || {},
16473
+ env: process.env,
16374
16474
  turboSupportsCorepackHome,
16375
16475
  projectCreatedAt: config.projectSettings?.createdAt
16376
16476
  });
@@ -16447,14 +16547,14 @@ var build = async (buildOptions) => {
16447
16547
  `Running "install" command: \`${trimmedInstallCommand}\`...`
16448
16548
  );
16449
16549
  await (0, import_build_utils3.execCommand)(trimmedInstallCommand, {
16450
- ...spawnOpts,
16550
+ env: spawnEnv,
16451
16551
  cwd: entryPath
16452
16552
  });
16453
16553
  } else {
16454
16554
  await (0, import_build_utils3.runNpmInstall)(
16455
16555
  entryPath,
16456
16556
  [],
16457
- spawnOpts,
16557
+ { env: spawnEnv },
16458
16558
  meta,
16459
16559
  config.projectSettings?.createdAt
16460
16560
  );
@@ -16463,14 +16563,14 @@ var build = async (buildOptions) => {
16463
16563
  } else {
16464
16564
  console.log(`Skipping "install" command...`);
16465
16565
  }
16466
- if (spawnOpts.env.VERCEL_ANALYTICS_ID) {
16566
+ if (spawnEnv.VERCEL_ANALYTICS_ID) {
16467
16567
  (0, import_build_utils3.debug)("Found VERCEL_ANALYTICS_ID in environment");
16468
16568
  const version2 = await (0, import_build_utils3.getInstalledPackageVersion)(
16469
16569
  "@vercel/speed-insights",
16470
16570
  entryPath
16471
16571
  );
16472
16572
  if (version2) {
16473
- delete spawnOpts.env.VERCEL_ANALYTICS_ID;
16573
+ delete spawnEnv.VERCEL_ANALYTICS_ID;
16474
16574
  delete process.env.VERCEL_ANALYTICS_ID;
16475
16575
  (0, import_build_utils3.debug)(
16476
16576
  "@vercel/speed-insights is installed, removing VERCEL_ANALYTICS_ID from environment"
@@ -16484,12 +16584,12 @@ var build = async (buildOptions) => {
16484
16584
  message: 'No Next.js version detected. Make sure your package.json has "next" in either "dependencies" or "devDependencies". Also check your Root Directory setting matches the directory of your package.json file.'
16485
16585
  });
16486
16586
  }
16487
- let isServerMode = !(config.framework === "blitzjs") && import_semver4.default.gte(nextVersion, SERVER_BUILD_MINIMUM_NEXT_VERSION);
16488
- const beforeFilesShouldContinue = import_semver4.default.gte(
16587
+ let isServerMode = !(config.framework === "blitzjs") && import_semver5.default.gte(nextVersion, SERVER_BUILD_MINIMUM_NEXT_VERSION);
16588
+ const beforeFilesShouldContinue = import_semver5.default.gte(
16489
16589
  nextVersion,
16490
16590
  BEFORE_FILES_CONTINUE_NEXT_VERSION
16491
16591
  );
16492
- const isCorrectLocaleAPIRoutes = import_semver4.default.gte(nextVersion, "v11.0.2-canary.3");
16592
+ const isCorrectLocaleAPIRoutes = import_semver5.default.gte(nextVersion, "v11.0.2-canary.3");
16493
16593
  if (isServerMode) {
16494
16594
  (0, import_build_utils3.debug)(
16495
16595
  `Application is being built in server mode since ${nextVersion} meets minimum version of ${SERVER_BUILD_MINIMUM_NEXT_VERSION}`
@@ -16520,7 +16620,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
16520
16620
  } else if (!isLegacy) {
16521
16621
  target = await createServerlessConfig(workPath, entryPath, nextVersion);
16522
16622
  }
16523
- const env = { ...spawnOpts.env };
16623
+ const env = { ...spawnEnv };
16524
16624
  env.NEXT_EDGE_RUNTIME_PROVIDER = "vercel";
16525
16625
  if (target) {
16526
16626
  env.NEXT_PRIVATE_TARGET = target;
@@ -16553,7 +16653,6 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
16553
16653
  );
16554
16654
  console.log(`Running "${buildCommand}"`);
16555
16655
  await (0, import_build_utils3.execCommand)(buildCommand, {
16556
- ...spawnOpts,
16557
16656
  cwd: entryPath,
16558
16657
  env
16559
16658
  });
@@ -16562,7 +16661,6 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
16562
16661
  entryPath,
16563
16662
  buildScriptName,
16564
16663
  {
16565
- ...spawnOpts,
16566
16664
  env
16567
16665
  },
16568
16666
  config.projectSettings?.createdAt
@@ -16696,7 +16794,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
16696
16794
  if (routesManifest.headers) {
16697
16795
  headers.push(...(0, import_superstatic.convertHeaders)(routesManifest.headers));
16698
16796
  }
16699
- if (import_semver4.default.gte(nextVersion, REDIRECTS_NO_STATIC_NEXT_VERSION)) {
16797
+ if (import_semver5.default.gte(nextVersion, REDIRECTS_NO_STATIC_NEXT_VERSION)) {
16700
16798
  redirects.forEach(
16701
16799
  (r, i) => updateRouteSrc(r, i, routesManifest.redirects)
16702
16800
  );
@@ -16969,7 +17067,9 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
16969
17067
  await (0, import_build_utils3.runNpmInstall)(
16970
17068
  entryPath,
16971
17069
  ["--production"],
16972
- spawnOpts,
17070
+ {
17071
+ env: spawnEnv
17072
+ },
16973
17073
  meta,
16974
17074
  config.projectSettings?.createdAt
16975
17075
  );
@@ -17118,6 +17218,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
17118
17218
  entryDirectory,
17119
17219
  htmlContentType,
17120
17220
  prerenderManifest,
17221
+ nextVersion,
17121
17222
  routesManifest
17122
17223
  );
17123
17224
  hasStatic500 = !!staticPages[import_path6.default.posix.join(entryDirectory, "500")];
@@ -17227,7 +17328,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
17227
17328
  }
17228
17329
  const isAppPPREnabled = requiredServerFilesManifest ? requiredServerFilesManifest.config.experimental?.ppr === true || requiredServerFilesManifest.config.experimental?.ppr === "incremental" || requiredServerFilesManifest.config.experimental?.cacheComponents === true : false;
17229
17330
  const isAppFullPPREnabled = requiredServerFilesManifest ? requiredServerFilesManifest?.config.experimental?.ppr === true || requiredServerFilesManifest.config.experimental?.cacheComponents === true : false;
17230
- const isAppClientSegmentCacheEnabled = import_semver4.default.gte(nextVersion, IS_APP_CLIENT_SEGMENT_CACHE_ENABLED_VERSION) || (requiredServerFilesManifest ? requiredServerFilesManifest.config.experimental?.clientSegmentCache === true : false);
17331
+ const isAppClientSegmentCacheEnabled = import_semver5.default.gte(nextVersion, IS_APP_CLIENT_SEGMENT_CACHE_ENABLED_VERSION) || (requiredServerFilesManifest ? requiredServerFilesManifest.config.experimental?.clientSegmentCache === true : false);
17231
17332
  const isAppClientParamParsingEnabled = routesManifest?.rsc?.clientParamParsing ?? false;
17232
17333
  const clientParamParsingOrigins = requiredServerFilesManifest ? requiredServerFilesManifest.config.experimental?.clientParamParsingOrigins : void 0;
17233
17334
  if (requiredServerFilesManifest) {
@@ -17303,7 +17404,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
17303
17404
  }
17304
17405
  let requiresTracing = hasLambdas;
17305
17406
  try {
17306
- if (nextVersion && import_semver4.default.lt(nextVersion, ExperimentalTraceVersion)) {
17407
+ if (nextVersion && import_semver5.default.lt(nextVersion, ExperimentalTraceVersion)) {
17307
17408
  (0, import_build_utils3.debug)(
17308
17409
  "Next.js version is too old for us to trace the required dependencies.\nAssuming Next.js has handled it!"
17309
17410
  );
@@ -17510,7 +17611,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
17510
17611
  import_path6.default.relative(workPath, pages[page].fsPath)
17511
17612
  );
17512
17613
  const pathname = page.replace(/\.js$/, "");
17513
- const routeIsDynamic = isDynamicRoute(pathname);
17614
+ const routeIsDynamic = isDynamicRoute(pathname, nextVersion);
17514
17615
  routeIsApi = isApiPage(pageFileName);
17515
17616
  if (routeIsDynamic) {
17516
17617
  dynamicPages.push(normalizePage(pathname));
@@ -17588,7 +17689,7 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
17588
17689
  return;
17589
17690
  }
17590
17691
  const pathname = page.replace(/\.js$/, "");
17591
- if (isDynamicRoute(pathname)) {
17692
+ if (isDynamicRoute(pathname, nextVersion)) {
17592
17693
  dynamicPages.push(normalizePage(pathname));
17593
17694
  }
17594
17695
  const pageFileName = import_path6.default.normalize(
@@ -17892,7 +17993,8 @@ More info: http://err.sh/vercel/vercel/next-functions-config-optimized-lambdas`
17892
17993
  isAppPPREnabled: false,
17893
17994
  isAppClientSegmentCacheEnabled: false,
17894
17995
  isAppClientParamParsingEnabled: false,
17895
- appPathnameFilesMap: getAppRouterPathnameFilesMap(files)
17996
+ appPathnameFilesMap: getAppRouterPathnameFilesMap(files),
17997
+ nextVersion
17896
17998
  });
17897
17999
  await Promise.all(
17898
18000
  Object.keys(prerenderManifest.staticRoutes).map(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/next",
3
- "version": "4.15.1",
3
+ "version": "4.15.2",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index",
6
6
  "homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js",
@@ -30,7 +30,7 @@
30
30
  "@types/semver": "6.0.0",
31
31
  "@types/text-table": "0.2.1",
32
32
  "@types/webpack-sources": "3.2.0",
33
- "@vercel/build-utils": "12.2.4",
33
+ "@vercel/build-utils": "13.0.0",
34
34
  "@vercel/routing-utils": "5.2.1",
35
35
  "async-sema": "3.0.1",
36
36
  "buffer-crc32": "0.2.13",