@react-navigation/core 7.8.4 → 7.9.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.
- package/lib/module/BaseNavigationContainer.js +3 -3
- package/lib/module/BaseNavigationContainer.js.map +1 -1
- package/lib/module/EnsureSingleNavigator.js +1 -1
- package/lib/module/EnsureSingleNavigator.js.map +1 -1
- package/lib/module/SceneView.js +1 -1
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useDescriptors.js +1 -0
- package/lib/module/useDescriptors.js.map +1 -1
- package/lib/module/useFocusEvents.js +1 -1
- package/lib/module/useFocusEvents.js.map +1 -1
- package/lib/module/useLazyValue.js +1 -1
- package/lib/module/useLazyValue.js.map +1 -1
- package/lib/module/useNavigationBuilder.js +19 -7
- package/lib/module/useNavigationBuilder.js.map +1 -1
- package/lib/typescript/src/StaticNavigation.d.ts +4 -4
- package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
- package/lib/typescript/src/deepFreeze.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 +10 -18
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useDescriptors.d.ts +16 -5
- package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationBuilder.d.ts +18 -3
- package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationCache.d.ts +6 -1
- package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationHelpers.d.ts +6 -1
- package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
- package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
- package/package.json +18 -17
- package/src/BaseNavigationContainer.tsx +3 -3
- package/src/EnsureSingleNavigator.tsx +1 -1
- package/src/SceneView.tsx +1 -1
- package/src/StaticNavigation.tsx +4 -4
- package/src/index.tsx +2 -0
- package/src/types.tsx +32 -18
- package/src/useDescriptors.tsx +5 -3
- package/src/useFocusEvents.tsx +1 -1
- package/src/useLazyValue.tsx +1 -1
- package/src/useNavigationBuilder.tsx +44 -13
- package/lib/commonjs/BaseNavigationContainer.js +0 -368
- package/lib/commonjs/BaseNavigationContainer.js.map +0 -1
- package/lib/commonjs/CurrentRenderContext.js +0 -15
- package/lib/commonjs/CurrentRenderContext.js.map +0 -1
- package/lib/commonjs/DeprecatedNavigationInChildContext.js +0 -14
- package/lib/commonjs/DeprecatedNavigationInChildContext.js.map +0 -1
- package/lib/commonjs/EnsureSingleNavigator.js +0 -43
- package/lib/commonjs/EnsureSingleNavigator.js.map +0 -1
- package/lib/commonjs/Group.js +0 -14
- package/lib/commonjs/Group.js.map +0 -1
- package/lib/commonjs/NavigationBuilderContext.js +0 -23
- package/lib/commonjs/NavigationBuilderContext.js.map +0 -1
- package/lib/commonjs/NavigationContainerRefContext.js +0 -14
- package/lib/commonjs/NavigationContainerRefContext.js.map +0 -1
- package/lib/commonjs/NavigationContext.js +0 -14
- package/lib/commonjs/NavigationContext.js.map +0 -1
- package/lib/commonjs/NavigationFocusedRouteStateContext.js +0 -14
- package/lib/commonjs/NavigationFocusedRouteStateContext.js.map +0 -1
- package/lib/commonjs/NavigationHelpersContext.js +0 -15
- package/lib/commonjs/NavigationHelpersContext.js.map +0 -1
- package/lib/commonjs/NavigationIndependentTree.js +0 -35
- package/lib/commonjs/NavigationIndependentTree.js.map +0 -1
- package/lib/commonjs/NavigationIndependentTreeContext.js +0 -14
- package/lib/commonjs/NavigationIndependentTreeContext.js.map +0 -1
- package/lib/commonjs/NavigationRouteContext.js +0 -14
- package/lib/commonjs/NavigationRouteContext.js.map +0 -1
- package/lib/commonjs/NavigationStateContext.js +0 -29
- package/lib/commonjs/NavigationStateContext.js.map +0 -1
- package/lib/commonjs/PreventRemoveContext.js +0 -16
- package/lib/commonjs/PreventRemoveContext.js.map +0 -1
- package/lib/commonjs/PreventRemoveProvider.js +0 -91
- package/lib/commonjs/PreventRemoveProvider.js.map +0 -1
- package/lib/commonjs/SceneView.js +0 -151
- package/lib/commonjs/SceneView.js.map +0 -1
- package/lib/commonjs/Screen.js +0 -14
- package/lib/commonjs/Screen.js.map +0 -1
- package/lib/commonjs/StaticContainer.js +0 -31
- package/lib/commonjs/StaticContainer.js.map +0 -1
- package/lib/commonjs/StaticNavigation.js +0 -258
- package/lib/commonjs/StaticNavigation.js.map +0 -1
- package/lib/commonjs/UnhandledActionContext.js +0 -11
- package/lib/commonjs/UnhandledActionContext.js.map +0 -1
- package/lib/commonjs/arrayStartsWith.js +0 -16
- package/lib/commonjs/arrayStartsWith.js.map +0 -1
- package/lib/commonjs/checkDuplicateRouteNames.js +0 -25
- package/lib/commonjs/checkDuplicateRouteNames.js.map +0 -1
- package/lib/commonjs/checkSerializable.js +0 -50
- package/lib/commonjs/checkSerializable.js.map +0 -1
- package/lib/commonjs/createNavigationContainerRef.js +0 -69
- package/lib/commonjs/createNavigationContainerRef.js.map +0 -1
- package/lib/commonjs/createNavigatorFactory.js +0 -34
- package/lib/commonjs/createNavigatorFactory.js.map +0 -1
- package/lib/commonjs/deepFreeze.js +0 -40
- package/lib/commonjs/deepFreeze.js.map +0 -1
- package/lib/commonjs/findFocusedRoute.js +0 -15
- package/lib/commonjs/findFocusedRoute.js.map +0 -1
- package/lib/commonjs/getActionFromState.js +0 -111
- package/lib/commonjs/getActionFromState.js.map +0 -1
- package/lib/commonjs/getFocusedRouteNameFromRoute.js +0 -22
- package/lib/commonjs/getFocusedRouteNameFromRoute.js.map +0 -1
- package/lib/commonjs/getPathFromState.js +0 -241
- package/lib/commonjs/getPathFromState.js.map +0 -1
- package/lib/commonjs/getPatternParts.js +0 -105
- package/lib/commonjs/getPatternParts.js.map +0 -1
- package/lib/commonjs/getStateFromPath.js +0 -521
- package/lib/commonjs/getStateFromPath.js.map +0 -1
- package/lib/commonjs/index.js +0 -295
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/isArrayEqual.js +0 -20
- package/lib/commonjs/isArrayEqual.js.map +0 -1
- package/lib/commonjs/isRecordEqual.js +0 -21
- package/lib/commonjs/isRecordEqual.js.map +0 -1
- package/lib/commonjs/package.json +0 -1
- package/lib/commonjs/theming/ThemeContext.js +0 -12
- package/lib/commonjs/theming/ThemeContext.js.map +0 -1
- package/lib/commonjs/theming/ThemeProvider.js +0 -21
- package/lib/commonjs/theming/ThemeProvider.js.map +0 -1
- package/lib/commonjs/theming/useTheme.js +0 -18
- package/lib/commonjs/theming/useTheme.js.map +0 -1
- package/lib/commonjs/types.js +0 -9
- package/lib/commonjs/types.js.map +0 -1
- package/lib/commonjs/useChildListeners.js +0 -36
- package/lib/commonjs/useChildListeners.js.map +0 -1
- package/lib/commonjs/useComponent.js +0 -40
- package/lib/commonjs/useComponent.js.map +0 -1
- package/lib/commonjs/useCurrentRender.js +0 -25
- package/lib/commonjs/useCurrentRender.js.map +0 -1
- package/lib/commonjs/useDescriptors.js +0 -192
- package/lib/commonjs/useDescriptors.js.map +0 -1
- package/lib/commonjs/useEventEmitter.js +0 -105
- package/lib/commonjs/useEventEmitter.js.map +0 -1
- package/lib/commonjs/useFocusEffect.js +0 -80
- package/lib/commonjs/useFocusEffect.js.map +0 -1
- package/lib/commonjs/useFocusEvents.js +0 -70
- package/lib/commonjs/useFocusEvents.js.map +0 -1
- package/lib/commonjs/useFocusedListenersChildrenAdapter.js +0 -48
- package/lib/commonjs/useFocusedListenersChildrenAdapter.js.map +0 -1
- package/lib/commonjs/useIsFocused.js +0 -28
- package/lib/commonjs/useIsFocused.js.map +0 -1
- package/lib/commonjs/useIsomorphicLayoutEffect.js +0 -12
- package/lib/commonjs/useIsomorphicLayoutEffect.js.map +0 -1
- package/lib/commonjs/useIsomorphicLayoutEffect.native.js +0 -9
- package/lib/commonjs/useIsomorphicLayoutEffect.native.js.map +0 -1
- package/lib/commonjs/useKeyedChildListeners.js +0 -33
- package/lib/commonjs/useKeyedChildListeners.js.map +0 -1
- package/lib/commonjs/useLazyValue.js +0 -17
- package/lib/commonjs/useLazyValue.js.map +0 -1
- package/lib/commonjs/useNavigation.js +0 -27
- package/lib/commonjs/useNavigation.js.map +0 -1
- package/lib/commonjs/useNavigationBuilder.js +0 -495
- package/lib/commonjs/useNavigationBuilder.js.map +0 -1
- package/lib/commonjs/useNavigationCache.js +0 -162
- package/lib/commonjs/useNavigationCache.js.map +0 -1
- package/lib/commonjs/useNavigationContainerRef.js +0 -18
- package/lib/commonjs/useNavigationContainerRef.js.map +0 -1
- package/lib/commonjs/useNavigationHelpers.js +0 -88
- package/lib/commonjs/useNavigationHelpers.js.map +0 -1
- package/lib/commonjs/useNavigationIndependentTree.js +0 -14
- package/lib/commonjs/useNavigationIndependentTree.js.map +0 -1
- package/lib/commonjs/useNavigationState.js +0 -26
- package/lib/commonjs/useNavigationState.js.map +0 -1
- package/lib/commonjs/useOnAction.js +0 -106
- package/lib/commonjs/useOnAction.js.map +0 -1
- package/lib/commonjs/useOnGetState.js +0 -48
- package/lib/commonjs/useOnGetState.js.map +0 -1
- package/lib/commonjs/useOnPreventRemove.js +0 -72
- package/lib/commonjs/useOnPreventRemove.js.map +0 -1
- package/lib/commonjs/useOnRouteFocus.js +0 -36
- package/lib/commonjs/useOnRouteFocus.js.map +0 -1
- package/lib/commonjs/useOptionsGetters.js +0 -78
- package/lib/commonjs/useOptionsGetters.js.map +0 -1
- package/lib/commonjs/usePreventRemove.js +0 -48
- package/lib/commonjs/usePreventRemove.js.map +0 -1
- package/lib/commonjs/usePreventRemoveContext.js +0 -18
- package/lib/commonjs/usePreventRemoveContext.js.map +0 -1
- package/lib/commonjs/useRegisterNavigator.js +0 -32
- package/lib/commonjs/useRegisterNavigator.js.map +0 -1
- package/lib/commonjs/useRoute.js +0 -23
- package/lib/commonjs/useRoute.js.map +0 -1
- package/lib/commonjs/useRouteCache.js +0 -69
- package/lib/commonjs/useRouteCache.js.map +0 -1
- package/lib/commonjs/useScheduleUpdate.js +0 -30
- package/lib/commonjs/useScheduleUpdate.js.map +0 -1
- package/lib/commonjs/useStateForPath.js +0 -21
- package/lib/commonjs/useStateForPath.js.map +0 -1
- package/lib/commonjs/useSyncState.js +0 -87
- package/lib/commonjs/useSyncState.js.map +0 -1
- package/lib/commonjs/validatePathConfig.js +0 -56
- package/lib/commonjs/validatePathConfig.js.map +0 -1
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getStateFromPath = getStateFromPath;
|
|
7
|
-
var _escapeStringRegexp = _interopRequireDefault(require("escape-string-regexp"));
|
|
8
|
-
var queryString = _interopRequireWildcard(require("query-string"));
|
|
9
|
-
var _arrayStartsWith = require("./arrayStartsWith.js");
|
|
10
|
-
var _findFocusedRoute = require("./findFocusedRoute.js");
|
|
11
|
-
var _getPatternParts = require("./getPatternParts.js");
|
|
12
|
-
var _isArrayEqual = require("./isArrayEqual.js");
|
|
13
|
-
var _validatePathConfig = require("./validatePathConfig.js");
|
|
14
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
-
/**
|
|
18
|
-
* Utility to parse a path string to initial state object accepted by the container.
|
|
19
|
-
* This is useful for deep linking when we need to handle the incoming URL.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```js
|
|
23
|
-
* getStateFromPath(
|
|
24
|
-
* '/chat/jane/42',
|
|
25
|
-
* {
|
|
26
|
-
* screens: {
|
|
27
|
-
* Chat: {
|
|
28
|
-
* path: 'chat/:author/:id',
|
|
29
|
-
* parse: { id: Number }
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
* }
|
|
33
|
-
* )
|
|
34
|
-
* ```
|
|
35
|
-
* @param path Path string to parse and convert, e.g. /foo/bar?count=42.
|
|
36
|
-
* @param options Extra options to fine-tune how to parse the path.
|
|
37
|
-
*/
|
|
38
|
-
function getStateFromPath(path, options) {
|
|
39
|
-
const {
|
|
40
|
-
initialRoutes,
|
|
41
|
-
configs
|
|
42
|
-
} = getConfigResources(options);
|
|
43
|
-
const screens = options?.screens;
|
|
44
|
-
let remaining = path.replace(/\/+/g, '/') // Replace multiple slash (//) with single ones
|
|
45
|
-
.replace(/^\//, '') // Remove extra leading slash
|
|
46
|
-
.replace(/\?.*$/, ''); // Remove query params which we will handle later
|
|
47
|
-
|
|
48
|
-
// Make sure there is a trailing slash
|
|
49
|
-
remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;
|
|
50
|
-
const prefix = options?.path?.replace(/^\//, ''); // Remove extra leading slash
|
|
51
|
-
|
|
52
|
-
if (prefix) {
|
|
53
|
-
// Make sure there is a trailing slash
|
|
54
|
-
const normalizedPrefix = prefix.endsWith('/') ? prefix : `${prefix}/`;
|
|
55
|
-
|
|
56
|
-
// If the path doesn't start with the prefix, it's not a match
|
|
57
|
-
if (!remaining.startsWith(normalizedPrefix)) {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Remove the prefix from the path
|
|
62
|
-
remaining = remaining.replace(normalizedPrefix, '');
|
|
63
|
-
}
|
|
64
|
-
if (screens === undefined) {
|
|
65
|
-
// When no config is specified, use the path segments as route names
|
|
66
|
-
const routes = remaining.split('/').filter(Boolean).map(segment => {
|
|
67
|
-
const name = decodeURIComponent(segment);
|
|
68
|
-
return {
|
|
69
|
-
name
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
if (routes.length) {
|
|
73
|
-
return createNestedStateObject(path, routes, initialRoutes);
|
|
74
|
-
}
|
|
75
|
-
return undefined;
|
|
76
|
-
}
|
|
77
|
-
if (remaining === '/') {
|
|
78
|
-
// We need to add special handling of empty path so navigation to empty path also works
|
|
79
|
-
// When handling empty path, we should only look at the root level config
|
|
80
|
-
const match = configs.find(config => config.segments.join('/') === '');
|
|
81
|
-
if (match) {
|
|
82
|
-
return createNestedStateObject(path, match.routeNames.map(name => ({
|
|
83
|
-
name
|
|
84
|
-
})), initialRoutes, configs);
|
|
85
|
-
}
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
let result;
|
|
89
|
-
let current;
|
|
90
|
-
|
|
91
|
-
// We match the whole path against the regex instead of segments
|
|
92
|
-
// This makes sure matches such as wildcard will catch any unmatched routes, even if nested
|
|
93
|
-
const {
|
|
94
|
-
routes,
|
|
95
|
-
remainingPath
|
|
96
|
-
} = matchAgainstConfigs(remaining, configs);
|
|
97
|
-
if (routes !== undefined) {
|
|
98
|
-
// This will always be empty if full path matched
|
|
99
|
-
current = createNestedStateObject(path, routes, initialRoutes, configs);
|
|
100
|
-
remaining = remainingPath;
|
|
101
|
-
result = current;
|
|
102
|
-
}
|
|
103
|
-
if (current == null || result == null) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
return result;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Reference to the last used config resources. This is used to avoid recomputing the config resources when the options are the same.
|
|
111
|
-
*/
|
|
112
|
-
const cachedConfigResources = new WeakMap();
|
|
113
|
-
function getConfigResources(options) {
|
|
114
|
-
if (!options) return prepareConfigResources();
|
|
115
|
-
const cached = cachedConfigResources.get(options);
|
|
116
|
-
if (cached) return cached;
|
|
117
|
-
const resources = prepareConfigResources(options);
|
|
118
|
-
cachedConfigResources.set(options, resources);
|
|
119
|
-
return resources;
|
|
120
|
-
}
|
|
121
|
-
function prepareConfigResources(options) {
|
|
122
|
-
if (options) {
|
|
123
|
-
(0, _validatePathConfig.validatePathConfig)(options);
|
|
124
|
-
}
|
|
125
|
-
const initialRoutes = getInitialRoutes(options);
|
|
126
|
-
const configs = getSortedNormalizedConfigs(initialRoutes, options?.screens);
|
|
127
|
-
checkForDuplicatedConfigs(configs);
|
|
128
|
-
const configWithRegexes = getConfigsWithRegexes(configs);
|
|
129
|
-
return {
|
|
130
|
-
initialRoutes,
|
|
131
|
-
configs,
|
|
132
|
-
configWithRegexes
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
function getInitialRoutes(options) {
|
|
136
|
-
const initialRoutes = [];
|
|
137
|
-
if (options?.initialRouteName) {
|
|
138
|
-
initialRoutes.push({
|
|
139
|
-
initialRouteName: options.initialRouteName,
|
|
140
|
-
parentScreens: []
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
return initialRoutes;
|
|
144
|
-
}
|
|
145
|
-
function getSortedNormalizedConfigs(initialRoutes, screens = {}) {
|
|
146
|
-
// Create a normalized configs array which will be easier to use
|
|
147
|
-
return [].concat(...Object.keys(screens).map(key => createNormalizedConfigs(key, screens, initialRoutes, [], [], []))).sort((a, b) => {
|
|
148
|
-
// Sort config from most specific to least specific:
|
|
149
|
-
// - more segments
|
|
150
|
-
// - static segments
|
|
151
|
-
// - params with regex
|
|
152
|
-
// - regular params
|
|
153
|
-
// - wildcard
|
|
154
|
-
|
|
155
|
-
// If 2 patterns are same, move the one with less route names up
|
|
156
|
-
// This is an error state, so it's only useful for consistent error messages
|
|
157
|
-
if ((0, _isArrayEqual.isArrayEqual)(a.segments, b.segments)) {
|
|
158
|
-
return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// If one of the patterns starts with the other, it's more exhaustive
|
|
162
|
-
// So move it up
|
|
163
|
-
if ((0, _arrayStartsWith.arrayStartsWith)(a.segments, b.segments)) {
|
|
164
|
-
return -1;
|
|
165
|
-
}
|
|
166
|
-
if ((0, _arrayStartsWith.arrayStartsWith)(b.segments, a.segments)) {
|
|
167
|
-
return 1;
|
|
168
|
-
}
|
|
169
|
-
for (let i = 0; i < Math.max(a.segments.length, b.segments.length); i++) {
|
|
170
|
-
// if b is longer, b gets higher priority
|
|
171
|
-
if (a.segments[i] == null) {
|
|
172
|
-
return 1;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// if a is longer, a gets higher priority
|
|
176
|
-
if (b.segments[i] == null) {
|
|
177
|
-
return -1;
|
|
178
|
-
}
|
|
179
|
-
const aWildCard = a.segments[i] === '*';
|
|
180
|
-
const bWildCard = b.segments[i] === '*';
|
|
181
|
-
const aParam = a.segments[i].startsWith(':');
|
|
182
|
-
const bParam = b.segments[i].startsWith(':');
|
|
183
|
-
const aRegex = aParam && a.segments[i].includes('(');
|
|
184
|
-
const bRegex = bParam && b.segments[i].includes('(');
|
|
185
|
-
|
|
186
|
-
// if both are wildcard or regex, we compare next component
|
|
187
|
-
if (aWildCard && bWildCard || aRegex && bRegex) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// if only a is wildcard, b gets higher priority
|
|
192
|
-
if (aWildCard && !bWildCard) {
|
|
193
|
-
return 1;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// if only b is wildcard, a gets higher priority
|
|
197
|
-
if (bWildCard && !aWildCard) {
|
|
198
|
-
return -1;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// If only a has a param, b gets higher priority
|
|
202
|
-
if (aParam && !bParam) {
|
|
203
|
-
return 1;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// If only b has a param, a gets higher priority
|
|
207
|
-
if (bParam && !aParam) {
|
|
208
|
-
return -1;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// if only a has regex, a gets higher priority
|
|
212
|
-
if (aRegex && !bRegex) {
|
|
213
|
-
return -1;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// if only b has regex, b gets higher priority
|
|
217
|
-
if (bRegex && !aRegex) {
|
|
218
|
-
return 1;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
return a.segments.length - b.segments.length;
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
function checkForDuplicatedConfigs(configs) {
|
|
225
|
-
// Check for duplicate patterns in the config
|
|
226
|
-
configs.reduce((acc, config) => {
|
|
227
|
-
const pattern = config.segments.join('/');
|
|
228
|
-
if (acc[pattern]) {
|
|
229
|
-
const a = acc[pattern].routeNames;
|
|
230
|
-
const b = config.routeNames;
|
|
231
|
-
|
|
232
|
-
// It's not a problem if the path string omitted from a inner most screen
|
|
233
|
-
// For example, it's ok if a path resolves to `A > B > C` or `A > B`
|
|
234
|
-
const intersects = a.length > b.length ? b.every((it, i) => a[i] === it) : a.every((it, i) => b[i] === it);
|
|
235
|
-
if (!intersects) {
|
|
236
|
-
throw new Error(`Found conflicting screens with the same pattern. The pattern '${pattern}' resolves to both '${a.join(' > ')}' and '${b.join(' > ')}'. Patterns must be unique and cannot resolve to more than one screen.`);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return Object.assign(acc, {
|
|
240
|
-
[pattern]: config
|
|
241
|
-
});
|
|
242
|
-
}, {});
|
|
243
|
-
}
|
|
244
|
-
function getConfigsWithRegexes(configs) {
|
|
245
|
-
return configs.map(c => ({
|
|
246
|
-
...c,
|
|
247
|
-
// Add `$` to the regex to make sure it matches till end of the path and not just beginning
|
|
248
|
-
regex: c.regex ? new RegExp(c.regex.source + '$') : undefined
|
|
249
|
-
}));
|
|
250
|
-
}
|
|
251
|
-
const matchAgainstConfigs = (remaining, configs) => {
|
|
252
|
-
let routes;
|
|
253
|
-
let remainingPath = remaining;
|
|
254
|
-
|
|
255
|
-
// Go through all configs, and see if the next path segment matches our regex
|
|
256
|
-
for (const config of configs) {
|
|
257
|
-
if (!config.regex) {
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
const match = remainingPath.match(config.regex);
|
|
261
|
-
|
|
262
|
-
// If our regex matches, we need to extract params from the path
|
|
263
|
-
if (match) {
|
|
264
|
-
routes = config.routeNames.map(routeName => {
|
|
265
|
-
const routeConfig = configs.find(c => {
|
|
266
|
-
// Check matching name AND pattern in case same screen is used at different levels in config
|
|
267
|
-
return c.screen === routeName && (0, _arrayStartsWith.arrayStartsWith)(config.segments, c.segments);
|
|
268
|
-
});
|
|
269
|
-
const params = routeConfig && match.groups ? Object.fromEntries(Object.entries(match.groups).map(([key, value]) => {
|
|
270
|
-
const index = Number(key.replace('param_', ''));
|
|
271
|
-
const param = routeConfig.params.find(it => it.index === index);
|
|
272
|
-
if (param?.screen === routeName && param?.name) {
|
|
273
|
-
return [param.name, value];
|
|
274
|
-
}
|
|
275
|
-
return null;
|
|
276
|
-
}).filter(it => it != null).map(([key, value]) => {
|
|
277
|
-
if (value == null) {
|
|
278
|
-
return [key, undefined];
|
|
279
|
-
}
|
|
280
|
-
const decoded = decodeURIComponent(value);
|
|
281
|
-
const parsed = routeConfig.parse?.[key] ? routeConfig.parse[key](decoded) : decoded;
|
|
282
|
-
return [key, parsed];
|
|
283
|
-
})) : undefined;
|
|
284
|
-
if (params && Object.keys(params).length) {
|
|
285
|
-
return {
|
|
286
|
-
name: routeName,
|
|
287
|
-
params
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
return {
|
|
291
|
-
name: routeName
|
|
292
|
-
};
|
|
293
|
-
});
|
|
294
|
-
remainingPath = remainingPath.replace(match[0], '');
|
|
295
|
-
break;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return {
|
|
299
|
-
routes,
|
|
300
|
-
remainingPath
|
|
301
|
-
};
|
|
302
|
-
};
|
|
303
|
-
const createNormalizedConfigs = (screen, routeConfig, initials, paths, parentScreens, routeNames) => {
|
|
304
|
-
const configs = [];
|
|
305
|
-
routeNames.push(screen);
|
|
306
|
-
parentScreens.push(screen);
|
|
307
|
-
const config = routeConfig[screen];
|
|
308
|
-
if (typeof config === 'string') {
|
|
309
|
-
paths.push({
|
|
310
|
-
screen,
|
|
311
|
-
path: config
|
|
312
|
-
});
|
|
313
|
-
configs.push(createConfigItem(screen, [...routeNames], [...paths]));
|
|
314
|
-
} else if (typeof config === 'object') {
|
|
315
|
-
// if an object is specified as the value (e.g. Foo: { ... }),
|
|
316
|
-
// it can have `path` property and
|
|
317
|
-
// it could have `screens` prop which has nested configs
|
|
318
|
-
if (typeof config.path === 'string') {
|
|
319
|
-
if (config.exact && config.path == null) {
|
|
320
|
-
throw new Error(`Screen '${screen}' doesn't specify a 'path'. A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. \`path: ''\`.`);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// We should add alias configs after the main config
|
|
324
|
-
// So unless they are more specific, main config will be matched first
|
|
325
|
-
const aliasConfigs = [];
|
|
326
|
-
if (config.alias) {
|
|
327
|
-
for (const alias of config.alias) {
|
|
328
|
-
if (typeof alias === 'string') {
|
|
329
|
-
aliasConfigs.push(createConfigItem(screen, [...routeNames], [...paths, {
|
|
330
|
-
screen,
|
|
331
|
-
path: alias
|
|
332
|
-
}], config.parse));
|
|
333
|
-
} else if (typeof alias === 'object') {
|
|
334
|
-
aliasConfigs.push(createConfigItem(screen, [...routeNames], alias.exact ? [{
|
|
335
|
-
screen,
|
|
336
|
-
path: alias.path
|
|
337
|
-
}] : [...paths, {
|
|
338
|
-
screen,
|
|
339
|
-
path: alias.path
|
|
340
|
-
}], alias.parse));
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
if (config.exact) {
|
|
345
|
-
// If it's an exact path, we don't need to keep track of the parent screens
|
|
346
|
-
// So we can clear it
|
|
347
|
-
paths.length = 0;
|
|
348
|
-
}
|
|
349
|
-
paths.push({
|
|
350
|
-
screen,
|
|
351
|
-
path: config.path
|
|
352
|
-
});
|
|
353
|
-
configs.push(createConfigItem(screen, [...routeNames], [...paths], config.parse));
|
|
354
|
-
configs.push(...aliasConfigs);
|
|
355
|
-
}
|
|
356
|
-
if (typeof config !== 'string' && typeof config.path !== 'string' && config.alias?.length) {
|
|
357
|
-
throw new Error(`Screen '${screen}' doesn't specify a 'path'. A 'path' needs to be specified in order to use 'alias'.`);
|
|
358
|
-
}
|
|
359
|
-
if (config.screens) {
|
|
360
|
-
// property `initialRouteName` without `screens` has no purpose
|
|
361
|
-
if (config.initialRouteName) {
|
|
362
|
-
initials.push({
|
|
363
|
-
initialRouteName: config.initialRouteName,
|
|
364
|
-
parentScreens
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
Object.keys(config.screens).forEach(nestedConfig => {
|
|
368
|
-
const result = createNormalizedConfigs(nestedConfig, config.screens, initials, [...paths], [...parentScreens], routeNames);
|
|
369
|
-
configs.push(...result);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
routeNames.pop();
|
|
374
|
-
return configs;
|
|
375
|
-
};
|
|
376
|
-
const createConfigItem = (screen, routeNames, paths, parse) => {
|
|
377
|
-
const parts = [];
|
|
378
|
-
|
|
379
|
-
// Parse the path string into parts for easier matching
|
|
380
|
-
for (const {
|
|
381
|
-
screen,
|
|
382
|
-
path
|
|
383
|
-
} of paths) {
|
|
384
|
-
parts.push(...(0, _getPatternParts.getPatternParts)(path).map(part => ({
|
|
385
|
-
...part,
|
|
386
|
-
screen
|
|
387
|
-
})));
|
|
388
|
-
}
|
|
389
|
-
const regex = parts.length ? new RegExp(`^(${parts.map((it, i) => {
|
|
390
|
-
if (it.param) {
|
|
391
|
-
const reg = it.regex || '[^/]+';
|
|
392
|
-
return `(((?<param_${i}>${reg})\\/)${it.optional ? '?' : ''})`;
|
|
393
|
-
}
|
|
394
|
-
return `${it.segment === '*' ? '.*' : (0, _escapeStringRegexp.default)(it.segment)}\\/`;
|
|
395
|
-
}).join('')})$`) : undefined;
|
|
396
|
-
const segments = parts.map(it => it.segment);
|
|
397
|
-
const params = parts.map((it, i) => it.param ? {
|
|
398
|
-
index: i,
|
|
399
|
-
screen: it.screen,
|
|
400
|
-
name: it.param
|
|
401
|
-
} : null).filter(it => it != null);
|
|
402
|
-
return {
|
|
403
|
-
screen,
|
|
404
|
-
regex,
|
|
405
|
-
segments,
|
|
406
|
-
params,
|
|
407
|
-
routeNames,
|
|
408
|
-
parse
|
|
409
|
-
};
|
|
410
|
-
};
|
|
411
|
-
const findParseConfigForRoute = (routeName, flatConfig) => {
|
|
412
|
-
for (const config of flatConfig) {
|
|
413
|
-
if (routeName === config.routeNames[config.routeNames.length - 1]) {
|
|
414
|
-
return config.parse;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
return undefined;
|
|
418
|
-
};
|
|
419
|
-
|
|
420
|
-
// Try to find an initial route connected with the one passed
|
|
421
|
-
const findInitialRoute = (routeName, parentScreens, initialRoutes) => {
|
|
422
|
-
for (const config of initialRoutes) {
|
|
423
|
-
if (parentScreens.length === config.parentScreens.length) {
|
|
424
|
-
let sameParents = true;
|
|
425
|
-
for (let i = 0; i < parentScreens.length; i++) {
|
|
426
|
-
if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {
|
|
427
|
-
sameParents = false;
|
|
428
|
-
break;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
if (sameParents) {
|
|
432
|
-
return routeName !== config.initialRouteName ? config.initialRouteName : undefined;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
return undefined;
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
// returns state object with values depending on whether
|
|
440
|
-
// it is the end of state and if there is initialRoute for this level
|
|
441
|
-
const createStateObject = (initialRoute, route, isEmpty) => {
|
|
442
|
-
if (isEmpty) {
|
|
443
|
-
if (initialRoute) {
|
|
444
|
-
return {
|
|
445
|
-
index: 1,
|
|
446
|
-
routes: [{
|
|
447
|
-
name: initialRoute
|
|
448
|
-
}, route]
|
|
449
|
-
};
|
|
450
|
-
} else {
|
|
451
|
-
return {
|
|
452
|
-
routes: [route]
|
|
453
|
-
};
|
|
454
|
-
}
|
|
455
|
-
} else {
|
|
456
|
-
if (initialRoute) {
|
|
457
|
-
return {
|
|
458
|
-
index: 1,
|
|
459
|
-
routes: [{
|
|
460
|
-
name: initialRoute
|
|
461
|
-
}, {
|
|
462
|
-
...route,
|
|
463
|
-
state: {
|
|
464
|
-
routes: []
|
|
465
|
-
}
|
|
466
|
-
}]
|
|
467
|
-
};
|
|
468
|
-
} else {
|
|
469
|
-
return {
|
|
470
|
-
routes: [{
|
|
471
|
-
...route,
|
|
472
|
-
state: {
|
|
473
|
-
routes: []
|
|
474
|
-
}
|
|
475
|
-
}]
|
|
476
|
-
};
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
};
|
|
480
|
-
const createNestedStateObject = (path, routes, initialRoutes, flatConfig) => {
|
|
481
|
-
let route = routes.shift();
|
|
482
|
-
const parentScreens = [];
|
|
483
|
-
let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);
|
|
484
|
-
parentScreens.push(route.name);
|
|
485
|
-
const state = createStateObject(initialRoute, route, routes.length === 0);
|
|
486
|
-
if (routes.length > 0) {
|
|
487
|
-
let nestedState = state;
|
|
488
|
-
while (route = routes.shift()) {
|
|
489
|
-
initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);
|
|
490
|
-
const nestedStateIndex = nestedState.index || nestedState.routes.length - 1;
|
|
491
|
-
nestedState.routes[nestedStateIndex].state = createStateObject(initialRoute, route, routes.length === 0);
|
|
492
|
-
if (routes.length > 0) {
|
|
493
|
-
nestedState = nestedState.routes[nestedStateIndex].state;
|
|
494
|
-
}
|
|
495
|
-
parentScreens.push(route.name);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
route = (0, _findFocusedRoute.findFocusedRoute)(state);
|
|
499
|
-
route.path = path.replace(/\/$/, '');
|
|
500
|
-
const params = parseQueryParams(path, flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined);
|
|
501
|
-
if (params) {
|
|
502
|
-
route.params = {
|
|
503
|
-
...route.params,
|
|
504
|
-
...params
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
return state;
|
|
508
|
-
};
|
|
509
|
-
const parseQueryParams = (path, parseConfig) => {
|
|
510
|
-
const query = path.split('?')[1];
|
|
511
|
-
const params = queryString.parse(query);
|
|
512
|
-
if (parseConfig) {
|
|
513
|
-
Object.keys(params).forEach(name => {
|
|
514
|
-
if (Object.hasOwnProperty.call(parseConfig, name) && typeof params[name] === 'string') {
|
|
515
|
-
params[name] = parseConfig[name](params[name]);
|
|
516
|
-
}
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
return Object.keys(params).length ? params : undefined;
|
|
520
|
-
};
|
|
521
|
-
//# sourceMappingURL=getStateFromPath.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_escapeStringRegexp","_interopRequireDefault","require","queryString","_interopRequireWildcard","_arrayStartsWith","_findFocusedRoute","_getPatternParts","_isArrayEqual","_validatePathConfig","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","getStateFromPath","path","options","initialRoutes","configs","getConfigResources","screens","remaining","replace","endsWith","prefix","normalizedPrefix","startsWith","undefined","routes","split","filter","Boolean","map","segment","name","decodeURIComponent","length","createNestedStateObject","match","find","config","segments","join","routeNames","result","current","remainingPath","matchAgainstConfigs","cachedConfigResources","prepareConfigResources","cached","resources","validatePathConfig","getInitialRoutes","getSortedNormalizedConfigs","checkForDuplicatedConfigs","configWithRegexes","getConfigsWithRegexes","initialRouteName","push","parentScreens","concat","keys","key","createNormalizedConfigs","sort","b","isArrayEqual","localeCompare","arrayStartsWith","Math","max","aWildCard","bWildCard","aParam","bParam","aRegex","includes","bRegex","reduce","acc","pattern","intersects","every","it","Error","assign","c","regex","RegExp","source","routeName","routeConfig","screen","params","groups","fromEntries","entries","value","index","Number","param","decoded","parsed","parse","initials","paths","createConfigItem","exact","aliasConfigs","alias","forEach","nestedConfig","pop","parts","getPatternParts","part","reg","optional","escape","findParseConfigForRoute","flatConfig","findInitialRoute","sameParents","createStateObject","initialRoute","route","isEmpty","state","shift","nestedState","nestedStateIndex","findFocusedRoute","parseQueryParams","parseConfig","query"],"sourceRoot":"../../src","sources":["getStateFromPath.tsx"],"mappings":"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","ignoreList":[]}
|