@react-navigation/core 7.4.0 → 7.6.0

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 (38) hide show
  1. package/lib/commonjs/deepFreeze.js +6 -3
  2. package/lib/commonjs/deepFreeze.js.map +1 -1
  3. package/lib/commonjs/package.json +1 -0
  4. package/lib/commonjs/types.js.map +1 -1
  5. package/lib/commonjs/useNavigationBuilder.js +11 -9
  6. package/lib/commonjs/useNavigationBuilder.js.map +1 -1
  7. package/lib/module/deepFreeze.js +6 -3
  8. package/lib/module/deepFreeze.js.map +1 -1
  9. package/lib/module/package.json +1 -0
  10. package/lib/module/types.js.map +1 -1
  11. package/lib/module/useNavigationBuilder.js +11 -9
  12. package/lib/module/useNavigationBuilder.js.map +1 -1
  13. package/lib/typescript/commonjs/src/deepFreeze.d.ts.map +1 -1
  14. package/lib/typescript/commonjs/src/types.d.ts +36 -27
  15. package/lib/typescript/commonjs/src/types.d.ts.map +1 -1
  16. package/lib/typescript/commonjs/src/useDescriptors.d.ts +24 -18
  17. package/lib/typescript/commonjs/src/useDescriptors.d.ts.map +1 -1
  18. package/lib/typescript/commonjs/src/useNavigationBuilder.d.ts +37 -28
  19. package/lib/typescript/commonjs/src/useNavigationBuilder.d.ts.map +1 -1
  20. package/lib/typescript/commonjs/src/useNavigationCache.d.ts +12 -9
  21. package/lib/typescript/commonjs/src/useNavigationCache.d.ts.map +1 -1
  22. package/lib/typescript/commonjs/src/useNavigationHelpers.d.ts +12 -9
  23. package/lib/typescript/commonjs/src/useNavigationHelpers.d.ts.map +1 -1
  24. package/lib/typescript/module/src/deepFreeze.d.ts.map +1 -1
  25. package/lib/typescript/module/src/types.d.ts +36 -27
  26. package/lib/typescript/module/src/types.d.ts.map +1 -1
  27. package/lib/typescript/module/src/useDescriptors.d.ts +24 -18
  28. package/lib/typescript/module/src/useDescriptors.d.ts.map +1 -1
  29. package/lib/typescript/module/src/useNavigationBuilder.d.ts +37 -28
  30. package/lib/typescript/module/src/useNavigationBuilder.d.ts.map +1 -1
  31. package/lib/typescript/module/src/useNavigationCache.d.ts +12 -9
  32. package/lib/typescript/module/src/useNavigationCache.d.ts.map +1 -1
  33. package/lib/typescript/module/src/useNavigationHelpers.d.ts +12 -9
  34. package/lib/typescript/module/src/useNavigationHelpers.d.ts.map +1 -1
  35. package/package.json +4 -4
  36. package/src/deepFreeze.tsx +6 -3
  37. package/src/types.tsx +53 -47
  38. package/src/useNavigationBuilder.tsx +24 -21
@@ -8,7 +8,7 @@ import { type DefaultNavigatorOptions, type EventMapCore, PrivateValueStore } fr
8
8
  * @param options Options object containing `children` and additional options for the router.
9
9
  * @returns An object containing `state`, `navigation`, `descriptors` objects.
10
10
  */
11
- export declare function useNavigationBuilder<State extends NavigationState, RouterOptions extends DefaultRouterOptions, ActionHelpers extends Record<string, (...args: any) => void>, ScreenOptions extends {}, EventMap extends Record<string, any>>(createRouter: RouterFactory<State, any, RouterOptions>, options: DefaultNavigatorOptions<ParamListBase, string | undefined, State, ScreenOptions, EventMap, any> & RouterOptions): {
11
+ export declare function useNavigationBuilder<State extends NavigationState, RouterOptions extends DefaultRouterOptions, ActionHelpers extends Record<string, (...args: any) => void>, ScreenOptions extends {}, EventMap extends Record<string, any>>(createRouter: RouterFactory<State, NavigationAction, RouterOptions>, options: DefaultNavigatorOptions<ParamListBase, string | undefined, State, ScreenOptions, EventMap, any> & RouterOptions): {
12
12
  state: State;
13
13
  navigation: {
14
14
  dispatch(action: Readonly<{
@@ -25,21 +25,24 @@ export declare function useNavigationBuilder<State extends NavigationState, Rout
25
25
  type: string;
26
26
  stale: false;
27
27
  }>>) => NavigationAction)): void;
28
- navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined] | [screen: string, params: object | undefined, merge: boolean]): void;
29
- navigate<RouteName extends string>(options: {
30
- name: string;
28
+ navigate<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined, options?: {
29
+ merge?: boolean;
30
+ pop?: boolean;
31
+ } | undefined] : never): void;
32
+ navigate<RouteName extends string>(options: RouteName extends unknown ? {
33
+ name: RouteName;
31
34
  params: object | undefined;
32
35
  path?: string;
33
36
  merge?: boolean;
34
37
  pop?: boolean;
35
- }): void;
36
- navigateDeprecated<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
37
- navigateDeprecated<RouteName extends string>(options: {
38
- name: string;
38
+ } : never): void;
39
+ navigateDeprecated<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
40
+ navigateDeprecated<RouteName extends string>(options: RouteName extends unknown ? {
41
+ name: RouteName;
39
42
  params: object | undefined;
40
43
  merge?: boolean;
41
- }): void;
42
- preload<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
44
+ } : never): void;
45
+ preload<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
43
46
  reset(state: Readonly<{
44
47
  key: string;
45
48
  index: number;
@@ -98,21 +101,24 @@ export declare function useNavigationBuilder<State extends NavigationState, Rout
98
101
  source?: string;
99
102
  target?: string;
100
103
  }> | ((state: Readonly<State>) => NavigationAction)): void;
101
- navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined] | [screen: string, params: object | undefined, merge: boolean]): void;
102
- navigate<RouteName extends string>(options: {
103
- name: string;
104
+ navigate<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined, options?: {
105
+ merge?: boolean;
106
+ pop?: boolean;
107
+ } | undefined] : never): void;
108
+ navigate<RouteName extends string>(options: RouteName extends unknown ? {
109
+ name: RouteName;
104
110
  params: object | undefined;
105
111
  path?: string;
106
112
  merge?: boolean;
107
113
  pop?: boolean;
108
- }): void;
109
- navigateDeprecated<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
110
- navigateDeprecated<RouteName extends string>(options: {
111
- name: string;
114
+ } : never): void;
115
+ navigateDeprecated<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
116
+ navigateDeprecated<RouteName extends string>(options: RouteName extends unknown ? {
117
+ name: RouteName;
112
118
  params: object | undefined;
113
119
  merge?: boolean;
114
- }): void;
115
- preload<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
120
+ } : never): void;
121
+ preload<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
116
122
  reset(state: State | PartialState<State>): void;
117
123
  goBack(): void;
118
124
  isFocused(): boolean;
@@ -141,21 +147,24 @@ export declare function useNavigationBuilder<State extends NavigationState, Rout
141
147
  source?: string;
142
148
  target?: string;
143
149
  }> | ((state: Readonly<State>) => NavigationAction)): void;
144
- navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined] | [screen: string, params: object | undefined, merge: boolean]): void;
145
- navigate<RouteName extends string>(options: {
146
- name: string;
150
+ navigate<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined, options?: {
151
+ merge?: boolean;
152
+ pop?: boolean;
153
+ } | undefined] : never): void;
154
+ navigate<RouteName extends string>(options: RouteName extends unknown ? {
155
+ name: RouteName;
147
156
  params: object | undefined;
148
157
  path?: string;
149
158
  merge?: boolean;
150
159
  pop?: boolean;
151
- }): void;
152
- navigateDeprecated<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
153
- navigateDeprecated<RouteName extends string>(options: {
154
- name: string;
160
+ } : never): void;
161
+ navigateDeprecated<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
162
+ navigateDeprecated<RouteName extends string>(options: RouteName extends unknown ? {
163
+ name: RouteName;
155
164
  params: object | undefined;
156
165
  merge?: boolean;
157
- }): void;
158
- preload<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
166
+ } : never): void;
167
+ preload<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
159
168
  reset(state: State | PartialState<State>): void;
160
169
  goBack(): void;
161
170
  isFocused(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/useNavigationBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EAIjB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,YAAY,EAEjB,iBAAiB,EAElB,MAAM,SAAS,CAAC;AAkNjB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,oBAAoB,EAC1C,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,EAC5D,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEpC,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,CAAC,EACtD,OAAO,EAAE,uBAAuB,CAC9B,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,KAAK,EACL,aAAa,EACb,QAAQ,EACR,GAAG,CACJ,GACC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAygBhB"}
1
+ {"version":3,"file":"useNavigationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/useNavigationBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EAIjB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,YAAY,EAEjB,iBAAiB,EAElB,MAAM,SAAS,CAAC;AAkNjB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,oBAAoB,EAC1C,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,EAC5D,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEpC,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,EACnE,OAAO,EAAE,uBAAuB,CAC9B,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,KAAK,EACL,aAAa,EACb,QAAQ,EACR,GAAG,CACJ,GACC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4gBhB"}
@@ -24,21 +24,24 @@ export declare function useNavigationCache<State extends NavigationState, Screen
24
24
  source?: string;
25
25
  target?: string;
26
26
  }> | ((state: Readonly<State>) => NavigationAction)): void;
27
- navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined] | [screen: string, params: object | undefined, merge: boolean]): void;
28
- navigate<RouteName extends string>(options: {
29
- name: string;
27
+ navigate<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined, options?: {
28
+ merge?: boolean;
29
+ pop?: boolean;
30
+ } | undefined] : never): void;
31
+ navigate<RouteName extends string>(options: RouteName extends unknown ? {
32
+ name: RouteName;
30
33
  params: object | undefined;
31
34
  path?: string;
32
35
  merge?: boolean;
33
36
  pop?: boolean;
34
- }): void;
35
- navigateDeprecated<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
36
- navigateDeprecated<RouteName extends string>(options: {
37
- name: string;
37
+ } : never): void;
38
+ navigateDeprecated<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
39
+ navigateDeprecated<RouteName extends string>(options: RouteName extends unknown ? {
40
+ name: RouteName;
38
41
  params: object | undefined;
39
42
  merge?: boolean;
40
- }): void;
41
- preload<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
43
+ } : never): void;
44
+ preload<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
42
45
  reset(state: State | import("@react-navigation/routers").PartialState<State>): void;
43
46
  goBack(): void;
44
47
  isFocused(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigationCache.d.ts","sourceRoot":"","sources":["../../../../src/useNavigationCache.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,KAAK,OAAO,CACV,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC;IACF,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,GAC1C,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,UAAU,EAAE,CACV,EAAE,EAAE,CACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KACnC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAC/B,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxC,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;CAC3C,CAAC;AAEF,KAAK,cAAc,CACjB,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC,cAAc,CAChB,aAAa,EACb,MAAM,EACN,MAAM,GAAG,SAAS,EAClB,KAAK,EACL,aAAa,EACb,QAAQ,CACT,CAAC;AAEF,KAAK,eAAe,CAClB,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAChD,EACA,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,MAAM,EACN,OAAO,GACR,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4KzC"}
1
+ {"version":3,"file":"useNavigationCache.d.ts","sourceRoot":"","sources":["../../../../src/useNavigationCache.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,KAAK,OAAO,CACV,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC;IACF,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,GAC1C,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,UAAU,EAAE,CACV,EAAE,EAAE,CACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KACnC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAC/B,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxC,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;CAC3C,CAAC;AAEF,KAAK,cAAc,CACjB,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC,cAAc,CAChB,aAAa,EACb,MAAM,EACN,MAAM,GAAG,SAAS,EAClB,KAAK,EACL,aAAa,EACb,QAAQ,CACT,CAAC;AAEF,KAAK,eAAe,CAClB,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,EAAE,EACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAChD,EACA,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,MAAM,EACN,OAAO,GACR,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4KzC"}
@@ -29,21 +29,24 @@ export declare function useNavigationHelpers<State extends NavigationState, Acti
29
29
  type: string;
30
30
  stale: false;
31
31
  }>>) => NavigationAction)): void;
32
- navigate<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined] | [screen: string, params: object | undefined, merge: boolean]): void;
33
- navigate<RouteName extends string>(options: {
34
- name: string;
32
+ navigate<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined, options?: {
33
+ merge?: boolean;
34
+ pop?: boolean;
35
+ } | undefined] : never): void;
36
+ navigate<RouteName extends string>(options: RouteName extends unknown ? {
37
+ name: RouteName;
35
38
  params: object | undefined;
36
39
  path?: string;
37
40
  merge?: boolean;
38
41
  pop?: boolean;
39
- }): void;
40
- navigateDeprecated<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
41
- navigateDeprecated<RouteName extends string>(options: {
42
- name: string;
42
+ } : never): void;
43
+ navigateDeprecated<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
44
+ navigateDeprecated<RouteName extends string>(options: RouteName extends unknown ? {
45
+ name: RouteName;
43
46
  params: object | undefined;
44
47
  merge?: boolean;
45
- }): void;
46
- preload<RouteName extends string>(...args: [screen: string] | [screen: string, params: object | undefined]): void;
48
+ } : never): void;
49
+ preload<RouteName extends string>(...args: RouteName extends unknown ? [screen: RouteName, params?: object | undefined] : never): void;
47
50
  reset(state: Readonly<{
48
51
  key: string;
49
52
  index: number;
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigationHelpers.d.ts","sourceRoot":"","sources":["../../../../src/useNavigationHelpers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,KAAK,OAAO,CAAC,KAAK,SAAS,eAAe,EAAE,MAAM,SAAS,gBAAgB,IAAI;IAC7E,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC;IAChD,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,OAAO,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAChD,MAAM,SAAS,gBAAgB,EAC/B,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,EACA,EAAE,EAAE,WAAW,EACf,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsFxB"}
1
+ {"version":3,"file":"useNavigationHelpers.d.ts","sourceRoot":"","sources":["../../../../src/useNavigationHelpers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,KAAK,OAAO,CAAC,KAAK,SAAS,eAAe,EAAE,MAAM,SAAS,gBAAgB,IAAI;IAC7E,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC;IAChD,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,OAAO,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,eAAe,EAC7B,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAChD,MAAM,SAAS,gBAAgB,EAC/B,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,EACA,EAAE,EAAE,WAAW,EACf,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsFxB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-navigation/core",
3
3
  "description": "Core utilities for building navigators",
4
- "version": "7.4.0",
4
+ "version": "7.6.0",
5
5
  "keywords": [
6
6
  "react",
7
7
  "react-native",
@@ -46,7 +46,7 @@
46
46
  "clean": "del lib"
47
47
  },
48
48
  "dependencies": {
49
- "@react-navigation/routers": "^7.2.0",
49
+ "@react-navigation/routers": "^7.3.0",
50
50
  "escape-string-regexp": "^4.0.0",
51
51
  "nanoid": "3.3.8",
52
52
  "query-string": "^7.1.3",
@@ -63,7 +63,7 @@
63
63
  "del-cli": "^5.1.0",
64
64
  "immer": "^10.0.3",
65
65
  "react": "18.3.1",
66
- "react-native-builder-bob": "^0.33.2",
66
+ "react-native-builder-bob": "^0.38.0",
67
67
  "react-test-renderer": "18.2.0",
68
68
  "typescript": "^5.5.2"
69
69
  },
@@ -95,5 +95,5 @@
95
95
  ]
96
96
  ]
97
97
  },
98
- "gitHead": "2dc0ec3eaca7aa010d9934cabaa64562b265271a"
98
+ "gitHead": "3f7e8f132c141c8a73ec5678e8bb37fbeb8283b4"
99
99
  }
@@ -23,10 +23,13 @@ export const deepFreeze = <T,>(object: T): Readonly<T> => {
23
23
 
24
24
  // Freeze properties before freezing self
25
25
  for (const key in object) {
26
- if (Object.getOwnPropertyDescriptor(object, key)?.configurable) {
27
- const value = object[key];
26
+ // Don't freeze objects in params since they are passed by the user
27
+ if (key !== 'params') {
28
+ if (Object.getOwnPropertyDescriptor(object, key)?.configurable) {
29
+ const value = object[key];
28
30
 
29
- deepFreeze(value);
31
+ deepFreeze(value);
32
+ }
30
33
  }
31
34
  }
32
35
 
package/src/types.tsx CHANGED
@@ -6,6 +6,7 @@ import type {
6
6
  ParamListBase,
7
7
  PartialState,
8
8
  Route,
9
+ Router,
9
10
  } from '@react-navigation/routers';
10
11
  import type * as React from 'react';
11
12
 
@@ -22,21 +23,6 @@ declare global {
22
23
 
23
24
  type Keyof<T extends {}> = Extract<keyof T, string>;
24
25
 
25
- type ScreenParamsPair<
26
- ParamList extends ParamListBase,
27
- RouteName extends keyof ParamList,
28
- > = {
29
- // First we use a mapped type to get an union of screen & params pairs
30
- // Then we pick the pair which matches the RouteName
31
- // Mapped type is used instead of just ParamList[RouteName]
32
- // Otherwise it'll result in union of all params leading to incorrect types
33
- [Screen in keyof ParamList]: undefined extends ParamList[Screen] // Params are either undefined or a union with undefined
34
- ?
35
- | [screen: Screen] // if the params are optional, we don't have to provide it
36
- | [screen: Screen, params: ParamList[Screen]]
37
- : [screen: Screen, params: ParamList[Screen]];
38
- }[RouteName];
39
-
40
26
  export type DefaultNavigatorOptions<
41
27
  ParamList extends ParamListBase,
42
28
  NavigatorID extends string | undefined,
@@ -108,11 +94,15 @@ export type DefaultNavigatorOptions<
108
94
  }) => React.ReactElement;
109
95
 
110
96
  /**
111
- A function returning a state, which may be set after modifying the routes name.
97
+ * A function returning overrides for the underlying router used by the navigator.
98
+ * The overrides will be shallow merged into the original router.
99
+ * It receives the original router as an argument to the function.
100
+ *
101
+ * This must be a pure function and cannot reference outside dynamic variables.
112
102
  */
113
- UNSTABLE_getStateForRouteNamesChange?: (
114
- state: NavigationState
115
- ) => PartialState<NavigationState> | undefined;
103
+ UNSTABLE_router?: <Action extends NavigationAction>(
104
+ original: Router<State, Action>
105
+ ) => Partial<Router<State, Action>>;
116
106
  } & (NavigatorID extends string
117
107
  ? {
118
108
  /**
@@ -256,16 +246,24 @@ type NavigationHelpersCommon<
256
246
  * @param [merge] Whether to merge the params onto the route.
257
247
  */
258
248
  navigate<RouteName extends keyof ParamList>(
259
- ...args: {
260
- [Screen in keyof ParamList]: undefined extends ParamList[Screen]
261
- ?
262
- | [screen: Screen]
263
- | [screen: Screen, params: ParamList[Screen]]
264
- | [screen: Screen, params: ParamList[Screen], merge: boolean]
265
- :
266
- | [screen: Screen, params: ParamList[Screen]]
267
- | [screen: Screen, params: ParamList[Screen], merge: boolean];
268
- }[RouteName]
249
+ ...args: // This condition allows us to iterate over a union type
250
+ // This is to avoid getting a union of all the params from `ParamList[RouteName]`,
251
+ // which will get our types all mixed up if a union RouteName is passed in.
252
+ RouteName extends unknown
253
+ ? // This condition checks if the params are optional,
254
+ // which means it's either undefined or a union with undefined
255
+ undefined extends ParamList[RouteName]
256
+ ? [
257
+ screen: RouteName,
258
+ params?: ParamList[RouteName],
259
+ options?: { merge?: boolean; pop?: boolean },
260
+ ]
261
+ : [
262
+ screen: RouteName,
263
+ params: ParamList[RouteName],
264
+ options?: { merge?: boolean; pop?: boolean },
265
+ ]
266
+ : never
269
267
  ): void;
270
268
 
271
269
  /**
@@ -278,15 +276,15 @@ type NavigationHelpersCommon<
278
276
  * @param [options.pop] Whether to pop routes in a stack to go back to the matching route.
279
277
  */
280
278
  navigate<RouteName extends keyof ParamList>(
281
- options: {
282
- [Screen in keyof ParamList]: {
283
- name: Screen;
284
- params: ParamList[Screen];
285
- path?: string;
286
- merge?: boolean;
287
- pop?: boolean;
288
- };
289
- }[RouteName]
279
+ options: RouteName extends unknown
280
+ ? {
281
+ name: RouteName;
282
+ params: ParamList[RouteName];
283
+ path?: string;
284
+ merge?: boolean;
285
+ pop?: boolean;
286
+ }
287
+ : never
290
288
  ): void;
291
289
 
292
290
  /**
@@ -298,7 +296,11 @@ type NavigationHelpersCommon<
298
296
  * @param [params] Params object for the route.
299
297
  */
300
298
  navigateDeprecated<RouteName extends keyof ParamList>(
301
- ...args: ScreenParamsPair<ParamList, RouteName>
299
+ ...args: RouteName extends unknown
300
+ ? undefined extends ParamList[RouteName]
301
+ ? [screen: RouteName, params?: ParamList[RouteName]]
302
+ : [screen: RouteName, params: ParamList[RouteName]]
303
+ : never
302
304
  ): void;
303
305
 
304
306
  /**
@@ -309,13 +311,13 @@ type NavigationHelpersCommon<
309
311
  * @param options Object with `name` for the route to navigate to, and a `params` object.
310
312
  */
311
313
  navigateDeprecated<RouteName extends keyof ParamList>(
312
- options: {
313
- [Screen in keyof ParamList]: {
314
- name: Screen;
315
- params: ParamList[Screen];
316
- merge?: boolean;
317
- };
318
- }[RouteName]
314
+ options: RouteName extends unknown
315
+ ? {
316
+ name: RouteName;
317
+ params: ParamList[RouteName];
318
+ merge?: boolean;
319
+ }
320
+ : never
319
321
  ): void;
320
322
 
321
323
  /**
@@ -325,7 +327,11 @@ type NavigationHelpersCommon<
325
327
  * @param [params] Params object for the route.
326
328
  */
327
329
  preload<RouteName extends keyof ParamList>(
328
- ...args: ScreenParamsPair<ParamList, RouteName>
330
+ ...args: RouteName extends unknown
331
+ ? undefined extends ParamList[RouteName]
332
+ ? [screen: RouteName, params?: ParamList[RouteName]]
333
+ : [screen: RouteName, params: ParamList[RouteName]]
334
+ : never
329
335
  ): void;
330
336
 
331
337
  /**
@@ -254,7 +254,7 @@ export function useNavigationBuilder<
254
254
  ScreenOptions extends {},
255
255
  EventMap extends Record<string, any>,
256
256
  >(
257
- createRouter: RouterFactory<State, any, RouterOptions>,
257
+ createRouter: RouterFactory<State, NavigationAction, RouterOptions>,
258
258
  options: DefaultNavigatorOptions<
259
259
  ParamListBase,
260
260
  string | undefined,
@@ -277,6 +277,7 @@ export function useNavigationBuilder<
277
277
  screenOptions,
278
278
  screenLayout,
279
279
  screenListeners,
280
+ UNSTABLE_router,
280
281
  ...rest
281
282
  } = options;
282
283
 
@@ -298,7 +299,18 @@ export function useNavigationBuilder<
298
299
  );
299
300
  }
300
301
 
301
- return createRouter(rest as unknown as RouterOptions);
302
+ const original = createRouter(rest as unknown as RouterOptions);
303
+
304
+ if (UNSTABLE_router != null) {
305
+ const overrides = UNSTABLE_router(original);
306
+
307
+ return {
308
+ ...original,
309
+ ...overrides,
310
+ };
311
+ }
312
+
313
+ return original;
302
314
  });
303
315
 
304
316
  const screens = routeConfigs.reduce<
@@ -488,26 +500,17 @@ export function useNavigationBuilder<
488
500
  !isArrayEqual(state.routeNames, routeNames) ||
489
501
  !isRecordEqual(routeKeyList, previousRouteKeyList)
490
502
  ) {
491
- const navigatorStateForNextRouteNamesChange =
492
- options.UNSTABLE_getStateForRouteNamesChange?.(state);
493
503
  // When the list of route names change, the router should handle it to remove invalid routes
494
- nextState = navigatorStateForNextRouteNamesChange
495
- ? // @ts-expect-error this is ok
496
- router.getRehydratedState(navigatorStateForNextRouteNamesChange, {
497
- routeNames,
498
- routeParamList,
499
- routeGetIdList,
500
- })
501
- : router.getStateForRouteNamesChange(state, {
502
- routeNames,
503
- routeParamList,
504
- routeGetIdList,
505
- routeKeyChanges: Object.keys(routeKeyList).filter(
506
- (name) =>
507
- name in previousRouteKeyList &&
508
- routeKeyList[name] !== previousRouteKeyList[name]
509
- ),
510
- });
504
+ nextState = router.getStateForRouteNamesChange(state, {
505
+ routeNames,
506
+ routeParamList,
507
+ routeGetIdList,
508
+ routeKeyChanges: Object.keys(routeKeyList).filter(
509
+ (name) =>
510
+ name in previousRouteKeyList &&
511
+ routeKeyList[name] !== previousRouteKeyList[name]
512
+ ),
513
+ });
511
514
  }
512
515
 
513
516
  const previousNestedParamsRef = React.useRef(route?.params);