@react-navigation/core 8.0.0-alpha.4 → 8.0.0-alpha.40
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/README.md +17 -14
- package/lib/module/BaseNavigationContainer.js +168 -87
- package/lib/module/BaseNavigationContainer.js.map +1 -1
- package/lib/module/ConsumedParamsContext.js +5 -0
- package/lib/module/ConsumedParamsContext.js.map +1 -0
- package/lib/module/DataLoading.js +129 -0
- package/lib/module/DataLoading.js.map +1 -0
- package/lib/module/NavigationBuilderContext.js +7 -10
- package/lib/module/NavigationBuilderContext.js.map +1 -1
- package/lib/module/NavigationIndependentTree.js +54 -9
- package/lib/module/NavigationIndependentTree.js.map +1 -1
- package/lib/module/NavigationProvider.js +36 -11
- package/lib/module/NavigationProvider.js.map +1 -1
- package/lib/module/NavigationRootContext.js +8 -0
- package/lib/module/NavigationRootContext.js.map +1 -0
- package/lib/module/NavigationStateContext.js +3 -0
- package/lib/module/NavigationStateContext.js.map +1 -1
- package/lib/module/PreventRemoveContext.js.map +1 -1
- package/lib/module/PreventRemoveProvider.js +40 -31
- package/lib/module/PreventRemoveProvider.js.map +1 -1
- package/lib/module/SceneView.js +12 -42
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/StaticNavigation.js +219 -67
- package/lib/module/StaticNavigation.js.map +1 -1
- package/lib/module/StaticTreeContext.js +5 -0
- package/lib/module/StaticTreeContext.js.map +1 -0
- package/lib/module/createNavigationContainerRef.js +7 -9
- package/lib/module/createNavigationContainerRef.js.map +1 -1
- package/lib/module/createNavigatorFactory.js +27 -5
- package/lib/module/createNavigatorFactory.js.map +1 -1
- package/lib/module/findFocusedRoute.js +7 -4
- package/lib/module/findFocusedRoute.js.map +1 -1
- package/lib/module/getActionFromState.js +45 -20
- package/lib/module/getActionFromState.js.map +1 -1
- package/lib/module/getPathFromState.js +204 -94
- package/lib/module/getPathFromState.js.map +1 -1
- package/lib/module/getPatternParts.js +61 -14
- package/lib/module/getPatternParts.js.map +1 -1
- package/lib/module/getStateFromPath.js +608 -272
- package/lib/module/getStateFromPath.js.map +1 -1
- package/lib/module/getStateFromRouteParams.js +23 -0
- package/lib/module/getStateFromRouteParams.js.map +1 -0
- package/lib/module/index.js +7 -6
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal.js +2 -0
- package/lib/module/internal.js.map +1 -0
- package/lib/module/isRecordEqual.js +1 -1
- package/lib/module/isRecordEqual.js.map +1 -1
- package/lib/module/queryString.js +71 -0
- package/lib/module/queryString.js.map +1 -0
- package/lib/module/theming/useTheme.js +1 -1
- package/lib/module/theming/useTheme.js.map +1 -1
- package/lib/module/types.js +35 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useDescriptors.js +65 -25
- package/lib/module/useDescriptors.js.map +1 -1
- package/lib/module/useEventEmitter.js +48 -33
- package/lib/module/useEventEmitter.js.map +1 -1
- package/lib/module/useFocusEffect.js +4 -2
- package/lib/module/useFocusEffect.js.map +1 -1
- package/lib/module/useFocusEvents.js +15 -5
- package/lib/module/useFocusEvents.js.map +1 -1
- package/lib/module/useFocusedListenersChildrenAdapter.js +3 -3
- package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
- package/lib/module/useIsFocused.js +8 -12
- package/lib/module/useIsFocused.js.map +1 -1
- package/lib/module/useKeyedChildListeners.js +5 -2
- package/lib/module/useKeyedChildListeners.js.map +1 -1
- package/lib/module/useLazyValue.js.map +1 -1
- package/lib/module/useNavigation.js +4 -17
- package/lib/module/useNavigation.js.map +1 -1
- package/lib/module/useNavigationBuilder.js +244 -147
- package/lib/module/useNavigationBuilder.js.map +1 -1
- package/lib/module/useNavigationCache.js +92 -89
- package/lib/module/useNavigationCache.js.map +1 -1
- package/lib/module/useNavigationHelpers.js +22 -29
- package/lib/module/useNavigationHelpers.js.map +1 -1
- package/lib/module/useNavigationIndependentTree.js +1 -1
- package/lib/module/useNavigationIndependentTree.js.map +1 -1
- package/lib/module/useNavigationState.js +158 -46
- package/lib/module/useNavigationState.js.map +1 -1
- package/lib/module/useOnAction.js +58 -11
- package/lib/module/useOnAction.js.map +1 -1
- package/lib/module/useOnGetNavigation.js +26 -0
- package/lib/module/useOnGetNavigation.js.map +1 -0
- package/lib/module/useOnGetState.js +7 -4
- package/lib/module/useOnGetState.js.map +1 -1
- package/lib/module/useOnPreventRemove.js +40 -31
- package/lib/module/useOnPreventRemove.js.map +1 -1
- package/lib/module/useOnRouteFocus.js +2 -2
- package/lib/module/useOnRouteFocus.js.map +1 -1
- package/lib/module/useOptionsGetters.js +34 -24
- package/lib/module/useOptionsGetters.js.map +1 -1
- package/lib/module/usePreventRemove.js +11 -5
- package/lib/module/usePreventRemove.js.map +1 -1
- package/lib/module/usePreventRemoveContext.js +2 -2
- package/lib/module/usePreventRemoveContext.js.map +1 -1
- package/lib/module/useRegisterNavigator.js +3 -4
- package/lib/module/useRegisterNavigator.js.map +1 -1
- package/lib/module/useRoute.js +2 -0
- package/lib/module/useRoute.js.map +1 -1
- package/lib/module/useRouteCache.js +51 -35
- package/lib/module/useRouteCache.js.map +1 -1
- package/lib/module/useScheduleUpdate.js +12 -10
- package/lib/module/useScheduleUpdate.js.map +1 -1
- package/lib/module/useStateForPath.js +1 -1
- package/lib/module/useStateForPath.js.map +1 -1
- package/lib/module/useSyncState.js +37 -15
- package/lib/module/useSyncState.js.map +1 -1
- package/lib/module/validatePathConfig.js +50 -36
- package/lib/module/validatePathConfig.js.map +1 -1
- package/lib/typescript/src/BaseNavigationContainer.d.ts +6 -3
- package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
- package/lib/typescript/src/ConsumedParamsContext.d.ts +3 -0
- package/lib/typescript/src/ConsumedParamsContext.d.ts.map +1 -0
- package/lib/typescript/src/DataLoading.d.ts +21 -0
- package/lib/typescript/src/DataLoading.d.ts.map +1 -0
- package/lib/typescript/src/EnsureSingleNavigator.d.ts +1 -1
- package/lib/typescript/src/EnsureSingleNavigator.d.ts.map +1 -1
- package/lib/typescript/src/Group.d.ts +1 -1
- package/lib/typescript/src/Group.d.ts.map +1 -1
- package/lib/typescript/src/NavigationBuilderContext.d.ts +22 -14
- package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationContainerRefContext.d.ts +1 -1
- package/lib/typescript/src/NavigationContainerRefContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts +4 -4
- package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationHelpersContext.d.ts +1 -1
- package/lib/typescript/src/NavigationHelpersContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationIndependentTree.d.ts +1 -1
- package/lib/typescript/src/NavigationIndependentTree.d.ts.map +1 -1
- package/lib/typescript/src/NavigationProvider.d.ts +21 -18
- package/lib/typescript/src/NavigationProvider.d.ts.map +1 -1
- package/lib/typescript/src/NavigationRootContext.d.ts +8 -0
- package/lib/typescript/src/NavigationRootContext.d.ts.map +1 -0
- package/lib/typescript/src/NavigationStateContext.d.ts +4 -3
- package/lib/typescript/src/NavigationStateContext.d.ts.map +1 -1
- package/lib/typescript/src/PreventRemoveContext.d.ts +1 -0
- package/lib/typescript/src/PreventRemoveContext.d.ts.map +1 -1
- package/lib/typescript/src/PreventRemoveProvider.d.ts +1 -1
- package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
- package/lib/typescript/src/SceneView.d.ts +5 -2
- package/lib/typescript/src/SceneView.d.ts.map +1 -1
- package/lib/typescript/src/Screen.d.ts +1 -1
- package/lib/typescript/src/Screen.d.ts.map +1 -1
- package/lib/typescript/src/StaticContainer.d.ts +1 -1
- package/lib/typescript/src/StaticContainer.d.ts.map +1 -1
- package/lib/typescript/src/StaticNavigation.d.ts +189 -111
- package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
- package/lib/typescript/src/StaticTreeContext.d.ts +4 -0
- package/lib/typescript/src/StaticTreeContext.d.ts.map +1 -0
- package/lib/typescript/src/createNavigationContainerRef.d.ts +1 -1
- package/lib/typescript/src/createNavigationContainerRef.d.ts.map +1 -1
- package/lib/typescript/src/createNavigatorFactory.d.ts +23 -5
- package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
- package/lib/typescript/src/findFocusedRoute.d.ts +3 -8
- package/lib/typescript/src/findFocusedRoute.d.ts.map +1 -1
- package/lib/typescript/src/getActionFromState.d.ts +4 -4
- package/lib/typescript/src/getActionFromState.d.ts.map +1 -1
- package/lib/typescript/src/getPathFromState.d.ts +3 -3
- package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
- package/lib/typescript/src/getPatternParts.d.ts +5 -2
- package/lib/typescript/src/getPatternParts.d.ts.map +1 -1
- package/lib/typescript/src/getStateFromPath.d.ts +4 -7
- package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
- package/lib/typescript/src/getStateFromRouteParams.d.ts +3 -0
- package/lib/typescript/src/getStateFromRouteParams.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +36 -33
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/internal.d.ts +3 -0
- package/lib/typescript/src/internal.d.ts.map +1 -0
- package/lib/typescript/src/isRecordEqual.d.ts.map +1 -1
- package/lib/typescript/src/queryString.d.ts +5 -0
- package/lib/typescript/src/queryString.d.ts.map +1 -0
- package/lib/typescript/src/theming/ThemeContext.d.ts +1 -1
- package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -1
- package/lib/typescript/src/theming/ThemeProvider.d.ts +2 -2
- package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -1
- package/lib/typescript/src/theming/useTheme.d.ts +1 -1
- package/lib/typescript/src/theming/useTheme.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +265 -167
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useChildListeners.d.ts +3 -3
- package/lib/typescript/src/useChildListeners.d.ts.map +1 -1
- package/lib/typescript/src/useDescriptors.d.ts +13 -11
- package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
- package/lib/typescript/src/useEventEmitter.d.ts +2 -2
- package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
- package/lib/typescript/src/useFocusEffect.d.ts.map +1 -1
- package/lib/typescript/src/useFocusEvents.d.ts +2 -2
- package/lib/typescript/src/useFocusEvents.d.ts.map +1 -1
- package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts +2 -2
- package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts.map +1 -1
- package/lib/typescript/src/useIsFocused.d.ts +4 -0
- package/lib/typescript/src/useIsFocused.d.ts.map +1 -1
- package/lib/typescript/src/useKeyedChildListeners.d.ts +4 -3
- package/lib/typescript/src/useKeyedChildListeners.d.ts.map +1 -1
- package/lib/typescript/src/useLazyValue.d.ts.map +1 -1
- package/lib/typescript/src/useNavigation.d.ts +4 -2
- package/lib/typescript/src/useNavigation.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationBuilder.d.ts +22 -63
- package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationCache.d.ts +6 -5
- package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationContainerRef.d.ts +1 -1
- package/lib/typescript/src/useNavigationContainerRef.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationHelpers.d.ts +18 -58
- package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationState.d.ts +19 -3
- package/lib/typescript/src/useNavigationState.d.ts.map +1 -1
- package/lib/typescript/src/useOnAction.d.ts +9 -9
- package/lib/typescript/src/useOnAction.d.ts.map +1 -1
- package/lib/typescript/src/useOnGetNavigation.d.ts +12 -0
- package/lib/typescript/src/useOnGetNavigation.d.ts.map +1 -0
- package/lib/typescript/src/useOnGetState.d.ts +1 -1
- package/lib/typescript/src/useOnGetState.d.ts.map +1 -1
- package/lib/typescript/src/useOnPreventRemove.d.ts +5 -9
- package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
- package/lib/typescript/src/useOnRouteFocus.d.ts +6 -6
- package/lib/typescript/src/useOnRouteFocus.d.ts.map +1 -1
- package/lib/typescript/src/useOptionsGetters.d.ts +2 -4
- package/lib/typescript/src/useOptionsGetters.d.ts.map +1 -1
- package/lib/typescript/src/usePreventRemove.d.ts.map +1 -1
- package/lib/typescript/src/usePreventRemoveContext.d.ts +2 -1
- package/lib/typescript/src/usePreventRemoveContext.d.ts.map +1 -1
- package/lib/typescript/src/useRegisterNavigator.d.ts.map +1 -1
- package/lib/typescript/src/useRoute.d.ts +7 -3
- package/lib/typescript/src/useRoute.d.ts.map +1 -1
- package/lib/typescript/src/useRouteCache.d.ts +7 -12
- package/lib/typescript/src/useRouteCache.d.ts.map +1 -1
- package/lib/typescript/src/useScheduleUpdate.d.ts +5 -4
- package/lib/typescript/src/useScheduleUpdate.d.ts.map +1 -1
- package/lib/typescript/src/useStateForPath.d.ts +1 -1
- package/lib/typescript/src/useStateForPath.d.ts.map +1 -1
- package/lib/typescript/src/useSyncState.d.ts +1 -0
- package/lib/typescript/src/useSyncState.d.ts.map +1 -1
- package/lib/typescript/src/utilities.d.ts +79 -39
- package/lib/typescript/src/utilities.d.ts.map +1 -1
- package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
- package/package.json +26 -22
- package/src/BaseNavigationContainer.tsx +468 -333
- package/src/ConsumedParamsContext.tsx +5 -0
- package/src/DataLoading.tsx +206 -0
- package/src/NavigationBuilderContext.tsx +44 -25
- package/src/NavigationFocusedRouteStateContext.tsx +4 -4
- package/src/NavigationIndependentTree.tsx +60 -12
- package/src/NavigationProvider.tsx +47 -20
- package/src/NavigationRootContext.tsx +11 -0
- package/src/NavigationStateContext.tsx +9 -6
- package/src/PreventRemoveContext.tsx +1 -0
- package/src/PreventRemoveProvider.tsx +55 -56
- package/src/SceneView.tsx +14 -40
- package/src/StaticNavigation.tsx +715 -328
- package/src/StaticTreeContext.tsx +7 -0
- package/src/createNavigationContainerRef.tsx +12 -11
- package/src/createNavigatorFactory.tsx +92 -8
- package/src/findFocusedRoute.tsx +16 -16
- package/src/getActionFromState.tsx +87 -51
- package/src/getPathFromState.tsx +310 -134
- package/src/getPatternParts.tsx +98 -16
- package/src/getStateFromPath.tsx +971 -344
- package/src/getStateFromRouteParams.tsx +59 -0
- package/src/index.tsx +57 -6
- package/src/internal.tsx +2 -0
- package/src/isRecordEqual.tsx +3 -1
- package/src/queryString.ts +109 -0
- package/src/theming/useTheme.tsx +1 -1
- package/src/types.tsx +799 -377
- package/src/useDescriptors.tsx +151 -43
- package/src/useEventEmitter.tsx +53 -39
- package/src/useFocusEffect.tsx +5 -2
- package/src/useFocusEvents.tsx +19 -8
- package/src/useFocusedListenersChildrenAdapter.tsx +3 -3
- package/src/useIsFocused.tsx +18 -21
- package/src/useKeyedChildListeners.tsx +5 -2
- package/src/useLazyValue.tsx +2 -2
- package/src/useNavigation.tsx +9 -26
- package/src/useNavigationBuilder.tsx +370 -201
- package/src/useNavigationCache.tsx +148 -123
- package/src/useNavigationHelpers.tsx +27 -37
- package/src/useNavigationIndependentTree.tsx +1 -1
- package/src/useNavigationState.tsx +207 -69
- package/src/useOnAction.tsx +92 -18
- package/src/useOnGetNavigation.tsx +30 -0
- package/src/useOnGetState.tsx +8 -4
- package/src/useOnPreventRemove.tsx +78 -43
- package/src/useOnRouteFocus.tsx +11 -15
- package/src/useOptionsGetters.tsx +41 -28
- package/src/usePreventRemove.tsx +13 -5
- package/src/usePreventRemoveContext.tsx +2 -2
- package/src/useRegisterNavigator.tsx +4 -4
- package/src/useRoute.tsx +20 -6
- package/src/useRouteCache.tsx +57 -35
- package/src/useScheduleUpdate.tsx +13 -11
- package/src/useStateForPath.tsx +1 -1
- package/src/useSyncState.tsx +39 -15
- package/src/utilities.tsx +151 -35
- package/src/validatePathConfig.tsx +86 -57
- package/lib/module/CurrentRenderContext.js +0 -10
- package/lib/module/CurrentRenderContext.js.map +0 -1
- package/lib/module/NavigationMetaContext.js +0 -15
- package/lib/module/NavigationMetaContext.js.map +0 -1
- package/lib/module/checkSerializable.js +0 -46
- package/lib/module/checkSerializable.js.map +0 -1
- package/lib/module/useComponent.js +0 -34
- package/lib/module/useComponent.js.map +0 -1
- package/lib/module/useCurrentRender.js +0 -19
- package/lib/module/useCurrentRender.js.map +0 -1
- package/lib/typescript/src/CurrentRenderContext.d.ts +0 -9
- package/lib/typescript/src/CurrentRenderContext.d.ts.map +0 -1
- package/lib/typescript/src/NavigationMetaContext.d.ts +0 -12
- package/lib/typescript/src/NavigationMetaContext.d.ts.map +0 -1
- package/lib/typescript/src/checkSerializable.d.ts +0 -10
- package/lib/typescript/src/checkSerializable.d.ts.map +0 -1
- package/lib/typescript/src/useComponent.d.ts +0 -7
- package/lib/typescript/src/useComponent.d.ts.map +0 -1
- package/lib/typescript/src/useCurrentRender.d.ts +0 -14
- package/lib/typescript/src/useCurrentRender.d.ts.map +0 -1
- package/src/CurrentRenderContext.tsx +0 -9
- package/src/NavigationMetaContext.tsx +0 -14
- package/src/checkSerializable.tsx +0 -74
- package/src/useComponent.tsx +0 -37
- package/src/useCurrentRender.tsx +0 -31
|
@@ -10,6 +10,9 @@ export function getPatternParts(path) {
|
|
|
10
10
|
};
|
|
11
11
|
let isRegex = false;
|
|
12
12
|
let isParam = false;
|
|
13
|
+
let hasRepeat = false;
|
|
14
|
+
let isEscaped = false;
|
|
15
|
+
let isInCharClass = false;
|
|
13
16
|
let regexInnerParens = 0;
|
|
14
17
|
|
|
15
18
|
// One extra iteration to add the last character
|
|
@@ -25,7 +28,7 @@ export function getPatternParts(path) {
|
|
|
25
28
|
} else if (!isRegex) {
|
|
26
29
|
throw new Error(`Encountered ':' in the middle of a segment in path: ${path}`);
|
|
27
30
|
}
|
|
28
|
-
} else if (char === '(') {
|
|
31
|
+
} else if (char === '(' && !isEscaped && !isInCharClass) {
|
|
29
32
|
if (isParam) {
|
|
30
33
|
if (isRegex) {
|
|
31
34
|
// The '(' is part of the regex if we're already inside one
|
|
@@ -36,26 +39,33 @@ export function getPatternParts(path) {
|
|
|
36
39
|
} else {
|
|
37
40
|
throw new Error(`Encountered '(' without preceding ':' in path: ${path}`);
|
|
38
41
|
}
|
|
39
|
-
} else if (char === ')') {
|
|
42
|
+
} else if (char === ')' && !isEscaped && !isInCharClass) {
|
|
40
43
|
if (isParam && isRegex) {
|
|
41
44
|
if (regexInnerParens) {
|
|
42
45
|
// The ')' is part of the regex if we're already inside one
|
|
43
46
|
regexInnerParens--;
|
|
44
|
-
current.regex += char;
|
|
45
47
|
} else {
|
|
48
|
+
current.pattern += char;
|
|
46
49
|
isRegex = false;
|
|
47
50
|
isParam = false;
|
|
48
51
|
}
|
|
49
52
|
} else {
|
|
50
53
|
throw new Error(`Encountered ')' without preceding '(' in path: ${path}`);
|
|
51
54
|
}
|
|
52
|
-
} else if (char === '?') {
|
|
53
|
-
if (current.
|
|
55
|
+
} else if (char === '?' && !isRegex) {
|
|
56
|
+
if (current.name) {
|
|
54
57
|
isParam = false;
|
|
55
58
|
current.optional = true;
|
|
56
59
|
} else {
|
|
57
60
|
throw new Error(`Encountered '?' without preceding ':' in path: ${path}`);
|
|
58
61
|
}
|
|
62
|
+
} else if (current.name && !isRegex && (char === '*' || char === '+') && (path[i + 1] == null || path[i + 1] === '/' || path[i + 1] === '?' || path[i + 1] === '*' || path[i + 1] === '+')) {
|
|
63
|
+
if (current.optional || path[i + 1] !== undefined && path[i + 1] !== '/') {
|
|
64
|
+
throw new Error(`Cannot combine path param modifiers in path: ${path}`);
|
|
65
|
+
}
|
|
66
|
+
isParam = false;
|
|
67
|
+
current.repeat = char === '*' ? 'zero-or-more' : 'one-or-more';
|
|
68
|
+
hasRepeat = true;
|
|
59
69
|
} else if (char == null || char === '/' && !isRegex) {
|
|
60
70
|
isParam = false;
|
|
61
71
|
|
|
@@ -64,11 +74,11 @@ export function getPatternParts(path) {
|
|
|
64
74
|
if (current.segment === '') {
|
|
65
75
|
continue;
|
|
66
76
|
}
|
|
67
|
-
if (current.
|
|
68
|
-
current.
|
|
77
|
+
if (current.name) {
|
|
78
|
+
current.name = current.name.replace(/^:/, '');
|
|
69
79
|
}
|
|
70
|
-
if (current.
|
|
71
|
-
current.
|
|
80
|
+
if (current.pattern) {
|
|
81
|
+
current.pattern = current.pattern.replace(/^\(/, '').replace(/\)$/, '');
|
|
72
82
|
}
|
|
73
83
|
parts.push(current);
|
|
74
84
|
if (char == null) {
|
|
@@ -79,23 +89,60 @@ export function getPatternParts(path) {
|
|
|
79
89
|
};
|
|
80
90
|
}
|
|
81
91
|
if (isRegex) {
|
|
82
|
-
current.
|
|
83
|
-
current.
|
|
92
|
+
current.pattern = current.pattern || '';
|
|
93
|
+
current.pattern += char;
|
|
94
|
+
|
|
95
|
+
// Track escapes and character classes so parens inside them are not special
|
|
96
|
+
if (isEscaped) {
|
|
97
|
+
isEscaped = false;
|
|
98
|
+
} else if (char === '\\') {
|
|
99
|
+
isEscaped = true;
|
|
100
|
+
} else if (char === '[') {
|
|
101
|
+
isInCharClass = true;
|
|
102
|
+
} else if (char === ']') {
|
|
103
|
+
isInCharClass = false;
|
|
104
|
+
}
|
|
84
105
|
}
|
|
85
106
|
if (isParam && !isRegex) {
|
|
86
|
-
current.
|
|
87
|
-
current.
|
|
107
|
+
current.name = current.name || '';
|
|
108
|
+
current.name += char;
|
|
88
109
|
}
|
|
89
110
|
}
|
|
90
111
|
if (isRegex) {
|
|
91
112
|
throw new Error(`Could not find closing ')' in path: ${path}`);
|
|
92
113
|
}
|
|
93
|
-
const params = parts.map(part => part.
|
|
114
|
+
const params = parts.map(part => part.name).filter(Boolean);
|
|
94
115
|
for (const [index, param] of params.entries()) {
|
|
95
116
|
if (params.indexOf(param) !== index) {
|
|
96
117
|
throw new Error(`Duplicate param name '${param}' found in path: ${path}`);
|
|
97
118
|
}
|
|
98
119
|
}
|
|
120
|
+
if (hasRepeat) {
|
|
121
|
+
validateRepeatedParts(parts, path);
|
|
122
|
+
}
|
|
99
123
|
return parts;
|
|
100
124
|
}
|
|
125
|
+
function validateRepeatedParts(parts, path) {
|
|
126
|
+
let variablePart;
|
|
127
|
+
for (const part of parts) {
|
|
128
|
+
if (!part.name && part.segment !== '*') {
|
|
129
|
+
variablePart = undefined;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (!part.repeat && !part.optional && part.segment !== '*') {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (variablePart && (variablePart.repeat || part.repeat)) {
|
|
136
|
+
throw new Error(`A repeated param must be separated from optional, repeated, or wildcard segments by a static segment: ${path}`);
|
|
137
|
+
}
|
|
138
|
+
variablePart = part;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export function combinePatternParts(parentParts, parts, exact = false) {
|
|
142
|
+
const combined = exact ? parts : [...parentParts, ...parts];
|
|
143
|
+
if (combined.some(part => part.repeat)) {
|
|
144
|
+
validateRepeatedParts(combined, combined.map(part => part.segment).join('/'));
|
|
145
|
+
}
|
|
146
|
+
return combined;
|
|
147
|
+
}
|
|
101
148
|
//# sourceMappingURL=getPatternParts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getPatternParts","path","parts","current","segment","isRegex","isParam","regexInnerParens","i","length","char","Error","
|
|
1
|
+
{"version":3,"names":["getPatternParts","path","parts","current","segment","isRegex","isParam","hasRepeat","isEscaped","isInCharClass","regexInnerParens","i","length","char","Error","pattern","name","optional","undefined","repeat","replace","push","params","map","part","filter","Boolean","index","param","entries","indexOf","validateRepeatedParts","variablePart","combinePatternParts","parentParts","exact","combined","some","join"],"sourceRoot":"../../src","sources":["getPatternParts.tsx"],"mappings":"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","ignoreList":[]}
|