@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.
- package/lib/module/NavigationBuilderContext.js.map +1 -1
- package/lib/module/StaticNavigation.js +1 -1
- package/lib/module/StaticNavigation.js.map +1 -1
- package/lib/module/createNavigatorFactory.js.map +1 -1
- package/lib/module/getPathFromState.js +87 -57
- package/lib/module/getPathFromState.js.map +1 -1
- package/lib/module/getStateFromPath.js +77 -46
- package/lib/module/getStateFromPath.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +13 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/useEventEmitter.js +4 -1
- package/lib/module/useEventEmitter.js.map +1 -1
- package/lib/module/useNavigationBuilder.js +1 -7
- package/lib/module/useNavigationBuilder.js.map +1 -1
- package/lib/module/useOnAction.js +4 -1
- package/lib/module/useOnAction.js.map +1 -1
- package/lib/module/useOnPreventRemove.js +35 -24
- package/lib/module/useOnPreventRemove.js.map +1 -1
- package/lib/module/useRoute.js.map +1 -1
- package/lib/module/validatePathConfig.js +50 -37
- package/lib/module/validatePathConfig.js.map +1 -1
- package/lib/typescript/src/NavigationBuilderContext.d.ts +2 -2
- package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
- package/lib/typescript/src/StaticNavigation.d.ts +3 -3
- package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
- package/lib/typescript/src/createNavigatorFactory.d.ts +4 -2
- package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
- package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
- package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +66 -17
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useEventEmitter.d.ts +1 -1
- package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
- package/lib/typescript/src/useOnAction.d.ts.map +1 -1
- package/lib/typescript/src/useOnPreventRemove.d.ts +2 -6
- package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
- package/lib/typescript/src/useRoute.d.ts +1 -1
- package/lib/typescript/src/useRoute.d.ts.map +1 -1
- package/lib/typescript/src/utilities.d.ts +4 -38
- package/lib/typescript/src/utilities.d.ts.map +1 -1
- package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/NavigationBuilderContext.tsx +5 -1
- package/src/StaticNavigation.tsx +7 -6
- package/src/createNavigatorFactory.tsx +23 -2
- package/src/getPathFromState.tsx +97 -66
- package/src/getStateFromPath.tsx +168 -142
- package/src/index.tsx +1 -0
- package/src/types.tsx +257 -33
- package/src/useEventEmitter.tsx +6 -1
- package/src/useNavigationBuilder.tsx +1 -8
- package/src/useOnAction.tsx +6 -2
- package/src/useOnPreventRemove.tsx +68 -36
- package/src/useRoute.tsx +3 -5
- package/src/utilities.tsx +8 -41
- 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,
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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":"AAAA;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CACnC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CACvC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAC1B,CAAC,GACD,KAAK,CAAC;AAEV
|
|
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":"
|
|
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.
|
|
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.
|
|
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.
|
|
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": "
|
|
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 = (
|
|
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.
|
package/src/StaticNavigation.tsx
CHANGED
|
@@ -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
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
| { parse: Record<string, unknown> }
|
|
86
|
+
type ShouldInferFromLinking<Linking> = Linking extends {
|
|
87
|
+
parse: Record<string, unknown>;
|
|
88
|
+
}
|
|
90
89
|
? true
|
|
91
|
-
:
|
|
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
|
-
<
|
|
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<
|
package/src/getPathFromState.tsx
CHANGED
|
@@ -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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
226
|
+
if (optional) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
212
230
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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 = {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
|
|
272
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
292
|
-
|
|
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
|
-
|
|
301
|
-
}
|
|
302
|
-
|
|
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 =
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
404
|
-
|
|
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
|
-
|
|
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
|
+
};
|