1203b9082b
This ensures we handle encoding/decoding for SSG prerendered/fallback pages correctly. Since we only encode path delimiters when outputting to the disk we need to match this encoding when building the `ssgCacheKey` to look-up the prerendered pages. This also fixes non-ascii prerendered paths (e.g. 商業日語) not matching correctly. This does not resolve 👉 https://github.com/vercel/next.js/issues/10084 and further investigation will be needed before addressing non-ascii paths for non-SSG pages. The encoding output was tested against https://tst-encoding-l7amu5b9c.vercel.app/ to ensure the values will match correctly on Vercel. Closes: https://github.com/vercel/next.js/issues/17582 Closes: https://github.com/vercel/next.js/issues/17642 x-ref: https://github.com/vercel/next.js/pull/14717
10 lines
297 B
TypeScript
10 lines
297 B
TypeScript
// escape delimiters used by path-to-regexp
|
|
export default function escapePathDelimiters(
|
|
segment: string,
|
|
escapeEncoded?: boolean
|
|
): string {
|
|
return segment.replace(
|
|
new RegExp(`([/#?]${escapeEncoded ? '|%(2f|23|3f)' : ''})`, 'gi'),
|
|
(char: string) => encodeURIComponent(char)
|
|
)
|
|
}
|