@plumile/router 0.1.9 → 0.1.12
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/LICENSE +1 -1
- package/README.md +682 -1
- package/lib/esm/ResourcePage.d.ts.map +1 -1
- package/lib/esm/ResourcePage.js +1 -1
- package/lib/esm/builder.d.ts.map +1 -1
- package/lib/esm/builder.js +10 -3
- package/lib/esm/errors/HttpRedirect.d.ts.map +1 -1
- package/lib/esm/errors/HttpRedirect.js +1 -1
- package/lib/esm/errors/index.d.ts.map +1 -1
- package/lib/esm/errors/index.js +1 -1
- package/lib/esm/eslint-rules/index.d.ts +2 -0
- package/lib/esm/eslint-rules/index.d.ts.map +1 -0
- package/lib/esm/eslint-rules/index.js +2 -0
- package/lib/esm/eslint-rules/no-direct-window-location-search.d.ts +4 -0
- package/lib/esm/eslint-rules/no-direct-window-location-search.d.ts.map +1 -0
- package/lib/esm/eslint-rules/no-direct-window-location-search.js +48 -0
- package/lib/esm/history/BrowserHistory.d.ts.map +1 -1
- package/lib/esm/history/BrowserHistory.js +4 -2
- package/lib/esm/history/index.d.ts.map +1 -1
- package/lib/esm/history/index.js +1 -1
- package/lib/esm/history/types.d.ts.map +1 -1
- package/lib/esm/history/types.js +1 -1
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +2 -1
- package/lib/esm/routing/Link.d.ts +1 -0
- package/lib/esm/routing/Link.d.ts.map +1 -1
- package/lib/esm/routing/Link.js +35 -4
- package/lib/esm/routing/RouteComponentWrapper.d.ts.map +1 -1
- package/lib/esm/routing/RouteComponentWrapper.js +7 -2
- package/lib/esm/routing/RouterRenderer.d.ts.map +1 -1
- package/lib/esm/routing/RouterRenderer.js +1 -1
- package/lib/esm/routing/createRouter.d.ts +7 -1
- package/lib/esm/routing/createRouter.d.ts.map +1 -1
- package/lib/esm/routing/createRouter.js +494 -11
- package/lib/esm/routing/index.d.ts +4 -0
- package/lib/esm/routing/index.d.ts.map +1 -1
- package/lib/esm/routing/index.js +5 -1
- package/lib/esm/routing/useNavigate.d.ts +6 -0
- package/lib/esm/routing/useNavigate.d.ts.map +1 -0
- package/lib/esm/routing/useNavigate.js +11 -0
- package/lib/esm/routing/useQuery.d.ts +2 -0
- package/lib/esm/routing/useQuery.d.ts.map +1 -0
- package/lib/esm/routing/useQuery.js +9 -0
- package/lib/esm/routing/useQueryState.d.ts +13 -0
- package/lib/esm/routing/useQueryState.d.ts.map +1 -0
- package/lib/esm/routing/useQueryState.js +80 -0
- package/lib/esm/routing/useTypedQuery.d.ts +2 -0
- package/lib/esm/routing/useTypedQuery.d.ts.map +1 -0
- package/lib/esm/routing/useTypedQuery.js +36 -0
- package/lib/esm/tools/buildSearch.d.ts +6 -0
- package/lib/esm/tools/buildSearch.d.ts.map +1 -0
- package/lib/esm/tools/buildSearch.js +60 -0
- package/lib/esm/tools/index.d.ts.map +1 -1
- package/lib/esm/tools/index.js +1 -1
- package/lib/esm/tools/query-dsl.d.ts +28 -0
- package/lib/esm/tools/query-dsl.d.ts.map +1 -0
- package/lib/esm/tools/query-dsl.js +250 -0
- package/lib/esm/tools/query.d.ts +2 -0
- package/lib/esm/tools/query.d.ts.map +1 -0
- package/lib/esm/tools/query.js +43 -0
- package/lib/esm/tools.d.ts +2 -2
- package/lib/esm/tools.d.ts.map +1 -1
- package/lib/esm/tools.js +3 -2
- package/lib/esm/type-tests/query-infer.test-d.d.ts +2 -0
- package/lib/esm/type-tests/query-infer.test-d.d.ts.map +1 -0
- package/lib/esm/type-tests/query-infer.test-d.js +49 -0
- package/lib/esm/types.d.ts +28 -4
- package/lib/esm/types.d.ts.map +1 -1
- package/lib/esm/types.js +1 -1
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/ResourcePage.d.ts.map +1 -1
- package/lib/types/builder.d.ts.map +1 -1
- package/lib/types/errors/HttpRedirect.d.ts.map +1 -1
- package/lib/types/errors/index.d.ts.map +1 -1
- package/lib/types/eslint-rules/index.d.ts +2 -0
- package/lib/types/eslint-rules/index.d.ts.map +1 -0
- package/lib/types/eslint-rules/no-direct-window-location-search.d.ts +4 -0
- package/lib/types/eslint-rules/no-direct-window-location-search.d.ts.map +1 -0
- package/lib/types/history/BrowserHistory.d.ts.map +1 -1
- package/lib/types/history/index.d.ts.map +1 -1
- package/lib/types/history/types.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/routing/Link.d.ts +1 -0
- package/lib/types/routing/Link.d.ts.map +1 -1
- package/lib/types/routing/RouteComponentWrapper.d.ts.map +1 -1
- package/lib/types/routing/RouterRenderer.d.ts.map +1 -1
- package/lib/types/routing/createRouter.d.ts +7 -1
- package/lib/types/routing/createRouter.d.ts.map +1 -1
- package/lib/types/routing/index.d.ts +4 -0
- package/lib/types/routing/index.d.ts.map +1 -1
- package/lib/types/routing/useNavigate.d.ts +6 -0
- package/lib/types/routing/useNavigate.d.ts.map +1 -0
- package/lib/types/routing/useQuery.d.ts +2 -0
- package/lib/types/routing/useQuery.d.ts.map +1 -0
- package/lib/types/routing/useQueryState.d.ts +13 -0
- package/lib/types/routing/useQueryState.d.ts.map +1 -0
- package/lib/types/routing/useTypedQuery.d.ts +2 -0
- package/lib/types/routing/useTypedQuery.d.ts.map +1 -0
- package/lib/types/tools/buildSearch.d.ts +6 -0
- package/lib/types/tools/buildSearch.d.ts.map +1 -0
- package/lib/types/tools/index.d.ts.map +1 -1
- package/lib/types/tools/query-dsl.d.ts +28 -0
- package/lib/types/tools/query-dsl.d.ts.map +1 -0
- package/lib/types/tools/query.d.ts +2 -0
- package/lib/types/tools/query.d.ts.map +1 -0
- package/lib/types/tools.d.ts +2 -2
- package/lib/types/tools.d.ts.map +1 -1
- package/lib/types/type-tests/query-infer.test-d.d.ts +2 -0
- package/lib/types/type-tests/query-infer.test-d.d.ts.map +1 -0
- package/lib/types/types.d.ts +28 -4
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +12 -12
|
@@ -4,4 +4,8 @@ export { default as RouteComponent } from './RouteComponent.js';
|
|
|
4
4
|
export { default as RouteComponentWrapper } from './RouteComponentWrapper.js';
|
|
5
5
|
export { default as RouterRenderer } from './RouterRenderer.js';
|
|
6
6
|
export { default as RoutingContext } from './RoutingContext.js';
|
|
7
|
+
export { default as useQuery } from './useQuery.js';
|
|
8
|
+
export { default as useTypedQuery } from './useTypedQuery.js';
|
|
9
|
+
export { default as useNavigate } from './useNavigate.js';
|
|
10
|
+
export { default as useQueryState } from './useQueryState.js';
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
package/lib/esm/routing/index.js
CHANGED
|
@@ -4,4 +4,8 @@ export { default as RouteComponent } from './RouteComponent.js';
|
|
|
4
4
|
export { default as RouteComponentWrapper } from './RouteComponentWrapper.js';
|
|
5
5
|
export { default as RouterRenderer } from './RouterRenderer.js';
|
|
6
6
|
export { default as RoutingContext } from './RoutingContext.js';
|
|
7
|
-
|
|
7
|
+
export { default as useQuery } from './useQuery.js';
|
|
8
|
+
export { default as useTypedQuery } from './useTypedQuery.js';
|
|
9
|
+
export { default as useNavigate } from './useNavigate.js';
|
|
10
|
+
export { default as useQueryState } from './useQueryState.js';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzVELE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzVDLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEUsT0FBTyxFQUFFLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzlFLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEUsT0FBTyxFQUFFLE9BQU8sSUFBSSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sSUFBSSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1haW4gcm91dGVyIGZhY3RvcnkgZnVuY3Rpb25cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlUm91dGVyIH0gZnJvbSAnLi9jcmVhdGVSb3V0ZXIuanMnO1xuXG4vLyBOYXZpZ2F0aW9uIGNvbXBvbmVudCB3aXRoIHByZWxvYWRpbmcgc3VwcG9ydFxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSAnLi9MaW5rLmpzJztcblxuLy8gUm91dGUgY29tcG9uZW50IHdyYXBwZXIgZm9yIGhhbmRsaW5nIGluZGl2aWR1YWwgcm91dGVzXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJvdXRlQ29tcG9uZW50IH0gZnJvbSAnLi9Sb3V0ZUNvbXBvbmVudC5qcyc7XG5cbi8vIEludGVybmFsIHdyYXBwZXIgY29tcG9uZW50IGZvciByb3V0ZSByZW5kZXJpbmdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGVDb21wb25lbnRXcmFwcGVyIH0gZnJvbSAnLi9Sb3V0ZUNvbXBvbmVudFdyYXBwZXIuanMnO1xuXG4vLyBNYWluIHJlbmRlcmVyIGNvbXBvbmVudCB0aGF0IGRpc3BsYXlzIGN1cnJlbnQgcm91dGVcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGVyUmVuZGVyZXIgfSBmcm9tICcuL1JvdXRlclJlbmRlcmVyLmpzJztcblxuLy8gUmVhY3QgY29udGV4dCBmb3Igc2hhcmluZyByb3V0ZXIgc3RhdGVcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGluZ0NvbnRleHQgfSBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbi8vIEhvb2sgdG8gYWNjZXNzIHJhdyBxdWVyeSBwYXJhbWV0ZXJzXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVF1ZXJ5IH0gZnJvbSAnLi91c2VRdWVyeS5qcyc7XG4vLyBIb29rIHRvIGFjY2VzcyB0eXBlZCBxdWVyeSBwYXJhbWV0ZXJzXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVR5cGVkUXVlcnkgfSBmcm9tICcuL3VzZVR5cGVkUXVlcnkuanMnO1xuLy8gSG9vayB0byBuYXZpZ2F0ZSBwcm9ncmFtbWF0aWNhbGx5XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZU5hdmlnYXRlIH0gZnJvbSAnLi91c2VOYXZpZ2F0ZS5qcyc7XG4vLyBIb29rIHRvIGJpbmQgYSBzcGVjaWZpYyBxdWVyeSBwYXJhbSB0byBjb21wb25lbnQgc3RhdGVcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlUXVlcnlTdGF0ZSB9IGZyb20gJy4vdXNlUXVlcnlTdGF0ZS5qcyc7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNavigate.d.ts","sourceRoot":"","sources":["../../../src/routing/useNavigate.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,UAAU,WAAW,IAAI,CAAC,IAAI,EAAE;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,KAAK,IAAI,CAST"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useCallback, useContext } from 'react';
|
|
2
|
+
import RoutingContext from './RoutingContext.js';
|
|
3
|
+
export default function useNavigate() {
|
|
4
|
+
const ctx = useContext(RoutingContext);
|
|
5
|
+
return useCallback((opts) => {
|
|
6
|
+
if (ctx == null)
|
|
7
|
+
return;
|
|
8
|
+
ctx.navigate(opts);
|
|
9
|
+
}, [ctx]);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlTmF2aWdhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy91c2VOYXZpZ2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQVNqRCxNQUFNLENBQUMsT0FBTyxVQUFVLFdBQVc7SUFLakMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sV0FBVyxDQUNoQixDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1AsSUFBSSxHQUFHLElBQUksSUFBSTtZQUFFLE9BQU87UUFDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLENBQUMsQ0FDTixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJvdXRpbmdDb250ZXh0IGZyb20gJy4vUm91dGluZ0NvbnRleHQuanMnO1xuXG4vKipcbiAqIEhvb2sgcmV0dXJuaW5nIGEgbmF2aWdhdGUgZnVuY3Rpb24uXG4gKiBuYXZpZ2F0ZSh7IHBhdGhuYW1lPywgcXVlcnk/LCByZXBsYWNlPyB9KVxuICogLSBwYXRobmFtZTogdGFyZ2V0IHBhdGggKGRlZmF1bHRzIGN1cnJlbnQpXG4gKiAtIHF1ZXJ5OiB0eXBlZCBvciByYXcgcXVlcnkgb2JqZWN0IChzZXJpYWxpemVkIHVzaW5nIHJvdXRlIHNjaGVtYSBpZiBwcmVzZW50KVxuICogLSByZXBsYWNlOiB3aGV0aGVyIHRvIHJlcGxhY2UgaW5zdGVhZCBvZiBwdXNoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU5hdmlnYXRlKCk6IChvcHRzOiB7XG4gIHBhdGhuYW1lPzogc3RyaW5nO1xuICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHJlcGxhY2U/OiBib29sZWFuO1xufSkgPT4gdm9pZCB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHMpID0+IHtcbiAgICAgIGlmIChjdHggPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgY3R4Lm5hdmlnYXRlKG9wdHMpO1xuICAgIH0sXG4gICAgW2N0eF0sXG4gICk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../src/routing/useQuery.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAIpE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import RoutingContext from './RoutingContext.js';
|
|
3
|
+
export default function useQuery() {
|
|
4
|
+
const ctx = useContext(RoutingContext);
|
|
5
|
+
if (ctx == null)
|
|
6
|
+
return {};
|
|
7
|
+
return ctx.get().query;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy91c2VRdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25DLE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBTWpELE1BQU0sQ0FBQyxPQUFPLFVBQVUsUUFBUTtJQUM5QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcblxuLyoqXG4gKiBIb29rIHJldHVybmluZyB0aGUgcmF3ICh1bnR5cGVkKSBxdWVyeSBwYXJhbWV0ZXJzIHBhcnNlZCBmcm9tIGxvY2F0aW9uLnNlYXJjaC5cbiAqIFBoYXNlIDI6IHZhbHVlcyBhcmUgc3RyaW5ncyBvciBzdHJpbmdbXSB3aGVuIHJlcGVhdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VRdWVyeSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KFJvdXRpbmdDb250ZXh0KTtcbiAgaWYgKGN0eCA9PSBudWxsKSByZXR1cm4ge307XG4gIHJldHVybiBjdHguZ2V0KCkucXVlcnk7XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type UseQueryStateOptions<T> = {
|
|
2
|
+
defaultValue?: T;
|
|
3
|
+
omitIfDefault?: boolean;
|
|
4
|
+
replace?: boolean;
|
|
5
|
+
raw?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export default function useQueryState<T = any>(key: string, opts?: UseQueryStateOptions<T>): [
|
|
8
|
+
T | undefined,
|
|
9
|
+
(next: T | undefined, navOpts?: {
|
|
10
|
+
replace?: boolean;
|
|
11
|
+
}) => void
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=useQueryState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryState.d.ts","sourceRoot":"","sources":["../../../src/routing/useQueryState.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IAEpC,YAAY,CAAC,EAAE,CAAC,CAAC;IAEjB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAWF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,GAAG,GAAG,EAC3C,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACjC;IACD,CAAC,GAAG,SAAS;IACb,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI;CAC/D,CAyFA"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { useCallback, useContext, useMemo } from 'react';
|
|
2
|
+
import RoutingContext from './RoutingContext.js';
|
|
3
|
+
export default function useQueryState(key, opts = {}) {
|
|
4
|
+
const ctx = useContext(RoutingContext);
|
|
5
|
+
const { defaultValue, omitIfDefault = true } = opts;
|
|
6
|
+
const entry = ctx?.get();
|
|
7
|
+
const route = entry?.route;
|
|
8
|
+
const schema = useMemo(() => {
|
|
9
|
+
if (route == null)
|
|
10
|
+
return undefined;
|
|
11
|
+
const collected = [];
|
|
12
|
+
for (const r of route.route.routes) {
|
|
13
|
+
const maybe = r.query;
|
|
14
|
+
if (maybe !== null &&
|
|
15
|
+
typeof maybe === 'object' &&
|
|
16
|
+
Object.values(maybe).some((v) => {
|
|
17
|
+
if (v == null || typeof v !== 'object')
|
|
18
|
+
return false;
|
|
19
|
+
if (!('parse' in v))
|
|
20
|
+
return false;
|
|
21
|
+
const candidate = v;
|
|
22
|
+
return typeof candidate.parse === 'function';
|
|
23
|
+
})) {
|
|
24
|
+
collected.push(maybe);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (collected.length === 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
return collected.at(-1);
|
|
30
|
+
}, [route]);
|
|
31
|
+
const typedQuery = entry?.typedQuery;
|
|
32
|
+
const rawQuery = entry?.query;
|
|
33
|
+
let current;
|
|
34
|
+
if (opts.raw || schema == null) {
|
|
35
|
+
const rawVal = rawQuery?.[key];
|
|
36
|
+
if (Array.isArray(rawVal)) {
|
|
37
|
+
current = rawVal[rawVal.length - 1];
|
|
38
|
+
}
|
|
39
|
+
else if (rawVal != null) {
|
|
40
|
+
current = rawVal;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (typedQuery != null) {
|
|
44
|
+
current = typedQuery[key];
|
|
45
|
+
}
|
|
46
|
+
if (current === undefined && defaultValue !== undefined) {
|
|
47
|
+
current = defaultValue;
|
|
48
|
+
}
|
|
49
|
+
const setValue = useCallback((next, navOpts) => {
|
|
50
|
+
if (ctx == null)
|
|
51
|
+
return;
|
|
52
|
+
const replace = navOpts?.replace ?? opts.replace;
|
|
53
|
+
const entryNow = ctx.get();
|
|
54
|
+
const source = (entryNow.typedQuery ?? entryNow.query);
|
|
55
|
+
const base = {};
|
|
56
|
+
for (const k of Object.keys(source)) {
|
|
57
|
+
base[k] = source[k];
|
|
58
|
+
}
|
|
59
|
+
const descriptor = schema?.[key];
|
|
60
|
+
const isDefault = descriptor != null &&
|
|
61
|
+
descriptor.hasDefault &&
|
|
62
|
+
next === descriptor.defaultValue;
|
|
63
|
+
if (!(next === undefined ||
|
|
64
|
+
(omitIfDefault && (isDefault || next === defaultValue)))) {
|
|
65
|
+
base[key] = next;
|
|
66
|
+
}
|
|
67
|
+
else if (Object.prototype.hasOwnProperty.call(base, key)) {
|
|
68
|
+
const rebuilt = {};
|
|
69
|
+
for (const k of Object.keys(base)) {
|
|
70
|
+
if (k !== key)
|
|
71
|
+
rebuilt[k] = base[k];
|
|
72
|
+
}
|
|
73
|
+
ctx.navigate({ query: rebuilt, replace });
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
ctx.navigate({ query: base, replace });
|
|
77
|
+
}, [ctx, schema, key, omitIfDefault, defaultValue, opts.replace]);
|
|
78
|
+
return [current, setValue];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUXVlcnlTdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0aW5nL3VzZVF1ZXJ5U3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3pELE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBd0JqRCxNQUFNLENBQUMsT0FBTyxVQUFVLGFBQWEsQ0FDbkMsR0FBVyxFQUNYLE9BQWdDLEVBQUU7SUFLbEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztJQUNwRCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUczQixNQUFNLE1BQU0sR0FBNEIsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNuRCxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUksQ0FBb0MsQ0FBQyxLQUFLLENBQUM7WUFDMUQsSUFDRSxLQUFLLEtBQUssSUFBSTtnQkFDZCxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWdDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDekQsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7d0JBQUUsT0FBTyxLQUFLLENBQUM7b0JB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O1lBRTNELE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUc7b0JBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxQyxPQUFPO1FBQ1QsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQzlELENBQUM7SUFFRixPQUFPLENBQUMsT0FBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUm91dGluZ0NvbnRleHQgZnJvbSAnLi9Sb3V0aW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5U2NoZW1hIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogT3B0aW9ucyBmb3IgdXNlUXVlcnlTdGF0ZSAqL1xuZXhwb3J0IHR5cGUgVXNlUXVlcnlTdGF0ZU9wdGlvbnM8VD4gPSB7XG4gIC8qKiBEZWZhdWx0IHZhbHVlIHdoZW4gdGhlIGtleSBpcyBhYnNlbnQgKG92ZXJyaWRlcyBzY2hlbWEgZGVmYXVsdCBmb3IgdGhlIGhvb2sgY29uc3VtZXIpICovXG4gIGRlZmF1bHRWYWx1ZT86IFQ7XG4gIC8qKiBJZiB0cnVlLCBvbWl0IHRoaXMga2V5IHdoZW4gdmFsdWUgZXF1YWxzIGRlZmF1bHRWYWx1ZSAoYW5kIHNjaGVtYSBkZWZhdWx0KSAqL1xuICBvbWl0SWZEZWZhdWx0PzogYm9vbGVhbjtcbiAgLyoqIFJlcGxhY2UgaW5zdGVhZCBvZiBwdXNoIHdoZW4gdXBkYXRpbmcgKHByZXZlbnRzIG5ldyBoaXN0b3J5IGVudHJ5KSAqL1xuICByZXBsYWNlPzogYm9vbGVhbjtcbiAgLyoqIFVzZSByYXcgKHVudHlwZWQpIHF1ZXJ5IHZhbHVlIHJhdGhlciB0aGFuIHR5cGVkUXVlcnkgKGZhbGxiYWNrIGZvciBtaWdyYXRpb24pICovXG4gIHJhdz86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEJpZGlyZWN0aW9uYWwgc3RhdGUg4oaUIFVSTCBzeW5jaHJvbml6YXRpb24gZm9yIGEgc2luZ2xlIHF1ZXJ5IHBhcmFtLlxuICpcbiAqIEJlaGF2aW91cnM6XG4gKiAtIFJlYWRzIGZyb20gdHlwZWRRdWVyeSAoaWYgc2NoZW1hIHByZXNlbnQpIGVsc2UgcmF3IHF1ZXJ5IGFnZ3JlZ2F0aW9uLlxuICogLSBXaGVuIHNldHRpbmcgdmFsdWUgdG8gdW5kZWZpbmVkIChvciBkZWZhdWx0IHdpdGggb21pdElmRGVmYXVsdCkgdGhlIGtleSBpcyByZW1vdmVkLlxuICogLSBTZXJpYWxpemVzIHRocm91Z2ggZXhpc3RpbmcgbmF2aWdhdGUrYnVpbGRTZWFyY2ggcGlwZWxpbmUgKHNjaGVtYSBhd2FyZSBvcmRlcmluZyAmIG9taXNzaW9uKS5cbiAqIC0gU3RhYmxlIGlkZW50aXR5IGZvciBzZXR0ZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVF1ZXJ5U3RhdGU8VCA9IGFueT4oXG4gIGtleTogc3RyaW5nLFxuICBvcHRzOiBVc2VRdWVyeVN0YXRlT3B0aW9uczxUPiA9IHt9LFxuKTogW1xuICBUIHwgdW5kZWZpbmVkLFxuICAobmV4dDogVCB8IHVuZGVmaW5lZCwgbmF2T3B0cz86IHsgcmVwbGFjZT86IGJvb2xlYW4gfSkgPT4gdm9pZCxcbl0ge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KFJvdXRpbmdDb250ZXh0KTtcbiAgY29uc3QgeyBkZWZhdWx0VmFsdWUsIG9taXRJZkRlZmF1bHQgPSB0cnVlIH0gPSBvcHRzO1xuICBjb25zdCBlbnRyeSA9IGN0eD8uZ2V0KCk7XG4gIGNvbnN0IHJvdXRlID0gZW50cnk/LnJvdXRlO1xuXG4gIC8vIEV4dHJhY3QgZGVlcGVzdCBzY2hlbWEgKHNhbWUgaGV1cmlzdGljIGFzIHVzZVR5cGVkUXVlcnkpXG4gIGNvbnN0IHNjaGVtYTogUXVlcnlTY2hlbWEgfCB1bmRlZmluZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocm91dGUgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb2xsZWN0ZWQ6IFF1ZXJ5U2NoZW1hW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXliZSA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICBpZiAoXG4gICAgICAgIG1heWJlICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBtYXliZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhtYXliZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuc29tZSgodikgPT4ge1xuICAgICAgICAgIGlmICh2ID09IG51bGwgfHwgdHlwZW9mIHYgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgaWYgKCEoJ3BhcnNlJyBpbiAodiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdiBhcyB7IHBhcnNlPzogdW5rbm93biB9O1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgY2FuZGlkYXRlLnBhcnNlID09PSAnZnVuY3Rpb24nO1xuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIGNvbGxlY3RlZC5wdXNoKG1heWJlIGFzIFF1ZXJ5U2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNvbGxlY3RlZC5hdCgtMSk7XG4gIH0sIFtyb3V0ZV0pO1xuXG4gIGNvbnN0IHR5cGVkUXVlcnkgPSBlbnRyeT8udHlwZWRRdWVyeTtcbiAgY29uc3QgcmF3UXVlcnkgPSBlbnRyeT8ucXVlcnk7XG5cbiAgbGV0IGN1cnJlbnQ6IGFueTtcbiAgaWYgKG9wdHMucmF3IHx8IHNjaGVtYSA9PSBudWxsKSB7XG4gICAgY29uc3QgcmF3VmFsID0gcmF3UXVlcnk/LltrZXldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJhd1ZhbCkpIHtcbiAgICAgIC8vIHBpY2sgbGFzdCBmb3Igc3ltbWV0cnkgd2l0aCB0eXBlZCBwYXJzaW5nIG9mIHByaW1pdGl2ZXNcbiAgICAgIGN1cnJlbnQgPSByYXdWYWxbcmF3VmFsLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSBpZiAocmF3VmFsICE9IG51bGwpIHtcbiAgICAgIGN1cnJlbnQgPSByYXdWYWw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVkUXVlcnkgIT0gbnVsbCkge1xuICAgIGN1cnJlbnQgPSAodHlwZWRRdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldO1xuICB9XG4gIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdXJyZW50ID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgY29uc3Qgc2V0VmFsdWUgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogVCB8IHVuZGVmaW5lZCwgbmF2T3B0cz86IHsgcmVwbGFjZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgaWYgKGN0eCA9PSBudWxsKSByZXR1cm47XG4gICAgICBjb25zdCByZXBsYWNlID0gbmF2T3B0cz8ucmVwbGFjZSA/PyBvcHRzLnJlcGxhY2U7XG4gICAgICBjb25zdCBlbnRyeU5vdyA9IGN0eC5nZXQoKTtcbiAgICAgIC8vIEJhc2Ugb2JqZWN0OiBzdGFydCBmcm9tIGV4aXN0aW5nIHR5cGVkUXVlcnkgaWYgcHJlc2VudCBlbHNlIHJhdyBxdWVyeSBjbG9uZVxuICAgICAgY29uc3Qgc291cmNlID0gKGVudHJ5Tm93LnR5cGVkUXVlcnkgPz8gZW50cnlOb3cucXVlcnkpIGFzIFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBhbnlcbiAgICAgID47XG4gICAgICBjb25zdCBiYXNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xuICAgICAgICBiYXNlW2tdID0gc291cmNlW2tdO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHNjaGVtYT8uW2tleV07XG4gICAgICBjb25zdCBpc0RlZmF1bHQgPVxuICAgICAgICBkZXNjcmlwdG9yICE9IG51bGwgJiZcbiAgICAgICAgZGVzY3JpcHRvci5oYXNEZWZhdWx0ICYmXG4gICAgICAgIG5leHQgPT09IGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIG5leHQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvbWl0SWZEZWZhdWx0ICYmIChpc0RlZmF1bHQgfHwgbmV4dCA9PT0gZGVmYXVsdFZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGJhc2Vba2V5XSA9IG5leHQ7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiYXNlLCBrZXkpKSB7XG4gICAgICAgIC8vIHJlYnVpbGQgd2l0aG91dCBrZXlcbiAgICAgICAgY29uc3QgcmVidWlsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoYmFzZSkpIHtcbiAgICAgICAgICBpZiAoayAhPT0ga2V5KSByZWJ1aWx0W2tdID0gYmFzZVtrXTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubmF2aWdhdGUoeyBxdWVyeTogcmVidWlsdCwgcmVwbGFjZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3R4Lm5hdmlnYXRlKHsgcXVlcnk6IGJhc2UsIHJlcGxhY2UgfSk7XG4gICAgfSxcbiAgICBbY3R4LCBzY2hlbWEsIGtleSwgb21pdElmRGVmYXVsdCwgZGVmYXVsdFZhbHVlLCBvcHRzLnJlcGxhY2VdLFxuICApO1xuXG4gIHJldHVybiBbY3VycmVudCBhcyBUIHwgdW5kZWZpbmVkLCBzZXRWYWx1ZV07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTypedQuery.d.ts","sourceRoot":"","sources":["../../../src/routing/useTypedQuery.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAmCtD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import RoutingContext from './RoutingContext.js';
|
|
3
|
+
export default function useTypedQuery() {
|
|
4
|
+
const ctx = useContext(RoutingContext);
|
|
5
|
+
if (ctx == null)
|
|
6
|
+
return {};
|
|
7
|
+
const entry = ctx.get();
|
|
8
|
+
let schema;
|
|
9
|
+
const matched = entry.route;
|
|
10
|
+
if (matched != null) {
|
|
11
|
+
const collected = [];
|
|
12
|
+
for (const r of matched.route.routes) {
|
|
13
|
+
const maybe = r.query;
|
|
14
|
+
if (maybe !== null &&
|
|
15
|
+
typeof maybe === 'object' &&
|
|
16
|
+
Object.values(maybe).some((v) => {
|
|
17
|
+
if (v == null || typeof v !== 'object')
|
|
18
|
+
return false;
|
|
19
|
+
if (!('parse' in v))
|
|
20
|
+
return false;
|
|
21
|
+
const candidate = v;
|
|
22
|
+
return typeof candidate.parse === 'function';
|
|
23
|
+
})) {
|
|
24
|
+
collected.push(maybe);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (collected.length > 0)
|
|
28
|
+
schema = collected.at(-1);
|
|
29
|
+
}
|
|
30
|
+
const value = entry.typedQuery ?? entry.query;
|
|
31
|
+
if (schema != null) {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHlwZWRRdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0aW5nL3VzZVR5cGVkUXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQW9CakQsTUFBTSxDQUFDLE9BQU8sVUFBVSxhQUFhO0lBQ25DLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsSUFBSSxJQUFJO1FBQUUsT0FBTyxFQUFTLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBR3hCLElBQUksTUFBK0IsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sU0FBUyxHQUFrQixFQUFFLENBQUM7UUFDcEMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFJLENBQW9DLENBQUMsS0FBSyxDQUFDO1lBQzFELElBQ0UsS0FBSyxLQUFLLElBQUk7Z0JBQ2QsT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFFekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFnQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO3dCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUNyRCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUssQ0FBNkIsQ0FBQzt3QkFBRSxPQUFPLEtBQUssQ0FBQztvQkFDL0QsTUFBTSxTQUFTLEdBQUcsQ0FBd0IsQ0FBQztvQkFDM0MsT0FBTyxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsRUFDRixDQUFDO2dCQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBb0IsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFFOUMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsT0FBTyxLQUEwRCxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLEtBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgUXVlcnlTY2hlbWEsIEluZmVyUXVlcnkgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogSG9vayByZXR1cm5pbmcgdGhlIHR5cGVkIHF1ZXJ5IG9iamVjdCBjb21wdXRlZCBmcm9tIHRoZSBtYXRjaGVkIHJvdXRlIHNjaGVtYSAoaWYgYW55KS5cbiAqIEZhbGxzIGJhY2sgdG8gdGhlIHJhdyBxdWVyeSB3aGVuIG5vIHNjaGVtYSBpcyBkZWZpbmVkLlxuICpcbiAqIFVzYWdlIHdpdGggZXhwbGljaXQgdHlwaW5nICh1bnRpbCBhdXRvbWF0aWMgaW5mZXJlbmNlIGlzIGFkZGVkKTpcbiAqICAgY29uc3QgcSA9IHVzZVR5cGVkUXVlcnk8eyBwYWdlPzogbnVtYmVyOyB0YWc/OiBzdHJpbmcgfT4oKTtcbiAqL1xuLy8gSW50ZXJuYWwgdXRpbGl0eTogaWYgc2NoZW1hIFMgcHJvdmlkZWQgcmV0dXJuIGl0cyBpbmZlcnJlZCBxdWVyeSwgZWxzZSBmYWxsYmFjay5cbnR5cGUgSW5mZXJPckZhbGxiYWNrPFMsIEZhbGxiYWNrPiA9IFMgZXh0ZW5kcyBRdWVyeVNjaGVtYVxuICA/IEluZmVyUXVlcnk8Uz5cbiAgOiBGYWxsYmFjaztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0eXBlZCBxdWVyeSBvYmplY3QuIElmIG5vIHNjaGVtYSBpcyBwcmVzZW50IGZhbGxzIGJhY2sgdG8gcmF3IHF1ZXJ5LlxuICogR2VuZXJpYyBUIGNhbiBiZSBwcm92aWRlZCBmb3IgZXhwbGljaXQgdHlwaW5nOyBvdGhlcndpc2UgYSBiZXN04oCRZWZmb3J0IHJ1bnRpbWUgY2FzdFxuICogaXMgYXBwbGllZCB3aGVuIGEgc2NoZW1hIGlzIGRldGVjdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUeXBlZFF1ZXJ5PFQgPSB1bmtub3duPigpOiBUIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGlmIChjdHggPT0gbnVsbCkgcmV0dXJuIHt9IGFzIGFueTtcbiAgY29uc3QgZW50cnkgPSBjdHguZ2V0KCk7XG5cbiAgLy8gUnVudGltZSBleHRyYWN0aW9uIG9mIGRlZXBlc3Qgc2NoZW1hIChtaXJyb3JzIGxvZ2ljIGluIGNyZWF0ZVJvdXRlcilcbiAgbGV0IHNjaGVtYTogUXVlcnlTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1hdGNoZWQgPSBlbnRyeS5yb3V0ZTtcbiAgaWYgKG1hdGNoZWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbGxlY3RlZDogUXVlcnlTY2hlbWFbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiBtYXRjaGVkLnJvdXRlLnJvdXRlcykge1xuICAgICAgY29uc3QgbWF5YmUgPSAociBhcyB1bmtub3duIGFzIHsgcXVlcnk/OiB1bmtub3duIH0pLnF1ZXJ5O1xuICAgICAgaWYgKFxuICAgICAgICBtYXliZSAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgbWF5YmUgPT09ICdvYmplY3QnICYmXG4gICAgICAgIC8vIEhldXJpc3RpYzogYXQgbGVhc3Qgb25lIHByb3BlcnR5IHdob3NlIHZhbHVlIGxvb2tzIGxpa2UgYSBkZXNjcmlwdG9yIChoYXMgcGFyc2UgZm4pXG4gICAgICAgIE9iamVjdC52YWx1ZXMobWF5YmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnNvbWUoKHYpID0+IHtcbiAgICAgICAgICBpZiAodiA9PSBudWxsIHx8IHR5cGVvZiB2ICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGlmICghKCdwYXJzZScgaW4gKHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHYgYXMgeyBwYXJzZT86IHVua25vd24gfTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGNhbmRpZGF0ZS5wYXJzZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgfSlcbiAgICAgICkge1xuICAgICAgICBjb2xsZWN0ZWQucHVzaChtYXliZSBhcyBRdWVyeVNjaGVtYSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkgc2NoZW1hID0gY29sbGVjdGVkLmF0KC0xKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gZW50cnkudHlwZWRRdWVyeSA/PyBlbnRyeS5xdWVyeTtcbiAgLy8gQ2FzdCB0byBpbmZlcnJlZCBzaGFwZSBvbmx5IGlmIHNjaGVtYSBub24tbnVsbFxuICBpZiAoc2NoZW1hICE9IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgSW5mZXJPckZhbGxiYWNrPHR5cGVvZiBzY2hlbWEsIFQ+IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICByZXR1cm4gdmFsdWUgYXMgVDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QuerySchema } from '../types.js';
|
|
2
|
+
export declare function buildSearch(query: Record<string, any> | undefined, schema: QuerySchema | undefined, opts?: {
|
|
3
|
+
omitDefaults?: boolean;
|
|
4
|
+
sortKeys?: boolean;
|
|
5
|
+
}): string;
|
|
6
|
+
//# sourceMappingURL=buildSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildSearch.d.ts","sourceRoot":"","sources":["../../../src/tools/buildSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAWhE,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EACtC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD,MAAM,CA0DR"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function serializeValue(descriptor, value) {
|
|
2
|
+
return descriptor.serialize(value);
|
|
3
|
+
}
|
|
4
|
+
export function buildSearch(query, schema, opts) {
|
|
5
|
+
if (query == null)
|
|
6
|
+
return '';
|
|
7
|
+
const { omitDefaults = false, sortKeys = true } = opts ?? {};
|
|
8
|
+
let keys = Object.keys(query);
|
|
9
|
+
if (sortKeys) {
|
|
10
|
+
if (schema != null) {
|
|
11
|
+
const schemaKeys = Object.keys(schema);
|
|
12
|
+
const ordered = [];
|
|
13
|
+
for (const sk of schemaKeys) {
|
|
14
|
+
if (Object.prototype.hasOwnProperty.call(query, sk)) {
|
|
15
|
+
ordered.push(sk);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
for (const k of keys) {
|
|
19
|
+
if (!schemaKeys.includes(k)) {
|
|
20
|
+
ordered.push(k);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
keys = ordered;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
keys.sort();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const parts = [];
|
|
30
|
+
for (const key of keys) {
|
|
31
|
+
const value = query[key];
|
|
32
|
+
if (value == null) {
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const descriptor = schema?.[key];
|
|
36
|
+
if (descriptor != null) {
|
|
37
|
+
const isDefault = descriptor.hasDefault && value === descriptor.defaultValue;
|
|
38
|
+
const skipDefault = omitDefaults && isDefault;
|
|
39
|
+
if (!skipDefault) {
|
|
40
|
+
const values = serializeValue(descriptor, value);
|
|
41
|
+
values.forEach((v) => {
|
|
42
|
+
parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(v))}`);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (Array.isArray(value)) {
|
|
47
|
+
value.forEach((v) => {
|
|
48
|
+
parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(v))}`);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (parts.length === 0)
|
|
57
|
+
return '';
|
|
58
|
+
return `?${parts.join('&')}`;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRTZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvYnVpbGRTZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsU0FBUyxjQUFjLENBQ3JCLFVBQWdDLEVBQ2hDLEtBQWM7SUFFZCxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBWSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUdELE1BQU0sVUFBVSxXQUFXLENBQ3pCLEtBQXNDLEVBQ3RDLE1BQStCLEVBQy9CLElBQXFEO0lBRXJELElBQUksS0FBSyxJQUFJLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QixNQUFNLEVBQUUsWUFBWSxHQUFHLEtBQUssRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3RCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUVuQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztZQUM3QixLQUFLLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUM7WUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksR0FBRyxPQUFPLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVwQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sVUFBVSxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixNQUFNLFNBQVMsR0FDYixVQUFVLENBQUMsVUFBVSxJQUFJLEtBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUM3RCxNQUFNLFdBQVcsR0FBRyxZQUFZLElBQUksU0FBUyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDbkIsS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzlELENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDbEIsS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzlELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQ2xFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlTY2hlbWEsIFF1ZXJ5RGVzY3JpcHRvciB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqIFNlcmlhbGl6ZSBhIHNpbmdsZSB2YWx1ZSB3aXRoIGl0cyBkZXNjcmlwdG9yICovXG5mdW5jdGlvbiBzZXJpYWxpemVWYWx1ZShcbiAgZGVzY3JpcHRvcjogUXVlcnlEZXNjcmlwdG9yPGFueT4sXG4gIHZhbHVlOiB1bmtub3duLFxuKTogc3RyaW5nW10ge1xuICByZXR1cm4gZGVzY3JpcHRvci5zZXJpYWxpemUodmFsdWUgYXMgYW55KTtcbn1cblxuLyoqIFNlcmlhbGl6ZSBhIHF1ZXJ5IG9iamVjdCB1c2luZyBhbiBvcHRpb25hbCBzY2hlbWEgKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNlYXJjaChcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQsXG4gIHNjaGVtYTogUXVlcnlTY2hlbWEgfCB1bmRlZmluZWQsXG4gIG9wdHM/OiB7IG9taXREZWZhdWx0cz86IGJvb2xlYW47IHNvcnRLZXlzPzogYm9vbGVhbiB9LFxuKTogc3RyaW5nIHtcbiAgaWYgKHF1ZXJ5ID09IG51bGwpIHJldHVybiAnJztcbiAgY29uc3QgeyBvbWl0RGVmYXVsdHMgPSBmYWxzZSwgc29ydEtleXMgPSB0cnVlIH0gPSBvcHRzID8/IHt9O1xuICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgaWYgKHNvcnRLZXlzKSB7XG4gICAgaWYgKHNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAvLyBPcmRlciBrZXlzIGJhc2VkIG9uIHNjaGVtYSBkZWNsYXJhdGlvbiBvcmRlciwgdGhlbiBhcHBlbmQgYW55IGV4dHJhIGtleXNcbiAgICAgIGNvbnN0IHNjaGVtYUtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpO1xuICAgICAgY29uc3Qgb3JkZXJlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgc2sgb2Ygc2NoZW1hS2V5cykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5LCBzaykpIHtcbiAgICAgICAgICBvcmRlcmVkLnB1c2goc2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgICBpZiAoIXNjaGVtYUtleXMuaW5jbHVkZXMoaykpIHtcbiAgICAgICAgICBvcmRlcmVkLnB1c2goayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGtleXMgPSBvcmRlcmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzLnNvcnQoKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIC8vIHNraXAgbnVsbGlzaCB2YWx1ZXNcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHNjaGVtYT8uW2tleV07XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGlzRGVmYXVsdCA9XG4gICAgICAgICAgZGVzY3JpcHRvci5oYXNEZWZhdWx0ICYmIHZhbHVlID09PSBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgY29uc3Qgc2tpcERlZmF1bHQgPSBvbWl0RGVmYXVsdHMgJiYgaXNEZWZhdWx0O1xuICAgICAgICBpZiAoIXNraXBEZWZhdWx0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gc2VyaWFsaXplVmFsdWUoZGVzY3JpcHRvciwgdmFsdWUpO1xuICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICAgICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHYpKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgcGFydHMucHVzaChcbiAgICAgICAgICAgIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodikpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICAgIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHJldHVybiBgPyR7cGFydHMuam9pbignJicpfWA7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GACpC,MAAM,EAAE,CAUV;AAeD,wBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAEhE"}
|
package/lib/esm/tools/index.js
CHANGED
|
@@ -10,4 +10,4 @@ export function onlyDefinedStyles(styles) {
|
|
|
10
10
|
export function cx(styles) {
|
|
11
11
|
return onlyDefinedStyles(styles).join(' ');
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUFxQztJQUVyQyxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFFcEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQWVELE1BQU0sVUFBVSxFQUFFLENBQUMsTUFBcUM7SUFDdEQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsdGVycyBhbiBhcnJheSBvZiBDU1MgY2xhc3MgbmFtZXMsIHJlbW92aW5nIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gKiBUaGlzIHV0aWxpdHkgaGVscHMgYnVpbGQgY29uZGl0aW9uYWwgQ1NTIGNsYXNzIGxpc3RzIHNhZmVseS5cbiAqXG4gKiBAcGFyYW0gc3R5bGVzIC0gQXJyYXkgb2YgcG90ZW50aWFsIENTUyBjbGFzcyBuYW1lcyAoc29tZSBtYXkgYmUgbnVsbC91bmRlZmluZWQpXG4gKiBAcmV0dXJucyBBcnJheSBjb250YWluaW5nIG9ubHkgdGhlIGRlZmluZWQgc3RyaW5nIHZhbHVlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjbGFzc2VzID0gb25seURlZmluZWRTdHlsZXMoWydidG4nLCBpc0FjdGl2ZSAmJiAnYWN0aXZlJywgbnVsbCwgJ3ByaW1hcnknXSk7XG4gKiAvLyBSZXN1bHQ6IFsnYnRuJywgJ2FjdGl2ZScsICdwcmltYXJ5J10gKGFzc3VtaW5nIGlzQWN0aXZlIGlzIHRydWUpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ubHlEZWZpbmVkU3R5bGVzKFxuICBzdHlsZXM6IChzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKVtdLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBmaWx0ZXJlZFN0eWxlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHN0eWxlIG9mIHN0eWxlcykge1xuICAgIGlmIChzdHlsZSAhPSBudWxsKSB7XG4gICAgICBmaWx0ZXJlZFN0eWxlcy5wdXNoKHN0eWxlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRTdHlsZXM7XG59XG5cbi8qKlxuICogQ29tYmluZXMgQ1NTIGNsYXNzIG5hbWVzIGludG8gYSBzaW5nbGUgc3RyaW5nLCBmaWx0ZXJpbmcgb3V0IG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBzaW1pbGFyIHRvIHRoZSBwb3B1bGFyICdjbGFzc25hbWVzJyBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSBzdHlsZXMgLSBBcnJheSBvZiBwb3RlbnRpYWwgQ1NTIGNsYXNzIG5hbWVzXG4gKiBAcmV0dXJucyBTaW5nbGUgc3RyaW5nIHdpdGggYWxsIGRlZmluZWQgY2xhc3MgbmFtZXMgam9pbmVkIGJ5IHNwYWNlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjbGFzc05hbWUgPSBjeChbJ2J0bicsIGlzQWN0aXZlICYmICdhY3RpdmUnLCBpc0RhbmdlciAmJiAnZGFuZ2VyJ10pO1xuICogLy8gUmVzdWx0OiBcImJ0biBhY3RpdmUgZGFuZ2VyXCIgKGFzc3VtaW5nIGJvdGggY29uZGl0aW9ucyBhcmUgdHJ1ZSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3goc3R5bGVzOiAoc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZClbXSk6IHN0cmluZyB7XG4gIHJldHVybiBvbmx5RGVmaW5lZFN0eWxlcyhzdHlsZXMpLmpvaW4oJyAnKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { QueryDescriptor, QuerySchema, InferQuery } from '../types.js';
|
|
2
|
+
declare function stringDesc(): QueryDescriptor<string>;
|
|
3
|
+
declare function numberDesc(): QueryDescriptor<number>;
|
|
4
|
+
declare function booleanDesc(): QueryDescriptor<boolean>;
|
|
5
|
+
declare function enumDesc<T extends string>(...values: T[]): QueryDescriptor<T>;
|
|
6
|
+
declare function arrayOf<T>(inner: QueryDescriptor<T>): QueryDescriptor<T[]>;
|
|
7
|
+
declare function optional<T>(d: QueryDescriptor<T>): QueryDescriptor<T | undefined>;
|
|
8
|
+
declare function withDefault<T>(d: QueryDescriptor<T>, value: T): QueryDescriptor<T>;
|
|
9
|
+
declare function emptyAsUndefined(d: QueryDescriptor<string>): QueryDescriptor<string>;
|
|
10
|
+
declare function custom<T>(handlers: {
|
|
11
|
+
parse: (values: string[]) => T | undefined;
|
|
12
|
+
serialize: (value: T) => string[];
|
|
13
|
+
}): QueryDescriptor<T>;
|
|
14
|
+
export declare const q: {
|
|
15
|
+
string: typeof stringDesc;
|
|
16
|
+
number: typeof numberDesc;
|
|
17
|
+
boolean: typeof booleanDesc;
|
|
18
|
+
enum: typeof enumDesc;
|
|
19
|
+
array: typeof arrayOf;
|
|
20
|
+
optional: typeof optional;
|
|
21
|
+
default: typeof withDefault;
|
|
22
|
+
emptyAsUndefined: typeof emptyAsUndefined;
|
|
23
|
+
custom: typeof custom;
|
|
24
|
+
};
|
|
25
|
+
export declare function parseTypedQuery<S extends QuerySchema | undefined>(schema: S, raw: Record<string, string | string[]>): S extends QuerySchema ? InferQuery<Exclude<S, undefined>> : typeof raw;
|
|
26
|
+
export declare function parseSearch<S extends QuerySchema | undefined>(schema: S, search: string): S extends QuerySchema ? InferQuery<Exclude<S, undefined>> : Record<string, string | string[]>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=query-dsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-dsl.d.ts","sourceRoot":"","sources":["../../../src/tools/query-dsl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAuB5E,iBAAS,UAAU,IAAI,eAAe,CAAC,MAAM,CAAC,CAS7C;AAGD,iBAAS,UAAU,IAAI,eAAe,CAAC,MAAM,CAAC,CAa7C;AAGD,iBAAS,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAkB/C;AAGD,iBAAS,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAYtE;AAGD,iBAAS,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAgBnE;AAGD,iBAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC,CAE1E;AAGD,iBAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAE3E;AAGD,iBAAS,gBAAgB,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAS7E;AAGD,iBAAS,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;CACnC,GAAG,eAAe,CAAC,CAAC,CAAC,CAKrB;AAED,eAAO,MAAM,CAAC;;;;;;;;;;CAUb,CAAC;AAGF,wBAAgB,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,EAC/D,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GACrC,CAAC,SAAS,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAgGxE;AAGD,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,EAC3D,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,GACb,CAAC,SAAS,WAAW,GACpB,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAcpC"}
|