@stackframe/stack 2.6.19 → 2.6.21

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 (32) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components-page/stack-handler.d.mts +13 -7
  3. package/dist/components-page/stack-handler.d.ts +13 -7
  4. package/dist/components-page/stack-handler.js +146 -126
  5. package/dist/components-page/stack-handler.js.map +1 -1
  6. package/dist/esm/components-page/stack-handler.js +148 -128
  7. package/dist/esm/components-page/stack-handler.js.map +1 -1
  8. package/dist/esm/generated/global-css.js +1 -1
  9. package/dist/esm/generated/global-css.js.map +1 -1
  10. package/dist/esm/generated/quetzal-translations.js +10 -10
  11. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  12. package/dist/esm/lib/cookie.js +118 -40
  13. package/dist/esm/lib/cookie.js.map +1 -1
  14. package/dist/esm/lib/stack-app.js +124 -101
  15. package/dist/esm/lib/stack-app.js.map +1 -1
  16. package/dist/generated/global-css.d.mts +1 -1
  17. package/dist/generated/global-css.d.ts +1 -1
  18. package/dist/generated/global-css.js +1 -1
  19. package/dist/generated/global-css.js.map +1 -1
  20. package/dist/generated/quetzal-translations.d.mts +2 -2
  21. package/dist/generated/quetzal-translations.d.ts +2 -2
  22. package/dist/generated/quetzal-translations.js +10 -10
  23. package/dist/generated/quetzal-translations.js.map +1 -1
  24. package/dist/lib/cookie.d.mts +21 -5
  25. package/dist/lib/cookie.d.ts +21 -5
  26. package/dist/lib/cookie.js +125 -41
  27. package/dist/lib/cookie.js.map +1 -1
  28. package/dist/lib/stack-app.d.mts +3 -4
  29. package/dist/lib/stack-app.d.ts +3 -4
  30. package/dist/lib/stack-app.js +123 -100
  31. package/dist/lib/stack-app.js.map +1 -1
  32. package/package.json +20 -9
@@ -12,11 +12,22 @@ import { OAuthCallback } from "./oauth-callback";
12
12
  import { PasswordReset } from "./password-reset";
13
13
  import { SignOut } from "./sign-out";
14
14
  import { TeamInvitation } from "./team-invitation";
15
- import { filterUndefined } from "@stackframe/stack-shared/dist/utils/objects";
16
- import { jsx } from "react/jsx-runtime";
15
+ import { filterUndefined, pick } from "@stackframe/stack-shared/dist/utils/objects";
16
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
+ var next15DeprecationWarning = "DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`";
17
18
  async function StackHandler(props) {
18
- if (!props.params?.stack) {
19
- return /* @__PURE__ */ jsx(MessageCard, { title: "Invalid Stack Handler Setup", fullPage: props.fullPage, children: /* @__PURE__ */ jsx("p", { children: "Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack]." }) });
19
+ if (!("routeProps" in props)) {
20
+ console.warn(next15DeprecationWarning);
21
+ }
22
+ const routeProps = "routeProps" in props ? props.routeProps : pick(props, ["params", "searchParams"]);
23
+ const params = await routeProps.params;
24
+ const searchParams = await routeProps.searchParams;
25
+ if (!params?.stack) {
26
+ return /* @__PURE__ */ jsx(MessageCard, { title: "Invalid Stack Handler Setup", fullPage: props.fullPage, children: /* @__PURE__ */ jsxs("p", { children: [
27
+ "Can't use ",
28
+ "<StackHandler />",
29
+ " at this location. Make sure that the file is in a folder called [...stack]."
30
+ ] }) });
20
31
  }
21
32
  function redirectIfNotHandler(name) {
22
33
  const url = props.app.urls[name];
@@ -25,7 +36,7 @@ async function StackHandler(props) {
25
36
  return;
26
37
  }
27
38
  const urlObj = new URL(url, "http://example.com");
28
- for (const [key, value] of Object.entries(props.searchParams || {})) {
39
+ for (const [key, value] of Object.entries(routeProps.searchParams || {})) {
29
40
  urlObj.searchParams.set(key, value);
30
41
  }
31
42
  redirect(getRelativePart(urlObj), RedirectType.replace);
@@ -44,132 +55,141 @@ async function StackHandler(props) {
44
55
  accountSettings: "account-settings",
45
56
  error: "error"
46
57
  };
47
- const path = props.params.stack.join("/");
48
- switch (path) {
49
- case availablePaths.signIn: {
50
- redirectIfNotHandler("signIn");
51
- return /* @__PURE__ */ jsx(
52
- SignIn,
53
- {
54
- fullPage: props.fullPage,
55
- automaticRedirect: true,
56
- ...filterUndefinedINU(props.componentProps?.SignIn)
57
- }
58
- );
59
- }
60
- case availablePaths.signUp: {
61
- redirectIfNotHandler("signUp");
62
- return /* @__PURE__ */ jsx(
63
- SignUp,
64
- {
65
- fullPage: props.fullPage,
66
- automaticRedirect: true,
67
- ...filterUndefinedINU(props.componentProps?.SignUp)
68
- }
69
- );
70
- }
71
- case availablePaths.emailVerification: {
72
- redirectIfNotHandler("emailVerification");
73
- return /* @__PURE__ */ jsx(
74
- EmailVerification,
75
- {
76
- searchParams: props.searchParams,
77
- fullPage: props.fullPage,
78
- ...filterUndefinedINU(props.componentProps?.EmailVerification)
79
- }
80
- );
81
- }
82
- case availablePaths.passwordReset: {
83
- redirectIfNotHandler("passwordReset");
84
- return /* @__PURE__ */ jsx(
85
- PasswordReset,
86
- {
87
- searchParams: props.searchParams || {},
88
- fullPage: props.fullPage,
89
- ...filterUndefinedINU(props.componentProps?.PasswordReset)
90
- }
91
- );
92
- }
93
- case availablePaths.forgotPassword: {
94
- redirectIfNotHandler("forgotPassword");
95
- return /* @__PURE__ */ jsx(
96
- ForgotPassword,
97
- {
98
- fullPage: props.fullPage,
99
- ...filterUndefinedINU(props.componentProps?.ForgotPassword)
100
- }
101
- );
102
- }
103
- case availablePaths.signOut: {
104
- redirectIfNotHandler("signOut");
105
- return /* @__PURE__ */ jsx(
106
- SignOut,
107
- {
108
- fullPage: props.fullPage,
109
- ...filterUndefinedINU(props.componentProps?.SignOut)
110
- }
111
- );
112
- }
113
- case availablePaths.oauthCallback: {
114
- redirectIfNotHandler("oauthCallback");
115
- return /* @__PURE__ */ jsx(
116
- OAuthCallback,
117
- {
118
- fullPage: props.fullPage,
119
- ...filterUndefinedINU(props.componentProps?.OAuthCallback)
120
- }
121
- );
122
- }
123
- case availablePaths.magicLinkCallback: {
124
- redirectIfNotHandler("magicLinkCallback");
125
- return /* @__PURE__ */ jsx(
126
- MagicLinkCallback,
127
- {
128
- searchParams: props.searchParams || {},
129
- fullPage: props.fullPage,
130
- ...filterUndefinedINU(props.componentProps?.MagicLinkCallback)
131
- }
132
- );
133
- }
134
- case availablePaths.teamInvitation: {
135
- redirectIfNotHandler("teamInvitation");
136
- return /* @__PURE__ */ jsx(
137
- TeamInvitation,
138
- {
139
- searchParams: props.searchParams || {},
140
- fullPage: props.fullPage,
141
- ...filterUndefinedINU(props.componentProps?.TeamInvitation)
142
- }
143
- );
144
- }
145
- case availablePaths.accountSettings: {
146
- return /* @__PURE__ */ jsx(
147
- AccountSettings,
148
- {
149
- fullPage: props.fullPage,
150
- ...filterUndefinedINU(props.componentProps?.AccountSettings)
151
- }
152
- );
153
- }
154
- case availablePaths.error: {
155
- return /* @__PURE__ */ jsx(
156
- ErrorPage,
157
- {
158
- searchParams: props.searchParams || {},
159
- fullPage: props.fullPage,
160
- ...filterUndefinedINU(props.componentProps?.ErrorPage)
161
- }
162
- );
163
- }
164
- default: {
165
- for (const [key, value] of Object.entries(availablePaths)) {
166
- if (path === value.replaceAll("-", "")) {
167
- redirect(`${props.app.urls.handler}/${value}`, RedirectType.replace);
58
+ const path = params.stack.join("/");
59
+ const render = () => {
60
+ switch (path) {
61
+ case availablePaths.signIn: {
62
+ redirectIfNotHandler("signIn");
63
+ return /* @__PURE__ */ jsx(
64
+ SignIn,
65
+ {
66
+ fullPage: props.fullPage,
67
+ automaticRedirect: true,
68
+ ...filterUndefinedINU(props.componentProps?.SignIn)
69
+ }
70
+ );
71
+ }
72
+ case availablePaths.signUp: {
73
+ redirectIfNotHandler("signUp");
74
+ return /* @__PURE__ */ jsx(
75
+ SignUp,
76
+ {
77
+ fullPage: props.fullPage,
78
+ automaticRedirect: true,
79
+ ...filterUndefinedINU(props.componentProps?.SignUp)
80
+ }
81
+ );
82
+ }
83
+ case availablePaths.emailVerification: {
84
+ redirectIfNotHandler("emailVerification");
85
+ return /* @__PURE__ */ jsx(
86
+ EmailVerification,
87
+ {
88
+ searchParams,
89
+ fullPage: props.fullPage,
90
+ ...filterUndefinedINU(props.componentProps?.EmailVerification)
91
+ }
92
+ );
93
+ }
94
+ case availablePaths.passwordReset: {
95
+ redirectIfNotHandler("passwordReset");
96
+ return /* @__PURE__ */ jsx(
97
+ PasswordReset,
98
+ {
99
+ searchParams: searchParams || {},
100
+ fullPage: props.fullPage,
101
+ ...filterUndefinedINU(props.componentProps?.PasswordReset)
102
+ }
103
+ );
104
+ }
105
+ case availablePaths.forgotPassword: {
106
+ redirectIfNotHandler("forgotPassword");
107
+ return /* @__PURE__ */ jsx(
108
+ ForgotPassword,
109
+ {
110
+ fullPage: props.fullPage,
111
+ ...filterUndefinedINU(props.componentProps?.ForgotPassword)
112
+ }
113
+ );
114
+ }
115
+ case availablePaths.signOut: {
116
+ redirectIfNotHandler("signOut");
117
+ return /* @__PURE__ */ jsx(
118
+ SignOut,
119
+ {
120
+ fullPage: props.fullPage,
121
+ ...filterUndefinedINU(props.componentProps?.SignOut)
122
+ }
123
+ );
124
+ }
125
+ case availablePaths.oauthCallback: {
126
+ redirectIfNotHandler("oauthCallback");
127
+ return /* @__PURE__ */ jsx(
128
+ OAuthCallback,
129
+ {
130
+ fullPage: props.fullPage,
131
+ ...filterUndefinedINU(props.componentProps?.OAuthCallback)
132
+ }
133
+ );
134
+ }
135
+ case availablePaths.magicLinkCallback: {
136
+ redirectIfNotHandler("magicLinkCallback");
137
+ return /* @__PURE__ */ jsx(
138
+ MagicLinkCallback,
139
+ {
140
+ searchParams: searchParams || {},
141
+ fullPage: props.fullPage,
142
+ ...filterUndefinedINU(props.componentProps?.MagicLinkCallback)
143
+ }
144
+ );
145
+ }
146
+ case availablePaths.teamInvitation: {
147
+ redirectIfNotHandler("teamInvitation");
148
+ return /* @__PURE__ */ jsx(
149
+ TeamInvitation,
150
+ {
151
+ searchParams: searchParams || {},
152
+ fullPage: props.fullPage,
153
+ ...filterUndefinedINU(props.componentProps?.TeamInvitation)
154
+ }
155
+ );
156
+ }
157
+ case availablePaths.accountSettings: {
158
+ return /* @__PURE__ */ jsx(
159
+ AccountSettings,
160
+ {
161
+ fullPage: props.fullPage,
162
+ ...filterUndefinedINU(props.componentProps?.AccountSettings)
163
+ }
164
+ );
165
+ }
166
+ case availablePaths.error: {
167
+ return /* @__PURE__ */ jsx(
168
+ ErrorPage,
169
+ {
170
+ searchParams: searchParams || {},
171
+ fullPage: props.fullPage,
172
+ ...filterUndefinedINU(props.componentProps?.ErrorPage)
173
+ }
174
+ );
175
+ }
176
+ default: {
177
+ for (const [key, value] of Object.entries(availablePaths)) {
178
+ if (path === value.replaceAll("-", "")) {
179
+ redirect(`${props.app.urls.handler}/${value}`, RedirectType.replace);
180
+ }
168
181
  }
182
+ return notFound();
169
183
  }
170
- return notFound();
171
184
  }
172
- }
185
+ };
186
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
187
+ process.env.NODE_ENV === "development" && !("routeProps" in props) && /* @__PURE__ */ jsxs("span", { style: { color: "red" }, children: [
188
+ next15DeprecationWarning,
189
+ ". This warning will not be shown in production."
190
+ ] }),
191
+ render()
192
+ ] });
173
193
  }
174
194
  function filterUndefinedINU(value) {
175
195
  return value === void 0 ? value : filterUndefined(value);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["import { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport { AccountSettings } from \"./account-settings\";\nimport { EmailVerification } from \"./email-verification\";\nimport { ErrorPage } from \"./error-page\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\nimport { FilterUndefined, filterUndefined } from \"@stackframe/stack-shared/dist/utils/objects\";\n\ntype Components = {\n SignIn: typeof SignIn,\n SignUp: typeof SignUp,\n EmailVerification: typeof EmailVerification,\n PasswordReset: typeof PasswordReset,\n ForgotPassword: typeof ForgotPassword,\n SignOut: typeof SignOut,\n OAuthCallback: typeof OAuthCallback,\n MagicLinkCallback: typeof MagicLinkCallback,\n TeamInvitation: typeof TeamInvitation,\n ErrorPage: typeof ErrorPage,\n AccountSettings: typeof AccountSettings,\n};\n\n\nexport default async function StackHandler<HasTokenStore extends boolean>(props: {\n app: StackServerApp<HasTokenStore>,\n params?: { stack?: string[] },\n searchParams?: Record<string, string>,\n fullPage: boolean,\n componentProps?: {\n [K in keyof Components]?: Parameters<Components[K]>;\n },\n}) {\n if (!props.params?.stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={props.fullPage}>\n <p>Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = props.app.urls[name];\n const handlerUrl = props.app.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\n // don't redirect if the url is a handler url\n return;\n }\n\n const urlObj = new URL(url, \"http://example.com\");\n for (const [key, value] of Object.entries(props.searchParams || {})) {\n urlObj.searchParams.set(key, value);\n }\n\n redirect(getRelativePart(urlObj), RedirectType.replace);\n };\n\n const availablePaths = {\n signIn: 'sign-in',\n signUp: 'sign-up',\n emailVerification: 'email-verification',\n passwordReset: 'password-reset',\n forgotPassword: 'forgot-password',\n signOut: 'sign-out',\n oauthCallback: 'oauth-callback',\n magicLinkCallback: 'magic-link-callback',\n teamInvitation: 'team-invitation',\n accountSettings: 'account-settings',\n error: 'error',\n };\n\n const path = props.params.stack.join('/');\n\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler('signIn');\n return <SignIn\n fullPage={props.fullPage}\n automaticRedirect\n {...filterUndefinedINU(props.componentProps?.SignIn)}\n />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler('signUp');\n return <SignUp\n fullPage={props.fullPage}\n automaticRedirect\n {...filterUndefinedINU(props.componentProps?.SignUp)}\n />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification\n searchParams={props.searchParams}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.EmailVerification)}\n />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset\n searchParams={props.searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.PasswordReset)}\n />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.ForgotPassword)}\n />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler('signOut');\n return <SignOut\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.SignOut)}\n />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.OAuthCallback)}\n />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback\n searchParams={props.searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.MagicLinkCallback)}\n />;\n }\n case availablePaths.teamInvitation: {\n redirectIfNotHandler('teamInvitation');\n return <TeamInvitation\n searchParams={props.searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.TeamInvitation)}\n />;\n }\n case availablePaths.accountSettings: {\n return <AccountSettings\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.AccountSettings)}\n />;\n }\n case availablePaths.error: {\n return <ErrorPage\n searchParams={props.searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.ErrorPage)}\n />;\n }\n default: {\n for (const [key, value] of Object.entries(availablePaths)) {\n if (path === value.replaceAll('-', '')) {\n redirect(`${props.app.urls.handler}/${value}`, RedirectType.replace);\n }\n }\n return notFound();\n }\n }\n}\n\n\nfunction filterUndefinedINU<T extends {}>(value: T | undefined): FilterUndefined<T> | undefined {\n return value === undefined ? value : filterUndefined(value);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["import { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport { AccountSettings } from \"./account-settings\";\nimport { EmailVerification } from \"./email-verification\";\nimport { ErrorPage } from \"./error-page\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\nimport { FilterUndefined, filterUndefined, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\n\ntype Components = {\n SignIn: typeof SignIn,\n SignUp: typeof SignUp,\n EmailVerification: typeof EmailVerification,\n PasswordReset: typeof PasswordReset,\n ForgotPassword: typeof ForgotPassword,\n SignOut: typeof SignOut,\n OAuthCallback: typeof OAuthCallback,\n MagicLinkCallback: typeof MagicLinkCallback,\n TeamInvitation: typeof TeamInvitation,\n ErrorPage: typeof ErrorPage,\n AccountSettings: typeof AccountSettings,\n};\n\ntype RouteProps = {\n params: Promise<{ stack?: string[] }> | { stack?: string[] },\n searchParams: Promise<Record<string, string>> | Record<string, string>,\n};\n\nconst next15DeprecationWarning = \"DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>(props: {\n app: StackServerApp<HasTokenStore>,\n fullPage: boolean,\n componentProps?: {\n [K in keyof Components]?: Parameters<Components[K]>[0];\n },\n} & (\n | Partial<RouteProps>\n | {\n routeProps: RouteProps,\n }\n)): Promise<any> {\n if (!(\"routeProps\" in props)) {\n console.warn(next15DeprecationWarning);\n }\n\n const routeProps = \"routeProps\" in props ? props.routeProps : pick(props, [\"params\", \"searchParams\"] as any);\n const params = await routeProps.params;\n const searchParams = await routeProps.searchParams;\n if (!params?.stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={props.fullPage}>\n <p>Can't use {\"<StackHandler />\"} at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = props.app.urls[name];\n const handlerUrl = props.app.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\n // don't redirect if the url is a handler url\n return;\n }\n\n const urlObj = new URL(url, \"http://example.com\");\n for (const [key, value] of Object.entries(routeProps.searchParams || {})) {\n urlObj.searchParams.set(key, value);\n }\n\n redirect(getRelativePart(urlObj), RedirectType.replace);\n };\n\n const availablePaths = {\n signIn: 'sign-in',\n signUp: 'sign-up',\n emailVerification: 'email-verification',\n passwordReset: 'password-reset',\n forgotPassword: 'forgot-password',\n signOut: 'sign-out',\n oauthCallback: 'oauth-callback',\n magicLinkCallback: 'magic-link-callback',\n teamInvitation: 'team-invitation',\n accountSettings: 'account-settings',\n error: 'error',\n };\n\n const path = params.stack.join('/');\n\n const render = () => {\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler('signIn');\n return <SignIn\n fullPage={props.fullPage}\n automaticRedirect\n {...filterUndefinedINU(props.componentProps?.SignIn)}\n />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler('signUp');\n return <SignUp\n fullPage={props.fullPage}\n automaticRedirect\n {...filterUndefinedINU(props.componentProps?.SignUp)}\n />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification\n searchParams={searchParams}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.EmailVerification)}\n />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.PasswordReset)}\n />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.ForgotPassword)}\n />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler('signOut');\n return <SignOut\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.SignOut)}\n />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.OAuthCallback)}\n />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.MagicLinkCallback)}\n />;\n }\n case availablePaths.teamInvitation: {\n redirectIfNotHandler('teamInvitation');\n return <TeamInvitation\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.TeamInvitation)}\n />;\n }\n case availablePaths.accountSettings: {\n return <AccountSettings\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.AccountSettings)}\n />;\n }\n case availablePaths.error: {\n return <ErrorPage\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.ErrorPage)}\n />;\n }\n default: {\n for (const [key, value] of Object.entries(availablePaths)) {\n if (path === value.replaceAll('-', '')) {\n redirect(`${props.app.urls.handler}/${value}`, RedirectType.replace);\n }\n }\n return notFound();\n }\n }\n };\n\n return <>\n {process.env.NODE_ENV === \"development\" && !(\"routeProps\" in props) && (\n <span style={{ color: \"red\" }}>\n {next15DeprecationWarning}. This warning will not be shown in production.\n </span>\n )}\n {render()}\n </>;\n}\n\n\nfunction filterUndefinedINU<T extends {}>(value: T | undefined): FilterUndefined<T> | undefined {\n return value === undefined ? value : filterUndefined(value);\n}\n"],"mappings":"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","names":[]}