Skip to content

Commit 3958c19

Browse files
committed
feat: add wildcard support to inject method
1 parent 9c1a166 commit 3958c19

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

index.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@ export function parse(route: RegExp): {
99
}
1010

1111
export type RouteParams<T extends string> =
12-
T extends `${string}:${infer P}?/${infer Rest}`
12+
T extends `${infer Prev}/*/${infer Rest}`
13+
? RouteParams<Prev> & { wild: string } & RouteParams<Rest>
14+
: T extends `${string}:${infer P}?/${infer Rest}`
1315
? { [K in P]?: string } & RouteParams<Rest>
1416
: T extends `${string}:${infer P}/${infer Rest}`
1517
? { [K in P]: string } & RouteParams<Rest>
1618
: T extends `${string}:${infer P}?`
1719
? { [K in P]?: string }
1820
: T extends `${string}:${infer P}`
1921
? { [K in P]: string }
22+
: T extends `${string}*`
23+
? { wild: string }
2024
: {};
2125

2226
export function inject<T extends string>(route: T, values: RouteParams<T>): string;

src/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ var RGX = /*#__PURE__*/ /(\/|^)([:*][^\/]*?)(\?)?(?=[\/.]|$)/g;
2929

3030
// error if key missing?
3131
export function inject(route, values) {
32-
return route.replace(RGX, (_, start, key, optional) => {
33-
if (_ = values[key.substring(1)]) return '/' + _;
34-
return optional ? '' : '/' + key;
32+
return route.replace(RGX, (x, lead, key, optional) => {
33+
x = values[key=='*' ? 'wild' : key.substring(1)];
34+
return x ? '/'+x : (optional || key=='*') ? '' : '/' + key;
3535
});
3636
}

test/inject.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ run('/foo/:id/:a?/:b?/:bar?', '/foo/123/bb', { id: 123, b: 'bb' });
6363
run('/foo/:id/:a?/:b?/:bar?', '/foo/123/xxx', { id: 123, bar: 'xxx' });
6464
run('/foo/:id/:a?/:b?/:bar?', '/foo/123/aa/xxx', { id: 123, a: 'aa', bar: 'xxx' });
6565

66+
run('/foo/:bar/*', '/foo/123', { bar: '123' });
67+
run('/foo/:bar/*', '/foo/123/aa/bb/cc', { bar: '123', wild: 'aa/bb/cc' });
6668

6769
// NOTE: Missing non-optional values
6870
// ---

0 commit comments

Comments
 (0)