Skip to content

Commit d9582e0

Browse files
committed
Generate url with nested query params
1 parent 8e2969b commit d9582e0

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

lib/route-recognizer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ function recognizeChar<THandler>(
430430
}
431431

432432
export interface QueryParams {
433-
[param: string]: string[] | string | null | undefined;
433+
[param: string]: Record<string, any> | string[] | string | null | undefined;
434434
}
435435

436436
export interface Result<THandler> {

tests/recognizer-tests.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,16 @@ QUnit.test(
817817
}
818818
);
819819

820+
QUnit.test("Deserialize query param nested object", (assert: Assert) => {
821+
const handler = {};
822+
const router = new RouteRecognizer<{}>();
823+
router.add([{ path: "/foo/bar", handler }]);
824+
825+
const results = router.recognize("/foo/bar?filter=[user][name][$contains]=nick");
826+
const p = results && results.queryParams;
827+
assert.deepEqual(p, { filter: { user: { name: { $contains: 'scoot' } } } });
828+
});
829+
820830
QUnit.test("Multiple `/` routes recognize", (assert: Assert) => {
821831
const handler1 = { handler: 1 };
822832
const handler2 = { handler: 2 };
@@ -1637,7 +1647,7 @@ QUnit.module("Route Generation", hooks => {
16371647
}
16381648
);
16391649

1640-
QUnit.test("Generation works with query params", (assert: Assert) => {
1650+
QUnit.only("Generation works with query params", (assert: Assert) => {
16411651
assert.equal(
16421652
router.generate("index", { queryParams: { filter: "date" } }),
16431653
"/?filter=date"
@@ -1721,6 +1731,10 @@ QUnit.module("Route Generation", hooks => {
17211731
router.generate("index", { queryParams: { filter: "date", sort: 0 } }),
17221732
"/?filter=date&sort=0"
17231733
);
1734+
assert.equal(
1735+
router.generate("index", { queryParams: { filter: { user: { name: { $contains: 'scoot' } } }, sort: 0 } }),
1736+
"/?filter=[user][name][$contains]=scoot"
1737+
);
17241738
});
17251739

17261740
QUnit.test("Generation works with array query params", (assert: Assert) => {

0 commit comments

Comments
 (0)