@react-navigation/core 8.0.0-alpha.23 → 8.0.0-alpha.24

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 (60) hide show
  1. package/lib/module/NavigationBuilderContext.js.map +1 -1
  2. package/lib/module/StaticNavigation.js +1 -1
  3. package/lib/module/StaticNavigation.js.map +1 -1
  4. package/lib/module/createNavigatorFactory.js.map +1 -1
  5. package/lib/module/getPathFromState.js +87 -57
  6. package/lib/module/getPathFromState.js.map +1 -1
  7. package/lib/module/getStateFromPath.js +77 -46
  8. package/lib/module/getStateFromPath.js.map +1 -1
  9. package/lib/module/index.js.map +1 -1
  10. package/lib/module/types.js +13 -0
  11. package/lib/module/types.js.map +1 -1
  12. package/lib/module/useEventEmitter.js +4 -1
  13. package/lib/module/useEventEmitter.js.map +1 -1
  14. package/lib/module/useNavigationBuilder.js +1 -7
  15. package/lib/module/useNavigationBuilder.js.map +1 -1
  16. package/lib/module/useOnAction.js +4 -1
  17. package/lib/module/useOnAction.js.map +1 -1
  18. package/lib/module/useOnPreventRemove.js +35 -24
  19. package/lib/module/useOnPreventRemove.js.map +1 -1
  20. package/lib/module/useRoute.js.map +1 -1
  21. package/lib/module/validatePathConfig.js +50 -37
  22. package/lib/module/validatePathConfig.js.map +1 -1
  23. package/lib/typescript/src/NavigationBuilderContext.d.ts +2 -2
  24. package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
  25. package/lib/typescript/src/StaticNavigation.d.ts +3 -3
  26. package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
  27. package/lib/typescript/src/createNavigatorFactory.d.ts +4 -2
  28. package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
  29. package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
  30. package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
  31. package/lib/typescript/src/index.d.ts +1 -1
  32. package/lib/typescript/src/index.d.ts.map +1 -1
  33. package/lib/typescript/src/types.d.ts +66 -17
  34. package/lib/typescript/src/types.d.ts.map +1 -1
  35. package/lib/typescript/src/useEventEmitter.d.ts +1 -1
  36. package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
  37. package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
  38. package/lib/typescript/src/useOnAction.d.ts.map +1 -1
  39. package/lib/typescript/src/useOnPreventRemove.d.ts +2 -6
  40. package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
  41. package/lib/typescript/src/useRoute.d.ts +1 -1
  42. package/lib/typescript/src/useRoute.d.ts.map +1 -1
  43. package/lib/typescript/src/utilities.d.ts +4 -38
  44. package/lib/typescript/src/utilities.d.ts.map +1 -1
  45. package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
  46. package/package.json +5 -5
  47. package/src/NavigationBuilderContext.tsx +5 -1
  48. package/src/StaticNavigation.tsx +7 -6
  49. package/src/createNavigatorFactory.tsx +23 -2
  50. package/src/getPathFromState.tsx +97 -66
  51. package/src/getStateFromPath.tsx +168 -142
  52. package/src/index.tsx +1 -0
  53. package/src/types.tsx +257 -33
  54. package/src/useEventEmitter.tsx +6 -1
  55. package/src/useNavigationBuilder.tsx +1 -8
  56. package/src/useOnAction.tsx +6 -2
  57. package/src/useOnPreventRemove.tsx +68 -36
  58. package/src/useRoute.tsx +3 -5
  59. package/src/utilities.tsx +8 -41
  60. package/src/validatePathConfig.tsx +85 -58
@@ -5,5 +5,5 @@ export type NavigationEventEmitter<T extends Record<string, any>> = EventEmitter
5
5
  /**
6
6
  * Hook to manage the event system used by the navigator to notify screens of various events.
7
7
  */
8
- export declare function useEventEmitter<T extends Record<string, any>>(listen?: (e: any) => void): NavigationEventEmitter<T>;
8
+ export declare function useEventEmitter<T extends Record<string, any>>(listen?: (e: any) => void, onPostEmit?: (e: any) => void): NavigationEventEmitter<T>;
9
9
  //# sourceMappingURL=useEventEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/useEventEmitter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,YAAS,CAAC;AAErE,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAC9D,YAAY,CAAC,CAAC,CAAC,GAAG;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAIJ;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,GACxB,sBAAsB,CAAC,CAAC,CAAC,CAoH3B"}
1
+ {"version":3,"file":"useEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/useEventEmitter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,YAAS,CAAC;AAErE,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAC9D,YAAY,CAAC,CAAC,CAAC,GAAG;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAIJ;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,EACzB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,GAC5B,sBAAsB,CAAC,CAAC,CAAC,CAwH3B"}
@@ -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;AAEnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,OAAO,EACL,KAAK,uBAAuB,EAI5B,iBAAiB,EAElB,MAAM,YAAS,CAAC;AA+QjB;;;;;;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,KAAK,EACL,aAAa,EACb,QAAQ,EACR,GAAG,CACJ,GACC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqsBhB"}
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;AAEnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,OAAO,EACL,KAAK,uBAAuB,EAI5B,iBAAiB,EAElB,MAAM,YAAS,CAAC;AA+QjB;;;;;;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,KAAK,EACL,aAAa,EACb,QAAQ,EACR,GAAG,CACJ,GACC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8rBhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOnAction.d.ts","sourceRoot":"","sources":["../../../src/useOnAction.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,MAAM,EACN,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAE/B,MAAM,+BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAmB,CAAC;AAGhE,KAAK,OAAO,CAAC,KAAK,SAAS,eAAe,IAAI;IAC5C,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IACvD,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC;IAC7E,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAS,eAAe,EAAE,EACzD,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,OAAO,GACR,EAAE,OAAO,CAAC,KAAK,CAAC,YAiBH,gBAAgB,sBACL,GAAG,CAAC,MAAM,CAAC,aAuGnC"}
1
+ {"version":3,"file":"useOnAction.d.ts","sourceRoot":"","sources":["../../../src/useOnAction.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,MAAM,EACN,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAE/B,MAAM,+BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAmB,CAAC;AAGhE,KAAK,OAAO,CAAC,KAAK,SAAS,eAAe,IAAI;IAC5C,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IACvD,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC;IAC7E,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAS,eAAe,EAAE,EACzD,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,OAAO,GACR,EAAE,OAAO,CAAC,KAAK,CAAC,YAiBH,gBAAgB,sBACL,GAAG,CAAC,MAAM,CAAC,aA2GnC"}
@@ -1,4 +1,4 @@
1
- import type { NavigationAction, NavigationState } from '@react-navigation/routers';
1
+ import type { NavigationAction, NavigationRoute, NavigationState, ParamListBase, PartialRoute } from '@react-navigation/routers';
2
2
  import { type ChildBeforeRemoveListener } from './NavigationBuilderContext.js';
3
3
  import type { EventMapCore } from './types.js';
4
4
  import type { NavigationEventEmitter } from './useEventEmitter.js';
@@ -7,11 +7,7 @@ type Options = {
7
7
  emitter: NavigationEventEmitter<EventMapCore<any>>;
8
8
  beforeRemoveListeners: Record<string, ChildBeforeRemoveListener | undefined>;
9
9
  };
10
- export declare const shouldPreventRemove: (emitter: NavigationEventEmitter<EventMapCore<any>>, beforeRemoveListeners: Record<string, ChildBeforeRemoveListener | undefined>, currentRoutes: {
11
- key: string;
12
- }[], nextRoutes: {
13
- key?: string | undefined;
14
- }[], action: NavigationAction) => boolean;
10
+ export declare const shouldPreventRemove: (emitter: NavigationEventEmitter<EventMapCore<any>>, beforeRemoveListeners: Record<string, ChildBeforeRemoveListener | undefined>, currentRoutes: NavigationRoute<ParamListBase, string>[], nextRoutes: (NavigationRoute<ParamListBase, string> | PartialRoute<NavigationRoute<ParamListBase, string>>)[], action: NavigationAction) => boolean;
15
11
  export declare function useOnPreventRemove({ getState, emitter, beforeRemoveListeners, }: Options): void;
16
12
  export {};
17
13
  //# sourceMappingURL=useOnPreventRemove.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useOnPreventRemove.d.ts","sourceRoot":"","sources":["../../../src/useOnPreventRemove.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,+BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAmB,CAAC;AAEhE,KAAK,OAAO,GAAG;IACb,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC;CAC9E,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAClD,uBAAuB,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,EAC5E,eAAe;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,EAChC,YAAY;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,EAC1C,QAAQ,gBAAgB,YA8CzB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,OAAO,EACP,qBAAqB,GACtB,EAAE,OAAO,QAoBT"}
1
+ {"version":3,"file":"useOnPreventRemove.d.ts","sourceRoot":"","sources":["../../../src/useOnPreventRemove.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACb,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,+BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAmB,CAAC;AAEhE,KAAK,OAAO,GAAG;IACb,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC;CAC9E,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAClD,uBAAuB,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,EAC5E,eAAe,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,EACvD,YAAY,CACR,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,GACtC,YAAY,CAAC,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CACvD,EAAE,EACH,QAAQ,gBAAgB,YAoEzB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,OAAO,EACP,qBAAqB,GACtB,EAAE,OAAO,QAwBT"}
@@ -7,7 +7,7 @@ import type { KeyOf } from './utilities.js';
7
7
  * So the route objects don't need to be built just to get the names.
8
8
  */
9
9
  type AllRouteNames<ParamList extends {}> = KeyOf<ParamList> | AllNestedRouteNames<NestedParamLists<ParamList>>;
10
- type AllNestedRouteNames<ParamLists> = ParamLists extends infer ParamList extends {} ? AllRouteNames<ParamList> : never;
10
+ type AllNestedRouteNames<ParamLists> = ParamLists extends {} ? AllRouteNames<ParamLists> : never;
11
11
  /**
12
12
  * Hook to access the route prop of the parent screen anywhere.
13
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"useRoute.d.ts","sourceRoot":"","sources":["../../../src/useRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,YAAS,CAAC;AACjB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAa,CAAC;AAEzC;;;;GAIG;AACH,KAAK,aAAa,CAAC,SAAS,SAAS,EAAE,IACnC,KAAK,CAAC,SAAS,CAAC,GAChB,mBAAmB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AAErD,KAAK,mBAAmB,CAAC,UAAU,IAEjC,UAAU,SAAS,MAAM,SAAS,SAAS,EAAE,GACzC,aAAa,CAAC,SAAS,CAAC,GACxB,KAAK,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,KAAK,CAAC,SAAS,SAAS,EAAE,GAAG,aAAa,EAG1C,KAAK,CAAC,SAAS,SAAS,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,GACvD,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,EACnC,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACvD,wBAAgB,QAAQ,CACtB,KAAK,CAAC,SAAS,SAAS,EAAE,GAAG,aAAa,KACvC,EAAE,SAAS,SAAS,GACrB,SAAS,CAAC,aAAa,CAAC,GACxB,SAAS,SAAS,aAAa,GAC7B,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,GAC/B,SAAS,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"useRoute.d.ts","sourceRoot":"","sources":["../../../src/useRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,YAAS,CAAC;AACjB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAa,CAAC;AAEzC;;;;GAIG;AACH,KAAK,aAAa,CAAC,SAAS,SAAS,EAAE,IACnC,KAAK,CAAC,SAAS,CAAC,GAChB,mBAAmB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AAErD,KAAK,mBAAmB,CAAC,UAAU,IAAI,UAAU,SAAS,EAAE,GACxD,aAAa,CAAC,UAAU,CAAC,GACzB,KAAK,CAAC;AAEV;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,KAAK,CAAC,SAAS,SAAS,EAAE,GAAG,aAAa,EAG1C,KAAK,CAAC,SAAS,SAAS,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,GACvD,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,EACnC,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACvD,wBAAgB,QAAQ,CACtB,KAAK,CAAC,SAAS,SAAS,EAAE,GAAG,aAAa,KACvC,EAAE,SAAS,SAAS,GACrB,SAAS,CAAC,aAAa,CAAC,GACxB,SAAS,SAAS,aAAa,GAC7B,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,GAC/B,SAAS,CAAC,aAAa,CAAC,CAAC"}
@@ -19,7 +19,6 @@ export type KeyOf<T extends {}> = Extract<keyof T, string>;
19
19
  * https://stackoverflow.com/a/50375286/1665026
20
20
  */
21
21
  export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
22
- export type UnknownToUndefined<T> = unknown extends T ? undefined : T;
23
22
  /**
24
23
  * Exclude undefined from a type.
25
24
  * Similar to NonNullable but only excludes undefined, not null.
@@ -96,44 +95,11 @@ type QueryParamOptionalKeys<Params, Parse> = {
96
95
  * It doesn't include parse functions (as they are always optional)
97
96
  */
98
97
  type QueryParamRequiredKeys<Params, Parse> = Exclude<Exclude<keyof Parse, keyof Params>, QueryParamOptionalKeys<Params, Parse>>;
99
- /**
100
- * Infer the path string from a linking config.
101
- */
102
- export type InferPath<T> = T extends {
103
- path: infer P extends string;
104
- } ? P : never;
105
- /**
106
- * Infer the parse functions from a linking config.
107
- */
108
- export type InferParse<T> = T extends {
109
- parse: infer P;
110
- } ? P : {};
111
98
  export type InferParamsFromLinking<T> = T extends {
112
99
  path: infer P extends string;
113
- } ? UndefinedIfAllOptional<ExtractParamsType<ExtractParamStrings<P>, InferParse<T>>> : T extends string ? UndefinedIfAllOptional<ExtractParamsType<ExtractParamStrings<T>, undefined>> : undefined;
114
- /**
115
- * Infer the params type from a screen component or nested navigator.
116
- */
117
- export type InferScreenParams<T> = T extends React.ComponentType<{
118
- route: {
119
- params: infer P;
120
- };
121
- }> ? P : T extends {
122
- config: {
123
- screens: infer Screens;
124
- };
125
- } ? import('./types.js').NavigatorScreenParams<{
126
- [K in keyof Screens]: Screens[K] extends React.ComponentType<{
127
- route: {
128
- params: infer P;
129
- };
130
- }> ? P : Screens[K] extends {
131
- screen: infer S;
132
- } ? S extends React.ComponentType<{
133
- route: {
134
- params: infer P;
135
- };
136
- }> ? P : undefined : undefined;
137
- }> : undefined;
100
+ parse: infer Parse;
101
+ } ? UndefinedIfAllOptional<ExtractParamsType<ExtractParamStrings<P>, Parse>> : T extends {
102
+ path: infer P extends string;
103
+ } ? UndefinedIfAllOptional<ExtractParamStrings<P>> : T extends string ? UndefinedIfAllOptional<ExtractParamStrings<T>> : undefined;
138
104
  export {};
139
105
  //# sourceMappingURL=utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/utilities.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/utilities.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validatePathConfig.d.ts","sourceRoot":"","sources":["../../../src/validatePathConfig.tsx"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,UAAO,QA8E9D"}
1
+ {"version":3,"file":"validatePathConfig.d.ts","sourceRoot":"","sources":["../../../src/validatePathConfig.tsx"],"names":[],"mappings":"AAmCA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,UAAO,QA2E9D"}
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": "8.0.0-alpha.23",
4
+ "version": "8.0.0-alpha.24",
5
5
  "keywords": [
6
6
  "react",
7
7
  "react-native",
@@ -21,7 +21,7 @@
21
21
  "types": "./lib/typescript/src/index.d.ts",
22
22
  "exports": {
23
23
  ".": {
24
- "source": "./src/index.tsx",
24
+ "@react-navigation/source": "./src/index.tsx",
25
25
  "types": "./lib/typescript/src/index.d.ts",
26
26
  "default": "./lib/module/index.js"
27
27
  },
@@ -40,7 +40,7 @@
40
40
  "clean": "del lib"
41
41
  },
42
42
  "dependencies": {
43
- "@react-navigation/routers": "^8.0.0-alpha.12",
43
+ "@react-navigation/routers": "^8.0.0-alpha.13",
44
44
  "escape-string-regexp": "^5.0.0",
45
45
  "fast-deep-equal": "^3.1.3",
46
46
  "nanoid": "^5.1.11",
@@ -59,7 +59,7 @@
59
59
  "immer": "^11.1.8",
60
60
  "react": "19.2.0",
61
61
  "react-native": "0.83.6",
62
- "react-native-builder-bob": "^0.42.1",
62
+ "react-native-builder-bob": "^0.43.0",
63
63
  "test-renderer": "1.2.0",
64
64
  "typescript": "^6.0.3",
65
65
  "valibot": "^1.4.1",
@@ -86,5 +86,5 @@
86
86
  ]
87
87
  ]
88
88
  },
89
- "gitHead": "b18e1874297bb41bb0dc048b25b4dbc02cb5af50"
89
+ "gitHead": "b573c67e6abed9b94d9f0ee70f06df4fa4536367"
90
90
  }
@@ -2,6 +2,7 @@ import type {
2
2
  NavigationAction,
3
3
  NavigationState,
4
4
  ParamListBase,
5
+ PartialState,
5
6
  } from '@react-navigation/routers';
6
7
  import * as React from 'react';
7
8
 
@@ -46,7 +47,10 @@ export type FocusedNavigationListener = <T>(
46
47
 
47
48
  export type GetStateListener = () => NavigationState;
48
49
 
49
- export type ChildBeforeRemoveListener = (action: NavigationAction) => boolean;
50
+ export type ChildBeforeRemoveListener = (
51
+ action: NavigationAction,
52
+ nextState: NavigationState | PartialState<NavigationState> | undefined
53
+ ) => boolean;
50
54
 
51
55
  /**
52
56
  * Context which holds the required helpers needed to build nested navigators.
@@ -81,14 +81,15 @@ type ParamsForScreen<T> = [T] extends [{ config: any }]
81
81
  type ParamsForScreenEntry<T> = T extends T ? ParamsForScreen<T> : never;
82
82
 
83
83
  // Only infer params from linking if it's a pattern (i.e., contains ':')
84
- // or if parse is present for query params.
84
+ // or if parse is present, which can also define query params.
85
85
  // This avoids inferring non-literals like 'string' without parse.
86
- type ShouldInferFromLinking<Linking> = Linking extends
87
- | ValidPathPattern
88
- | { path: ValidPathPattern }
89
- | { parse: Record<string, unknown> }
86
+ type ShouldInferFromLinking<Linking> = Linking extends {
87
+ parse: Record<string, unknown>;
88
+ }
90
89
  ? true
91
- : false;
90
+ : Linking extends ValidPathPattern | { path: ValidPathPattern }
91
+ ? true
92
+ : false;
92
93
 
93
94
  /**
94
95
  * Params type derived from both linking and screen.
@@ -11,15 +11,36 @@ import {
11
11
  import type {
12
12
  NavigatorTypeBagBase,
13
13
  NavigatorTypeBagFor,
14
+ NestedNavigatorsForParamList,
14
15
  TypedNavigator,
15
16
  } from './types';
16
17
  import type { KeysOf } from './utilities';
17
18
 
19
+ type ValidNavigatorNesting<
20
+ ParamList extends ParamListBase,
21
+ Nesting,
22
+ > = Nesting extends Partial<Record<keyof ParamList, unknown>> &
23
+ Record<Exclude<keyof Nesting, keyof ParamList>, never>
24
+ ? Nesting
25
+ : never;
26
+
18
27
  export type TypedNavigatorFactory<in out TypeBag extends NavigatorTypeBagBase> =
19
28
  {
20
- <const ParamList extends ParamListBase>(): TypedNavigator<
29
+ <
30
+ const ParamList extends ParamListBase,
31
+ const Nesting extends Partial<Record<keyof ParamList, unknown>> &
32
+ // Extra keys satisfy the structural constraint via width subtyping,
33
+ // Force any key in `Nesting` that isn't in the param list to `never`.
34
+ // So typos in the nesting config will cause an error.
35
+ Record<Exclude<keyof Nesting, keyof ParamList>, never> =
36
+ ValidNavigatorNesting<
37
+ ParamList,
38
+ NestedNavigatorsForParamList<ParamList>
39
+ >,
40
+ >(): TypedNavigator<
21
41
  NavigatorTypeBagFor<TypeBag, ParamList>,
22
- undefined
42
+ undefined,
43
+ Nesting
23
44
  >;
24
45
  <
25
46
  const Config extends StaticConfig<
@@ -22,6 +22,23 @@ type ConfigItem = {
22
22
  screens?: Record<string, ConfigItem> | undefined;
23
23
  };
24
24
 
25
+ const encodePathParam = (value: string) => {
26
+ let result = '';
27
+
28
+ for (const char of value) {
29
+ const charCode = char.charCodeAt(0);
30
+ const safe =
31
+ (charCode >= 65 && charCode <= 90) ||
32
+ (charCode >= 97 && charCode <= 122) ||
33
+ (charCode >= 48 && charCode <= 57) ||
34
+ "-._~!$&'()*+,;=:@".includes(char);
35
+
36
+ result += safe ? char : encodeURIComponent(char);
37
+ }
38
+
39
+ return result;
40
+ };
41
+
25
42
  const getActiveRoute = (
26
43
  state: State
27
44
  ): { name: string; params?: object | undefined } => {
@@ -190,30 +207,31 @@ export function getPathFromState<ParamList extends {}>(
190
207
 
191
208
  if (route.params) {
192
209
  const options = config;
210
+ const params = route.params as Record<string, unknown>;
211
+ const currentParams: Record<string, string> = {};
212
+
213
+ for (const key in params) {
214
+ const value = params[key];
193
215
 
194
- const currentParams = Object.fromEntries(
195
- Object.entries(route.params)
196
- .map(([key, value]): [string, string] | null => {
197
- if (value === undefined) {
198
- if (options) {
199
- const optional = options.parts?.find(
200
- (part) => part.param === key
201
- )?.optional;
202
-
203
- if (optional) {
204
- return null;
205
- }
206
- } else {
207
- return null;
208
- }
216
+ if (value === undefined) {
217
+ let optional = false;
218
+
219
+ for (const part of options.parts ?? []) {
220
+ if (part.param === key) {
221
+ optional = part.optional === true;
222
+ break;
209
223
  }
224
+ }
210
225
 
211
- const stringify = options?.stringify?.[key] ?? String;
226
+ if (optional) {
227
+ continue;
228
+ }
229
+ }
212
230
 
213
- return [key, stringify(value)];
214
- })
215
- .filter((entry) => entry != null)
216
- );
231
+ const stringify = options.stringify?.[key] ?? String;
232
+
233
+ currentParams[key] = stringify(value);
234
+ }
217
235
 
218
236
  if (parts?.length) {
219
237
  Object.assign(allParams, currentParams);
@@ -222,19 +240,24 @@ export function getPathFromState<ParamList extends {}>(
222
240
  if (focusedRoute === route) {
223
241
  // If this is the focused route, keep the params for later use
224
242
  // We save it here since it's been stringified already
225
- focusedParams = { ...currentParams };
226
-
227
- parts
228
- // eslint-disable-next-line no-loop-func
229
- ?.forEach(({ param }) => {
230
- if (param) {
231
- // Remove the params present in the pattern since we'll only use the rest for query string
232
- if (focusedParams) {
233
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
234
- delete focusedParams[param];
235
- }
243
+ focusedParams = {};
244
+
245
+ for (const key in currentParams) {
246
+ let inPattern = false;
247
+
248
+ for (const part of parts ?? []) {
249
+ if (part.param === key) {
250
+ inPattern = true;
251
+ break;
236
252
  }
237
- });
253
+ }
254
+
255
+ const value = currentParams[key];
256
+
257
+ if (!inPattern && value !== undefined && value !== 'undefined') {
258
+ focusedParams[key] = value;
259
+ }
260
+ }
238
261
  }
239
262
  }
240
263
 
@@ -268,13 +291,22 @@ export function getPathFromState<ParamList extends {}>(
268
291
  }
269
292
 
270
293
  if (currentOptions[route.name] != null) {
271
- path += parts
272
- ?.map(({ segment, param, optional }) => {
294
+ if (parts) {
295
+ let index = 0;
296
+
297
+ for (const { segment, param, optional } of parts) {
298
+ if (index > 0) {
299
+ path += '/';
300
+ }
301
+
302
+ index++;
303
+
273
304
  // We don't know what to show for wildcard patterns
274
305
  // Showing the route name seems ok, though whatever we show here will be incorrect
275
306
  // Since the page doesn't actually exist
276
307
  if (segment === '*') {
277
- return route.name;
308
+ path += route.name;
309
+ continue;
278
310
  }
279
311
 
280
312
  // If the path has a pattern for a param, put the param in the path
@@ -283,46 +315,39 @@ export function getPathFromState<ParamList extends {}>(
283
315
 
284
316
  if (value === undefined && optional) {
285
317
  // Optional params without value assigned in route.params should be ignored
286
- return '';
318
+ continue;
287
319
  }
288
320
 
289
321
  // Valid characters according to
290
322
  // https://datatracker.ietf.org/doc/html/rfc3986#section-3.3 (see pchar definition)
291
- return Array.from(String(value))
292
- .map((char) =>
293
- /[^A-Za-z0-9\-._~!$&'()*+,;=:@]/g.test(char)
294
- ? encodeURIComponent(char)
295
- : char
296
- )
297
- .join('');
323
+ path += encodePathParam(String(value));
324
+ continue;
298
325
  }
299
326
 
300
- return encodeURIComponent(segment);
301
- })
302
- .join('/');
327
+ path += encodeURIComponent(segment);
328
+ }
329
+ }
303
330
  } else {
304
331
  path += encodeURIComponent(route.name);
305
332
  }
306
333
 
307
334
  if (!focusedParams && focusedRoute.params) {
308
- focusedParams = Object.fromEntries(
309
- Object.entries(focusedRoute.params).map(([key, value]) => [
310
- key,
311
- String(value),
312
- ])
313
- );
335
+ focusedParams = {};
336
+
337
+ const params = focusedRoute.params as Record<string, unknown>;
338
+
339
+ for (const key in params) {
340
+ const value = String(params[key]);
341
+
342
+ if (value !== 'undefined') {
343
+ focusedParams[key] = value;
344
+ }
345
+ }
314
346
  }
315
347
 
316
348
  if (route.state) {
317
349
  path += '/';
318
350
  } else if (focusedParams) {
319
- for (const param in focusedParams) {
320
- if (focusedParams[param] === 'undefined') {
321
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
322
- delete focusedParams[param];
323
- }
324
- }
325
-
326
351
  const query = queryString.stringify(focusedParams, { sort: false });
327
352
 
328
353
  if (query) {
@@ -399,11 +424,17 @@ const createConfigItem = (
399
424
  const createNormalizedConfigs = (
400
425
  options: PathConfigMap<object>,
401
426
  parts?: PatternPart[]
402
- ): Record<string, ConfigItem> =>
403
- Object.fromEntries(
404
- Object.entries(options).map(([name, c]) => {
405
- const result = createConfigItem(c, parts);
427
+ ): Record<string, ConfigItem> => {
428
+ const configs: Record<string, ConfigItem> = {};
429
+ const screens = options as Record<string, PathConfig<{}> | string>;
406
430
 
407
- return [name, result];
408
- })
409
- );
431
+ for (const name in screens) {
432
+ const config = screens[name];
433
+
434
+ if (config !== undefined) {
435
+ configs[name] = createConfigItem(config, parts);
436
+ }
437
+ }
438
+
439
+ return configs;
440
+ };