Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle Next.js rewrites/redirects/headers #5212

Closed
Closed
Changes from 1 commit
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
b089f20
add RE2
leoortizz Nov 4, 2022
c5bf204
filter out rewrites not supported by RE2
leoortizz Nov 4, 2022
c58f6c7
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 4, 2022
9998dd8
filter out rewrites to third parties
leoortizz Nov 4, 2022
28495f1
check rewrites, redirects and headers w/ same fn
leoortizz Nov 7, 2022
279012e
isThirdPartyUrl > isUrl, .includes > .startsWith
leoortizz Nov 7, 2022
81e636f
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 9, 2022
0352221
remove RE2, detect regex as stated in Next.js docs
leoortizz Nov 15, 2022
00f3fb1
add unit tests for Next.js utils
leoortizz Nov 15, 2022
54611e9
add unit tests for frameworks/utils
leoortizz Nov 15, 2022
0760593
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 15, 2022
cc1d080
`replaceAll` > `replace`
leoortizz Nov 15, 2022
7f9a58e
header/redirects/rewrites checks as reusable utils
leoortizz Nov 15, 2022
f76c76a
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 16, 2022
dc5fdcc
replace for loop with regex
leoortizz Nov 16, 2022
33b602e
`.exec` > `.test`
leoortizz Nov 16, 2022
170d04d
`has` should also require backend
leoortizz Nov 16, 2022
72771d0
reduce `pathHasRegex` verbosity
leoortizz Nov 16, 2022
cd62b47
fix `isUrl`, more test cases
leoortizz Nov 16, 2022
b1bc7da
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 17, 2022
6c079ab
require backend if rewrites afterFiles or fallback
leoortizz Nov 17, 2022
750f2fa
filter prerendered routes that matches custom ...
leoortizz Nov 17, 2022
9bbe63b
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 18, 2022
13462a5
remove TODO
leoortizz Nov 18, 2022
7bc1339
`rewrite.has` > `"has" in rewrite`
leoortizz Nov 18, 2022
b07c6c3
move Next.js types to interfaces.ts
leoortizz Nov 21, 2022
d1abbbb
filter out redirects with `has`
leoortizz Nov 21, 2022
9c6aac3
filter out headers with `has`
leoortizz Nov 21, 2022
7437cb0
add paths for tests, adjust pathHasRegex tests
leoortizz Nov 21, 2022
e31f094
tests for supported rewrites
leoortizz Nov 21, 2022
d649f02
tests for supported redirects
leoortizz Nov 21, 2022
2d9fee1
tests for supported headers
leoortizz Nov 21, 2022
1ab51c0
tests for `getNextjsRewritesToUse`
leoortizz Nov 21, 2022
71226bb
temporarily disable `cleanEscapedChars` tests
leoortizz Nov 21, 2022
c3915d9
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Nov 21, 2022
7895769
comment out unused import
leoortizz Nov 21, 2022
9923860
replace types with interfaces
leoortizz Nov 28, 2022
9257980
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Dec 2, 2022
f0533e6
changelog
leoortizz Dec 2, 2022
75ba873
remove side effects from custom routes filters
leoortizz Dec 5, 2022
9311974
refactor `getNextjsRewritesToUse`
leoortizz Dec 5, 2022
6984b5f
`=== false` > `!`
leoortizz Dec 5, 2022
49a958b
destructure with defaults, reduce ?, reduce ifs
leoortizz Dec 5, 2022
c2560bc
simplify isSupported... utils
leoortizz Dec 5, 2022
ba9fec9
simplify custom routes filters
leoortizz Dec 5, 2022
3a91834
instantiate regexes before loop
leoortizz Dec 5, 2022
db8c398
replace some with every, check negation
leoortizz Dec 5, 2022
8f482ca
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Dec 5, 2022
9a230e3
improve Next.js utils documentation
leoortizz Dec 5, 2022
a0f4c05
readJSON util with type
leoortizz Dec 5, 2022
425fa5d
replace readFile/JSON.parse with typed readJSON
leoortizz Dec 5, 2022
0369402
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Dec 5, 2022
d49b302
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Dec 6, 2022
f3b4a44
fix cleanEscapedChars, improve function doc
leoortizz Dec 8, 2022
c2a9c4a
fix `cleanEscapedChars` test
leoortizz Dec 8, 2022
fa809ef
replace as Manifest with typed readJSON
leoortizz Dec 8, 2022
44e0148
typed readJSON defaulting to `any`
leoortizz Dec 8, 2022
4b505c5
Merge branch 'master' into leoortizz_nextjs_rewrites
leoortizz Dec 8, 2022
ee7d975
Merge master
jamesdaniels Dec 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
improve Next.js utils documentation
leoortizz committed Dec 5, 2022
commit 9a230e3a36439f4f93810054107cfad9269f9cc1
48 changes: 44 additions & 4 deletions src/frameworks/next/utils.ts
Original file line number Diff line number Diff line change
@@ -25,28 +25,68 @@ export function cleanEscapedChars(path: string): string {
}

/**
* Whether a Next.js rewrite is supported by Firebase.
* Whether a Next.js rewrite is supported by `firebase.json`.
*
* See: https://firebase.google.com/docs/hosting/full-config#rewrites
*
* Next.js unsupported rewrites includes:
* - Rewrites with the `has` property that is used by Next.js for Header,
* Cookie, and Query Matching.
* - https://nextjs.org/docs/api-reference/next.config.js/rewrites#header-cookie-and-query-matching
*
* - Rewrites using regex for path matching.
* - https://nextjs.org/docs/api-reference/next.config.js/rewrites#regex-path-matching
*
* - Rewrites to external URLs
*/
export function isRewriteSupportedByFirebase(rewrite: Rewrite): boolean {
return !("has" in rewrite || pathHasRegex(rewrite.source) || isUrl(rewrite.destination));
}

/**
* Whether a Next.js redirect is supported by Firebase.
* Whether a Next.js redirect is supported by `firebase.json`.
*
* See: https://firebase.google.com/docs/hosting/full-config#redirects
*
* Next.js unsupported redirects includes:
* - Redirects with the `has` property that is used by Next.js for Header,
* Cookie, and Query Matching.
* - https://nextjs.org/docs/api-reference/next.config.js/redirects#header-cookie-and-query-matching
*
* - Redirects using regex for path matching.
* - https://nextjs.org/docs/api-reference/next.config.js/redirects#regex-path-matching
*
* - Next.js internal redirects
*/
export function isRedirectSupportedByFirebase(redirect: Redirect): boolean {
return !("has" in redirect || pathHasRegex(redirect.source) || "internal" in redirect);
}

/**
* Whether a Next.js header is supported by Firebase.
* Whether a Next.js custom header is supported by `firebase.json`.
*
* See: https://firebase.google.com/docs/hosting/full-config#headers
*
* Next.js unsupported headers includes:
* - Custom header with the `has` property that is used by Next.js for Header,
* Cookie, and Query Matching.
* - https://nextjs.org/docs/api-reference/next.config.js/headers#header-cookie-and-query-matching
*
* - Custom header using regex for path matching.
* - https://nextjs.org/docs/api-reference/next.config.js/headers#regex-path-matching
*/
export function isHeaderSupportedByFirebase(header: Header): boolean {
return !("has" in header || pathHasRegex(header.source));
}

/**
* Firebase Rewrites that can be supported by firebase.json.
* Get which Next.js rewrites will be used before checking supported items individually.
*
* Next.js rewrites can be arrays or objects:
* - For arrays, all supported items can be used.
* - For objects only `beforeFiles` can be used.
*
* See: https://nextjs.org/docs/api-reference/next.config.js/rewrites
*/
export function getNextjsRewritesToUse(
nextJsRewrites: Manifest["rewrites"]