one 1.1.390 → 1.1.392
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/dist/cjs/Root.cjs +6 -17
- package/dist/cjs/Root.js +9 -13
- package/dist/cjs/Root.js.map +1 -1
- package/dist/cjs/Root.native.js +4 -12
- package/dist/cjs/Root.native.js.map +1 -1
- package/dist/cjs/cli/build.cjs +2 -3
- package/dist/cjs/cli/build.js +2 -3
- package/dist/cjs/cli/build.js.map +1 -1
- package/dist/cjs/cli/build.native.js +2 -3
- package/dist/cjs/cli/build.native.js.map +2 -2
- package/dist/cjs/constants.cjs +9 -1
- package/dist/cjs/constants.js +7 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/constants.native.js +9 -1
- package/dist/cjs/constants.native.js.map +2 -2
- package/dist/cjs/fork/NavigationContainer.cjs +49 -31
- package/dist/cjs/fork/NavigationContainer.js +40 -21
- package/dist/cjs/fork/NavigationContainer.js.map +2 -2
- package/dist/cjs/fork/NavigationContainer.native.js +51 -29
- package/dist/cjs/fork/NavigationContainer.native.js.map +2 -2
- package/dist/cjs/fork/createMemoryHistory.cjs +4 -3
- package/dist/cjs/fork/createMemoryHistory.js +3 -2
- package/dist/cjs/fork/createMemoryHistory.js.map +1 -1
- package/dist/cjs/fork/createMemoryHistory.native.js +8 -4
- package/dist/cjs/fork/createMemoryHistory.native.js.map +2 -2
- package/dist/cjs/fork/extractPathFromURL.cjs +48 -28
- package/dist/cjs/fork/extractPathFromURL.js +44 -21
- package/dist/cjs/fork/extractPathFromURL.js.map +2 -2
- package/dist/cjs/fork/extractPathFromURL.native.js +58 -26
- package/dist/cjs/fork/extractPathFromURL.native.js.map +2 -2
- package/dist/cjs/fork/findFocusedRoute.js.map +1 -1
- package/dist/cjs/fork/findFocusedRoute.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState-mods.cjs +65 -0
- package/dist/cjs/fork/getPathFromState-mods.js +56 -0
- package/dist/cjs/fork/getPathFromState-mods.js.map +6 -0
- package/dist/cjs/fork/getPathFromState-mods.native.js +70 -0
- package/dist/cjs/fork/getPathFromState-mods.native.js.map +6 -0
- package/dist/cjs/fork/getPathFromState.cjs +75 -224
- package/dist/cjs/fork/getPathFromState.js +68 -223
- package/dist/cjs/fork/getPathFromState.js.map +2 -2
- package/dist/cjs/fork/getPathFromState.native.js +79 -261
- package/dist/cjs/fork/getPathFromState.native.js.map +2 -2
- package/dist/cjs/fork/getStateFromPath-mods.cjs +187 -0
- package/dist/cjs/fork/getStateFromPath-mods.js +199 -0
- package/dist/cjs/fork/getStateFromPath-mods.js.map +6 -0
- package/dist/cjs/fork/getStateFromPath-mods.native.js +284 -0
- package/dist/cjs/fork/getStateFromPath-mods.native.js.map +6 -0
- package/dist/cjs/fork/getStateFromPath.cjs +181 -263
- package/dist/cjs/fork/getStateFromPath.js +148 -264
- package/dist/cjs/fork/getStateFromPath.js.map +2 -2
- package/dist/cjs/fork/getStateFromPath.native.js +164 -304
- package/dist/cjs/fork/getStateFromPath.native.js.map +2 -2
- package/dist/cjs/fork/useBackButton.js.map +1 -1
- package/dist/cjs/fork/useBackButton.native.js.map +1 -1
- package/dist/cjs/fork/useDocumentTitle.js +4 -1
- package/dist/cjs/fork/useDocumentTitle.js.map +1 -1
- package/dist/cjs/fork/useDocumentTitle.native.js +1 -1
- package/dist/cjs/fork/useDocumentTitle.native.js.map +2 -2
- package/dist/cjs/fork/useLinking.cjs +21 -24
- package/dist/cjs/fork/useLinking.js +21 -25
- package/dist/cjs/fork/useLinking.js.map +2 -2
- package/dist/cjs/fork/useLinking.native.js +68 -66
- package/dist/cjs/fork/useLinking.native.js.map +2 -2
- package/dist/cjs/fork/useThenable.js.map +1 -1
- package/dist/cjs/fork/useThenable.native.js.map +1 -1
- package/dist/cjs/fork/validatePathConfig.cjs +32 -11
- package/dist/cjs/fork/validatePathConfig.js +41 -11
- package/dist/cjs/fork/validatePathConfig.js.map +1 -1
- package/dist/cjs/fork/validatePathConfig.native.js +47 -18
- package/dist/cjs/fork/validatePathConfig.native.js.map +2 -2
- package/dist/cjs/layouts/withLayoutContext.cjs +1 -1
- package/dist/cjs/layouts/withLayoutContext.js +1 -1
- package/dist/cjs/layouts/withLayoutContext.js.map +1 -1
- package/dist/cjs/layouts/withLayoutContext.native.js +1 -1
- package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
- package/dist/cjs/link/linking.cjs +4 -4
- package/dist/cjs/link/linking.js +3 -3
- package/dist/cjs/link/linking.js.map +2 -2
- package/dist/cjs/link/linking.native.js +3 -3
- package/dist/cjs/link/linking.native.js.map +1 -1
- package/dist/cjs/link/useLinkTo.cjs +2 -2
- package/dist/cjs/link/useLinkTo.js +2 -2
- package/dist/cjs/link/useLinkTo.js.map +1 -1
- package/dist/cjs/link/useLinkTo.native.js +2 -2
- package/dist/cjs/link/useLinkTo.native.js.map +1 -1
- package/dist/cjs/router/getNormalizedStatePath.cjs +2 -2
- package/dist/cjs/router/getNormalizedStatePath.js +2 -2
- package/dist/cjs/router/getNormalizedStatePath.js.map +1 -1
- package/dist/cjs/router/getNormalizedStatePath.native.js +2 -2
- package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
- package/dist/cjs/router/router.cjs +19 -3
- package/dist/cjs/router/router.js +25 -3
- package/dist/cjs/router/router.js.map +1 -1
- package/dist/cjs/router/router.native.js +39 -3
- package/dist/cjs/router/router.native.js.map +2 -2
- package/dist/cjs/utils/serverContext.cjs +7 -7
- package/dist/cjs/utils/serverContext.js +7 -7
- package/dist/cjs/utils/serverContext.js.map +1 -1
- package/dist/cjs/utils/serverContext.native.js +5 -5
- package/dist/cjs/utils/serverContext.native.js.map +2 -2
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +6 -6
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +3 -4
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +2 -2
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +3 -4
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +2 -2
- package/dist/esm/Root.js +6 -2
- package/dist/esm/Root.js.map +1 -1
- package/dist/esm/Root.mjs +1 -1
- package/dist/esm/Root.mjs.map +1 -1
- package/dist/esm/Root.native.js +1 -1
- package/dist/esm/Root.native.js.map +2 -2
- package/dist/esm/cli/build.js +2 -3
- package/dist/esm/cli/build.js.map +1 -1
- package/dist/esm/cli/build.mjs +2 -3
- package/dist/esm/cli/build.mjs.map +1 -1
- package/dist/esm/cli/build.native.js +2 -3
- package/dist/esm/cli/build.native.js.map +2 -2
- package/dist/esm/constants.js +7 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/constants.mjs +8 -2
- package/dist/esm/constants.mjs.map +1 -1
- package/dist/esm/constants.native.js +7 -1
- package/dist/esm/constants.native.js.map +2 -2
- package/dist/esm/fork/NavigationContainer.js +43 -20
- package/dist/esm/fork/NavigationContainer.js.map +1 -1
- package/dist/esm/fork/NavigationContainer.mjs +42 -24
- package/dist/esm/fork/NavigationContainer.mjs.map +1 -1
- package/dist/esm/fork/NavigationContainer.native.js +44 -24
- package/dist/esm/fork/NavigationContainer.native.js.map +2 -2
- package/dist/esm/fork/createMemoryHistory.js +3 -2
- package/dist/esm/fork/createMemoryHistory.js.map +1 -1
- package/dist/esm/fork/createMemoryHistory.mjs +4 -3
- package/dist/esm/fork/createMemoryHistory.mjs.map +1 -1
- package/dist/esm/fork/createMemoryHistory.native.js +4 -4
- package/dist/esm/fork/createMemoryHistory.native.js.map +2 -2
- package/dist/esm/fork/extractPathFromURL.js +42 -11
- package/dist/esm/fork/extractPathFromURL.js.map +1 -1
- package/dist/esm/fork/extractPathFromURL.mjs +39 -11
- package/dist/esm/fork/extractPathFromURL.mjs.map +1 -1
- package/dist/esm/fork/extractPathFromURL.native.js +52 -15
- package/dist/esm/fork/extractPathFromURL.native.js.map +2 -2
- package/dist/esm/fork/findFocusedRoute.js.map +1 -1
- package/dist/esm/fork/findFocusedRoute.mjs.map +1 -1
- package/dist/esm/fork/findFocusedRoute.native.js.map +1 -1
- package/dist/esm/fork/getPathFromState-mods.js +40 -0
- package/dist/esm/fork/getPathFromState-mods.js.map +6 -0
- package/dist/esm/fork/getPathFromState-mods.mjs +40 -0
- package/dist/esm/fork/getPathFromState-mods.mjs.map +1 -0
- package/dist/esm/fork/getPathFromState-mods.native.js +47 -0
- package/dist/esm/fork/getPathFromState-mods.native.js.map +6 -0
- package/dist/esm/fork/getPathFromState.js +71 -228
- package/dist/esm/fork/getPathFromState.js.map +2 -2
- package/dist/esm/fork/getPathFromState.mjs +73 -221
- package/dist/esm/fork/getPathFromState.mjs.map +1 -1
- package/dist/esm/fork/getPathFromState.native.js +79 -260
- package/dist/esm/fork/getPathFromState.native.js.map +2 -2
- package/dist/esm/fork/getStateFromPath-mods.js +176 -0
- package/dist/esm/fork/getStateFromPath-mods.js.map +6 -0
- package/dist/esm/fork/getStateFromPath-mods.mjs +143 -0
- package/dist/esm/fork/getStateFromPath-mods.mjs.map +1 -0
- package/dist/esm/fork/getStateFromPath-mods.native.js +246 -0
- package/dist/esm/fork/getStateFromPath-mods.native.js.map +6 -0
- package/dist/esm/fork/getStateFromPath.js +160 -265
- package/dist/esm/fork/getStateFromPath.js.map +2 -2
- package/dist/esm/fork/getStateFromPath.mjs +181 -260
- package/dist/esm/fork/getStateFromPath.mjs.map +1 -1
- package/dist/esm/fork/getStateFromPath.native.js +164 -302
- package/dist/esm/fork/getStateFromPath.native.js.map +2 -2
- package/dist/esm/fork/useBackButton.js.map +1 -1
- package/dist/esm/fork/useBackButton.mjs.map +1 -1
- package/dist/esm/fork/useBackButton.native.js.map +1 -1
- package/dist/esm/fork/useDocumentTitle.js +4 -1
- package/dist/esm/fork/useDocumentTitle.js.map +1 -1
- package/dist/esm/fork/useDocumentTitle.mjs.map +1 -1
- package/dist/esm/fork/useDocumentTitle.native.js +1 -1
- package/dist/esm/fork/useDocumentTitle.native.js.map +2 -2
- package/dist/esm/fork/useLinking.js +22 -26
- package/dist/esm/fork/useLinking.js.map +1 -1
- package/dist/esm/fork/useLinking.mjs +20 -23
- package/dist/esm/fork/useLinking.mjs.map +1 -1
- package/dist/esm/fork/useLinking.native.js +65 -67
- package/dist/esm/fork/useLinking.native.js.map +2 -2
- package/dist/esm/fork/useThenable.js.map +1 -1
- package/dist/esm/fork/useThenable.mjs.map +1 -1
- package/dist/esm/fork/useThenable.native.js.map +1 -1
- package/dist/esm/fork/validatePathConfig.js +41 -11
- package/dist/esm/fork/validatePathConfig.js.map +1 -1
- package/dist/esm/fork/validatePathConfig.mjs +32 -11
- package/dist/esm/fork/validatePathConfig.mjs.map +1 -1
- package/dist/esm/fork/validatePathConfig.native.js +43 -18
- package/dist/esm/fork/validatePathConfig.native.js.map +2 -2
- package/dist/esm/layouts/withLayoutContext.js +1 -1
- package/dist/esm/layouts/withLayoutContext.js.map +1 -1
- package/dist/esm/layouts/withLayoutContext.mjs +1 -1
- package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
- package/dist/esm/layouts/withLayoutContext.native.js +1 -1
- package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
- package/dist/esm/link/linking.js +2 -2
- package/dist/esm/link/linking.js.map +1 -1
- package/dist/esm/link/linking.mjs +2 -2
- package/dist/esm/link/linking.mjs.map +1 -1
- package/dist/esm/link/linking.native.js +2 -2
- package/dist/esm/link/linking.native.js.map +1 -1
- package/dist/esm/link/useLinkTo.js +1 -1
- package/dist/esm/link/useLinkTo.mjs +1 -1
- package/dist/esm/link/useLinkTo.native.js +1 -1
- package/dist/esm/router/getNormalizedStatePath.js +1 -1
- package/dist/esm/router/getNormalizedStatePath.mjs +1 -1
- package/dist/esm/router/getNormalizedStatePath.native.js +1 -1
- package/dist/esm/router/router.js +24 -2
- package/dist/esm/router/router.js.map +1 -1
- package/dist/esm/router/router.mjs +18 -2
- package/dist/esm/router/router.mjs.map +1 -1
- package/dist/esm/router/router.native.js +38 -2
- package/dist/esm/router/router.native.js.map +2 -2
- package/dist/esm/utils/serverContext.js +2 -1
- package/dist/esm/utils/serverContext.js.map +1 -1
- package/dist/esm/utils/serverContext.mjs +1 -1
- package/dist/esm/utils/serverContext.mjs.map +1 -1
- package/dist/esm/utils/serverContext.native.js +2 -1
- package/dist/esm/utils/serverContext.native.js.map +2 -2
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +3 -3
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +3 -3
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +3 -3
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +2 -2
- package/package.json +8 -9
- package/src/Root.tsx +6 -2
- package/src/cli/build.ts +2 -3
- package/src/constants.ts +8 -0
- package/src/fork/NavigationContainer.tsx +101 -39
- package/src/fork/createMemoryHistory.tsx +15 -13
- package/src/fork/extractPathFromURL.ts +85 -40
- package/src/fork/findFocusedRoute.tsx +9 -1
- package/src/fork/getPathFromState-mods.ts +142 -0
- package/src/fork/getPathFromState.ts +244 -501
- package/src/fork/getStateFromPath-mods.ts +400 -0
- package/src/fork/getStateFromPath.ts +447 -538
- package/src/fork/useBackButton.native.tsx +16 -2
- package/src/fork/useBackButton.tsx +11 -2
- package/src/fork/useDocumentTitle.native.tsx +9 -4
- package/src/fork/useDocumentTitle.tsx +12 -7
- package/src/fork/useLinking.native.ts +71 -63
- package/src/fork/useLinking.ts +75 -40
- package/src/fork/useThenable.tsx +7 -1
- package/src/fork/validatePathConfig.ts +64 -12
- package/src/layouts/withLayoutContext.tsx +1 -1
- package/src/link/linking.ts +2 -2
- package/src/link/useLinkTo.tsx +1 -1
- package/src/router/getNormalizedStatePath.tsx +1 -1
- package/src/router/router.ts +41 -2
- package/src/utils/serverContext.tsx +3 -1
- package/src/vite/plugins/fileSystemRouterPlugin.tsx +3 -3
- package/types/Root.d.ts.map +1 -1
- package/types/cli/build.d.ts.map +1 -1
- package/types/constants.d.ts +2 -0
- package/types/constants.d.ts.map +1 -1
- package/types/fork/NavigationContainer.d.ts +19 -8
- package/types/fork/NavigationContainer.d.ts.map +1 -1
- package/types/fork/createMemoryHistory.d.ts +10 -1
- package/types/fork/createMemoryHistory.d.ts.map +1 -1
- package/types/fork/extractPathFromURL.d.ts +7 -1
- package/types/fork/extractPathFromURL.d.ts.map +1 -1
- package/types/fork/findFocusedRoute.d.ts +9 -0
- package/types/fork/findFocusedRoute.d.ts.map +1 -1
- package/types/fork/getPathFromState-mods.d.ts +23 -0
- package/types/fork/getPathFromState-mods.d.ts.map +1 -0
- package/types/fork/getPathFromState.d.ts +15 -14
- package/types/fork/getPathFromState.d.ts.map +1 -1
- package/types/fork/getStateFromPath-mods.d.ts +58 -0
- package/types/fork/getStateFromPath-mods.d.ts.map +1 -0
- package/types/fork/getStateFromPath.d.ts +28 -29
- package/types/fork/getStateFromPath.d.ts.map +1 -1
- package/types/fork/useBackButton.d.ts +6 -0
- package/types/fork/useBackButton.d.ts.map +1 -1
- package/types/fork/useBackButton.native.d.ts +9 -1
- package/types/fork/useBackButton.native.d.ts.map +1 -1
- package/types/fork/useDocumentTitle.d.ts +8 -6
- package/types/fork/useDocumentTitle.d.ts.map +1 -1
- package/types/fork/useDocumentTitle.native.d.ts +5 -2
- package/types/fork/useDocumentTitle.native.d.ts.map +1 -1
- package/types/fork/useLinking.d.ts +8 -1
- package/types/fork/useLinking.d.ts.map +1 -1
- package/types/fork/useLinking.native.d.ts +9 -2
- package/types/fork/useLinking.native.d.ts.map +1 -1
- package/types/fork/useThenable.d.ts +6 -0
- package/types/fork/useThenable.d.ts.map +1 -1
- package/types/fork/validatePathConfig.d.ts +8 -1
- package/types/fork/validatePathConfig.d.ts.map +1 -1
- package/types/link/linking.d.ts +2 -2
- package/types/link/linking.d.ts.map +1 -1
- package/types/utils/serverContext.d.ts.map +1 -1
- package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
@@ -1,4 +1,23 @@
|
|
1
|
-
|
1
|
+
export function parsePathAndParamsFromExpoGoLink(url: string): {
|
2
|
+
pathname: string
|
3
|
+
queryString: string
|
4
|
+
} {
|
5
|
+
// If the URL is defined (default in Expo Go dev apps) and the URL has no path:
|
6
|
+
// `exp://192.168.87.39:19000/` then use the default `exp://192.168.87.39:19000/--/`
|
7
|
+
|
8
|
+
const href = parsePathFromExpoGoLink(url)
|
9
|
+
const results = href.match(/([^?]*)(\?.*)?/)
|
10
|
+
return {
|
11
|
+
pathname: results?.[1] ?? '',
|
12
|
+
queryString: results?.[2] ?? '',
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
export function parsePathFromExpoGoLink(url: string): string {
|
17
|
+
// If the URL is defined (default in Expo Go dev apps) and the URL has no path:
|
18
|
+
// `exp://192.168.87.39:19000/` then use the default `exp://192.168.87.39:19000/--/`
|
19
|
+
return url.match(/exps?:\/\/.*?\/--\/(.*)/)?.[1] ?? ''
|
20
|
+
}
|
2
21
|
|
3
22
|
// This is only run on native.
|
4
23
|
function extractExactPathFromURL(url: string): string {
|
@@ -7,33 +26,38 @@ function extractExactPathFromURL(url: string): string {
|
|
7
26
|
// from the URL, while stripping the origin.
|
8
27
|
url.match(/^https?:\/\//)
|
9
28
|
) {
|
10
|
-
const { origin, href } = new URL(url)
|
29
|
+
const { origin, href, hostname } = new URL(url)
|
30
|
+
|
31
|
+
if (hostname === 'exp.host' || hostname === 'u.expo.dev') {
|
32
|
+
// These are QR code generate deep-link that always like to the '/' path
|
33
|
+
// TODO: In the future, QR code may link to a specific path and this logic will need to be udpated
|
34
|
+
return ''
|
35
|
+
}
|
36
|
+
|
11
37
|
return href.replace(origin, '')
|
12
38
|
}
|
13
39
|
|
40
|
+
const isExpoGo = typeof expo !== 'undefined' && globalThis.expo?.modules?.ExpoGo
|
41
|
+
|
14
42
|
// Handle special URLs used in Expo Go: `/--/pathname` -> `pathname`
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
// return (
|
34
|
-
// adjustPathname({ hostname: res.hostname, pathname: res.path || '' }) + (qs ? '?' + qs : '')
|
35
|
-
// )
|
36
|
-
// }
|
43
|
+
if (
|
44
|
+
isExpoGo &&
|
45
|
+
// while not exhaustive, `exp` and `exps` are the only two schemes which
|
46
|
+
// are passed through to other apps in Expo Go.
|
47
|
+
url.match(/^exp(s)?:\/\//)
|
48
|
+
) {
|
49
|
+
const pathname = parsePathFromExpoGoLink(url)
|
50
|
+
if (pathname) {
|
51
|
+
return fromDeepLink('a://' + pathname)
|
52
|
+
}
|
53
|
+
// Match the `?.*` segment of the URL.
|
54
|
+
const queryParams = url.match(/exps?:\/\/.*\?(.*)/)?.[1]
|
55
|
+
if (queryParams) {
|
56
|
+
return fromDeepLink('a://?' + queryParams)
|
57
|
+
}
|
58
|
+
|
59
|
+
return ''
|
60
|
+
}
|
37
61
|
|
38
62
|
// TODO: Support dev client URLs
|
39
63
|
|
@@ -41,29 +65,38 @@ function extractExactPathFromURL(url: string): string {
|
|
41
65
|
}
|
42
66
|
|
43
67
|
/** Major hack to support the makeshift expo-development-client system. */
|
44
|
-
function isExpoDevelopmentClient(url: URL
|
45
|
-
return
|
68
|
+
function isExpoDevelopmentClient(url: URL): boolean {
|
69
|
+
return url.hostname === 'expo-development-client'
|
46
70
|
}
|
47
71
|
|
48
72
|
function fromDeepLink(url: string): string {
|
49
|
-
|
50
|
-
|
51
|
-
|
73
|
+
let res: URL | null
|
74
|
+
try {
|
75
|
+
// This is for all standard deep links, e.g. `foobar://` where everything
|
76
|
+
// after the `://` is the path.
|
77
|
+
res = new URL(url)
|
78
|
+
} catch {
|
79
|
+
/**
|
80
|
+
* We failed to parse the URL. This can occur for a variety of reasons, including:
|
81
|
+
* - Its a partial URL (e.g. `/route?query=param`).
|
82
|
+
* - It has a valid App scheme, but the scheme isn't a valid URL scheme (e.g. `my_app://`)
|
83
|
+
*/
|
84
|
+
|
85
|
+
/**
|
86
|
+
* App schemes are not valid URL schemes, so they will fail to parse.
|
87
|
+
* We need to strip the scheme from these URLs
|
88
|
+
*/
|
89
|
+
return url.replace(/^[^:]+:\/\//, '')
|
90
|
+
}
|
52
91
|
|
53
92
|
if (isExpoDevelopmentClient(res)) {
|
54
|
-
if (!res.
|
93
|
+
if (!res.searchParams.get('url')) {
|
55
94
|
return ''
|
56
95
|
}
|
57
|
-
const incomingUrl = res.
|
96
|
+
const incomingUrl = res.searchParams.get('url')!
|
58
97
|
return extractExactPathFromURL(decodeURI(incomingUrl))
|
59
98
|
}
|
60
99
|
|
61
|
-
const qs = !res.query
|
62
|
-
? ''
|
63
|
-
: Object.entries(res.query as Record<string, string>)
|
64
|
-
.map(([k, v]) => `${k}=${decodeURIComponent(v)}`)
|
65
|
-
.join('&')
|
66
|
-
|
67
100
|
let results = ''
|
68
101
|
|
69
102
|
if (res.host) {
|
@@ -74,6 +107,13 @@ function fromDeepLink(url: string): string {
|
|
74
107
|
results += res.pathname
|
75
108
|
}
|
76
109
|
|
110
|
+
const qs = !res.search
|
111
|
+
? ''
|
112
|
+
: // @ts-ignore: `entries` is not on `URLSearchParams` in some typechecks.
|
113
|
+
[...res.searchParams.entries()]
|
114
|
+
.map(([k, v]) => `${k}=${decodeURIComponent(v)}`)
|
115
|
+
.join('&')
|
116
|
+
|
77
117
|
if (qs) {
|
78
118
|
results += '?' + qs
|
79
119
|
}
|
@@ -81,9 +121,12 @@ function fromDeepLink(url: string): string {
|
|
81
121
|
return results
|
82
122
|
}
|
83
123
|
|
84
|
-
export function extractExpoPathFromURL(url = '') {
|
85
|
-
|
86
|
-
|
124
|
+
export function extractExpoPathFromURL(_prefixes: string[], url = '') {
|
125
|
+
return (
|
126
|
+
extractExactPathFromURL(url)
|
127
|
+
// TODO: We should get rid of this, dropping specificities is not good
|
128
|
+
.replace(/^\//, '')
|
129
|
+
)
|
87
130
|
}
|
88
131
|
|
89
132
|
export function adjustPathname(url: { hostname?: string | null; pathname: string }) {
|
@@ -93,3 +136,5 @@ export function adjustPathname(url: { hostname?: string | null; pathname: string
|
|
93
136
|
}
|
94
137
|
return url.pathname
|
95
138
|
}
|
139
|
+
|
140
|
+
export const extractPathFromURL = extractExpoPathFromURL
|
@@ -1,4 +1,12 @@
|
|
1
|
-
|
1
|
+
/**
|
2
|
+
* This file is copied from the react-navigation repo:
|
3
|
+
* https://github.com/react-navigation/react-navigation/blob/%40react-navigation/core%407.1.2/packages/core/src/findFocusedRoute.tsx
|
4
|
+
*
|
5
|
+
* Please refrain from making changes to this file, as it will make merging updates from the upstream harder.
|
6
|
+
* All modifications except formatting should be marked with `// @modified` comment.
|
7
|
+
*
|
8
|
+
* No modifications currently, copied so we can access without importing any React Native code in Node.js environments.
|
9
|
+
*/
|
2
10
|
|
3
11
|
import type { InitialState } from '@react-navigation/routers'
|
4
12
|
|
@@ -0,0 +1,142 @@
|
|
1
|
+
/**
|
2
|
+
* This file exports things that will be used to modify the forked code in `getPathFromState.ts`.
|
3
|
+
*
|
4
|
+
* The purpose of keeping things in this separated file is to keep changes to the copied code as little as possible, making merging upstream updates easier.
|
5
|
+
*/
|
6
|
+
|
7
|
+
import type { Route } from '@react-navigation/core'
|
8
|
+
|
9
|
+
import { matchDeepDynamicRouteName, matchDynamicName, matchGroupName } from '../router/matchers'
|
10
|
+
|
11
|
+
export type AdditionalOptions = {
|
12
|
+
preserveDynamicRoutes?: boolean
|
13
|
+
preserveGroups?: boolean
|
14
|
+
shouldEncodeURISegment?: boolean
|
15
|
+
}
|
16
|
+
|
17
|
+
export type ConfigItemMods = {
|
18
|
+
// Used as fallback for groups
|
19
|
+
initialRouteName?: string
|
20
|
+
}
|
21
|
+
|
22
|
+
export function getPathWithConventionsCollapsed({
|
23
|
+
pattern,
|
24
|
+
route,
|
25
|
+
params,
|
26
|
+
preserveGroups,
|
27
|
+
preserveDynamicRoutes,
|
28
|
+
shouldEncodeURISegment = true,
|
29
|
+
initialRouteName,
|
30
|
+
}: AdditionalOptions & {
|
31
|
+
pattern: string
|
32
|
+
route: Route<any>
|
33
|
+
params: Record<string, any>
|
34
|
+
initialRouteName?: string
|
35
|
+
}) {
|
36
|
+
const segments = pattern.split('/');
|
37
|
+
|
38
|
+
return segments
|
39
|
+
.map((p, i) => {
|
40
|
+
const name = getParamName(p)
|
41
|
+
|
42
|
+
// Showing the route name seems ok, though whatever we show here will be incorrect
|
43
|
+
// Since the page doesn't actually exist
|
44
|
+
if (p.startsWith('*')) {
|
45
|
+
if (preserveDynamicRoutes) {
|
46
|
+
if (name === 'not-found') {
|
47
|
+
return '+not-found'
|
48
|
+
}
|
49
|
+
|
50
|
+
return `[...${name}]`
|
51
|
+
}
|
52
|
+
|
53
|
+
if (params[name]) {
|
54
|
+
if (Array.isArray(params[name])) {
|
55
|
+
return params[name].join('/')
|
56
|
+
}
|
57
|
+
return params[name]
|
58
|
+
}
|
59
|
+
|
60
|
+
if (route.name.startsWith('[') && route.name.endsWith(']')) {
|
61
|
+
return ''
|
62
|
+
}
|
63
|
+
|
64
|
+
if (p === '*not-found') {
|
65
|
+
return ''
|
66
|
+
}
|
67
|
+
|
68
|
+
return route.name
|
69
|
+
}
|
70
|
+
|
71
|
+
// If the path has a pattern for a param, put the param in the path
|
72
|
+
if (p.startsWith(':')) {
|
73
|
+
if (preserveDynamicRoutes) {
|
74
|
+
return `[${name}]`
|
75
|
+
}
|
76
|
+
// Optional params without value assigned in route.params should be ignored
|
77
|
+
const value = params[name]
|
78
|
+
if (value === undefined && p.endsWith('?')) {
|
79
|
+
return
|
80
|
+
}
|
81
|
+
|
82
|
+
return (shouldEncodeURISegment ? encodeURISegment(value) : value) ?? 'undefined'
|
83
|
+
}
|
84
|
+
|
85
|
+
if (!preserveGroups && matchGroupName(p) != null) {
|
86
|
+
// When the last part is a group it could be a shared URL
|
87
|
+
// if the route has an initialRouteName defined, then we should
|
88
|
+
// use that as the component path as we can assume it will be shown.
|
89
|
+
if (segments.length - 1 === i) {
|
90
|
+
if (initialRouteName) {
|
91
|
+
// Return an empty string if the init route is ambiguous.
|
92
|
+
if (segmentMatchesConvention(initialRouteName)) {
|
93
|
+
return ''
|
94
|
+
}
|
95
|
+
return shouldEncodeURISegment
|
96
|
+
? encodeURISegment(initialRouteName, { preserveBrackets: true })
|
97
|
+
: initialRouteName
|
98
|
+
}
|
99
|
+
}
|
100
|
+
return ''
|
101
|
+
}
|
102
|
+
// Preserve dynamic syntax for rehydration
|
103
|
+
return shouldEncodeURISegment ? encodeURISegment(p, { preserveBrackets: true }) : p
|
104
|
+
})
|
105
|
+
.map((v) => v ?? '')
|
106
|
+
.join('/')
|
107
|
+
}
|
108
|
+
|
109
|
+
export const getParamName = (pattern: string) => pattern.replace(/^[:*]/, '').replace(/\?$/, '')
|
110
|
+
|
111
|
+
export function appendBaseUrl(
|
112
|
+
path: string,
|
113
|
+
baseUrl: string | undefined = process.env.EXPO_BASE_URL
|
114
|
+
) {
|
115
|
+
if (process.env.NODE_ENV !== 'development') {
|
116
|
+
if (baseUrl) {
|
117
|
+
return `/${baseUrl.replace(/^\/+/, '').replace(/\/$/, '')}${path}`
|
118
|
+
}
|
119
|
+
}
|
120
|
+
return path
|
121
|
+
}
|
122
|
+
|
123
|
+
function segmentMatchesConvention(segment: string): boolean {
|
124
|
+
return (
|
125
|
+
segment === 'index' ||
|
126
|
+
matchDynamicName(segment) != null ||
|
127
|
+
matchGroupName(segment) != null ||
|
128
|
+
matchDeepDynamicRouteName(segment) != null
|
129
|
+
)
|
130
|
+
}
|
131
|
+
|
132
|
+
function encodeURISegment(str: string, { preserveBrackets = false } = {}) {
|
133
|
+
// Valid characters according to
|
134
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-3.3 (see pchar definition)
|
135
|
+
str = String(str).replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]/g, (char) => encodeURIComponent(char))
|
136
|
+
|
137
|
+
if (preserveBrackets) {
|
138
|
+
// Preserve brackets
|
139
|
+
str = str.replace(/%5B/g, '[').replace(/%5D/g, ']')
|
140
|
+
}
|
141
|
+
return str
|
142
|
+
}
|