@expo/router-server 56.0.8 → 56.0.10

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 (56) hide show
  1. package/build/getNamedParametrizedRoute.d.ts +12 -0
  2. package/build/getNamedParametrizedRoute.d.ts.map +1 -0
  3. package/build/getNamedParametrizedRoute.js +127 -0
  4. package/build/getNamedParametrizedRoute.js.map +1 -0
  5. package/build/getServerManifest.d.ts +0 -14
  6. package/build/getServerManifest.d.ts.map +1 -1
  7. package/build/getServerManifest.js +2 -131
  8. package/build/getServerManifest.js.map +1 -1
  9. package/build/rsc/middleware.d.ts +1 -1
  10. package/build/rsc/middleware.d.ts.map +1 -1
  11. package/build/rsc/middleware.js +4 -14
  12. package/build/rsc/middleware.js.map +1 -1
  13. package/build/rsc/path.d.ts +0 -17
  14. package/build/rsc/path.d.ts.map +1 -1
  15. package/build/rsc/path.js +1 -91
  16. package/build/rsc/path.js.map +1 -1
  17. package/build/rsc/router/createPages.d.ts +35 -0
  18. package/build/rsc/router/createPages.d.ts.map +1 -0
  19. package/build/rsc/router/createPages.js +258 -0
  20. package/build/rsc/router/createPages.js.map +1 -0
  21. package/build/rsc/router/defineRouter.d.ts +10 -6
  22. package/build/rsc/router/defineRouter.d.ts.map +1 -1
  23. package/build/rsc/router/defineRouter.js +38 -29
  24. package/build/rsc/router/defineRouter.js.map +1 -1
  25. package/build/rsc/router/expo-definedRouter.d.ts +3 -1
  26. package/build/rsc/router/expo-definedRouter.d.ts.map +1 -1
  27. package/build/rsc/router/expo-definedRouter.js +90 -94
  28. package/build/rsc/router/expo-definedRouter.js.map +1 -1
  29. package/build/rsc/router/index.d.ts +13 -0
  30. package/build/rsc/router/index.d.ts.map +1 -0
  31. package/build/rsc/router/index.js +13 -0
  32. package/build/rsc/router/index.js.map +1 -0
  33. package/build/rsc/router/noopRouter.d.ts +2 -1
  34. package/build/rsc/router/noopRouter.d.ts.map +1 -1
  35. package/build/rsc/router/noopRouter.js +4 -3
  36. package/build/rsc/router/noopRouter.js.map +1 -1
  37. package/build/rsc/rsc-renderer.d.ts +2 -0
  38. package/build/rsc/rsc-renderer.d.ts.map +1 -1
  39. package/build/rsc/rsc-renderer.js +34 -7
  40. package/build/rsc/rsc-renderer.js.map +1 -1
  41. package/build/rsc/server.d.ts +2 -3
  42. package/build/rsc/server.d.ts.map +1 -1
  43. package/build/rsc/server.js +7 -34
  44. package/build/rsc/server.js.map +1 -1
  45. package/build/utils/html.d.ts.map +1 -1
  46. package/build/utils/html.js +11 -5
  47. package/build/utils/html.js.map +1 -1
  48. package/package.json +8 -8
  49. package/build/rsc/router/create-expo-pages.d.ts +0 -20
  50. package/build/rsc/router/create-expo-pages.d.ts.map +0 -1
  51. package/build/rsc/router/create-expo-pages.js +0 -21
  52. package/build/rsc/router/create-expo-pages.js.map +0 -1
  53. package/build/rsc/router/create-pages.d.ts +0 -80
  54. package/build/rsc/router/create-pages.d.ts.map +0 -1
  55. package/build/rsc/router/create-pages.js +0 -232
  56. package/build/rsc/router/create-pages.js.map +0 -1
@@ -11,7 +11,6 @@ exports.unstable_redirect = unstable_redirect;
11
11
  */
12
12
  const rsc_1 = require("expo-router/internal/rsc");
13
13
  const react_1 = require("react");
14
- const path_1 = require("../path");
15
14
  const server_1 = require("../server");
16
15
  const safeJsonParse = (str) => {
17
16
  if (typeof str === 'string') {
@@ -27,6 +26,11 @@ const safeJsonParse = (str) => {
27
26
  }
28
27
  return undefined;
29
28
  };
29
+ const parseSkipList = (value) => {
30
+ if (!Array.isArray(value))
31
+ return new Set();
32
+ return new Set(value.filter((v) => typeof v === 'string'));
33
+ };
30
34
  function unstable_defineRouter(getPathConfig, getComponent) {
31
35
  let cachedPathConfig;
32
36
  const getMyPathConfig = async (buildConfig) => {
@@ -34,23 +38,22 @@ function unstable_defineRouter(getPathConfig, getComponent) {
34
38
  return buildConfig;
35
39
  }
36
40
  if (!cachedPathConfig) {
37
- cachedPathConfig = Array.from(await getPathConfig()).map((item) => {
38
- const is404 = item.path.length === 1 &&
39
- item.path[0].type === 'literal' &&
40
- item.path[0].name === '404';
41
- return {
42
- pattern: item.pattern,
43
- pathname: item.path,
44
- isStatic: item.isStatic,
45
- customData: { is404, noSsr: !!item.noSsr, data: item.data },
46
- };
47
- });
41
+ cachedPathConfig = Array.from(await getPathConfig()).map((item) => ({
42
+ pathname: item.path,
43
+ matchesPathname: item.matchesPathname,
44
+ isStatic: item.isStatic,
45
+ customData: {
46
+ is404: item.path === '/404',
47
+ noSsr: !!item.noSsr,
48
+ data: item.data,
49
+ },
50
+ }));
48
51
  }
49
52
  return cachedPathConfig;
50
53
  };
51
54
  const existsPath = async (pathname, buildConfig) => {
52
55
  const pathConfig = await getMyPathConfig(buildConfig);
53
- const found = pathConfig.find(({ pathname: pathSpec }) => (0, path_1.getPathMapping)(pathSpec, pathname));
56
+ const found = pathConfig.find(({ matchesPathname }) => matchesPathname(pathname));
54
57
  return found
55
58
  ? found.customData.noSsr
56
59
  ? ['FOUND', 'NO_SSR']
@@ -67,10 +70,14 @@ function unstable_defineRouter(getPathConfig, getComponent) {
67
70
  const shouldSkipObj = {};
68
71
  const parsedParams = safeJsonParse(params);
69
72
  const query = typeof parsedParams?.query === 'string' ? parsedParams.query : '';
70
- const skip = Array.isArray(parsedParams?.skip) ? parsedParams?.skip : [];
71
- const componentIds = (0, rsc_1.getComponentIds)(pathname);
72
- const entries = (await Promise.all(componentIds.map(async (id) => {
73
- if (skip?.includes(id)) {
73
+ const skip = parseSkipList(parsedParams?.skip);
74
+ const { layouts, page } = (0, rsc_1.getComponentIds)(pathname);
75
+ const entries = (await Promise.all([...layouts, page].map(async (id) => {
76
+ // `getComponentIds` separates the terminal page from layouts. Use that
77
+ // structural distinction as a fast-path skip (kind isn't known until we
78
+ // resolve); the kind-based check after resolve is the authoritative defense.
79
+ const isPage = id === page;
80
+ if (isPage && skip.has(id)) {
74
81
  return [];
75
82
  }
76
83
  const setShouldSkip = (val) => {
@@ -81,14 +88,18 @@ function unstable_defineRouter(getPathConfig, getComponent) {
81
88
  delete shouldSkipObj[id];
82
89
  }
83
90
  };
84
- const component = await getComponent(id, {
91
+ const resolved = await getComponent(id, {
85
92
  unstable_setShouldSkip: setShouldSkip,
86
93
  unstable_buildConfig: buildConfig,
87
94
  });
88
- if (!component) {
95
+ if (!resolved) {
96
+ return [];
97
+ }
98
+ // Honor skip only for entries the resolver opted into shouldSkipObj; layouts are never skippable.
99
+ if (skip.has(id) && resolved.kind !== 'layout' && shouldSkipObj[id] != null) {
89
100
  return [];
90
101
  }
91
- const element = (0, react_1.createElement)(component, id.endsWith('/layout') ? { path: pathname } : { path: pathname, query }, (0, react_1.createElement)(rsc_1.Children));
102
+ const element = (0, react_1.createElement)(resolved.component, isPage ? { path: pathname, query } : { path: pathname }, (0, react_1.createElement)(rsc_1.Children));
92
103
  return [[id, element]];
93
104
  }))).flat();
94
105
  entries.push([rsc_1.SHOULD_SKIP_ID, Object.entries(shouldSkipObj)]);
@@ -98,11 +109,10 @@ function unstable_defineRouter(getPathConfig, getComponent) {
98
109
  const getBuildConfig = async (unstable_collectClientModules) => {
99
110
  const pathConfig = await getMyPathConfig();
100
111
  const path2moduleIds = {};
101
- for (const { pathname: pathSpec } of pathConfig) {
102
- if (pathSpec.some(({ type }) => type !== 'literal')) {
112
+ for (const { pathname } of pathConfig) {
113
+ if (pathname.includes('[')) {
103
114
  continue;
104
115
  }
105
- const pathname = '/' + pathSpec.map(({ name }) => name).join('/');
106
116
  const input = (0, rsc_1.getInputString)(pathname);
107
117
  const moduleIds = await unstable_collectClientModules(input);
108
118
  path2moduleIds[pathname] = moduleIds;
@@ -115,15 +125,14 @@ globalThis.__EXPO_ROUTER_PREFETCH__ = (path) => {
115
125
  }
116
126
  };`;
117
127
  const buildConfig = [];
118
- for (const { pathname: pathSpec, isStatic, customData } of pathConfig) {
128
+ for (const { pathname, isStatic, customData } of pathConfig) {
119
129
  const entries = [];
120
- if (pathSpec.every(({ type }) => type === 'literal')) {
121
- const pathname = '/' + pathSpec.map(({ name }) => name).join('/');
130
+ if (!pathname.includes('[')) {
122
131
  const input = (0, rsc_1.getInputString)(pathname);
123
132
  entries.push({ input, isStatic });
124
133
  }
125
134
  buildConfig.push({
126
- pathname: pathSpec,
135
+ pathname,
127
136
  isStatic,
128
137
  entries,
129
138
  customCode,
@@ -145,9 +154,9 @@ globalThis.__EXPO_ROUTER_PREFETCH__ = (path) => {
145
154
  return null;
146
155
  }
147
156
  }
148
- const componentIds = (0, rsc_1.getComponentIds)(pathname);
157
+ const { layouts, page } = (0, rsc_1.getComponentIds)(pathname);
149
158
  const input = (0, rsc_1.getInputString)(pathname);
150
- const html = (0, react_1.createElement)(rsc_1.ServerRouter, { route: { path: pathname, query: searchParams.toString(), hash: '' } }, componentIds.reduceRight((acc, id) => (0, react_1.createElement)(rsc_1.Slot, { id, fallback: acc }, acc), null));
159
+ const html = (0, react_1.createElement)(rsc_1.ServerRouter, { route: { path: pathname, query: searchParams.toString(), hash: '' } }, [...layouts, page].reduceRight((acc, id) => (0, react_1.createElement)(rsc_1.Slot, { id, fallback: acc }, acc), null));
151
160
  return {
152
161
  input,
153
162
  params: JSON.stringify({ query: searchParams.toString() }),
@@ -1 +1 @@
1
- {"version":3,"file":"defineRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/defineRouter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport {\n getComponentIds,\n getInputString,\n parseInputString,\n PARAM_KEY_SKIP,\n SHOULD_SKIP_ID,\n LOCATION_ID,\n Children,\n ServerRouter,\n Slot,\n type RouteProps,\n type ShouldSkip,\n} from 'expo-router/internal/rsc';\nimport type { ComponentProps, FunctionComponent, ReactNode } from 'react';\nimport { createElement } from 'react';\n\nimport { getPathMapping } from '../path';\nimport type { PathSpec } from '../path';\nimport { rerender } from '../server';\nimport type {\n BuildConfig,\n RenderEntries,\n GetBuildConfig,\n GetSsrConfig,\n defineEntries,\n} from '../server';\n\ntype RoutePropsForLayout = Omit<RouteProps, 'searchParams'> & {\n children: ReactNode;\n};\n\ntype ShouldSkipValue = ShouldSkip[number][1];\n\nconst safeJsonParse = (str: unknown) => {\n if (typeof str === 'string') {\n try {\n const obj = JSON.parse(str);\n if (typeof obj === 'object') {\n return obj as Record<string, unknown>;\n }\n } catch {\n // ignore\n }\n }\n return undefined;\n};\n\nexport function unstable_defineRouter(\n getPathConfig: () => Promise<\n Iterable<{\n pattern: string;\n path: PathSpec;\n isStatic?: boolean;\n noSsr?: boolean;\n data?: unknown; // For build: put in customData\n }>\n >,\n getComponent: (\n componentId: string, // \"**/layout\" or \"**/page\"\n options: {\n // TODO setShouldSkip API is too hard to understand\n unstable_setShouldSkip: (val?: ShouldSkipValue) => void;\n unstable_buildConfig: BuildConfig | undefined;\n }\n ) => Promise<FunctionComponent<RouteProps> | FunctionComponent<RoutePropsForLayout> | null>\n): ReturnType<typeof defineEntries> {\n type MyPathConfig = {\n pattern: string;\n pathname: PathSpec;\n isStatic?: boolean | undefined;\n customData: { noSsr?: boolean; is404: boolean; data: unknown };\n }[];\n let cachedPathConfig: MyPathConfig | undefined;\n const getMyPathConfig = async (buildConfig?: BuildConfig): Promise<MyPathConfig> => {\n if (buildConfig) {\n return buildConfig as MyPathConfig;\n }\n if (!cachedPathConfig) {\n cachedPathConfig = Array.from(await getPathConfig()).map((item) => {\n const is404 =\n item.path.length === 1 &&\n item.path[0]!.type === 'literal' &&\n item.path[0]!.name === '404';\n return {\n pattern: item.pattern,\n pathname: item.path,\n isStatic: item.isStatic,\n customData: { is404, noSsr: !!item.noSsr, data: item.data },\n };\n });\n }\n return cachedPathConfig;\n };\n const existsPath = async (\n pathname: string,\n buildConfig: BuildConfig | undefined\n ): Promise<['FOUND', 'NO_SSR'?] | ['NOT_FOUND', 'HAS_404'?]> => {\n const pathConfig = await getMyPathConfig(buildConfig);\n const found = pathConfig.find(({ pathname: pathSpec }) => getPathMapping(pathSpec, pathname));\n return found\n ? found.customData.noSsr\n ? ['FOUND', 'NO_SSR']\n : ['FOUND']\n : pathConfig.some(({ customData: { is404 } }) => is404) // FIXMEs should avoid re-computation\n ? ['NOT_FOUND', 'HAS_404']\n : ['NOT_FOUND'];\n };\n const renderEntries: RenderEntries = async (input, { params, buildConfig }) => {\n const pathname = parseInputString(input);\n if ((await existsPath(pathname, buildConfig))[0] === 'NOT_FOUND') {\n return null;\n }\n const shouldSkipObj: {\n [componentId: ShouldSkip[number][0]]: ShouldSkip[number][1];\n } = {};\n\n const parsedParams = safeJsonParse(params);\n\n const query = typeof parsedParams?.query === 'string' ? parsedParams.query : '';\n const skip = Array.isArray(parsedParams?.skip) ? (parsedParams?.skip as unknown[]) : [];\n const componentIds = getComponentIds(pathname);\n const entries: (readonly [string, ReactNode])[] = (\n await Promise.all(\n componentIds.map(async (id) => {\n if (skip?.includes(id)) {\n return [];\n }\n const setShouldSkip = (val?: ShouldSkipValue) => {\n if (val) {\n shouldSkipObj[id] = val;\n } else {\n delete shouldSkipObj[id];\n }\n };\n const component = await getComponent(id, {\n unstable_setShouldSkip: setShouldSkip,\n unstable_buildConfig: buildConfig,\n });\n if (!component) {\n return [];\n }\n const element = createElement(\n component as FunctionComponent<{\n path: string;\n query?: string;\n }>,\n id.endsWith('/layout') ? { path: pathname } : { path: pathname, query },\n createElement(Children)\n );\n return [[id, element]] as const;\n })\n )\n ).flat();\n entries.push([SHOULD_SKIP_ID, Object.entries(shouldSkipObj)]);\n entries.push([LOCATION_ID, [pathname, query]]);\n return Object.fromEntries(entries);\n };\n\n const getBuildConfig: GetBuildConfig = async (unstable_collectClientModules) => {\n const pathConfig = await getMyPathConfig();\n const path2moduleIds: Record<string, string[]> = {};\n\n for (const { pathname: pathSpec } of pathConfig) {\n if (pathSpec.some(({ type }) => type !== 'literal')) {\n continue;\n }\n\n const pathname = '/' + pathSpec.map(({ name }) => name).join('/');\n const input = getInputString(pathname);\n const moduleIds = await unstable_collectClientModules(input);\n path2moduleIds[pathname] = moduleIds;\n }\n const customCode = `\nglobalThis.__EXPO_ROUTER_PREFETCH__ = (path) => {\n const path2ids = ${JSON.stringify(path2moduleIds)};\n for (const id of path2ids[path] || []) {\n import(id);\n }\n};`;\n const buildConfig: BuildConfig = [];\n for (const { pathname: pathSpec, isStatic, customData } of pathConfig) {\n const entries: BuildConfig[number]['entries'] = [];\n if (pathSpec.every(({ type }) => type === 'literal')) {\n const pathname = '/' + pathSpec.map(({ name }) => name).join('/');\n const input = getInputString(pathname);\n entries.push({ input, isStatic });\n }\n buildConfig.push({\n pathname: pathSpec,\n isStatic,\n entries,\n customCode,\n customData,\n });\n }\n return buildConfig;\n };\n\n const getSsrConfig: GetSsrConfig = async (pathname, { searchParams, buildConfig }) => {\n const pathStatus = await existsPath(pathname, buildConfig);\n if (pathStatus[1] === 'NO_SSR') {\n return null;\n }\n if (pathStatus[0] === 'NOT_FOUND') {\n if (pathStatus[1] === 'HAS_404') {\n pathname = '/404';\n } else {\n return null;\n }\n }\n const componentIds = getComponentIds(pathname);\n const input = getInputString(pathname);\n const html = createElement(\n ServerRouter as FunctionComponent<Omit<ComponentProps<typeof ServerRouter>, 'children'>>,\n { route: { path: pathname, query: searchParams.toString(), hash: '' } },\n componentIds.reduceRight(\n (acc: ReactNode, id) => createElement(Slot, { id, fallback: acc }, acc),\n null\n )\n );\n return {\n input,\n params: JSON.stringify({ query: searchParams.toString() }),\n html,\n };\n };\n\n return { renderEntries, getBuildConfig, getSsrConfig };\n}\n\nexport function unstable_redirect(\n pathname: string,\n searchParams?: URLSearchParams,\n skip?: string[]\n) {\n if (skip) {\n searchParams = new URLSearchParams(searchParams);\n for (const id of skip) {\n searchParams.append(PARAM_KEY_SKIP, id);\n }\n }\n const input = getInputString(pathname);\n rerender(input, searchParams);\n}\n"]}
1
+ {"version":3,"file":"defineRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/defineRouter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport {\n getComponentIds,\n getInputString,\n parseInputString,\n PARAM_KEY_SKIP,\n SHOULD_SKIP_ID,\n LOCATION_ID,\n Children,\n ServerRouter,\n Slot,\n type RouteProps,\n type ShouldSkip,\n} from 'expo-router/internal/rsc';\nimport type { ComponentProps, FunctionComponent, ReactNode } from 'react';\nimport { createElement } from 'react';\n\nimport { rerender } from '../server';\nimport type {\n BuildConfig,\n RenderEntries,\n GetBuildConfig,\n GetSsrConfig,\n defineEntries,\n} from '../server';\n\ntype RoutePropsForLayout = Omit<RouteProps, 'searchParams'> & {\n children: ReactNode;\n};\n\ntype ShouldSkipValue = ShouldSkip[number][1];\n\nconst safeJsonParse = (str: unknown) => {\n if (typeof str === 'string') {\n try {\n const obj = JSON.parse(str);\n if (typeof obj === 'object') {\n return obj as Record<string, unknown>;\n }\n } catch {\n // ignore\n }\n }\n return undefined;\n};\n\nconst parseSkipList = (value: unknown): Set<string> => {\n if (!Array.isArray(value)) return new Set();\n return new Set(value.filter((v): v is string => typeof v === 'string'));\n};\n\nexport function unstable_defineRouter(\n getPathConfig: () => Promise<\n Iterable<{\n path: string;\n matchesPathname: (pathname: string) => boolean;\n isStatic?: boolean;\n noSsr?: boolean;\n data?: unknown; // For build: put in customData\n }>\n >,\n getComponent: (\n componentId: string,\n options: {\n // TODO setShouldSkip API is too hard to understand\n unstable_setShouldSkip: (val?: ShouldSkipValue) => void;\n unstable_buildConfig: BuildConfig | undefined;\n }\n ) => Promise<\n | { component: FunctionComponent<RouteProps>; kind: 'page' }\n | { component: FunctionComponent<RoutePropsForLayout>; kind: 'layout' }\n | null\n >\n): ReturnType<typeof defineEntries> {\n type MyPathConfig = {\n pathname: string;\n matchesPathname: (pathname: string) => boolean;\n isStatic?: boolean | undefined;\n customData: { noSsr?: boolean; is404: boolean; data: unknown };\n }[];\n let cachedPathConfig: MyPathConfig | undefined;\n const getMyPathConfig = async (buildConfig?: BuildConfig): Promise<MyPathConfig> => {\n if (buildConfig) {\n return buildConfig as MyPathConfig;\n }\n if (!cachedPathConfig) {\n cachedPathConfig = Array.from(await getPathConfig()).map((item) => ({\n pathname: item.path,\n matchesPathname: item.matchesPathname,\n isStatic: item.isStatic,\n customData: {\n is404: item.path === '/404',\n noSsr: !!item.noSsr,\n data: item.data,\n },\n }));\n }\n return cachedPathConfig;\n };\n const existsPath = async (\n pathname: string,\n buildConfig: BuildConfig | undefined\n ): Promise<['FOUND', 'NO_SSR'?] | ['NOT_FOUND', 'HAS_404'?]> => {\n const pathConfig = await getMyPathConfig(buildConfig);\n const found = pathConfig.find(({ matchesPathname }) => matchesPathname(pathname));\n return found\n ? found.customData.noSsr\n ? ['FOUND', 'NO_SSR']\n : ['FOUND']\n : pathConfig.some(({ customData: { is404 } }) => is404) // FIXMEs should avoid re-computation\n ? ['NOT_FOUND', 'HAS_404']\n : ['NOT_FOUND'];\n };\n const renderEntries: RenderEntries = async (input, { params, buildConfig }) => {\n const pathname = parseInputString(input);\n if ((await existsPath(pathname, buildConfig))[0] === 'NOT_FOUND') {\n return null;\n }\n const shouldSkipObj: {\n [componentId: ShouldSkip[number][0]]: ShouldSkip[number][1];\n } = {};\n\n const parsedParams = safeJsonParse(params);\n\n const query = typeof parsedParams?.query === 'string' ? parsedParams.query : '';\n const skip = parseSkipList(parsedParams?.skip);\n const { layouts, page } = getComponentIds(pathname);\n const entries: (readonly [string, ReactNode])[] = (\n await Promise.all(\n [...layouts, page].map(async (id) => {\n // `getComponentIds` separates the terminal page from layouts. Use that\n // structural distinction as a fast-path skip (kind isn't known until we\n // resolve); the kind-based check after resolve is the authoritative defense.\n const isPage = id === page;\n if (isPage && skip.has(id)) {\n return [];\n }\n const setShouldSkip = (val?: ShouldSkipValue) => {\n if (val) {\n shouldSkipObj[id] = val;\n } else {\n delete shouldSkipObj[id];\n }\n };\n const resolved = await getComponent(id, {\n unstable_setShouldSkip: setShouldSkip,\n unstable_buildConfig: buildConfig,\n });\n if (!resolved) {\n return [];\n }\n // Honor skip only for entries the resolver opted into shouldSkipObj; layouts are never skippable.\n if (skip.has(id) && resolved.kind !== 'layout' && shouldSkipObj[id] != null) {\n return [];\n }\n const element = createElement(\n resolved.component as FunctionComponent<{\n path: string;\n query?: string;\n }>,\n isPage ? { path: pathname, query } : { path: pathname },\n createElement(Children)\n );\n return [[id, element]] as const;\n })\n )\n ).flat();\n entries.push([SHOULD_SKIP_ID, Object.entries(shouldSkipObj)]);\n entries.push([LOCATION_ID, [pathname, query]]);\n return Object.fromEntries(entries);\n };\n\n const getBuildConfig: GetBuildConfig = async (unstable_collectClientModules) => {\n const pathConfig = await getMyPathConfig();\n const path2moduleIds: Record<string, string[]> = {};\n\n for (const { pathname } of pathConfig) {\n if (pathname.includes('[')) {\n continue;\n }\n const input = getInputString(pathname);\n const moduleIds = await unstable_collectClientModules(input);\n path2moduleIds[pathname] = moduleIds;\n }\n const customCode = `\nglobalThis.__EXPO_ROUTER_PREFETCH__ = (path) => {\n const path2ids = ${JSON.stringify(path2moduleIds)};\n for (const id of path2ids[path] || []) {\n import(id);\n }\n};`;\n const buildConfig: BuildConfig = [];\n for (const { pathname, isStatic, customData } of pathConfig) {\n const entries: BuildConfig[number]['entries'] = [];\n if (!pathname.includes('[')) {\n const input = getInputString(pathname);\n entries.push({ input, isStatic });\n }\n buildConfig.push({\n pathname,\n isStatic,\n entries,\n customCode,\n customData,\n });\n }\n return buildConfig;\n };\n\n const getSsrConfig: GetSsrConfig = async (pathname, { searchParams, buildConfig }) => {\n const pathStatus = await existsPath(pathname, buildConfig);\n if (pathStatus[1] === 'NO_SSR') {\n return null;\n }\n if (pathStatus[0] === 'NOT_FOUND') {\n if (pathStatus[1] === 'HAS_404') {\n pathname = '/404';\n } else {\n return null;\n }\n }\n const { layouts, page } = getComponentIds(pathname);\n const input = getInputString(pathname);\n const html = createElement(\n ServerRouter as FunctionComponent<Omit<ComponentProps<typeof ServerRouter>, 'children'>>,\n { route: { path: pathname, query: searchParams.toString(), hash: '' } },\n [...layouts, page].reduceRight(\n (acc: ReactNode, id) => createElement(Slot, { id, fallback: acc }, acc),\n null\n )\n );\n return {\n input,\n params: JSON.stringify({ query: searchParams.toString() }),\n html,\n };\n };\n\n return { renderEntries, getBuildConfig, getSsrConfig };\n}\n\nexport function unstable_redirect(\n pathname: string,\n searchParams?: URLSearchParams,\n skip?: string[]\n) {\n if (skip) {\n searchParams = new URLSearchParams(searchParams);\n for (const id of skip) {\n searchParams.append(PARAM_KEY_SKIP, id);\n }\n }\n const input = getInputString(pathname);\n rerender(input, searchParams);\n}\n"]}
@@ -1,3 +1,5 @@
1
- declare const _default: (getRouteOptions?: import("expo-router/build/getRoutes").Options) => import("../server").EntriesDev;
1
+ import { getRoutes } from '../../getRoutesSSR';
2
+ import type { EntriesDev } from '../server';
3
+ declare const _default: (getRouteOptions?: Parameters<typeof getRoutes>[1]) => EntriesDev;
2
4
  export default _default;
3
5
  //# sourceMappingURL=expo-definedRouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expo-definedRouter.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/expo-definedRouter.ts"],"names":[],"mappings":";AAiBA,wBA2HG"}
1
+ {"version":3,"file":"expo-definedRouter.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/expo-definedRouter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;yBA6H5B,kBAAkB,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,KAAG,UAAU;AAA9E,wBAWG"}
@@ -2,112 +2,108 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const _ctx_1 = require("expo-router/_ctx");
4
4
  const routing_1 = require("expo-router/internal/routing");
5
- const create_expo_pages_1 = require("./create-expo-pages");
5
+ const createPages_1 = require("./createPages");
6
6
  const getRoutesSSR_1 = require("../../getRoutesSSR");
7
7
  const loadStaticParamsAsync_1 = require("../../loadStaticParamsAsync");
8
+ function readSettings(loaded) {
9
+ const raw = (loaded.unstable_settings ?? {});
10
+ const render = raw.render === 'static' || raw.render === 'dynamic' ? raw.render : undefined;
11
+ const unstable_disableSSR = typeof raw.unstable_disableSSR === 'boolean' ? raw.unstable_disableSSR : undefined;
12
+ return { render, unstable_disableSSR };
13
+ }
8
14
  const UNIMPLEMENTED_PARAMS = new Proxy({}, {
9
- // Assert that params is unimplemented when accessed.
10
15
  get() {
11
16
  throw new Error('generateStaticParams(): params is not implemented yet');
12
17
  },
13
18
  });
14
- exports.default = (0, create_expo_pages_1.createExpoPages)(async ({ createPage, createLayout }, { getRouteOptions }) => {
15
- const routes = (0, getRoutesSSR_1.getRoutes)(_ctx_1.ctx, {
16
- ...getRouteOptions,
17
- platform: process.env.EXPO_OS,
18
- skipGenerated: true,
19
- importMode: 'lazy',
20
- });
21
- if (!routes)
22
- return;
23
- async function loadAndConvertStaticParamsAsync(route) {
24
- const loaded = route.loadRoute();
25
- let staticPaths = undefined;
26
- if (route.dynamic) {
27
- const params = await (0, loadStaticParamsAsync_1.evalStaticParamsAsync)(route, { parentParams: UNIMPLEMENTED_PARAMS }, loaded.generateStaticParams);
28
- // Sort `params` like `[{a: 'x', b: 'y'}, { a: 'z', b: 'w' }]` for a route.dynamic like `[{name: 'a', deep: false}, {name: 'b', deep: false}]` to `[['a', 'y'], ['z', 'w]]`
29
- staticPaths = params?.map((p) => {
30
- const grouped = [];
31
- for (const dynamic of route.dynamic) {
32
- const defined = p[dynamic.name];
33
- if (!defined) {
34
- throw new Error('generateStaticParams is missing param: ' +
35
- dynamic.name +
36
- '. In route: ' +
37
- route.contextKey);
38
- }
39
- if (Array.isArray(defined)) {
40
- if (defined.length > 1) {
41
- throw new Error('generateStaticParams does not support returning multiple static paths for deep dynamic routes in React Server Components yet. Update route: ' +
42
- route.contextKey);
43
- }
44
- }
45
- const first = Array.isArray(defined) ? defined[0] : defined;
46
- if (first != null) {
47
- grouped.push(first);
48
- }
49
- }
50
- return grouped;
51
- });
52
- }
53
- else if (loaded.generateStaticParams) {
19
+ async function loadStaticParamsForRoute(route) {
20
+ const loaded = route.loadRoute();
21
+ if (!route.dynamic) {
22
+ if (loaded.generateStaticParams) {
54
23
  throw new Error('Cannot use generateStaticParams without a dynamic route: ' + route.contextKey);
55
24
  }
56
- return staticPaths;
25
+ return undefined;
57
26
  }
58
- async function addLayout(route) {
59
- const normal = (0, routing_1.getContextKey)(route.contextKey).replace(/\/index$/, '');
60
- const loaded = route.loadRoute();
61
- if (loaded.generateStaticParams) {
62
- throw new Error('generateStaticParams is not supported in _layout routes with React Server Components enabled yet.');
63
- }
64
- createLayout({
65
- // NOTE(EvanBacon): Support routes with top-level "use client"
66
- component: loaded.default,
67
- path: normal,
68
- render: 'static',
69
- ...loaded.unstable_settings,
70
- });
71
- await Promise.all(route.children.sort(routing_1.sortRoutes).map(async (child) => {
72
- if (child.type === 'layout') {
73
- await addLayout(child);
27
+ const params = await (0, loadStaticParamsAsync_1.evalStaticParamsAsync)(route, { parentParams: UNIMPLEMENTED_PARAMS }, loaded.generateStaticParams);
28
+ return params?.map((p) => {
29
+ const grouped = [];
30
+ for (const dynamic of route.dynamic) {
31
+ const defined = p[dynamic.name];
32
+ if (!defined) {
33
+ throw new Error('generateStaticParams is missing param: ' +
34
+ dynamic.name +
35
+ '. In route: ' +
36
+ route.contextKey);
74
37
  }
75
- else {
76
- const normal = (0, routing_1.getContextKey)(child.contextKey).replace(/\/index$/, '');
77
- const loaded = child.loadRoute();
78
- const settings = loaded.unstable_settings;
79
- // Support generateStaticParams for dynamic routes by defining the route twice.
80
- if (loaded.generateStaticParams) {
81
- createPage({
82
- // NOTE(EvanBacon): Support routes with top-level "use client"
83
- component: loaded.default,
84
- path: normal,
85
- render: 'static',
86
- ...loaded.unstable_settings,
87
- staticPaths: (await loadAndConvertStaticParamsAsync(child)),
88
- });
89
- if (settings?.render !== 'static') {
90
- createPage({
91
- // NOTE(EvanBacon): Support routes with top-level "use client"
92
- component: loaded.default,
93
- path: normal,
94
- render: 'dynamic',
95
- ...settings,
96
- });
97
- }
98
- }
99
- else {
100
- createPage({
101
- // NOTE(EvanBacon): Support routes with top-level "use client"
102
- component: loaded.default,
103
- path: normal,
104
- render: 'dynamic',
105
- ...settings,
106
- });
107
- }
38
+ if (Array.isArray(defined) && defined.length > 1) {
39
+ throw new Error('generateStaticParams does not support returning multiple static paths for deep dynamic routes in React Server Components yet. Update route: ' +
40
+ route.contextKey);
108
41
  }
109
- }));
42
+ const first = Array.isArray(defined) ? defined[0] : defined;
43
+ if (first != null) {
44
+ grouped.push(first);
45
+ }
46
+ }
47
+ return grouped;
48
+ });
49
+ }
50
+ async function registerRouteTree(api, route) {
51
+ const layoutPath = (0, routing_1.getContextKey)(route.contextKey).replace(/\/index$/, '');
52
+ const loaded = route.loadRoute();
53
+ if (loaded.generateStaticParams) {
54
+ throw new Error('generateStaticParams is not supported in _layout routes with React Server Components enabled yet.');
110
55
  }
111
- await addLayout(routes);
56
+ const layoutSettings = readSettings(loaded);
57
+ api.createLayout({
58
+ component: loaded.default,
59
+ path: layoutPath,
60
+ render: layoutSettings.render ?? 'static',
61
+ });
62
+ await Promise.all(route.children.sort(routing_1.sortRoutes).map(async (child) => {
63
+ if (child.type === 'layout') {
64
+ await registerRouteTree(api, child);
65
+ return;
66
+ }
67
+ const childPath = (0, routing_1.getContextKey)(child.contextKey).replace(/\/index$/, '');
68
+ const childLoaded = child.loadRoute();
69
+ const settings = readSettings(childLoaded);
70
+ if (childLoaded.generateStaticParams) {
71
+ api.createPage({
72
+ component: childLoaded.default,
73
+ path: childPath,
74
+ render: 'static',
75
+ staticPaths: (await loadStaticParamsForRoute(child)),
76
+ unstable_disableSSR: settings.unstable_disableSSR,
77
+ });
78
+ if (settings.render !== 'static') {
79
+ api.createPage({
80
+ component: childLoaded.default,
81
+ path: childPath,
82
+ render: 'dynamic',
83
+ unstable_disableSSR: settings.unstable_disableSSR,
84
+ });
85
+ }
86
+ return;
87
+ }
88
+ api.createPage({
89
+ component: childLoaded.default,
90
+ path: childPath,
91
+ render: settings.render ?? 'dynamic',
92
+ unstable_disableSSR: settings.unstable_disableSSR,
93
+ });
94
+ }));
95
+ }
96
+ exports.default = (getRouteOptions) => ({
97
+ default: (0, createPages_1.createPages)(async ({ createPage, createLayout, unstable_setBuildData }) => {
98
+ const routes = (0, getRoutesSSR_1.getRoutes)(_ctx_1.ctx, {
99
+ ...getRouteOptions,
100
+ platform: process.env.EXPO_OS,
101
+ skipGenerated: true,
102
+ importMode: 'lazy',
103
+ });
104
+ if (!routes)
105
+ return;
106
+ await registerRouteTree({ createPage, createLayout, unstable_setBuildData }, routes);
107
+ }),
112
108
  });
113
109
  //# sourceMappingURL=expo-definedRouter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expo-definedRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/expo-definedRouter.ts"],"names":[],"mappings":";;AAAA,2CAAuC;AACvC,0DAAyF;AAEzF,2DAAsD;AACtD,qDAA+C;AAC/C,uEAAoE;AAEpE,MAAM,oBAAoB,GAAG,IAAI,KAAK,CACpC,EAAE,EACF;IACE,qDAAqD;IACrD,GAAG;QACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;CACF,CACF,CAAC;AAEF,kBAAe,IAAA,mCAAe,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,IAAA,wBAAS,EAAC,UAAG,EAAE;QAC5B,GAAG,eAAe;QAClB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QAC7B,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,KAAK,UAAU,+BAA+B,CAAC,KAAgB;QAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,IAAI,WAAW,GAA2B,SAAS,CAAC;QAEpD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,IAAA,6CAAqB,EACxC,KAAK,EACL,EAAE,YAAY,EAAE,oBAAoB,EAAE,EACtC,MAAM,CAAC,oBAAoB,CAC5B,CAAC;YAEF,2KAA2K;YAC3K,WAAW,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;gBAE7B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAQ,EAAE,CAAC;oBACrC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,MAAM,IAAI,KAAK,CACb,yCAAyC;4BACvC,OAAO,CAAC,IAAI;4BACZ,cAAc;4BACd,KAAK,CAAC,UAAU,CACnB,CAAC;oBACJ,CAAC;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACvB,MAAM,IAAI,KAAK,CACb,8IAA8I;gCAC5I,KAAK,CAAC,UAAU,CACnB,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAE5D,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;wBAClB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,2DAA2D,GAAG,KAAK,CAAC,UAAU,CAC/E,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,KAAK,UAAU,SAAS,CAAC,KAAgB;QACvC,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;QACJ,CAAC;QAED,YAAY,CAAC;YACX,8DAA8D;YAC9D,SAAS,EAAE,MAAM,CAAC,OAAe;YACjC,IAAI,EAAE,MAAa;YACnB,MAAM,EAAE,QAAQ;YAChB,GAAG,MAAM,CAAC,iBAAiB;SAC5B,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBAE1C,+EAA+E;gBAC/E,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;oBAChC,UAAU,CAAC;wBACT,8DAA8D;wBAC9D,SAAS,EAAE,MAAM,CAAC,OAAc;wBAChC,IAAI,EAAE,MAAa;wBACnB,MAAM,EAAE,QAAQ;wBAChB,GAAG,MAAM,CAAC,iBAAiB;wBAC3B,WAAW,EAAE,CAAC,MAAM,+BAA+B,CAAC,KAAK,CAAC,CAAQ;qBACnE,CAAC,CAAC;oBAEH,IAAI,QAAQ,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAClC,UAAU,CAAC;4BACT,8DAA8D;4BAC9D,SAAS,EAAE,MAAM,CAAC,OAAc;4BAChC,IAAI,EAAE,MAAa;4BACnB,MAAM,EAAE,SAAS;4BACjB,GAAG,QAAQ;yBACZ,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC;wBACT,8DAA8D;wBAC9D,SAAS,EAAE,MAAM,CAAC,OAAc;wBAChC,IAAI,EAAE,MAAa;wBACnB,MAAM,EAAE,SAAS;wBACjB,GAAG,QAAQ;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC","sourcesContent":["import { ctx } from 'expo-router/_ctx';\nimport { getContextKey, sortRoutes, type RouteNode } from 'expo-router/internal/routing';\n\nimport { createExpoPages } from './create-expo-pages';\nimport { getRoutes } from '../../getRoutesSSR';\nimport { evalStaticParamsAsync } from '../../loadStaticParamsAsync';\n\nconst UNIMPLEMENTED_PARAMS = new Proxy(\n {},\n {\n // Assert that params is unimplemented when accessed.\n get() {\n throw new Error('generateStaticParams(): params is not implemented yet');\n },\n }\n);\n\nexport default createExpoPages(async ({ createPage, createLayout }, { getRouteOptions }) => {\n const routes = getRoutes(ctx, {\n ...getRouteOptions,\n platform: process.env.EXPO_OS,\n skipGenerated: true,\n importMode: 'lazy',\n });\n\n if (!routes) return;\n\n async function loadAndConvertStaticParamsAsync(route: RouteNode) {\n const loaded = route.loadRoute();\n\n let staticPaths: string[][] | undefined = undefined;\n\n if (route.dynamic) {\n const params = await evalStaticParamsAsync(\n route,\n { parentParams: UNIMPLEMENTED_PARAMS },\n loaded.generateStaticParams\n );\n\n // Sort `params` like `[{a: 'x', b: 'y'}, { a: 'z', b: 'w' }]` for a route.dynamic like `[{name: 'a', deep: false}, {name: 'b', deep: false}]` to `[['a', 'y'], ['z', 'w]]`\n staticPaths = params?.map((p) => {\n const grouped: string[] = [];\n\n for (const dynamic of route.dynamic!) {\n const defined = p[dynamic.name];\n if (!defined) {\n throw new Error(\n 'generateStaticParams is missing param: ' +\n dynamic.name +\n '. In route: ' +\n route.contextKey\n );\n }\n if (Array.isArray(defined)) {\n if (defined.length > 1) {\n throw new Error(\n 'generateStaticParams does not support returning multiple static paths for deep dynamic routes in React Server Components yet. Update route: ' +\n route.contextKey\n );\n }\n }\n\n const first = Array.isArray(defined) ? defined[0] : defined;\n\n if (first != null) {\n grouped.push(first);\n }\n }\n return grouped;\n });\n } else if (loaded.generateStaticParams) {\n throw new Error(\n 'Cannot use generateStaticParams without a dynamic route: ' + route.contextKey\n );\n }\n return staticPaths;\n }\n async function addLayout(route: RouteNode) {\n const normal = getContextKey(route.contextKey).replace(/\\/index$/, '');\n\n const loaded = route.loadRoute();\n\n if (loaded.generateStaticParams) {\n throw new Error(\n 'generateStaticParams is not supported in _layout routes with React Server Components enabled yet.'\n );\n }\n\n createLayout({\n // NOTE(EvanBacon): Support routes with top-level \"use client\"\n component: loaded.default! as any,\n path: normal as any,\n render: 'static',\n ...loaded.unstable_settings,\n });\n\n await Promise.all(\n route.children.sort(sortRoutes).map(async (child) => {\n if (child.type === 'layout') {\n await addLayout(child);\n } else {\n const normal = getContextKey(child.contextKey).replace(/\\/index$/, '');\n const loaded = child.loadRoute();\n const settings = loaded.unstable_settings;\n\n // Support generateStaticParams for dynamic routes by defining the route twice.\n if (loaded.generateStaticParams) {\n createPage({\n // NOTE(EvanBacon): Support routes with top-level \"use client\"\n component: loaded.default as any,\n path: normal as any,\n render: 'static',\n ...loaded.unstable_settings,\n staticPaths: (await loadAndConvertStaticParamsAsync(child)) as any,\n });\n\n if (settings?.render !== 'static') {\n createPage({\n // NOTE(EvanBacon): Support routes with top-level \"use client\"\n component: loaded.default as any,\n path: normal as any,\n render: 'dynamic',\n ...settings,\n });\n }\n } else {\n createPage({\n // NOTE(EvanBacon): Support routes with top-level \"use client\"\n component: loaded.default as any,\n path: normal as any,\n render: 'dynamic',\n ...settings,\n });\n }\n }\n })\n );\n }\n\n await addLayout(routes);\n});\n"]}
1
+ {"version":3,"file":"expo-definedRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/expo-definedRouter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ctx } from 'expo-router/_ctx';\nimport { getContextKey, sortRoutes, type RouteNode } from 'expo-router/internal/routing';\n\nimport { createPages, type CreatePagesApi } from './createPages';\nimport { getRoutes } from '../../getRoutesSSR';\nimport { evalStaticParamsAsync } from '../../loadStaticParamsAsync';\nimport type { EntriesDev } from '../server';\n\ntype RouteSettings = {\n render?: 'static' | 'dynamic';\n unstable_disableSSR?: boolean;\n};\n\nfunction readSettings(loaded: { unstable_settings?: unknown }): RouteSettings {\n const raw = (loaded.unstable_settings ?? {}) as Record<string, unknown>;\n const render = raw.render === 'static' || raw.render === 'dynamic' ? raw.render : undefined;\n const unstable_disableSSR =\n typeof raw.unstable_disableSSR === 'boolean' ? raw.unstable_disableSSR : undefined;\n return { render, unstable_disableSSR };\n}\n\nconst UNIMPLEMENTED_PARAMS = new Proxy(\n {},\n {\n get() {\n throw new Error('generateStaticParams(): params is not implemented yet');\n },\n }\n);\n\nasync function loadStaticParamsForRoute(route: RouteNode): Promise<string[][] | undefined> {\n const loaded = route.loadRoute();\n\n if (!route.dynamic) {\n if (loaded.generateStaticParams) {\n throw new Error(\n 'Cannot use generateStaticParams without a dynamic route: ' + route.contextKey\n );\n }\n return undefined;\n }\n\n const params = await evalStaticParamsAsync(\n route,\n { parentParams: UNIMPLEMENTED_PARAMS },\n loaded.generateStaticParams\n );\n\n return params?.map((p) => {\n const grouped: string[] = [];\n for (const dynamic of route.dynamic!) {\n const defined = p[dynamic.name];\n if (!defined) {\n throw new Error(\n 'generateStaticParams is missing param: ' +\n dynamic.name +\n '. In route: ' +\n route.contextKey\n );\n }\n if (Array.isArray(defined) && defined.length > 1) {\n throw new Error(\n 'generateStaticParams does not support returning multiple static paths for deep dynamic routes in React Server Components yet. Update route: ' +\n route.contextKey\n );\n }\n const first = Array.isArray(defined) ? defined[0] : defined;\n if (first != null) {\n grouped.push(first);\n }\n }\n return grouped;\n });\n}\n\nasync function registerRouteTree(api: CreatePagesApi, route: RouteNode): Promise<void> {\n const layoutPath = getContextKey(route.contextKey).replace(/\\/index$/, '');\n const loaded = route.loadRoute();\n\n if (loaded.generateStaticParams) {\n throw new Error(\n 'generateStaticParams is not supported in _layout routes with React Server Components enabled yet.'\n );\n }\n\n const layoutSettings = readSettings(loaded);\n api.createLayout({\n component: loaded.default! as any,\n path: layoutPath,\n render: layoutSettings.render ?? 'static',\n });\n\n await Promise.all(\n route.children.sort(sortRoutes).map(async (child) => {\n if (child.type === 'layout') {\n await registerRouteTree(api, child);\n return;\n }\n const childPath = getContextKey(child.contextKey).replace(/\\/index$/, '');\n const childLoaded = child.loadRoute();\n const settings = readSettings(childLoaded);\n\n if (childLoaded.generateStaticParams) {\n api.createPage({\n component: childLoaded.default as any,\n path: childPath,\n render: 'static',\n staticPaths: (await loadStaticParamsForRoute(child)) as any,\n unstable_disableSSR: settings.unstable_disableSSR,\n });\n if (settings.render !== 'static') {\n api.createPage({\n component: childLoaded.default as any,\n path: childPath,\n render: 'dynamic',\n unstable_disableSSR: settings.unstable_disableSSR,\n });\n }\n return;\n }\n\n api.createPage({\n component: childLoaded.default as any,\n path: childPath,\n render: settings.render ?? 'dynamic',\n unstable_disableSSR: settings.unstable_disableSSR,\n });\n })\n );\n}\n\nexport default (getRouteOptions?: Parameters<typeof getRoutes>[1]): EntriesDev => ({\n default: createPages(async ({ createPage, createLayout, unstable_setBuildData }) => {\n const routes = getRoutes(ctx, {\n ...getRouteOptions,\n platform: process.env.EXPO_OS,\n skipGenerated: true,\n importMode: 'lazy',\n });\n if (!routes) return;\n await registerRouteTree({ createPage, createLayout, unstable_setBuildData }, routes);\n }),\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import type { EntriesDev } from '../server';
2
+ /** Shape of a router module loaded via Metro SSR (full or client-only). */
3
+ export type RouterModule = {
4
+ default: (getRouteOptions?: any) => EntriesDev;
5
+ };
6
+ /**
7
+ * Resolve the absolute file path of the router module to load. Two modes:
8
+ * full (Expo Router file tree walker) or client-only (no-op).
9
+ *
10
+ * The cli passes the returned path to Metro's SSR loader.
11
+ */
12
+ export declare function resolveRouterModule(clientOnly: boolean): string;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC;CAChD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveRouterModule = resolveRouterModule;
4
+ /**
5
+ * Resolve the absolute file path of the router module to load. Two modes:
6
+ * full (Expo Router file tree walker) or client-only (no-op).
7
+ *
8
+ * The cli passes the returned path to Metro's SSR loader.
9
+ */
10
+ function resolveRouterModule(clientOnly) {
11
+ return clientOnly ? require.resolve('./noopRouter') : require.resolve('./expo-definedRouter');
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rsc/router/index.ts"],"names":[],"mappings":";;AAaA,kDAEC;AARD;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,UAAmB;IACrD,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAChG,CAAC","sourcesContent":["import type { EntriesDev } from '../server';\n\n/** Shape of a router module loaded via Metro SSR (full or client-only). */\nexport type RouterModule = {\n default: (getRouteOptions?: any) => EntriesDev;\n};\n\n/**\n * Resolve the absolute file path of the router module to load. Two modes:\n * full (Expo Router file tree walker) or client-only (no-op).\n *\n * The cli passes the returned path to Metro's SSR loader.\n */\nexport function resolveRouterModule(clientOnly: boolean): string {\n return clientOnly ? require.resolve('./noopRouter') : require.resolve('./expo-definedRouter');\n}\n"]}
@@ -1,3 +1,4 @@
1
- declare const _default: (getRouteOptions?: import("expo-router/build/getRoutes").Options) => import("../server").EntriesDev;
1
+ import type { EntriesDev } from '../server';
2
+ declare const _default: (_getRouteOptions?: unknown) => EntriesDev;
2
3
  export default _default;
3
4
  //# sourceMappingURL=noopRouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"noopRouter.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/noopRouter.ts"],"names":[],"mappings":";AAEA,wBAEG"}
1
+ {"version":3,"file":"noopRouter.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/noopRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;yBAI5B,mBAAmB,OAAO,KAAG,UAAU;AAAvD,wBAEG"}
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const create_expo_pages_1 = require("./create-expo-pages");
4
- exports.default = (0, create_expo_pages_1.createExpoPages)(async () => {
5
- // noop the router for client-only mode. This ensures we skip loading the routes in react-server mode.
3
+ const createPages_1 = require("./createPages");
4
+ // Used in client-only mode to skip route loading in react-server bundles.
5
+ exports.default = (_getRouteOptions) => ({
6
+ default: (0, createPages_1.createPages)(async () => { }),
6
7
  });
7
8
  //# sourceMappingURL=noopRouter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"noopRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/noopRouter.ts"],"names":[],"mappings":";;AAAA,2DAAsD;AAEtD,kBAAe,IAAA,mCAAe,EAAC,KAAK,IAAI,EAAE;IACxC,sGAAsG;AACxG,CAAC,CAAC,CAAC","sourcesContent":["import { createExpoPages } from './create-expo-pages';\n\nexport default createExpoPages(async () => {\n // noop the router for client-only mode. This ensures we skip loading the routes in react-server mode.\n});\n"]}
1
+ {"version":3,"file":"noopRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/noopRouter.ts"],"names":[],"mappings":";;AACA,+CAA4C;AAE5C,0EAA0E;AAC1E,kBAAe,CAAC,gBAA0B,EAAc,EAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,IAAA,yBAAW,EAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;CACrC,CAAC,CAAC","sourcesContent":["import type { EntriesDev } from '../server';\nimport { createPages } from './createPages';\n\n// Used in client-only mode to skip route loading in react-server bundles.\nexport default (_getRouteOptions?: unknown): EntriesDev => ({\n default: createPages(async () => {}),\n});\n"]}
@@ -19,6 +19,8 @@ export type RenderRscArgs = {
19
19
  input: string;
20
20
  context: Record<string, unknown> | undefined;
21
21
  body?: ReadableStream | undefined;
22
+ method?: 'GET' | 'POST';
23
+ headers?: Record<string, string>;
22
24
  contentType?: string | undefined;
23
25
  decodedBody?: unknown;
24
26
  moduleIdCallback?: (module: {
@@ -1 +1 @@
1
- {"version":3,"file":"rsc-renderer.d.ts","sourceRoot":"","sources":["../../src/rsc/rsc-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,iCAAiC,CAAC;AAOzC,OAAO,EAAsB,KAAK,UAAU,EAAmB,MAAM,UAAU,CAAC;AAOhF,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAClE,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,KAAK,cAAc,GAAG,GAAG,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IAE1B,MAAM,EAAE,cAAc,CAAC;IAGvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,IAAI,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,KAAK,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,KAAK,kBAAkB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE5F,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACpD,CAAC;AAEF,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA4KjG"}
1
+ {"version":3,"file":"rsc-renderer.d.ts","sourceRoot":"","sources":["../../src/rsc/rsc-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,iCAAiC,CAAC;AAOzC,OAAO,EAAsB,KAAK,UAAU,EAAmB,MAAM,UAAU,CAAC;AAOhF,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAClE,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,KAAK,cAAc,GAAG,GAAG,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IAE1B,MAAM,EAAE,cAAc,CAAC;IAGvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,IAAI,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,KAAK,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,KAAK,kBAAkB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE5F,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACpD,CAAC;AAEF,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA8LjG"}