expo-router 4.0.0-preview.11 → 4.0.0-preview.13

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 (171) hide show
  1. package/build/ExpoRoot.js +2 -2
  2. package/build/ExpoRoot.js.map +1 -1
  3. package/build/exports.d.ts +1 -1
  4. package/build/exports.d.ts.map +1 -1
  5. package/build/exports.js +24 -2
  6. package/build/exports.js.map +1 -1
  7. package/build/fast-refresh.d.ts.map +1 -1
  8. package/build/fast-refresh.js.map +1 -1
  9. package/build/getRoutesCore.d.ts +1 -0
  10. package/build/getRoutesCore.d.ts.map +1 -1
  11. package/build/getRoutesCore.js +3 -1
  12. package/build/getRoutesCore.js.map +1 -1
  13. package/build/global-state/router-store.d.ts.map +1 -1
  14. package/build/global-state/router-store.js +1 -2
  15. package/build/global-state/router-store.js.map +1 -1
  16. package/build/head/url.d.ts +1 -0
  17. package/build/head/url.d.ts.map +1 -1
  18. package/build/head/url.js +21 -4
  19. package/build/head/url.js.map +1 -1
  20. package/build/hooks.d.ts +90 -38
  21. package/build/hooks.d.ts.map +1 -1
  22. package/build/hooks.js +46 -39
  23. package/build/hooks.js.map +1 -1
  24. package/build/imperative-api.d.ts +58 -15
  25. package/build/imperative-api.d.ts.map +1 -1
  26. package/build/imperative-api.js.map +1 -1
  27. package/build/layouts/Drawer.d.ts +2 -142
  28. package/build/layouts/Drawer.d.ts.map +1 -1
  29. package/build/layouts/Drawer.js +8 -5
  30. package/build/layouts/Drawer.js.map +1 -1
  31. package/build/layouts/DrawerClient.d.ts +144 -0
  32. package/build/layouts/DrawerClient.d.ts.map +1 -0
  33. package/build/layouts/DrawerClient.js +10 -0
  34. package/build/layouts/DrawerClient.js.map +1 -0
  35. package/build/layouts/Stack.d.ts +2 -126
  36. package/build/layouts/Stack.d.ts.map +1 -1
  37. package/build/layouts/Stack.js +8 -6
  38. package/build/layouts/Stack.js.map +1 -1
  39. package/build/layouts/StackClient.d.ts +128 -0
  40. package/build/layouts/StackClient.d.ts.map +1 -0
  41. package/build/layouts/StackClient.js +10 -0
  42. package/build/layouts/StackClient.js.map +1 -0
  43. package/build/layouts/Tabs.d.ts +2 -134
  44. package/build/layouts/Tabs.d.ts.map +1 -1
  45. package/build/layouts/Tabs.js +5 -37
  46. package/build/layouts/Tabs.js.map +1 -1
  47. package/build/layouts/TabsClient.d.ts +136 -0
  48. package/build/layouts/TabsClient.d.ts.map +1 -0
  49. package/build/layouts/TabsClient.js +44 -0
  50. package/build/layouts/TabsClient.js.map +1 -0
  51. package/build/layouts/withLayoutContext.d.ts +4 -1
  52. package/build/layouts/withLayoutContext.d.ts.map +1 -1
  53. package/build/layouts/withLayoutContext.js +4 -1
  54. package/build/layouts/withLayoutContext.js.map +1 -1
  55. package/build/link/Link.d.ts +48 -4
  56. package/build/link/Link.d.ts.map +1 -1
  57. package/build/link/Link.js +47 -3
  58. package/build/link/Link.js.map +1 -1
  59. package/build/link/href.d.ts +1 -1
  60. package/build/link/href.d.ts.map +1 -1
  61. package/build/link/href.js.map +1 -1
  62. package/build/link/useLinkHooks.d.ts +122 -29
  63. package/build/link/useLinkHooks.d.ts.map +1 -1
  64. package/build/link/useLinkHooks.js.map +1 -1
  65. package/build/renderRootComponent.d.ts.map +1 -1
  66. package/build/renderRootComponent.js +1 -2
  67. package/build/renderRootComponent.js.map +1 -1
  68. package/build/rsc/exports.d.ts +3 -1
  69. package/build/rsc/exports.d.ts.map +1 -1
  70. package/build/rsc/exports.js +3 -1
  71. package/build/rsc/exports.js.map +1 -1
  72. package/build/rsc/middleware.d.ts +1 -1
  73. package/build/rsc/middleware.d.ts.map +1 -1
  74. package/build/rsc/middleware.js +2 -1
  75. package/build/rsc/middleware.js.map +1 -1
  76. package/build/rsc/router/client.d.ts +2 -2
  77. package/build/rsc/router/client.d.ts.map +1 -1
  78. package/build/rsc/router/client.js.map +1 -1
  79. package/build/rsc/router/host.d.ts.map +1 -1
  80. package/build/rsc/router/host.js +20 -15
  81. package/build/rsc/router/host.js.map +1 -1
  82. package/build/rsc/rsc-renderer.d.ts +1 -1
  83. package/build/rsc/rsc-renderer.d.ts.map +1 -1
  84. package/build/rsc/rsc-renderer.js +1 -1
  85. package/build/rsc/rsc-renderer.js.map +1 -1
  86. package/build/rsc/server.d.ts +3 -0
  87. package/build/rsc/server.d.ts.map +1 -1
  88. package/build/rsc/server.js +19 -1
  89. package/build/rsc/server.js.map +1 -1
  90. package/build/testing-library/context-stubs.d.ts.map +1 -1
  91. package/build/testing-library/context-stubs.js +3 -1
  92. package/build/testing-library/context-stubs.js.map +1 -1
  93. package/build/testing-library/mocks.js +14 -13
  94. package/build/testing-library/mocks.js.map +1 -1
  95. package/build/typed-routes/generate.d.ts +5 -1
  96. package/build/typed-routes/generate.d.ts.map +1 -1
  97. package/build/typed-routes/generate.js +129 -64
  98. package/build/typed-routes/generate.js.map +1 -1
  99. package/build/typed-routes/index.d.ts +5 -0
  100. package/build/typed-routes/index.d.ts.map +1 -1
  101. package/build/typed-routes/index.js +8 -3
  102. package/build/typed-routes/index.js.map +1 -1
  103. package/build/typed-routes/testSetup.d.ts +1 -1
  104. package/build/typed-routes/testSetup.d.ts.map +1 -1
  105. package/build/typed-routes/testSetup.js +29 -17
  106. package/build/typed-routes/testSetup.js.map +1 -1
  107. package/build/typed-routes/types.d.ts +43 -145
  108. package/build/typed-routes/types.d.ts.map +1 -1
  109. package/build/typed-routes/types.js.map +1 -1
  110. package/build/types.d.ts +33 -0
  111. package/build/types.d.ts.map +1 -1
  112. package/build/types.js.map +1 -1
  113. package/build/ui/TabContext.d.ts +158 -1
  114. package/build/ui/TabContext.d.ts.map +1 -1
  115. package/build/ui/TabContext.js +25 -1
  116. package/build/ui/TabContext.js.map +1 -1
  117. package/build/ui/TabList.d.ts +17 -1
  118. package/build/ui/TabList.d.ts.map +1 -1
  119. package/build/ui/TabList.js +16 -0
  120. package/build/ui/TabList.js.map +1 -1
  121. package/build/ui/TabSlot.d.ts +55 -5
  122. package/build/ui/TabSlot.d.ts.map +1 -1
  123. package/build/ui/TabSlot.js +38 -14
  124. package/build/ui/TabSlot.js.map +1 -1
  125. package/build/ui/TabTrigger.d.ts +65 -70
  126. package/build/ui/TabTrigger.d.ts.map +1 -1
  127. package/build/ui/TabTrigger.js +25 -1
  128. package/build/ui/TabTrigger.js.map +1 -1
  129. package/build/ui/Tabs.d.ts +89 -132
  130. package/build/ui/Tabs.d.ts.map +1 -1
  131. package/build/ui/Tabs.js +53 -8
  132. package/build/ui/Tabs.js.map +1 -1
  133. package/build/ui/common.d.ts +3 -3
  134. package/build/ui/common.d.ts.map +1 -1
  135. package/build/ui/common.js.map +1 -1
  136. package/build/useFocusEffect.d.ts +15 -6
  137. package/build/useFocusEffect.d.ts.map +1 -1
  138. package/build/useFocusEffect.js +15 -6
  139. package/build/useFocusEffect.js.map +1 -1
  140. package/build/useNavigation.d.ts +11 -5
  141. package/build/useNavigation.d.ts.map +1 -1
  142. package/build/useNavigation.js +11 -5
  143. package/build/useNavigation.js.map +1 -1
  144. package/build/utils/splash.d.ts +6 -0
  145. package/build/utils/splash.d.ts.map +1 -0
  146. package/build/utils/splash.js +51 -0
  147. package/build/utils/splash.js.map +1 -0
  148. package/build/views/Navigator.d.ts +6 -5
  149. package/build/views/Navigator.d.ts.map +1 -1
  150. package/build/views/Navigator.js +6 -5
  151. package/build/views/Navigator.js.map +1 -1
  152. package/build/views/Splash.d.ts +1 -1
  153. package/build/views/Splash.d.ts.map +1 -1
  154. package/build/views/Splash.js +3 -13
  155. package/build/views/Splash.js.map +1 -1
  156. package/build/views/Try.d.ts +1 -1
  157. package/build/views/Try.d.ts.map +1 -1
  158. package/build/views/Try.js +1 -1
  159. package/build/views/Try.js.map +1 -1
  160. package/entry-classic.js +0 -6
  161. package/package.json +3 -5
  162. package/plugin/build/index.d.ts +2 -0
  163. package/plugin/options.json +74 -73
  164. package/rsc/entry.js +0 -6
  165. package/rsc/headers.d.ts +3 -0
  166. package/rsc/headers.js +5 -0
  167. package/build/rsc/runtime.d.ts +0 -9
  168. package/build/rsc/runtime.d.ts.map +0 -1
  169. package/build/rsc/runtime.js +0 -36
  170. package/build/rsc/runtime.js.map +0 -1
  171. package/virtual-client-boundaries.js +0 -1
@@ -5,25 +5,37 @@ const path_1 = require("path");
5
5
  const generate_1 = require("./generate");
6
6
  const context_stubs_1 = require("../testing-library/context-stubs");
7
7
  const fixtures = {
8
- basic: {
9
- '/apple': () => null,
10
- '/banana': () => null,
11
- '/colors/[color]': () => null,
12
- '/animals/[...animal]': () => null,
13
- '/mix/[fruit]/[color]/[...animals]': () => null,
14
- '/(group)/static': () => null,
15
- '/(group)/(a,b)/folder/index': () => null,
16
- '/(group)/(a,b)/folder/[slug]': () => null,
17
- '/(group)/(a,b)/folder/[...slug]': () => null,
18
- '/(c)/folder/[slug]': () => null,
8
+ default: {
9
+ context: {
10
+ '/apple': () => null,
11
+ '/banana': () => null,
12
+ '/colors/[color]': () => null,
13
+ '/animals/[...animal]': () => null,
14
+ '/mix/[fruit]/[color]/[...animals]': () => null,
15
+ '/(group)/static': () => null,
16
+ '/(group)/(a,b)/folder/index': () => null,
17
+ '/(group)/(a,b)/folder/[slug]': () => null,
18
+ '/(group)/(a,b)/folder/[...slug]': () => null,
19
+ '/(c)/folder/[slug]': () => null,
20
+ },
21
+ },
22
+ partialGroups: {
23
+ options: { partialTypedGroups: true },
24
+ context: {
25
+ '/(group)/static': () => null,
26
+ '/(group)/(a,b)/folder/index': () => null,
27
+ '/(group)/(a,b)/folder/[slug]': () => null,
28
+ '/(group)/(a,b)/folder/[...slug]': () => null,
29
+ },
19
30
  },
20
31
  };
21
- async function default_1() {
22
- await Promise.all(Object.entries(fixtures).map(async ([key, value]) => {
23
- const template = (0, generate_1.getTypedRoutesDeclarationFile)((0, context_stubs_1.inMemoryContext)(value));
32
+ module.exports = function () {
33
+ return Promise.all(Object.entries(fixtures).map(async ([key, value]) => {
34
+ const template = (0, generate_1.getTypedRoutesDeclarationFile)((0, context_stubs_1.inMemoryContext)(value.context), {
35
+ ...value.options,
36
+ testIgnoreComments: true,
37
+ });
24
38
  return (0, promises_1.writeFile)((0, path_1.join)(__dirname, '/__tests__/fixtures/', key + '.d.ts'), template);
25
39
  }));
26
- console.log('done');
27
- }
28
- exports.default = default_1;
40
+ };
29
41
  //# sourceMappingURL=testSetup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testSetup.js","sourceRoot":"","sources":["../../src/typed-routes/testSetup.ts"],"names":[],"mappings":";;AAAA,0CAAwC;AACxC,+BAA4B;AAE5B,yCAA2D;AAC3D,oEAAkF;AAElF,MAAM,QAAQ,GAAkC;IAC9C,KAAK,EAAE;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;QACpB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;QACrB,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI;QAClC,mCAAmC,EAAE,GAAG,EAAE,CAAC,IAAI;QAC/C,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,6BAA6B,EAAE,GAAG,EAAE,CAAC,IAAI;QACzC,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAI;QAC1C,iCAAiC,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7C,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI;KACjC;CACF,CAAC;AAEa,KAAK;IAClB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAA,wCAA6B,EAAC,IAAA,+BAAe,EAAC,KAAK,CAAC,CAAC,CAAC;QAEvE,OAAO,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrF,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAVD,4BAUC","sourcesContent":["import { writeFile } from 'fs/promises';\nimport { join } from 'path';\n\nimport { getTypedRoutesDeclarationFile } from './generate';\nimport { inMemoryContext, MemoryContext } from '../testing-library/context-stubs';\n\nconst fixtures: Record<string, MemoryContext> = {\n basic: {\n '/apple': () => null,\n '/banana': () => null,\n '/colors/[color]': () => null,\n '/animals/[...animal]': () => null,\n '/mix/[fruit]/[color]/[...animals]': () => null,\n '/(group)/static': () => null,\n '/(group)/(a,b)/folder/index': () => null,\n '/(group)/(a,b)/folder/[slug]': () => null,\n '/(group)/(a,b)/folder/[...slug]': () => null,\n '/(c)/folder/[slug]': () => null,\n },\n};\n\nexport default async function () {\n await Promise.all(\n Object.entries(fixtures).map(async ([key, value]) => {\n const template = getTypedRoutesDeclarationFile(inMemoryContext(value));\n\n return writeFile(join(__dirname, '/__tests__/fixtures/', key + '.d.ts'), template);\n })\n );\n\n console.log('done');\n}\n"]}
1
+ {"version":3,"file":"testSetup.js","sourceRoot":"","sources":["../../src/typed-routes/testSetup.ts"],"names":[],"mappings":";;AAAA,0CAAwC;AACxC,+BAA4B;AAE5B,yCAAiG;AACjG,oEAAkF;AAElF,MAAM,QAAQ,GAGV;IACF,OAAO,EAAE;QACP,OAAO,EAAE;YACP,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;YACpB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;YACrB,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;YAC7B,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI;YAClC,mCAAmC,EAAE,GAAG,EAAE,CAAC,IAAI;YAC/C,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;YAC7B,6BAA6B,EAAE,GAAG,EAAE,CAAC,IAAI;YACzC,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAI;YAC1C,iCAAiC,EAAE,GAAG,EAAE,CAAC,IAAI;YAC7C,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI;SACjC;KACF;IACD,aAAa,EAAE;QACb,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;QACrC,OAAO,EAAE;YACP,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;YAC7B,6BAA6B,EAAE,GAAG,EAAE,CAAC,IAAI;YACzC,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAI;YAC1C,iCAAiC,EAAE,GAAG,EAAE,CAAC,IAAI;SAC9C;KACF;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG;IACf,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAA,wCAA6B,EAAC,IAAA,+BAAe,EAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAC7E,GAAG,KAAK,CAAC,OAAO;YAChB,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;QAEH,OAAO,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrF,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { writeFile } from 'fs/promises';\nimport { join } from 'path';\n\nimport { getTypedRoutesDeclarationFile, GetTypedRoutesDeclarationFileOptions } from './generate';\nimport { inMemoryContext, MemoryContext } from '../testing-library/context-stubs';\n\nconst fixtures: Record<\n string,\n { context: MemoryContext; options?: GetTypedRoutesDeclarationFileOptions }\n> = {\n default: {\n context: {\n '/apple': () => null,\n '/banana': () => null,\n '/colors/[color]': () => null,\n '/animals/[...animal]': () => null,\n '/mix/[fruit]/[color]/[...animals]': () => null,\n '/(group)/static': () => null,\n '/(group)/(a,b)/folder/index': () => null,\n '/(group)/(a,b)/folder/[slug]': () => null,\n '/(group)/(a,b)/folder/[...slug]': () => null,\n '/(c)/folder/[slug]': () => null,\n },\n },\n partialGroups: {\n options: { partialTypedGroups: true },\n context: {\n '/(group)/static': () => null,\n '/(group)/(a,b)/folder/index': () => null,\n '/(group)/(a,b)/folder/[slug]': () => null,\n '/(group)/(a,b)/folder/[...slug]': () => null,\n },\n },\n};\n\nmodule.exports = function () {\n return Promise.all(\n Object.entries(fixtures).map(async ([key, value]) => {\n const template = getTypedRoutesDeclarationFile(inMemoryContext(value.context), {\n ...value.options,\n testIgnoreComments: true,\n });\n\n return writeFile(join(__dirname, '/__tests__/fixtures/', key + '.d.ts'), template);\n })\n );\n};\n"]}
@@ -1,27 +1,3 @@
1
- /**
2
- * @hidden
3
- */
4
- type HasTypedRoutes = ExpoRouter.__routes extends {
5
- StaticRoutes: string;
6
- } ? true : false;
7
- /**
8
- * @hidden
9
- */
10
- export type StaticRoutes = ExpoRouter.__routes extends {
11
- StaticRoutes: string;
12
- } ? ExpoRouter.__routes['StaticRoutes'] : string;
13
- /**
14
- * @hidden
15
- */
16
- export type DynamicRoutes<T extends string> = ExpoRouter.__routes<T> extends {
17
- DynamicRoutes: any;
18
- } ? T extends ExpoRouter.__routes<infer _>['DynamicRoutes'] ? T : never : string;
19
- /**
20
- * @hidden
21
- */
22
- export type DynamicRouteTemplate = ExpoRouter.__routes extends {
23
- DynamicRouteTemplate: string;
24
- } ? ExpoRouter.__routes['DynamicRouteTemplate'] : string;
25
1
  /**
26
2
  * The main routing type for Expo Router.
27
3
  *
@@ -29,70 +5,54 @@ export type DynamicRouteTemplate = ExpoRouter.__routes extends {
29
5
  * @hidden
30
6
  */
31
7
  export declare namespace ExpoRouter {
32
- interface __routes<T extends string = string> extends Record<string, unknown> {
8
+ interface __routes {
33
9
  }
34
10
  }
35
- /**
36
- * @hidden
37
- */
38
- export type Routes = DynamicRouteTemplate | AllUngroupedRoutes<StaticRoutes>;
39
- /**
40
- * The main routing type for Expo Router. Includes all available routes with strongly typed parameters.
11
+ export type RelativePathString = `./${string}` | `../${string}` | '..';
12
+ export type SearchOrHash = `?${string}` | `#${string}`;
13
+ export type ExternalPathString = `${string}:${string}` | `//${string}`;
14
+ export type Route = Exclude<Extract<Href, object>['pathname'], // Use the HrefObject, as it doesn't have query params
15
+ // Use the HrefObject, as it doesn't have query params
16
+ RelativePathString | ExternalPathString>;
17
+ /**
18
+ * The main routing type for Expo Router. It includes all available routes with strongly
19
+ * typed parameters. It can either be:
20
+ * - **string**: A full path like `/profile/settings` or a relative path like `../settings`.
21
+ * - **object**: An object with a `pathname` and optional `params`. The `pathname` can be
22
+ * a full path like `/profile/settings` or a relative path like `../settings`.
23
+ * The params can be an object of key-value pairs.
41
24
  *
42
25
  * A Href can either be a string or an object.
43
- *
44
- * Href accepts an optional T parameter to correctly type dynamic routes string.
45
- *
46
- * For example: Without the generic the route `/folder/[slug]` will be typed as `/folder/${string}`,
47
- * which is incorrect as `/folder/apple/orange` would be valid. But by passing desired route as a generic `Href<'/folder/apple'>`,
48
- * it will validate against this edge case.
49
- *
50
- */
51
- export type Href<T extends string | object = {
52
- __branded__: any;
53
- }> = GeneratedHref<T>;
54
- /**
55
- * @hidden
56
- */
57
- type GeneratedHref<T extends string | object> = StaticRouteToHrefString<AllUngroupedRoutes<StaticRoutes> | RelativePathString | ExternalPathString> | StaticRouteToHrefObject<AllUngroupedRoutes<StaticRoutes> | RelativePathString | ExternalPathString> | DynamicRouteString<T> | DynamicTemplateToHrefObject<DynamicRouteTemplate>;
58
- /**
59
- * Converts a static route to a Href string type.
60
26
  */
61
- type StaticRouteToHrefString<T extends string = string> = T | `${T}${SearchOrHash}`;
62
- /**
63
- * Converts a static route to a Href object.
64
- */
65
- type StaticRouteToHrefObject<T extends string = string> = T extends any ? {
27
+ export type Href = ExpoRouter.__routes extends {
28
+ href: any;
29
+ } ? ExpoRouter.__routes['href'] : string | {
30
+ pathname: string;
31
+ params?: UnknownInputParams;
32
+ };
33
+ export type HrefInputParams = ExpoRouter.__routes extends {
34
+ hrefInputParams: any;
35
+ } ? ExpoRouter.__routes['hrefInputParams'] : {
36
+ pathname: string;
37
+ params?: UnknownInputParams;
38
+ };
39
+ export type HrefOutputParams = ExpoRouter.__routes extends {
40
+ hrefOutputParams: any;
41
+ } ? ExpoRouter.__routes['hrefOutputParams'] : {
42
+ pathname: string;
43
+ params?: UnknownOutputParams;
44
+ };
45
+ export type RouteInputParams<T extends Route> = Extract<Href, {
66
46
  pathname: T;
67
- params?: RouteParamInput<T> | never;
68
- } : never;
69
- /**
70
- * Converts a dynamic route template to a `Href` string type.
71
- */
72
- type DynamicRouteString<T extends string | object, P = DynamicRouteTemplate> = '__branded__' extends keyof T ? DynamicTemplateToHrefString<P> : T extends string ? DynamicRoutes<T> : never;
73
- /**
74
- * @hidden
75
- */
76
- export type DynamicTemplateToHrefString<Path> = Path extends `${infer PartA}/${infer PartB}` ? `${PartA extends `[${string}]` ? string : PartA}/${DynamicTemplateToHrefString<PartB>}` : Path extends `[${string}]` ? string : Path;
77
- /**
78
- * Converts a dynamic route object to a `Href` object.
79
- */
80
- type DynamicTemplateToHrefObject<T extends string> = T extends string ? {
47
+ }> extends never ? HrefInputParams extends infer H ? H extends Record<'pathname' | 'params', any> ? T extends H['pathname'] ? H['params'] : never : never : never : Extract<HrefInputParams, {
81
48
  pathname: T;
82
- params: RouteParamInput<T>;
83
- } : never;
84
- /****************
85
- * Route Utils *
86
- ****************/
87
- type RelativePathString = `./${string}` | `../${string}` | '..';
88
- type SearchOrHash = `?${string}` | `#${string}`;
89
- type ExternalPathString = `${string}:${string}`;
90
- /**
91
- * Given a route. Returns a union of both that route with and without the groups.
92
- *
93
- * The type is recursive and will provide a union of all possible routes.
94
- */
95
- type AllUngroupedRoutes<Path> = Path extends `(${infer PartA})/${infer PartB}` ? `(${PartA})/${AllUngroupedRoutes<PartB>}` | AllUngroupedRoutes<PartB> : Path;
49
+ }>['params'];
50
+ export type RouteOutputParams<T extends Route> = Extract<HrefOutputParams, {
51
+ pathname: T;
52
+ }> extends never ? HrefOutputParams extends infer H ? H extends Record<'pathname' | 'params', any> ? T extends H['pathname'] ? H['params'] : never : never : never : Extract<HrefOutputParams, {
53
+ pathname: T;
54
+ }>['params'];
55
+ export type RouteParams<T extends Route> = RouteOutputParams<T>;
96
56
  /**
97
57
  * Routes can have known inputs (e.g query params).
98
58
  * Unlike outputs, inputs can be `undefined` or `null`.
@@ -107,27 +67,6 @@ export type UnknownInputParams = Record<string, string | number | undefined | nu
107
67
  * @hidden
108
68
  */
109
69
  export type UnknownOutputParams = Record<string, string | string[]>;
110
- /**
111
- * Return the name of a route parameter
112
- * @example
113
- * ```
114
- * '[test]' -> 'test'
115
- * 'test' -> never
116
- * '[...test]' -> '...test'
117
- * ```
118
- */
119
- type IsParameter<Part> = Part extends `[${infer ParamName}]` ? ParamName : never;
120
- /**
121
- * Return a union of all raw parameter names. If there are no names return never.
122
- *
123
- * This differs from ParameterNames as it returns the `...` for catch all parameters.
124
- * @example
125
- * ```
126
- * /[test] -> 'test'
127
- * /[abc]/[...def] -> 'abc'|'...def'
128
- * ```
129
- */
130
- type ParameterNames<Path> = Path extends `${infer PartA}/${infer PartB}` ? PartA extends '.' ? ParameterNames<PartB> : IsParameter<PartA> | ParameterNames<PartB> : IsParameter<Path>;
131
70
  /**
132
71
  * Return only the RoutePart of a string. If the string has multiple parts return never
133
72
  *
@@ -142,47 +81,7 @@ type ParameterNames<Path> = Path extends `${infer PartA}/${infer PartB}` ? PartA
142
81
  *
143
82
  * @hidden
144
83
  */
145
- export type SingleRoutePart<S extends string> = S extends `${string}/${string}` ? never : S extends `${string}${SearchOrHash}` ? never : S extends '' ? never : S extends `(${string})` ? never : S extends `[${string}]` ? never : S;
146
- /**
147
- * Returns a Record of the routes parameters as strings and CatchAll parameters
148
- *
149
- * There are two versions, input and output, as you can input 'string | number' but
150
- * the output will always be 'string'
151
- *
152
- * @example
153
- * ```
154
- * /[id]/[...rest] -> { id: string, rest: string[] }
155
- * /no-params -> {}
156
- * ```
157
- */
158
- export type StrictRouteParamsInputs<Path> = {
159
- [Key in ParameterNames<Path> as Key extends `...${infer Name}` ? Name : Key]: Key extends `...${string}` ? (string | number)[] : string | number;
160
- };
161
- /**
162
- * Returns a Record of the routes parameters as strings and CatchAll parameters
163
- *
164
- * There are two versions, input and output, as you can input 'string | number' but
165
- * the output will always be 'string'
166
- *
167
- * @see {@link StrictRouteParamsInputs} for the input version
168
- *
169
- * @example
170
- * ```
171
- * /[id]/[...rest] -> { id: string, rest: string[] }
172
- * /no-params -> {}
173
- * ```
174
- */
175
- export type StrictRouteParamsOutput<Path> = {
176
- [Key in ParameterNames<Path> as Key extends `...${infer Name}` ? Name : Key]: Key extends `...${string}` ? string[] : string;
177
- };
178
- /**
179
- * @hidden
180
- */
181
- export type RouteParamInput<Path> = StrictRouteParamsInputs<Path> & UnknownInputParams;
182
- /**
183
- * @hidden
184
- */
185
- export type RouteParams<PathOrObject extends Routes | UnknownOutputParams, ExtraPathOrObject extends UnknownOutputParams = UnknownOutputParams> = PathOrObject extends string ? StrictRouteParamsOutput<PathOrObject> & ExtraPathOrObject : PathOrObject;
84
+ export type SingleRoutePart<S extends string | object> = S extends object ? never : S extends `${string}/${string}` ? never : S extends `${string}${SearchOrHash}` ? never : S extends '' ? never : S extends `(${string})` ? never : S extends `[${string}]` ? never : S;
186
85
  /**
187
86
  * @deprecated Use `RouteParams` or `StrictRouteParams` instead.
188
87
  *
@@ -192,6 +91,5 @@ export type SearchParams<T extends string = never> = RouteParams<T>;
192
91
  /**
193
92
  * @hidden
194
93
  */
195
- export type RouteSegments<PathOrStringArray extends string | string[]> = PathOrStringArray extends string[] ? PathOrStringArray : PathOrStringArray extends `/${infer PartA}` ? RouteSegments<PartA> : PathOrStringArray extends `${infer PartA}/${infer PartB}` ? [PartA, ...RouteSegments<PartB>] : HasTypedRoutes extends true ? [PathOrStringArray] : string[];
196
- export {};
94
+ export type RouteSegments<HrefOrSegments extends Route | string[]> = HrefOrSegments extends string[] ? HrefOrSegments : HrefOrSegments extends `.${string}` ? never : HrefOrSegments extends `` ? never : HrefOrSegments extends `/${infer PartA}` ? RouteSegments<PartA> : HrefOrSegments extends `${infer PartA}?${string}` ? RouteSegments<PartA> : HrefOrSegments extends `${infer PartA}#${string}` ? RouteSegments<PartA> : HrefOrSegments extends `${infer PartA}/${infer PartB}` ? [PartA, ...RouteSegments<PartB>] : [HrefOrSegments];
197
95
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/typed-routes/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/typed-routes/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/typed-routes/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * @hidden\n */\ntype HasTypedRoutes = ExpoRouter.__routes extends { StaticRoutes: string } ? true : false;\n\n/**\n * @hidden\n */\nexport type StaticRoutes = ExpoRouter.__routes extends { StaticRoutes: string }\n ? ExpoRouter.__routes['StaticRoutes']\n : string;\n\n/**\n * @hidden\n */\nexport type DynamicRoutes<T extends string> =\n ExpoRouter.__routes<T> extends {\n DynamicRoutes: any;\n }\n ? // eslint-disable-next-line @typescript-eslint/no-unused-vars\n T extends ExpoRouter.__routes<infer _>['DynamicRoutes']\n ? T\n : never\n : string;\n\n/**\n * @hidden\n */\nexport type DynamicRouteTemplate = ExpoRouter.__routes extends { DynamicRouteTemplate: string }\n ? ExpoRouter.__routes['DynamicRouteTemplate']\n : string;\n\n/**\n * The main routing type for Expo Router.\n *\n * @internal\n * @hidden\n */\nexport namespace ExpoRouter {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export interface __routes<T extends string = string> extends Record<string, unknown> {}\n}\n\n/**\n * @hidden\n */\nexport type Routes = DynamicRouteTemplate | AllUngroupedRoutes<StaticRoutes>;\n\n/**\n * The main routing type for Expo Router. Includes all available routes with strongly typed parameters.\n *\n * A Href can either be a string or an object.\n *\n * Href accepts an optional T parameter to correctly type dynamic routes string.\n *\n * For example: Without the generic the route `/folder/[slug]` will be typed as `/folder/${string}`,\n * which is incorrect as `/folder/apple/orange` would be valid. But by passing desired route as a generic `Href<'/folder/apple'>`,\n * it will validate against this edge case.\n *\n */\nexport type Href<T extends string | object = { __branded__: any }> = GeneratedHref<T>;\n\n/**\n * @hidden\n */\ntype GeneratedHref<T extends string | object> =\n | StaticRouteToHrefString<\n AllUngroupedRoutes<StaticRoutes> | RelativePathString | ExternalPathString\n >\n | StaticRouteToHrefObject<\n AllUngroupedRoutes<StaticRoutes> | RelativePathString | ExternalPathString\n >\n | DynamicRouteString<T>\n | DynamicTemplateToHrefObject<DynamicRouteTemplate>;\n\n/**\n * Converts a static route to a Href string type.\n */\ntype StaticRouteToHrefString<T extends string = string> = T | `${T}${SearchOrHash}`;\n\n/**\n * Converts a static route to a Href object.\n */\ntype StaticRouteToHrefObject<T extends string = string> = T extends any\n ? {\n pathname: T;\n params?: RouteParamInput<T> | never;\n }\n : never;\n\n/**\n * Converts a dynamic route template to a `Href` string type.\n */\ntype DynamicRouteString<\n T extends string | object,\n P = DynamicRouteTemplate,\n> = '__branded__' extends keyof T\n ? DynamicTemplateToHrefString<P>\n : T extends string\n ? DynamicRoutes<T>\n : never;\n\n/**\n * @hidden\n */\nexport type DynamicTemplateToHrefString<Path> = Path extends `${infer PartA}/${infer PartB}`\n ? // If the current segment (PartA) is dynamic, allow any string. This loop again with the next segment (PartB)\n `${PartA extends `[${string}]` ? string : PartA}/${DynamicTemplateToHrefString<PartB>}`\n : // Path is the last segment.\n Path extends `[${string}]`\n ? string\n : Path;\n\n/**\n * Converts a dynamic route object to a `Href` object.\n */\ntype DynamicTemplateToHrefObject<T extends string> = T extends string\n ? {\n pathname: T;\n params: RouteParamInput<T>;\n }\n : never;\n\n/****************\n * Route Utils *\n ****************/\n\ntype RelativePathString = `./${string}` | `../${string}` | '..';\ntype SearchOrHash = `?${string}` | `#${string}`;\ntype ExternalPathString = `${string}:${string}`;\n\n/**\n * Given a route. Returns a union of both that route with and without the groups.\n *\n * The type is recursive and will provide a union of all possible routes.\n */\ntype AllUngroupedRoutes<Path> = Path extends `(${infer PartA})/${infer PartB}`\n ? `(${PartA})/${AllUngroupedRoutes<PartB>}` | AllUngroupedRoutes<PartB>\n : Path;\n\n/**\n * Routes can have known inputs (e.g query params).\n * Unlike outputs, inputs can be `undefined` or `null`.\n *\n * @hidden\n */\nexport type UnknownInputParams = Record<\n string,\n string | number | undefined | null | (string | number)[]\n>;\n\n/**\n * Routes can have unknown outputs (e.g query params).\n * Unlike inputs, outputs can't be undefined or null.\n *\n * @hidden\n */\nexport type UnknownOutputParams = Record<string, string | string[]>;\n\n/**\n * Return the name of a route parameter\n * @example\n * ```\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n * ```\n */\ntype IsParameter<Part> = Part extends `[${infer ParamName}]` ? ParamName : never;\n\n/**\n * Return a union of all raw parameter names. If there are no names return never.\n *\n * This differs from ParameterNames as it returns the `...` for catch all parameters.\n * @example\n * ```\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n * ```\n */\ntype ParameterNames<Path> = Path extends `${infer PartA}/${infer PartB}`\n ? PartA extends '.' // Skip relative paths\n ? ParameterNames<PartB>\n : IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n/**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n *| ---------|------|\n *| 123 | 123 |\n *| /123/abc | never |\n *| 123?abc | never |\n *| ./123 | never |\n *| /123 | never |\n *| 123/../ | never |\n *\n * @hidden\n */\nexport type SingleRoutePart<S extends string> = S extends `${string}/${string}`\n ? never\n : S extends `${string}${SearchOrHash}`\n ? never\n : S extends ''\n ? never\n : S extends `(${string})`\n ? never\n : S extends `[${string}]`\n ? never\n : S;\n\n/**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * @example\n * ```\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n * ```\n */\nexport type StrictRouteParamsInputs<Path> = {\n [Key in ParameterNames<Path> as Key extends `...${infer Name}`\n ? Name\n : Key]: Key extends `...${string}` ? (string | number)[] : string | number;\n};\n\n/**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * @see {@link StrictRouteParamsInputs} for the input version\n *\n * @example\n * ```\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n * ```\n */\nexport type StrictRouteParamsOutput<Path> = {\n [Key in ParameterNames<Path> as Key extends `...${infer Name}`\n ? Name\n : Key]: Key extends `...${string}` ? string[] : string;\n};\n\n/**\n * @hidden\n */\nexport type RouteParamInput<Path> = StrictRouteParamsInputs<Path> & UnknownInputParams;\n\n/**\n * @hidden\n */\nexport type RouteParams<\n PathOrObject extends Routes | UnknownOutputParams,\n ExtraPathOrObject extends UnknownOutputParams = UnknownOutputParams,\n> = PathOrObject extends string\n ? StrictRouteParamsOutput<PathOrObject> & ExtraPathOrObject\n : PathOrObject;\n\n/**\n * @deprecated Use `RouteParams` or `StrictRouteParams` instead.\n *\n * @hidden\n */\nexport type SearchParams<T extends string = never> = RouteParams<T>;\n\n/**\n * @hidden\n */\nexport type RouteSegments<PathOrStringArray extends string | string[]> =\n PathOrStringArray extends string[]\n ? PathOrStringArray\n : PathOrStringArray extends `/${infer PartA}`\n ? RouteSegments<PartA>\n : PathOrStringArray extends `${infer PartA}/${infer PartB}`\n ? [PartA, ...RouteSegments<PartB>]\n : HasTypedRoutes extends true\n ? [PathOrStringArray]\n : string[];\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/typed-routes/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * The main routing type for Expo Router.\n *\n * @internal\n * @hidden\n */\nexport namespace ExpoRouter {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-object-type\n export interface __routes {}\n}\n\nexport type RelativePathString = `./${string}` | `../${string}` | '..';\nexport type SearchOrHash = `?${string}` | `#${string}`;\nexport type ExternalPathString = `${string}:${string}` | `//${string}`;\nexport type Route = Exclude<\n Extract<Href, object>['pathname'], // Use the HrefObject, as it doesn't have query params\n RelativePathString | ExternalPathString\n>;\n\n/**\n * The main routing type for Expo Router. It includes all available routes with strongly\n * typed parameters. It can either be:\n * - **string**: A full path like `/profile/settings` or a relative path like `../settings`.\n * - **object**: An object with a `pathname` and optional `params`. The `pathname` can be\n * a full path like `/profile/settings` or a relative path like `../settings`.\n * The params can be an object of key-value pairs.\n *\n * A Href can either be a string or an object.\n */\nexport type Href = ExpoRouter.__routes extends { href: any }\n ? ExpoRouter.__routes['href']\n : string | { pathname: string; params?: UnknownInputParams };\n\nexport type HrefInputParams = ExpoRouter.__routes extends { hrefInputParams: any }\n ? ExpoRouter.__routes['hrefInputParams']\n : { pathname: string; params?: UnknownInputParams };\n\nexport type HrefOutputParams = ExpoRouter.__routes extends { hrefOutputParams: any }\n ? ExpoRouter.__routes['hrefOutputParams']\n : { pathname: string; params?: UnknownOutputParams };\n\nexport type RouteInputParams<T extends Route> =\n Extract<Href, { pathname: T }> extends never\n ? HrefInputParams extends infer H\n ? H extends Record<'pathname' | 'params', any>\n ? T extends H['pathname']\n ? H['params']\n : never\n : never\n : never\n : Extract<HrefInputParams, { pathname: T }>['params'];\n\nexport type RouteOutputParams<T extends Route> =\n Extract<HrefOutputParams, { pathname: T }> extends never\n ? HrefOutputParams extends infer H\n ? H extends Record<'pathname' | 'params', any>\n ? T extends H['pathname']\n ? H['params']\n : never\n : never\n : never\n : Extract<HrefOutputParams, { pathname: T }>['params'];\n\nexport type RouteParams<T extends Route> = RouteOutputParams<T>;\n\n/**\n * Routes can have known inputs (e.g query params).\n * Unlike outputs, inputs can be `undefined` or `null`.\n *\n * @hidden\n */\nexport type UnknownInputParams = Record<\n string,\n string | number | undefined | null | (string | number)[]\n>;\n\n/**\n * Routes can have unknown outputs (e.g query params).\n * Unlike inputs, outputs can't be undefined or null.\n *\n * @hidden\n */\nexport type UnknownOutputParams = Record<string, string | string[]>;\n\n/**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n *| ---------|------|\n *| 123 | 123 |\n *| /123/abc | never |\n *| 123?abc | never |\n *| ./123 | never |\n *| /123 | never |\n *| 123/../ | never |\n *\n * @hidden\n */\nexport type SingleRoutePart<S extends string | object> = S extends object\n ? never\n : S extends `${string}/${string}`\n ? never\n : S extends `${string}${SearchOrHash}`\n ? never\n : S extends ''\n ? never\n : S extends `(${string})`\n ? never\n : S extends `[${string}]`\n ? never\n : S;\n\n/**\n * @deprecated Use `RouteParams` or `StrictRouteParams` instead.\n *\n * @hidden\n */\nexport type SearchParams<T extends string = never> = RouteParams<T>;\n\n/**\n * @hidden\n */\nexport type RouteSegments<HrefOrSegments extends Route | string[]> = HrefOrSegments extends string[]\n ? HrefOrSegments\n : HrefOrSegments extends `.${string}`\n ? never\n : HrefOrSegments extends ``\n ? never\n : HrefOrSegments extends `/${infer PartA}`\n ? RouteSegments<PartA>\n : HrefOrSegments extends `${infer PartA}?${string}`\n ? RouteSegments<PartA>\n : HrefOrSegments extends `${infer PartA}#${string}`\n ? RouteSegments<PartA>\n : HrefOrSegments extends `${infer PartA}/${infer PartB}`\n ? [PartA, ...RouteSegments<PartB>]\n : [HrefOrSegments];\n"]}
package/build/types.d.ts CHANGED
@@ -15,11 +15,44 @@ export interface RequireContext {
15
15
  * The list of input keys will become optional, everything else will remain the same.
16
16
  */
17
17
  export type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
18
+ /**
19
+ * Created by using a special file called `+native-intent.tsx` at the top-level of your
20
+ * project's **app** directory. It exports `redirectSystemPath` or `legacy_subscribe` functions,
21
+ * both methods designed to handle URL/path processing.
22
+ *
23
+ * Useful for re-writing URLs to correctly target a route when unique/referred URLs
24
+ * are incoming from third-party providers or stale URLs from previous versions.
25
+ *
26
+ * @see For more information on how to use `NativeIntent`, see [Customizing links](/router/advanced/native-intent/).
27
+ */
18
28
  export type NativeIntent = {
29
+ /**
30
+ * A special method used to process URLs in native apps. When invoked, it receives an
31
+ * `options` object with the following properties:
32
+ * - **path**: represents the URL or path undergoing processing.
33
+ * - **initial**: a boolean indicating whether the path is the app's initial URL.
34
+ *
35
+ * It's return value should either be a `string` or a `Promise<string>`.
36
+ * Note that throwing errors within this method may result in app crashes. It's recommended to
37
+ * wrap your code inside a `try/catch` block and utilize `.catch()` when appropriate.
38
+ *
39
+ * @see For usage information, see [Redirecting system paths](/router/advanced/native-intent/#redirectsystempath).
40
+ */
19
41
  redirectSystemPath?: (event: {
20
42
  path: string;
21
43
  initial: boolean;
22
44
  }) => Promise<string> | string;
45
+ /**
46
+ * > **warning** Experimentally available in SDK 52.
47
+ *
48
+ * Useful as an alternative API when a third-party provider doesn't support Expo Router
49
+ * but has support for React Navigation via `Linking.subscribe()` for existing projects.
50
+ *
51
+ * Using this API is not recommended for newer projects or integrations since it is
52
+ * incompatible with Server Side Routing and
53
+ * [Static Rendering](/router/reference/static-rendering/), and can become challenging to manage while offline or in a low network environment.
54
+ *
55
+ */
23
56
  legacy_subscribe?: (listener: (url: string) => void) => undefined | void | (() => void);
24
57
  };
25
58
  export type * from './typed-routes/types';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,IAAI,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACnB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjF,MAAM,MAAM,YAAY,GAAG;IACzB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7F,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CACzF,CAAC;AAEF,mBAAmB,sBAAsB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,IAAI,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACnB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjF;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7F;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CACzF,CAAC;AAEF,mBAAmB,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["// TODO: Use the global type\n/**\n * @hidden\n */\nexport interface RequireContext {\n /** Return the keys that can be resolved. */\n keys(): string[];\n (id: string): any;\n <T>(id: string): T;\n /** **Unimplemented:** Return the module identifier for a user request. */\n resolve(id: string): string;\n /** **Unimplemented:** Readable identifier for the context module. */\n id: string;\n}\n\n/**\n * The list of input keys will become optional, everything else will remain the same.\n */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport type NativeIntent = {\n redirectSystemPath?: (event: { path: string; initial: boolean }) => Promise<string> | string;\n legacy_subscribe?: (listener: (url: string) => void) => undefined | void | (() => void);\n};\n\nexport type * from './typed-routes/types';\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["// TODO: Use the global type\n/**\n * @hidden\n */\nexport interface RequireContext {\n /** Return the keys that can be resolved. */\n keys(): string[];\n (id: string): any;\n <T>(id: string): T;\n /** **Unimplemented:** Return the module identifier for a user request. */\n resolve(id: string): string;\n /** **Unimplemented:** Readable identifier for the context module. */\n id: string;\n}\n\n/**\n * The list of input keys will become optional, everything else will remain the same.\n */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/**\n * Created by using a special file called `+native-intent.tsx` at the top-level of your\n * project's **app** directory. It exports `redirectSystemPath` or `legacy_subscribe` functions,\n * both methods designed to handle URL/path processing.\n *\n * Useful for re-writing URLs to correctly target a route when unique/referred URLs\n * are incoming from third-party providers or stale URLs from previous versions.\n *\n * @see For more information on how to use `NativeIntent`, see [Customizing links](/router/advanced/native-intent/).\n */\nexport type NativeIntent = {\n /**\n * A special method used to process URLs in native apps. When invoked, it receives an\n * `options` object with the following properties:\n * - **path**: represents the URL or path undergoing processing.\n * - **initial**: a boolean indicating whether the path is the app's initial URL.\n *\n * It's return value should either be a `string` or a `Promise<string>`.\n * Note that throwing errors within this method may result in app crashes. It's recommended to\n * wrap your code inside a `try/catch` block and utilize `.catch()` when appropriate.\n *\n * @see For usage information, see [Redirecting system paths](/router/advanced/native-intent/#redirectsystempath).\n */\n redirectSystemPath?: (event: { path: string; initial: boolean }) => Promise<string> | string;\n /**\n * > **warning** Experimentally available in SDK 52.\n *\n * Useful as an alternative API when a third-party provider doesn't support Expo Router\n * but has support for React Navigation via `Linking.subscribe()` for existing projects.\n *\n * Using this API is not recommended for newer projects or integrations since it is\n * incompatible with Server Side Routing and\n * [Static Rendering](/router/reference/static-rendering/), and can become challenging to manage while offline or in a low network environment.\n *\n */\n legacy_subscribe?: (listener: (url: string) => void) => undefined | void | (() => void);\n};\n\nexport type * from './typed-routes/types';\n"]}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { BottomTabNavigationOptions } from '@react-navigation/bottom-tabs';
2
3
  import { DefaultNavigatorOptions, NavigationAction, NavigationProp, ParamListBase, TabActionHelpers, TabNavigationState, TabRouterOptions, useNavigationBuilder } from '@react-navigation/native';
3
4
  import { TriggerMap } from './common';
4
5
  export type ExpoTabsProps = ExpoTabsNavigatorOptions;
@@ -10,11 +11,17 @@ export type ExpoTabsNavigatorScreenOptions = {
10
11
  };
11
12
  export type ExpoTabsNavigatorOptions = DefaultNavigatorOptions<ParamListBase, string | undefined, TabNavigationState<ParamListBase>, ExpoTabsScreenOptions, TabNavigationEventMap, ExpoTabsNavigationProp<ParamListBase>> & Omit<TabRouterOptions, 'initialRouteName'> & ExpoTabsNavigatorScreenOptions;
12
13
  export type ExpoTabsNavigationProp<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList, NavigatorID extends string | undefined = undefined> = NavigationProp<ParamList, RouteName, NavigatorID, TabNavigationState<ParamListBase>, ExpoTabsScreenOptions, TabNavigationEventMap>;
13
- export type ExpoTabsScreenOptions = ExpoTabsNavigatorScreenOptions & {
14
+ /**
15
+ * @hidden
16
+ */
17
+ export type ExpoTabsScreenOptions = Pick<BottomTabNavigationOptions, 'title' | 'lazy' | 'freezeOnBlur'> & {
14
18
  params?: object;
15
19
  title: string;
16
20
  action: NavigationAction;
17
21
  };
22
+ /**
23
+ * @hidden
24
+ */
18
25
  export type TabNavigationEventMap = {
19
26
  /**
20
27
  * Event which fires on tapping on the tab in the tab bar.
@@ -30,10 +37,160 @@ export type TabNavigationEventMap = {
30
37
  data: undefined;
31
38
  };
32
39
  };
40
+ /**
41
+ * The React Navigation custom navigator.
42
+ *
43
+ * @see [`useNavigationBuilder`](https://reactnavigation.org/docs/custom-navigators/#usenavigationbuilder) hook from React Navigation for more information.
44
+ */
33
45
  export type TabsContextValue = ReturnType<typeof useNavigationBuilder<TabNavigationState<any>, TabRouterOptions, TabActionHelpers<ParamListBase>, ExpoTabsNavigatorScreenOptions, TabNavigationEventMap>>;
34
46
  export type TabContextValue = TabsDescriptor['options'];
35
47
  export declare const TabContext: import("react").Context<ExpoTabsNavigatorScreenOptions>;
48
+ /**
49
+ * @hidden
50
+ */
36
51
  export declare const TabTriggerMapContext: import("react").Context<TriggerMap>;
52
+ /**
53
+ * @hidden
54
+ */
55
+ export declare const TabsDescriptorsContext: import("react").Context<Record<string, import("@react-navigation/native").Descriptor<ExpoTabsNavigatorScreenOptions, Omit<{
56
+ dispatch(action: Readonly<{
57
+ type: string;
58
+ payload?: object | undefined;
59
+ source?: string | undefined;
60
+ target?: string | undefined;
61
+ }> | ((state: Readonly<TabNavigationState<any>>) => Readonly<{
62
+ type: string;
63
+ payload?: object | undefined;
64
+ source?: string | undefined;
65
+ target?: string | undefined;
66
+ }>)): void;
67
+ navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
68
+ navigate<RouteName_1 extends string>(options: {
69
+ name: string;
70
+ params: object | undefined;
71
+ path?: string | undefined;
72
+ merge?: boolean | undefined;
73
+ }): void;
74
+ navigateDeprecated<RouteName_2 extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
75
+ navigateDeprecated<RouteName_3 extends string>(options: {
76
+ name: string;
77
+ params: object | undefined;
78
+ merge?: boolean | undefined;
79
+ }): void;
80
+ preload<RouteName_4 extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
81
+ reset(state: TabNavigationState<any> | import("@react-navigation/native").PartialState<TabNavigationState<any>>): void;
82
+ goBack(): void;
83
+ isFocused(): boolean;
84
+ canGoBack(): boolean;
85
+ getId(): string | undefined;
86
+ getParent<T = import("@react-navigation/native").NavigationHelpers<ParamListBase, {}> | undefined>(id?: string | undefined): T;
87
+ getState(): TabNavigationState<any>;
88
+ setStateForNextRouteNamesChange(state: TabNavigationState<any> | import("@react-navigation/native").PartialState<TabNavigationState<any>>): void;
89
+ } & import("@react-navigation/native").PrivateValueStore<[ParamListBase, unknown, unknown]>, "getParent"> & {
90
+ getParent<T_1 = NavigationProp<ParamListBase, string, undefined, Readonly<{
91
+ key: string;
92
+ index: number;
93
+ routeNames: string[];
94
+ history?: unknown[] | undefined;
95
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
96
+ type: string;
97
+ stale: false;
98
+ }>, {}, {}> | undefined>(id?: string | undefined): T_1;
99
+ setParams(params: Partial<object | undefined>): void;
100
+ setOptions(options: Partial<ExpoTabsNavigatorScreenOptions>): void;
101
+ } & import("@react-navigation/native").EventConsumer<TabNavigationEventMap & import("@react-navigation/native").EventMapCore<TabNavigationState<any>>> & import("@react-navigation/native").PrivateValueStore<[ParamListBase, string, TabNavigationEventMap]> & TabActionHelpers<ParamListBase>, import("@react-navigation/native").RouteProp<ParamListBase, string>>>>;
102
+ /**
103
+ * @hidden
104
+ */
105
+ export declare const TabsNavigatorContext: import("react").Context<({
106
+ dispatch(action: Readonly<{
107
+ type: string;
108
+ payload?: object | undefined;
109
+ source?: string | undefined;
110
+ target?: string | undefined;
111
+ }> | ((state: Readonly<Readonly<{
112
+ key: string;
113
+ index: number;
114
+ routeNames: string[];
115
+ history?: unknown[] | undefined;
116
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
117
+ type: string;
118
+ stale: false;
119
+ }>>) => Readonly<{
120
+ type: string;
121
+ payload?: object | undefined;
122
+ source?: string | undefined;
123
+ target?: string | undefined;
124
+ }>)): void;
125
+ navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
126
+ navigate<RouteName_1 extends string>(options: {
127
+ name: string;
128
+ params: object | undefined;
129
+ path?: string | undefined;
130
+ merge?: boolean | undefined;
131
+ }): void;
132
+ navigateDeprecated<RouteName_2 extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
133
+ navigateDeprecated<RouteName_3 extends string>(options: {
134
+ name: string;
135
+ params: object | undefined;
136
+ merge?: boolean | undefined;
137
+ }): void;
138
+ preload<RouteName_4 extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
139
+ reset(state: Readonly<{
140
+ key: string;
141
+ index: number;
142
+ routeNames: string[];
143
+ history?: unknown[] | undefined;
144
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
145
+ type: string;
146
+ stale: false;
147
+ }> | import("@react-navigation/native").PartialState<Readonly<{
148
+ key: string;
149
+ index: number;
150
+ routeNames: string[];
151
+ history?: unknown[] | undefined;
152
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
153
+ type: string;
154
+ stale: false;
155
+ }>>): void;
156
+ goBack(): void;
157
+ isFocused(): boolean;
158
+ canGoBack(): boolean;
159
+ getId(): string | undefined;
160
+ getParent<T = import("@react-navigation/native").NavigationHelpers<ParamListBase, {}> | undefined>(id?: string | undefined): T;
161
+ getState(): Readonly<{
162
+ key: string;
163
+ index: number;
164
+ routeNames: string[];
165
+ history?: unknown[] | undefined;
166
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
167
+ type: string;
168
+ stale: false;
169
+ }>;
170
+ setStateForNextRouteNamesChange(state: Readonly<{
171
+ key: string;
172
+ index: number;
173
+ routeNames: string[];
174
+ history?: unknown[] | undefined;
175
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
176
+ type: string;
177
+ stale: false;
178
+ }> | import("@react-navigation/native").PartialState<Readonly<{
179
+ key: string;
180
+ index: number;
181
+ routeNames: string[];
182
+ history?: unknown[] | undefined;
183
+ routes: import("@react-navigation/native").NavigationRoute<ParamListBase, string>[];
184
+ type: string;
185
+ stale: false;
186
+ }>>): void;
187
+ } & import("@react-navigation/native").PrivateValueStore<[ParamListBase, unknown, unknown]> & import("@react-navigation/native").EventEmitter<TabNavigationEventMap> & {
188
+ setParams<RouteName_5 extends string>(params: Partial<object | undefined>): void;
189
+ } & TabActionHelpers<ParamListBase>) | null>;
190
+ /**
191
+ * @hidden
192
+ */
193
+ export declare const TabsStateContext: import("react").Context<TabNavigationState<any>>;
37
194
  export type Route = TabNavigationState<ParamListBase>['routes'][number];
38
195
  export type TabsDescriptor = TabsContextValue['descriptors'][number];
39
196
  //# sourceMappingURL=TabContext.d.ts.map