bef9b56109
Updates the way filenames are generated for browser compilation. Notably: - All entry bundles now have hashes in production, this includes pages (previously pages used a buildId in the path) - The AmpFiles no longer depends on hardcoded bundle names, it uses the buildManifest instead (internals) - All cases where we match the page name from the chunk/entrypoint name now use the same function `getRouteFromEntrypoint` (internals) - In development we no longer include the "faked" `buildId` set to `development` for page files, instead we just use the `/_next/static/pages` path (was `/_next/static/development/pages`). This was changed as it caused unneeded complexity and makes generating the bundles easier (internals) - Updated tons of tests to be more resilient to these changes by relying on the buildManifest instead of hardcoded paths (internals) Follow up of these PRs: https://github.com/vercel/next.js/pull/13759 https://github.com/vercel/next.js/pull/13870 https://github.com/vercel/next.js/pull/13937 https://github.com/vercel/next.js/pull/14130 https://github.com/vercel/next.js/pull/14176 https://github.com/vercel/next.js/pull/14268 Fixes #6303 Fixes #12087 Fixes #1948 Fixes #4368 Fixes #4255 Fixes #2548
35 lines
972 B
TypeScript
35 lines
972 B
TypeScript
import { denormalizePagePath } from './normalize-page-path'
|
|
|
|
// matches static/<buildid>/pages/:page*.js
|
|
const ROUTE_NAME_REGEX = /^static[/\\][^/\\]+[/\\]pages[/\\](.*)$/
|
|
// matches pages/:page*.js
|
|
const SERVERLESS_ROUTE_NAME_REGEX = /^pages[/\\](.*)$/
|
|
// matches static/pages/:page*.js
|
|
const BROWSER_ROUTE_NAME_REGEX = /^static[/\\]pages[/\\](.*)$/
|
|
|
|
function matchBundle(regex: RegExp, input: string): string | null {
|
|
const result = regex.exec(input)
|
|
|
|
if (!result) {
|
|
return null
|
|
}
|
|
|
|
return denormalizePagePath(`/${result[1]}`)
|
|
}
|
|
|
|
export default function getRouteFromEntrypoint(
|
|
entryFile: string,
|
|
isServerlessLike: boolean = false
|
|
): string | null {
|
|
let pagePath = matchBundle(
|
|
isServerlessLike ? SERVERLESS_ROUTE_NAME_REGEX : ROUTE_NAME_REGEX,
|
|
entryFile
|
|
)
|
|
|
|
if (pagePath) {
|
|
return pagePath
|
|
}
|
|
|
|
// Potentially the passed item is a browser bundle so we try to match that also
|
|
return matchBundle(BROWSER_ROUTE_NAME_REGEX, entryFile)
|
|
}
|