expo-router 5.0.7 → 5.1.1
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/assets/arrow_down.png +0 -0
- package/build/ExpoRoot.js +1 -0
- package/build/ExpoRoot.js.map +1 -1
- package/build/exports.d.ts +1 -0
- package/build/exports.d.ts.map +1 -1
- package/build/exports.js +3 -1
- package/build/exports.js.map +1 -1
- package/build/fork/getPathFromState-forks.js +1 -4
- package/build/fork/getPathFromState-forks.js.map +1 -1
- package/build/fork/getStateFromPath-forks.d.ts +2 -0
- package/build/fork/getStateFromPath-forks.d.ts.map +1 -1
- package/build/fork/getStateFromPath-forks.js +18 -2
- package/build/fork/getStateFromPath-forks.js.map +1 -1
- package/build/getReactNavigationConfig.d.ts.map +1 -1
- package/build/getReactNavigationConfig.js +8 -7
- package/build/getReactNavigationConfig.js.map +1 -1
- package/build/getRoutes.d.ts +1 -1
- package/build/getRoutes.d.ts.map +1 -1
- package/build/getRoutes.js +14 -6
- package/build/getRoutes.js.map +1 -1
- package/build/getRoutesCore.d.ts +7 -2
- package/build/getRoutesCore.d.ts.map +1 -1
- package/build/getRoutesCore.js +92 -68
- package/build/getRoutesCore.js.map +1 -1
- package/build/getRoutesRedirects.d.ts +2 -2
- package/build/getRoutesRedirects.d.ts.map +1 -1
- package/build/getRoutesRedirects.js +33 -33
- package/build/getRoutesRedirects.js.map +1 -1
- package/build/getRoutesSSR.d.ts +1 -1
- package/build/getRoutesSSR.d.ts.map +1 -1
- package/build/getRoutesSSR.js +2 -3
- package/build/getRoutesSSR.js.map +1 -1
- package/build/global-state/routeInfo.d.ts.map +1 -1
- package/build/global-state/routeInfo.js +21 -1
- package/build/global-state/routeInfo.js.map +1 -1
- package/build/global-state/router-store.d.ts.map +1 -1
- package/build/global-state/router-store.js +7 -1
- package/build/global-state/router-store.js.map +1 -1
- package/build/global-state/routing.js +3 -2
- package/build/global-state/routing.js.map +1 -1
- package/build/layouts/StackClient.d.ts.map +1 -1
- package/build/layouts/StackClient.js +152 -65
- package/build/layouts/StackClient.js.map +1 -1
- package/build/layouts/TabsClient.d.ts +3 -1
- package/build/layouts/TabsClient.d.ts.map +1 -1
- package/build/layouts/TabsClient.js +2 -0
- package/build/layouts/TabsClient.js.map +1 -1
- package/build/link/Link.d.ts +1 -56
- package/build/link/Link.d.ts.map +1 -1
- package/build/link/Link.js +3 -39
- package/build/link/Link.js.map +1 -1
- package/build/link/Redirect.d.ts +59 -0
- package/build/link/Redirect.d.ts.map +1 -0
- package/build/link/Redirect.js +43 -0
- package/build/link/Redirect.js.map +1 -0
- package/build/matchers.d.ts +6 -3
- package/build/matchers.d.ts.map +1 -1
- package/build/matchers.js +15 -11
- package/build/matchers.js.map +1 -1
- package/build/rsc/middleware.d.ts.map +1 -1
- package/build/rsc/middleware.js +15 -27
- package/build/rsc/middleware.js.map +1 -1
- package/build/useFocusEffect.d.ts +2 -2
- package/build/useFocusEffect.d.ts.map +1 -1
- package/build/useFocusEffect.js +7 -5
- package/build/useFocusEffect.js.map +1 -1
- package/build/useScreens.d.ts +1 -3
- package/build/useScreens.d.ts.map +1 -1
- package/build/useScreens.js +2 -2
- package/build/useScreens.js.map +1 -1
- package/build/utils/stack.d.ts +5 -0
- package/build/utils/stack.d.ts.map +1 -0
- package/build/utils/stack.js +10 -0
- package/build/utils/stack.js.map +1 -0
- package/build/views/Navigator.d.ts.map +1 -1
- package/build/views/Navigator.js +5 -2
- package/build/views/Navigator.js.map +1 -1
- package/build/views/Screen.d.ts.map +1 -1
- package/build/views/Screen.js +13 -40
- package/build/views/Screen.js.map +1 -1
- package/build/views/Sitemap.d.ts.map +1 -1
- package/build/views/Sitemap.js +56 -72
- package/build/views/Sitemap.js.map +1 -1
- package/build/views/Unmatched.d.ts.map +1 -1
- package/build/views/Unmatched.js +9 -3
- package/build/views/Unmatched.js.map +1 -1
- package/build/views/useSafeLayoutEffect.d.ts +3 -0
- package/build/views/useSafeLayoutEffect.d.ts.map +1 -0
- package/build/views/useSafeLayoutEffect.js +6 -0
- package/build/views/useSafeLayoutEffect.js.map +1 -0
- package/build/views/useSitemap.d.ts +12 -0
- package/build/views/useSitemap.d.ts.map +1 -0
- package/build/views/useSitemap.js +50 -0
- package/build/views/useSitemap.js.map +1 -0
- package/package.json +3 -3
- package/plugin/options.json +29 -1
- package/_async-server-import.js +0 -21
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSitemap = useSitemap;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const Route_1 = require("../Route");
|
|
6
|
+
const router_store_1 = require("../global-state/router-store");
|
|
7
|
+
const matchers_1 = require("../matchers");
|
|
8
|
+
const routeSegments = (route, parents) => [
|
|
9
|
+
...parents,
|
|
10
|
+
...route.route.split('/'),
|
|
11
|
+
];
|
|
12
|
+
const routeHref = (route, parents) => '/' +
|
|
13
|
+
routeSegments(route, parents)
|
|
14
|
+
.map((segment) => {
|
|
15
|
+
// add an extra layer of entropy to the url for deep dynamic routes
|
|
16
|
+
if ((0, matchers_1.matchDynamicName)(segment)?.deep) {
|
|
17
|
+
return segment + '/' + Date.now();
|
|
18
|
+
}
|
|
19
|
+
// index must be erased but groups can be preserved.
|
|
20
|
+
return segment === 'index' ? '' : segment;
|
|
21
|
+
})
|
|
22
|
+
.filter(Boolean)
|
|
23
|
+
.join('/');
|
|
24
|
+
const routeFilename = (route) => {
|
|
25
|
+
const segments = route.contextKey.split('/');
|
|
26
|
+
// join last two segments for layout routes
|
|
27
|
+
if (route.contextKey.match(/_layout\.[jt]sx?$/)) {
|
|
28
|
+
return segments[segments.length - 2] + '/' + segments[segments.length - 1];
|
|
29
|
+
}
|
|
30
|
+
const routeSegmentsCount = route.route.split('/').length;
|
|
31
|
+
// Join the segment count in reverse order
|
|
32
|
+
// This presents files without layout routes as children with all relevant segments.
|
|
33
|
+
return segments.slice(-routeSegmentsCount).join('/');
|
|
34
|
+
};
|
|
35
|
+
const mapForRoute = (route, parents) => ({
|
|
36
|
+
contextKey: route.contextKey,
|
|
37
|
+
filename: routeFilename(route),
|
|
38
|
+
href: routeHref(route, parents),
|
|
39
|
+
isInitial: route.initialRouteName === route.route,
|
|
40
|
+
isInternal: route.internal ?? false,
|
|
41
|
+
isGenerated: route.generated ?? false,
|
|
42
|
+
children: [...route.children]
|
|
43
|
+
.sort(Route_1.sortRoutes)
|
|
44
|
+
.map((child) => mapForRoute(child, routeSegments(route, parents))),
|
|
45
|
+
});
|
|
46
|
+
function useSitemap() {
|
|
47
|
+
const sitemap = (0, react_1.useMemo)(() => (router_store_1.store.routeNode ? mapForRoute(router_store_1.store.routeNode, []) : null), [router_store_1.store.routeNode]);
|
|
48
|
+
return sitemap;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=useSitemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSitemap.js","sourceRoot":"","sources":["../../src/views/useSitemap.tsx"],"names":[],"mappings":";;AA8DA,gCAMC;AApED,iCAAgC;AAEhC,oCAAiD;AACjD,+DAAqD;AACrD,0CAA+C;AAG/C,MAAM,aAAa,GAAG,CAAC,KAAgB,EAAE,OAAiB,EAAE,EAAE,CAAC;IAC7D,GAAG,OAAO;IACV,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;CAC1B,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAE,OAAiB,EAAE,EAAE,CACxD,GAAG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;SAC1B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,mEAAmE;QACnE,IAAI,IAAA,2BAAgB,EAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;YACpC,OAAO,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;QACD,oDAAoD;QACpD,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf,MAAM,aAAa,GAAG,CAAC,KAAgB,EAAE,EAAE;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,2CAA2C;IAC3C,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAEzD,0CAA0C;IAC1C,oFAAoF;IACpF,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAYF,MAAM,WAAW,GAAyD,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7F,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC;IAC9B,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,KAAK;IACjD,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;IACnC,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK;IACrC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;SAC1B,IAAI,CAAC,kBAAU,CAAC;SAChB,GAAG,CAAC,CAAC,KAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;CAChF,CAAC,CAAC;AAEH,SAAgB,UAAU;IACxB,MAAM,OAAO,GAAG,IAAA,eAAO,EACrB,GAAG,EAAE,CAAC,CAAC,oBAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,oBAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACjE,CAAC,oBAAK,CAAC,SAAS,CAAC,CAClB,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { useMemo } from 'react';\n\nimport { RouteNode, sortRoutes } from '../Route';\nimport { store } from '../global-state/router-store';\nimport { matchDynamicName } from '../matchers';\nimport { Href } from '../types';\n\nconst routeSegments = (route: RouteNode, parents: string[]) => [\n ...parents,\n ...route.route.split('/'),\n];\n\nconst routeHref = (route: RouteNode, parents: string[]) =>\n '/' +\n routeSegments(route, parents)\n .map((segment) => {\n // add an extra layer of entropy to the url for deep dynamic routes\n if (matchDynamicName(segment)?.deep) {\n return segment + '/' + Date.now();\n }\n // index must be erased but groups can be preserved.\n return segment === 'index' ? '' : segment;\n })\n .filter(Boolean)\n .join('/');\n\nconst routeFilename = (route: RouteNode) => {\n const segments = route.contextKey.split('/');\n // join last two segments for layout routes\n if (route.contextKey.match(/_layout\\.[jt]sx?$/)) {\n return segments[segments.length - 2] + '/' + segments[segments.length - 1];\n }\n\n const routeSegmentsCount = route.route.split('/').length;\n\n // Join the segment count in reverse order\n // This presents files without layout routes as children with all relevant segments.\n return segments.slice(-routeSegmentsCount).join('/');\n};\n\nexport type SitemapType = {\n contextKey: string;\n filename: string;\n href: string | Href;\n isInitial: boolean;\n isInternal: boolean;\n isGenerated: boolean;\n children: SitemapType[];\n};\n\nconst mapForRoute: (route: RouteNode, parents: string[]) => SitemapType = (route, parents) => ({\n contextKey: route.contextKey,\n filename: routeFilename(route),\n href: routeHref(route, parents),\n isInitial: route.initialRouteName === route.route,\n isInternal: route.internal ?? false,\n isGenerated: route.generated ?? false,\n children: [...route.children]\n .sort(sortRoutes)\n .map((child: RouteNode) => mapForRoute(child, routeSegments(route, parents))),\n});\n\nexport function useSitemap(): SitemapType | null {\n const sitemap = useMemo(\n () => (store.routeNode ? mapForRoute(store.routeNode, []) : null),\n [store.routeNode]\n );\n return sitemap;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-router",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Expo Router is a file-based router for React Native and web applications.",
|
|
5
5
|
"author": "650 Industries, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
},
|
|
107
107
|
"dependencies": {
|
|
108
108
|
"@expo/metro-runtime": "5.0.4",
|
|
109
|
-
"@expo/server": "^0.6.
|
|
109
|
+
"@expo/server": "^0.6.3",
|
|
110
110
|
"@radix-ui/react-slot": "1.2.0",
|
|
111
111
|
"@react-navigation/bottom-tabs": "^7.3.10",
|
|
112
112
|
"@react-navigation/native": "^7.1.6",
|
|
@@ -120,5 +120,5 @@
|
|
|
120
120
|
"server-only": "^0.0.1",
|
|
121
121
|
"shallowequal": "^1.1.0"
|
|
122
122
|
},
|
|
123
|
-
"gitHead": "
|
|
123
|
+
"gitHead": "ee5bda70ea20e9f1411fbdc346fca76d9ac57f57"
|
|
124
124
|
}
|
package/plugin/options.json
CHANGED
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"description": "The target file path that this route should redirect to",
|
|
92
92
|
"type": "string"
|
|
93
93
|
},
|
|
94
|
-
"
|
|
94
|
+
"permanent": {
|
|
95
95
|
"description": "Whether the redirect is temporary or permanent. Defaults to `false`.",
|
|
96
96
|
"type": "boolean",
|
|
97
97
|
"default": false
|
|
@@ -107,6 +107,34 @@
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
},
|
|
111
|
+
"rewrites": {
|
|
112
|
+
"description": "Enable static rewrites",
|
|
113
|
+
"type": "array",
|
|
114
|
+
"uniqueItems": true,
|
|
115
|
+
"items": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"required": ["source", "destination"],
|
|
118
|
+
"properties": {
|
|
119
|
+
"source": {
|
|
120
|
+
"description": "The previous file path that should be rewritten",
|
|
121
|
+
"type": "string"
|
|
122
|
+
},
|
|
123
|
+
"destination": {
|
|
124
|
+
"description": "The target file path that this route should rewrite",
|
|
125
|
+
"type": "string"
|
|
126
|
+
},
|
|
127
|
+
"methods": {
|
|
128
|
+
"description": "HTTP methods that should be rewritten. Omit to rewrite all methods.",
|
|
129
|
+
"type": "array",
|
|
130
|
+
"uniqueItems": true,
|
|
131
|
+
"items": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"enum": ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
110
138
|
}
|
|
111
139
|
},
|
|
112
140
|
"additionalProperties": false
|
package/_async-server-import.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Outside the build dir to preserve the import syntax.
|
|
2
|
-
export async function asyncServerImport(moduleId) {
|
|
3
|
-
// Not running in cloudflare, use Node.js require.
|
|
4
|
-
if (typeof caches === 'undefined') {
|
|
5
|
-
return $$require_external(moduleId);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
let mod = await import(/* @metro-ignore */ moduleId);
|
|
9
|
-
|
|
10
|
-
// Unwrap exported `{ default: <mod> }` objects, where `<mod>` is another default exported ESM module
|
|
11
|
-
if (
|
|
12
|
-
'default' in mod &&
|
|
13
|
-
typeof mod.default === 'object' &&
|
|
14
|
-
mod.default &&
|
|
15
|
-
(mod.default.default !== undefined || mod.default.__esModule === true)
|
|
16
|
-
) {
|
|
17
|
-
mod = mod.default;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return mod;
|
|
21
|
-
}
|