expo-router 2.0.9 → 2.0.10
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/build/getRoutes.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/getRoutes.ts +46 -37
- package/src/matchers.tsx +1 -1
package/build/getRoutes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRoutes.d.ts","sourceRoot":"","sources":["../src/getRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAW5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC,GAAG;IACnE,yBAAyB;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8CAA8C;IAC9C,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CA+C5D;AAyBD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,IAAI,CAK1B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAMlE;
|
|
1
|
+
{"version":3,"file":"getRoutes.d.ts","sourceRoot":"","sources":["../src/getRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAW5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC,GAAG;IACnE,yBAAyB;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8CAA8C;IAC9C,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CA+C5D;AAyBD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,IAAI,CAK1B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAMlE;AA+ND;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAiBxD;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CACvB,aAAa,EAAE,cAAc,EAC7B,OAAO,CAAC,EAAE,OAAO,GAChB,SAAS,GAAG,IAAI,CAclB;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,cAAc,EAC7B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAY3B;AAUD,+CAA+C;AAC/C,wBAAgB,cAAc,CAC5B,aAAa,EAAE,cAAc,EAC7B,OAAO,CAAC,EAAE,OAAO,GAChB,SAAS,GAAG,IAAI,CAIlB;AAYD,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,cAAc,EAC7B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAI3B;AA4CD;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,GAChB,SAAS,GAAG,IAAI,CAkBlB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-router",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.10",
|
|
4
4
|
"main": "src/index.tsx",
|
|
5
5
|
"types": "build/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -105,12 +105,12 @@
|
|
|
105
105
|
},
|
|
106
106
|
"dependencies": {
|
|
107
107
|
"@bacons/react-views": "^1.1.3",
|
|
108
|
-
"@expo/metro-runtime": "2.2.
|
|
108
|
+
"@expo/metro-runtime": "2.2.12",
|
|
109
109
|
"@radix-ui/react-slot": "1.0.1",
|
|
110
110
|
"@react-navigation/bottom-tabs": "~6.5.7",
|
|
111
111
|
"@react-navigation/native": "~6.1.6",
|
|
112
112
|
"@react-navigation/native-stack": "~6.9.12",
|
|
113
|
-
"expo-head": "0.0.
|
|
113
|
+
"expo-head": "0.0.16",
|
|
114
114
|
"expo-splash-screen": "~0.20.2",
|
|
115
115
|
"query-string": "7.1.3",
|
|
116
116
|
"react-helmet-async": "^1.3.0",
|
package/src/getRoutes.ts
CHANGED
|
@@ -169,21 +169,6 @@ function applyDefaultInitialRouteName(node: RouteNode): RouteNode {
|
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
function cloneGroupRoute(
|
|
173
|
-
node: RouteNode,
|
|
174
|
-
{ name: nextName }: { name: string }
|
|
175
|
-
): RouteNode {
|
|
176
|
-
const groupName = `(${nextName})`;
|
|
177
|
-
const parts = node.contextKey.split("/");
|
|
178
|
-
parts[parts.length - 2] = groupName;
|
|
179
|
-
|
|
180
|
-
return {
|
|
181
|
-
...node,
|
|
182
|
-
route: groupName,
|
|
183
|
-
contextKey: parts.join("/"),
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
|
|
187
172
|
function folderNodeToRouteNode({
|
|
188
173
|
name,
|
|
189
174
|
children,
|
|
@@ -212,25 +197,8 @@ function fileNodeToRouteNode(tree: TreeNode): RouteNode[] | null {
|
|
|
212
197
|
|
|
213
198
|
const dynamic = generateDynamic(name);
|
|
214
199
|
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const clones = multiGroup
|
|
219
|
-
? groupName!.split(",").map((v) => ({ name: v.trim() }))
|
|
220
|
-
: null;
|
|
221
|
-
|
|
222
|
-
// Assert duplicates:
|
|
223
|
-
if (clones) {
|
|
224
|
-
const names = new Set<string>();
|
|
225
|
-
for (const clone of clones) {
|
|
226
|
-
if (names.has(clone.name)) {
|
|
227
|
-
throw new Error(
|
|
228
|
-
`Array syntax cannot contain duplicate group name "${clone.name}" in "${node.contextKey}".`
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
names.add(clone.name);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
200
|
+
const clones = extrapolateGroupRoutes(name, node.contextKey);
|
|
201
|
+
clones.delete(name);
|
|
234
202
|
|
|
235
203
|
const output = {
|
|
236
204
|
loadRoute: node.loadRoute,
|
|
@@ -240,9 +208,13 @@ function fileNodeToRouteNode(tree: TreeNode): RouteNode[] | null {
|
|
|
240
208
|
dynamic,
|
|
241
209
|
};
|
|
242
210
|
|
|
243
|
-
if (
|
|
244
|
-
return clones.map((clone) =>
|
|
245
|
-
applyDefaultInitialRouteName(
|
|
211
|
+
if (clones.size) {
|
|
212
|
+
return [...clones].map((clone) =>
|
|
213
|
+
applyDefaultInitialRouteName({
|
|
214
|
+
...output,
|
|
215
|
+
contextKey: node.contextKey.replace(output.route, clone),
|
|
216
|
+
route: clone,
|
|
217
|
+
})
|
|
246
218
|
);
|
|
247
219
|
}
|
|
248
220
|
|
|
@@ -257,6 +229,43 @@ function fileNodeToRouteNode(tree: TreeNode): RouteNode[] | null {
|
|
|
257
229
|
];
|
|
258
230
|
}
|
|
259
231
|
|
|
232
|
+
function extrapolateGroupRoutes(
|
|
233
|
+
route: string,
|
|
234
|
+
contextKey: string,
|
|
235
|
+
routes: Set<string> = new Set()
|
|
236
|
+
): Set<string> {
|
|
237
|
+
const match = matchGroupName(route);
|
|
238
|
+
|
|
239
|
+
if (!match) {
|
|
240
|
+
routes.add(route);
|
|
241
|
+
return routes;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const groups = match?.split(",");
|
|
245
|
+
const groupsSet = new Set(groups);
|
|
246
|
+
|
|
247
|
+
if (groupsSet.size !== groups.length) {
|
|
248
|
+
throw new Error(
|
|
249
|
+
`Array syntax cannot contain duplicate group name "${groups}" in "${contextKey}".`
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (groups.length === 1) {
|
|
254
|
+
routes.add(route);
|
|
255
|
+
return routes;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
for (const group of groups) {
|
|
259
|
+
extrapolateGroupRoutes(
|
|
260
|
+
route.replace(match, group.trim()),
|
|
261
|
+
contextKey,
|
|
262
|
+
routes
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return routes;
|
|
267
|
+
}
|
|
268
|
+
|
|
260
269
|
function treeNodeToRouteNode(tree: TreeNode): RouteNode[] | null {
|
|
261
270
|
if (tree.node) {
|
|
262
271
|
return fileNodeToRouteNode(tree);
|
package/src/matchers.tsx
CHANGED
|
@@ -12,7 +12,7 @@ export function matchDeepDynamicRouteName(name: string): string | undefined {
|
|
|
12
12
|
|
|
13
13
|
/** Match `(page)` -> `page` */
|
|
14
14
|
export function matchGroupName(name: string): string | undefined {
|
|
15
|
-
return name.match(
|
|
15
|
+
return name.match(/^(?:[^\\(\\)])*?\(([^\\/]+)\).*?$/)?.[1];
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export function getNameFromFilePath(name: string): string {
|