File tree Expand file tree Collapse file tree
packages/workshop-app/app/utils Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -30,13 +30,13 @@ export function ensureProgressiveEnhancement(
3030) {
3131 const redirectTo = formData . get ( PE_REDIRECT_INPUT_NAME )
3232 if ( typeof redirectTo === 'string' ) {
33- throw redirect ( safeRedirect ( redirectTo ) , responseInit ?.( ) )
33+ throw redirect ( toRedirectLocation ( redirectTo ) , responseInit ?.( ) )
3434 }
3535
3636 // if request does not accept application/json, it means JS hasn't hydrated yet
3737 if ( ! acceptsJson ( request ) ) {
3838 const redirectToReferrer = request . headers . get ( 'Referer' ) ?? '/'
39- throw redirect ( safeRedirect ( redirectToReferrer ) , responseInit ?.( ) )
39+ throw redirect ( toRedirectLocation ( redirectToReferrer ) , responseInit ?.( ) )
4040 }
4141}
4242
@@ -50,6 +50,19 @@ function acceptsJson(request: Request) {
5050 )
5151}
5252
53+ function toRedirectLocation ( redirectTo : string , fallback = '/' ) {
54+ const safe = safeRedirect ( redirectTo , fallback )
55+ try {
56+ return encodeURI ( decodeURI ( safe ) )
57+ } catch {
58+ try {
59+ return encodeURI ( safe )
60+ } catch {
61+ return fallback
62+ }
63+ }
64+ }
65+
5366export function dataWithPE < Data > (
5467 request : Request ,
5568 formData : FormData ,
You can’t perform that action at this time.
0 commit comments