@plumile/router 0.1.19 → 0.1.21
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/README.md +110 -180
- package/lib/esm/eslint-rules/no-direct-window-location-search.js +3 -3
- package/lib/esm/index.d.ts +0 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -2
- package/lib/esm/routing/Link.d.ts.map +1 -1
- package/lib/esm/routing/Link.js +14 -25
- package/lib/esm/routing/RouteComponentWrapper.js +2 -2
- package/lib/esm/routing/createRouter.d.ts.map +1 -1
- package/lib/esm/routing/createRouter.js +82 -108
- package/lib/esm/routing/index.d.ts +1 -1
- package/lib/esm/routing/index.d.ts.map +1 -1
- package/lib/esm/routing/index.js +2 -2
- package/lib/esm/routing/useAllQuery.js +1 -1
- package/lib/esm/routing/useFilters.js +10 -10
- package/lib/esm/routing/useQueryState.d.ts.map +1 -1
- package/lib/esm/routing/useQueryState.js +10 -45
- package/lib/esm/tools/buildCombinedSearch.d.ts +1 -5
- package/lib/esm/tools/buildCombinedSearch.d.ts.map +1 -1
- package/lib/esm/tools/buildCombinedSearch.js +6 -15
- package/lib/esm/tools.d.ts +2 -6
- package/lib/esm/tools.d.ts.map +1 -1
- package/lib/esm/tools.js +1 -1
- package/lib/esm/type-tests/query-infer.test-d.d.ts.map +1 -1
- package/lib/esm/type-tests/query-infer.test-d.js +2 -49
- package/lib/esm/type-tests/routes-inference.test-d.d.ts +0 -1
- package/lib/esm/type-tests/routes-inference.test-d.js +2 -49
- package/lib/esm/types.d.ts +2 -16
- 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/index.d.ts +0 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/routing/Link.d.ts.map +1 -1
- package/lib/types/routing/createRouter.d.ts.map +1 -1
- package/lib/types/routing/index.d.ts +1 -1
- package/lib/types/routing/index.d.ts.map +1 -1
- package/lib/types/routing/useQueryState.d.ts.map +1 -1
- package/lib/types/tools/buildCombinedSearch.d.ts +1 -5
- package/lib/types/tools/buildCombinedSearch.d.ts.map +1 -1
- package/lib/types/tools.d.ts +2 -6
- package/lib/types/tools.d.ts.map +1 -1
- package/lib/types/type-tests/query-infer.test-d.d.ts.map +1 -1
- package/lib/types/type-tests/routes-inference.test-d.d.ts +0 -1
- package/lib/types/types.d.ts +2 -16
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/lib/esm/routing/useTypedQuery.d.ts +0 -2
- package/lib/esm/routing/useTypedQuery.d.ts.map +0 -1
- package/lib/esm/routing/useTypedQuery.js +0 -36
- package/lib/esm/tools/buildSearch.d.ts +0 -6
- package/lib/esm/tools/buildSearch.d.ts.map +0 -1
- package/lib/esm/tools/buildSearch.js +0 -60
- package/lib/esm/tools/query-dsl.d.ts +0 -28
- package/lib/esm/tools/query-dsl.d.ts.map +0 -1
- package/lib/esm/tools/query-dsl.js +0 -250
- package/lib/types/routing/useTypedQuery.d.ts +0 -2
- package/lib/types/routing/useTypedQuery.d.ts.map +0 -1
- package/lib/types/tools/buildSearch.d.ts +0 -6
- package/lib/types/tools/buildSearch.d.ts.map +0 -1
- package/lib/types/tools/query-dsl.d.ts +0 -28
- package/lib/types/tools/query-dsl.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAI5D,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;AAGpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG5E,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryState.d.ts","sourceRoot":"","sources":["../../../src/routing/useQueryState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQueryState.d.ts","sourceRoot":"","sources":["../../../src/routing/useQueryState.ts"],"names":[],"mappings":"AAIA,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,OAAO,EAC/C,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,CA8CA"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { type Schema as FilterSchema } from '@plumile/filter-query';
|
|
2
|
-
import type { QuerySchema } from '../types.js';
|
|
3
2
|
export declare function buildCombinedSearch(opts: {
|
|
4
|
-
query?: Record<string, unknown>;
|
|
5
|
-
querySchema?: QuerySchema;
|
|
6
3
|
filters?: Record<string, unknown>;
|
|
7
|
-
|
|
8
|
-
omitQueryDefaults?: boolean;
|
|
4
|
+
querySchema?: FilterSchema;
|
|
9
5
|
}): string;
|
|
10
6
|
export default buildCombinedSearch;
|
|
11
7
|
//# sourceMappingURL=buildCombinedSearch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildCombinedSearch.d.ts","sourceRoot":"","sources":["../../../src/tools/buildCombinedSearch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildCombinedSearch.d.ts","sourceRoot":"","sources":["../../../src/tools/buildCombinedSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,IAAI,YAAY,EAC5B,MAAM,uBAAuB,CAAC;AAM/B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B,GAAG,MAAM,CAaT;AAED,eAAe,mBAAmB,CAAC"}
|
package/lib/types/tools.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { ParamData } from 'path-to-regexp';
|
|
2
|
-
import type { PrepareResult, PreparedMatch, Route, RouterMatchedRoute
|
|
2
|
+
import type { PrepareResult, PreparedMatch, Route, RouterMatchedRoute } from './types.js';
|
|
3
3
|
import type { FlatRoute } from './builder.js';
|
|
4
4
|
export declare function getMatchedRoute<TParams extends ParamData>(routes: FlatRoute<TParams>[], location: Location): RouterMatchedRoute<TParams> | null;
|
|
5
5
|
export declare function prepareMatch<TParams extends ParamData>(match: RouterMatchedRoute<TParams> | null, query?: Record<string, unknown>): PreparedMatch<TParams>;
|
|
6
|
-
export declare function r<TPrepared extends PrepareResult = PrepareResult, TVariables extends ParamData = ParamData, TQuery extends Record<string, unknown> = Record<string, unknown
|
|
7
|
-
query: TSchema;
|
|
8
|
-
} : Route<TPrepared, TVariables, TQuery>) & {
|
|
9
|
-
query?: TSchema;
|
|
10
|
-
}): Route<TPrepared, TVariables, TSchema extends QuerySchema ? InferQuery<TSchema> : TQuery>;
|
|
6
|
+
export declare function r<TPrepared extends PrepareResult = PrepareResult, TVariables extends ParamData = ParamData, TQuery extends Record<string, unknown> = Record<string, unknown>>(route: Route<TPrepared, TVariables, TQuery>): Route<TPrepared, TVariables, TQuery>;
|
|
11
7
|
//# sourceMappingURL=tools.d.ts.map
|
package/lib/types/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,KAAK,EACL,kBAAkB,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,KAAK,EACL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW9C,wBAAgB,eAAe,CAAC,OAAO,SAAS,SAAS,EACvD,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5B,QAAQ,EAAE,QAAQ,GACjB,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,CAepC;AAUD,wBAAgB,YAAY,CAAC,OAAO,SAAS,SAAS,EACpD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,EACzC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,aAAa,CAAC,OAAO,CAAC,CAmDxB;AAwBD,wBAAgB,CAAC,CACf,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEhE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,GAC1C,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAEtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-infer.test-d.d.ts","sourceRoot":"","sources":["../../../src/type-tests/query-infer.test-d.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query-infer.test-d.d.ts","sourceRoot":"","sources":["../../../src/type-tests/query-infer.test-d.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC"}
|
package/lib/types/types.d.ts
CHANGED
|
@@ -45,21 +45,9 @@ export type RouteEntry<TVariables extends ParamData> = {
|
|
|
45
45
|
forceRerender: boolean;
|
|
46
46
|
rawSearch?: string;
|
|
47
47
|
query: Record<string, string | string[]>;
|
|
48
|
-
typedQuery?: Record<string, unknown>;
|
|
49
48
|
filters?: Record<string, unknown>;
|
|
50
49
|
filterDiagnostics?: FilterDiagnostic[];
|
|
51
|
-
|
|
52
|
-
export type QueryDescriptor<T> = {
|
|
53
|
-
__type: T;
|
|
54
|
-
parse: (values: string[]) => T | undefined;
|
|
55
|
-
serialize: (value: T) => string[];
|
|
56
|
-
optional?: boolean;
|
|
57
|
-
hasDefault?: boolean;
|
|
58
|
-
defaultValue?: T;
|
|
59
|
-
};
|
|
60
|
-
export type QuerySchema = Record<string, QueryDescriptor<any>>;
|
|
61
|
-
export type InferQuery<S extends QuerySchema> = {
|
|
62
|
-
[K in keyof S]: S[K] extends QueryDescriptor<infer O> ? S[K]['optional'] extends true ? S[K]['hasDefault'] extends true ? O : O | undefined : O : never;
|
|
50
|
+
activeQuerySchema?: FilterSchema;
|
|
63
51
|
};
|
|
64
52
|
export type RouterRedirectStatus = 301 | 302;
|
|
65
53
|
export type MatchedRoute<TVariables extends ParamData> = {
|
|
@@ -86,8 +74,7 @@ export type Route<TPrepared extends PrepareResult, TVariables extends ParamData
|
|
|
86
74
|
path?: string;
|
|
87
75
|
prepare?: RoutePrepare<TPrepared, TVariables, TQueryShape>;
|
|
88
76
|
render?: RouteRender<TPrepared, TVariables, TQueryShape>;
|
|
89
|
-
|
|
90
|
-
filterSchema?: FilterSchema;
|
|
77
|
+
querySchema?: FilterSchema;
|
|
91
78
|
};
|
|
92
79
|
export type RouteComponentProps<TVariables extends ParamData, TQueryShape extends Record<string, unknown> = Record<string, unknown>> = {
|
|
93
80
|
children: ReactElement;
|
|
@@ -134,7 +121,6 @@ export type QueryShapeMap<Routes extends readonly AnyRoute[]> = {
|
|
|
134
121
|
};
|
|
135
122
|
export interface PreparedAccess<Routes extends readonly AnyRoute[]> {
|
|
136
123
|
getPrepared: <P extends PathsOf<Routes>>(path: P) => PreparedMap<Routes>[P];
|
|
137
|
-
getTypedQuery: <P extends PathsOf<Routes>>(path: P) => QueryShapeMap<Routes>[P] | undefined;
|
|
138
124
|
}
|
|
139
125
|
export type NavigateInputForPath<Routes extends readonly AnyRoute[], P extends PathsOf<Routes>> = {
|
|
140
126
|
pathname: P;
|
package/lib/types/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plumile/router",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"description": "A modern, type-safe React router with code splitting, data preloading, and Suspense integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/esm/index.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"npm": ">=8.0.0"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@plumile/filter-query": "^0.1.
|
|
34
|
+
"@plumile/filter-query": "^0.1.21",
|
|
35
35
|
"path-to-regexp": "8.2.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
@@ -45,13 +45,13 @@
|
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@types/react": ">=19.1.11",
|
|
48
|
-
"@types/react-dom": ">=19.1.
|
|
48
|
+
"@types/react-dom": ">=19.1.8",
|
|
49
49
|
"@types/react-relay": ">=18.2.1",
|
|
50
50
|
"react-relay": ">=20.1.1",
|
|
51
51
|
"relay-runtime": ">=20.1.1",
|
|
52
52
|
"tslib": ">=2.8.1"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "2ddbcdb764e44f424fbde8a012e4703cc22e421f",
|
|
55
55
|
"publishConfig": {
|
|
56
56
|
"access": "public"
|
|
57
57
|
}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHlwZWRRdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0aW5nL3VzZVR5cGVkUXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQW9CakQsTUFBTSxDQUFDLE9BQU8sVUFBVSxhQUFhO0lBQ25DLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsSUFBSSxJQUFJO1FBQUUsT0FBTyxFQUFPLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBR3hCLElBQUksTUFBK0IsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sU0FBUyxHQUFrQixFQUFFLENBQUM7UUFDcEMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFJLENBQW9DLENBQUMsS0FBSyxDQUFDO1lBQzFELElBQ0UsS0FBSyxLQUFLLElBQUk7Z0JBQ2QsT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFFekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFnQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO3dCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUNyRCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUssQ0FBNkIsQ0FBQzt3QkFBRSxPQUFPLEtBQUssQ0FBQztvQkFDL0QsTUFBTSxTQUFTLEdBQUcsQ0FBd0IsQ0FBQztvQkFDM0MsT0FBTyxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsRUFDRixDQUFDO2dCQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBb0IsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFFOUMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsT0FBTyxLQUEwRCxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLEtBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgUXVlcnlTY2hlbWEsIEluZmVyUXVlcnkgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogSG9vayByZXR1cm5pbmcgdGhlIHR5cGVkIHF1ZXJ5IG9iamVjdCBjb21wdXRlZCBmcm9tIHRoZSBtYXRjaGVkIHJvdXRlIHNjaGVtYSAoaWYgYW55KS5cbiAqIEZhbGxzIGJhY2sgdG8gdGhlIHJhdyBxdWVyeSB3aGVuIG5vIHNjaGVtYSBpcyBkZWZpbmVkLlxuICpcbiAqIFVzYWdlIHdpdGggZXhwbGljaXQgdHlwaW5nICh1bnRpbCBhdXRvbWF0aWMgaW5mZXJlbmNlIGlzIGFkZGVkKTpcbiAqICAgY29uc3QgcSA9IHVzZVR5cGVkUXVlcnk8eyBwYWdlPzogbnVtYmVyOyB0YWc/OiBzdHJpbmcgfT4oKTtcbiAqL1xuLy8gSW50ZXJuYWwgdXRpbGl0eTogaWYgc2NoZW1hIFMgcHJvdmlkZWQgcmV0dXJuIGl0cyBpbmZlcnJlZCBxdWVyeSwgZWxzZSBmYWxsYmFjay5cbnR5cGUgSW5mZXJPckZhbGxiYWNrPFMsIEZhbGxiYWNrPiA9IFMgZXh0ZW5kcyBRdWVyeVNjaGVtYVxuICA/IEluZmVyUXVlcnk8Uz5cbiAgOiBGYWxsYmFjaztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0eXBlZCBxdWVyeSBvYmplY3QuIElmIG5vIHNjaGVtYSBpcyBwcmVzZW50IGZhbGxzIGJhY2sgdG8gcmF3IHF1ZXJ5LlxuICogR2VuZXJpYyBUIGNhbiBiZSBwcm92aWRlZCBmb3IgZXhwbGljaXQgdHlwaW5nOyBvdGhlcndpc2UgYSBiZXN04oCRZWZmb3J0IHJ1bnRpbWUgY2FzdFxuICogaXMgYXBwbGllZCB3aGVuIGEgc2NoZW1hIGlzIGRldGVjdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUeXBlZFF1ZXJ5PFQgPSB1bmtub3duPigpOiBUIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGlmIChjdHggPT0gbnVsbCkgcmV0dXJuIHt9IGFzIFQ7XG4gIGNvbnN0IGVudHJ5ID0gY3R4LmdldCgpO1xuXG4gIC8vIFJ1bnRpbWUgZXh0cmFjdGlvbiBvZiBkZWVwZXN0IHNjaGVtYSAobWlycm9ycyBsb2dpYyBpbiBjcmVhdGVSb3V0ZXIpXG4gIGxldCBzY2hlbWE6IFF1ZXJ5U2NoZW1hIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtYXRjaGVkID0gZW50cnkucm91dGU7XG4gIGlmIChtYXRjaGVkICE9IG51bGwpIHtcbiAgICBjb25zdCBjb2xsZWN0ZWQ6IFF1ZXJ5U2NoZW1hW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgbWF0Y2hlZC5yb3V0ZS5yb3V0ZXMpIHtcbiAgICAgIGNvbnN0IG1heWJlID0gKHIgYXMgdW5rbm93biBhcyB7IHF1ZXJ5PzogdW5rbm93biB9KS5xdWVyeTtcbiAgICAgIGlmIChcbiAgICAgICAgbWF5YmUgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG1heWJlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAvLyBIZXVyaXN0aWM6IGF0IGxlYXN0IG9uZSBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBsb29rcyBsaWtlIGEgZGVzY3JpcHRvciAoaGFzIHBhcnNlIGZuKVxuICAgICAgICBPYmplY3QudmFsdWVzKG1heWJlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5zb21lKCh2KSA9PiB7XG4gICAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCB0eXBlb2YgdiAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBpZiAoISgncGFyc2UnIGluICh2IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2IGFzIHsgcGFyc2U/OiB1bmtub3duIH07XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBjYW5kaWRhdGUucGFyc2UgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIH0pXG4gICAgICApIHtcbiAgICAgICAgY29sbGVjdGVkLnB1c2gobWF5YmUgYXMgUXVlcnlTY2hlbWEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29sbGVjdGVkLmxlbmd0aCA+IDApIHNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gIH1cblxuICBjb25zdCB2YWx1ZSA9IGVudHJ5LnR5cGVkUXVlcnkgPz8gZW50cnkucXVlcnk7XG4gIC8vIENhc3QgdG8gaW5mZXJyZWQgc2hhcGUgb25seSBpZiBzY2hlbWEgbm9uLW51bGxcbiAgaWYgKHNjaGVtYSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEluZmVyT3JGYWxsYmFjazx0eXBlb2Ygc2NoZW1hLCBUPiBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGFzIFQ7XG59XG4iXX0=
|
|
@@ -1,6 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,60 +0,0 @@
|
|
|
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,28 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
const __typedCache = new WeakMap();
|
|
2
|
-
function makeDescriptor(cfg) {
|
|
3
|
-
return {
|
|
4
|
-
__type: undefined,
|
|
5
|
-
optional: cfg.optional === true,
|
|
6
|
-
hasDefault: cfg.defaultValue !== undefined,
|
|
7
|
-
defaultValue: cfg.defaultValue,
|
|
8
|
-
parse: cfg.parse,
|
|
9
|
-
serialize: cfg.serialize,
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function stringDesc() {
|
|
13
|
-
return makeDescriptor({
|
|
14
|
-
parse(values) {
|
|
15
|
-
return values.at(-1);
|
|
16
|
-
},
|
|
17
|
-
serialize(value) {
|
|
18
|
-
return [value];
|
|
19
|
-
},
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function numberDesc() {
|
|
23
|
-
return makeDescriptor({
|
|
24
|
-
parse(values) {
|
|
25
|
-
const v = values.at(-1);
|
|
26
|
-
if (v == null)
|
|
27
|
-
return undefined;
|
|
28
|
-
const n = Number(v);
|
|
29
|
-
if (Number.isNaN(n))
|
|
30
|
-
return undefined;
|
|
31
|
-
return n;
|
|
32
|
-
},
|
|
33
|
-
serialize(value) {
|
|
34
|
-
return [String(value)];
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
function booleanDesc() {
|
|
39
|
-
return makeDescriptor({
|
|
40
|
-
parse(values) {
|
|
41
|
-
if (values.length === 0)
|
|
42
|
-
return undefined;
|
|
43
|
-
const v = values.at(-1);
|
|
44
|
-
if (v === '' || v == null)
|
|
45
|
-
return true;
|
|
46
|
-
const lower = v.toLowerCase();
|
|
47
|
-
if (lower === '1' || lower === 'true')
|
|
48
|
-
return true;
|
|
49
|
-
if (lower === '0' || lower === 'false')
|
|
50
|
-
return false;
|
|
51
|
-
return undefined;
|
|
52
|
-
},
|
|
53
|
-
serialize(value) {
|
|
54
|
-
if (value) {
|
|
55
|
-
return ['1'];
|
|
56
|
-
}
|
|
57
|
-
return ['0'];
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
function enumDesc(...values) {
|
|
62
|
-
const set = new Set(values);
|
|
63
|
-
return makeDescriptor({
|
|
64
|
-
parse(arr) {
|
|
65
|
-
const v = arr.at(-1);
|
|
66
|
-
if (v != null && set.has(v))
|
|
67
|
-
return v;
|
|
68
|
-
return undefined;
|
|
69
|
-
},
|
|
70
|
-
serialize(value) {
|
|
71
|
-
return [value];
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
function arrayOf(inner) {
|
|
76
|
-
return makeDescriptor({
|
|
77
|
-
parse(values) {
|
|
78
|
-
const out = [];
|
|
79
|
-
values.forEach((v) => {
|
|
80
|
-
const parsed = inner.parse([v]);
|
|
81
|
-
if (parsed !== undefined)
|
|
82
|
-
out.push(parsed);
|
|
83
|
-
});
|
|
84
|
-
return out;
|
|
85
|
-
},
|
|
86
|
-
serialize(value) {
|
|
87
|
-
return value.flatMap((v) => {
|
|
88
|
-
return inner.serialize(v);
|
|
89
|
-
});
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
function optional(d) {
|
|
94
|
-
return { ...d, optional: true };
|
|
95
|
-
}
|
|
96
|
-
function withDefault(d, value) {
|
|
97
|
-
return { ...d, defaultValue: value, hasDefault: true };
|
|
98
|
-
}
|
|
99
|
-
function emptyAsUndefined(d) {
|
|
100
|
-
return {
|
|
101
|
-
...d,
|
|
102
|
-
parse(values) {
|
|
103
|
-
const v = d.parse(values);
|
|
104
|
-
if (v === '')
|
|
105
|
-
return undefined;
|
|
106
|
-
return v;
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
function custom(handlers) {
|
|
111
|
-
return makeDescriptor({
|
|
112
|
-
parse: handlers.parse,
|
|
113
|
-
serialize: handlers.serialize,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
export const q = {
|
|
117
|
-
string: stringDesc,
|
|
118
|
-
number: numberDesc,
|
|
119
|
-
boolean: booleanDesc,
|
|
120
|
-
enum: enumDesc,
|
|
121
|
-
array: arrayOf,
|
|
122
|
-
optional,
|
|
123
|
-
default: withDefault,
|
|
124
|
-
emptyAsUndefined,
|
|
125
|
-
custom,
|
|
126
|
-
};
|
|
127
|
-
export function parseTypedQuery(schema, raw) {
|
|
128
|
-
if (schema == null)
|
|
129
|
-
return raw;
|
|
130
|
-
let cacheForSchema = __typedCache.get(schema);
|
|
131
|
-
if (cacheForSchema == null) {
|
|
132
|
-
cacheForSchema = new Map();
|
|
133
|
-
__typedCache.set(schema, cacheForSchema);
|
|
134
|
-
}
|
|
135
|
-
const canonicalParts = [];
|
|
136
|
-
const sortedKeys = Object.keys(raw).sort();
|
|
137
|
-
for (const k of sortedKeys) {
|
|
138
|
-
const v = raw[k];
|
|
139
|
-
if (Array.isArray(v)) {
|
|
140
|
-
v.forEach((vv) => {
|
|
141
|
-
canonicalParts.push(`${k}=${vv}`);
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
canonicalParts.push(`${k}=${v}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
const cacheKey = canonicalParts.join('&');
|
|
149
|
-
const cached = cacheForSchema.get(cacheKey);
|
|
150
|
-
if (cached !== undefined)
|
|
151
|
-
return cached;
|
|
152
|
-
const result = {};
|
|
153
|
-
const entries = Object.entries(schema);
|
|
154
|
-
for (const [key, descriptor] of entries) {
|
|
155
|
-
const rawValue = raw[key];
|
|
156
|
-
let values = [];
|
|
157
|
-
if (rawValue != null) {
|
|
158
|
-
if (Array.isArray(rawValue)) {
|
|
159
|
-
values = rawValue;
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
values = [rawValue];
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
let parsed = descriptor.parse(values);
|
|
166
|
-
if (parsed === undefined) {
|
|
167
|
-
if (descriptor.hasDefault)
|
|
168
|
-
parsed = descriptor.defaultValue;
|
|
169
|
-
else if (descriptor.optional)
|
|
170
|
-
parsed = undefined;
|
|
171
|
-
}
|
|
172
|
-
if (parsed !== undefined)
|
|
173
|
-
result[key] = parsed;
|
|
174
|
-
else if (!descriptor.optional && descriptor.hasDefault) {
|
|
175
|
-
result[key] = descriptor.defaultValue;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
let reuse;
|
|
179
|
-
cacheForSchema.forEach((value) => {
|
|
180
|
-
if (reuse != null) {
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
if (value != null && typeof value === 'object') {
|
|
184
|
-
let equal = true;
|
|
185
|
-
const rKeys = Object.keys(result);
|
|
186
|
-
const vKeys = Object.keys(value);
|
|
187
|
-
if (rKeys.length !== vKeys.length) {
|
|
188
|
-
equal = false;
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
for (const k of rKeys) {
|
|
192
|
-
if (!Object.prototype.hasOwnProperty.call(value, k)) {
|
|
193
|
-
equal = false;
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
const resRec = result;
|
|
197
|
-
const valRec = value;
|
|
198
|
-
const a = resRec[k];
|
|
199
|
-
const b = valRec[k];
|
|
200
|
-
if (Array.isArray(a) && Array.isArray(b)) {
|
|
201
|
-
if (a.length !== b.length) {
|
|
202
|
-
equal = false;
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
for (let i = 0; i < a.length; i += 1) {
|
|
206
|
-
if (a[i] !== b[i]) {
|
|
207
|
-
equal = false;
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
if (!equal)
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
else if (a !== b) {
|
|
215
|
-
equal = false;
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
if (equal) {
|
|
221
|
-
reuse = value;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
if (reuse != null) {
|
|
226
|
-
cacheForSchema.set(cacheKey, reuse);
|
|
227
|
-
return reuse;
|
|
228
|
-
}
|
|
229
|
-
cacheForSchema.set(cacheKey, result);
|
|
230
|
-
return result;
|
|
231
|
-
}
|
|
232
|
-
export function parseSearch(schema, search) {
|
|
233
|
-
let actual = search;
|
|
234
|
-
if (search.startsWith('?')) {
|
|
235
|
-
actual = search.slice(1);
|
|
236
|
-
}
|
|
237
|
-
const params = new URLSearchParams(actual);
|
|
238
|
-
const raw = {};
|
|
239
|
-
params.forEach((value, key) => {
|
|
240
|
-
const existing = raw[key];
|
|
241
|
-
if (existing == null)
|
|
242
|
-
raw[key] = value;
|
|
243
|
-
else if (Array.isArray(existing))
|
|
244
|
-
existing.push(value);
|
|
245
|
-
else
|
|
246
|
-
raw[key] = [existing, value];
|
|
247
|
-
});
|
|
248
|
-
return parseTypedQuery(schema, raw);
|
|
249
|
-
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZHNsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL3F1ZXJ5LWRzbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBNEIsQ0FBQztBQUc3RCxTQUFTLGNBQWMsQ0FBSSxHQUsxQjtJQUNDLE9BQU87UUFDTCxNQUFNLEVBQUUsU0FBcUI7UUFDN0IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSTtRQUMvQixVQUFVLEVBQUUsR0FBRyxDQUFDLFlBQVksS0FBSyxTQUFTO1FBQzFDLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtRQUM5QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO0tBQ3pCLENBQUM7QUFDSixDQUFDO0FBR0QsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sY0FBYyxDQUFTO1FBQzVCLEtBQUssQ0FBQyxNQUFNO1lBQ1YsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsQ0FBQyxLQUFLO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBR0QsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sY0FBYyxDQUFTO1FBQzVCLEtBQUssQ0FBQyxNQUFNO1lBQ1YsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLElBQUk7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDaEMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDdEMsT0FB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LFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQVEsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBRdWVyeURlc2NyaXB0b3IsIFF1ZXJ5U2NoZW1hLCBJbmZlclF1ZXJ5IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vLyBXZWFrTWFwIGJhc2VkIGNhY2hlOiBzY2hlbWFSZWYgLT4gKGNhbm9uaWNhbFNlYXJjaCAtPiBwYXJzZWRSZXN1bHQpXG5jb25zdCBfX3R5cGVkQ2FjaGUgPSBuZXcgV2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIGFueT4+KCk7XG5cbi8qKiBCdWlsZCBhIGRlc2NyaXB0b3Igd2l0aCBkZWZhdWx0cyAqL1xuZnVuY3Rpb24gbWFrZURlc2NyaXB0b3I8VD4oY2ZnOiB7XG4gIHBhcnNlOiBRdWVyeURlc2NyaXB0b3I8VD5bJ3BhcnNlJ107XG4gIHNlcmlhbGl6ZTogUXVlcnlEZXNjcmlwdG9yPFQ+WydzZXJpYWxpemUnXTtcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICBkZWZhdWx0VmFsdWU/OiBUO1xufSk6IFF1ZXJ5RGVzY3JpcHRvcjxUPiB7XG4gIHJldHVybiB7XG4gICAgX190eXBlOiB1bmRlZmluZWQgYXMgYW55IGFzIFQsXG4gICAgb3B0aW9uYWw6IGNmZy5vcHRpb25hbCA9PT0gdHJ1ZSxcbiAgICBoYXNEZWZhdWx0OiBjZmcuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiBjZmcuZGVmYXVsdFZhbHVlLFxuICAgIHBhcnNlOiBjZmcucGFyc2UsXG4gICAgc2VyaWFsaXplOiBjZmcuc2VyaWFsaXplLFxuICB9O1xufVxuXG4vKiogU3RyaW5nIGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIHN0cmluZ0Rlc2MoKTogUXVlcnlEZXNjcmlwdG9yPHN0cmluZz4ge1xuICByZXR1cm4gbWFrZURlc2NyaXB0b3I8c3RyaW5nPih7XG4gICAgcGFyc2UodmFsdWVzKSB7XG4gICAgICByZXR1cm4gdmFsdWVzLmF0KC0xKTtcbiAgICB9LFxuICAgIHNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBOdW1iZXIgZGVzY3JpcHRvciAqL1xuZnVuY3Rpb24gbnVtYmVyRGVzYygpOiBRdWVyeURlc2NyaXB0b3I8bnVtYmVyPiB7XG4gIHJldHVybiBtYWtlRGVzY3JpcHRvcjxudW1iZXI+KHtcbiAgICBwYXJzZSh2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IHYgPSB2YWx1ZXMuYXQoLTEpO1xuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIodik7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKG4pKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG47XG4gICAgfSxcbiAgICBzZXJpYWxpemUodmFsdWUpIHtcbiAgICAgIHJldHVybiBbU3RyaW5nKHZhbHVlKV07XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBCb29sZWFuIGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIGJvb2xlYW5EZXNjKCk6IFF1ZXJ5RGVzY3JpcHRvcjxib29sZWFuPiB7XG4gIHJldHVybiBtYWtlRGVzY3JpcHRvcjxib29sZWFuPih7XG4gICAgcGFyc2UodmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHYgPSB2YWx1ZXMuYXQoLTEpO1xuICAgICAgaWYgKHYgPT09ICcnIHx8IHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCBsb3dlciA9IHYudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlciA9PT0gJzEnIHx8IGxvd2VyID09PSAndHJ1ZScpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGxvd2VyID09PSAnMCcgfHwgbG93ZXIgPT09ICdmYWxzZScpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBzZXJpYWxpemUodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gWycxJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gWycwJ107XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBFbnVtIGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIGVudW1EZXNjPFQgZXh0ZW5kcyBzdHJpbmc+KC4uLnZhbHVlczogVFtdKTogUXVlcnlEZXNjcmlwdG9yPFQ+IHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldCh2YWx1ZXMpO1xuICByZXR1cm4gbWFrZURlc2NyaXB0b3I8VD4oe1xuICAgIHBhcnNlKGFycikge1xuICAgICAgY29uc3QgdiA9IGFyci5hdCgtMSkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh2ICE9IG51bGwgJiYgc2V0Lmhhcyh2KSkgcmV0dXJuIHY7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEFycmF5IGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIGFycmF5T2Y8VD4oaW5uZXI6IFF1ZXJ5RGVzY3JpcHRvcjxUPik6IFF1ZXJ5RGVzY3JpcHRvcjxUW10+IHtcbiAgcmV0dXJuIG1ha2VEZXNjcmlwdG9yPFRbXT4oe1xuICAgIHBhcnNlKHZhbHVlcykge1xuICAgICAgY29uc3Qgb3V0OiBUW10gPSBbXTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IGlubmVyLnBhcnNlKFt2XSk7XG4gICAgICAgIGlmIChwYXJzZWQgIT09IHVuZGVmaW5lZCkgb3V0LnB1c2gocGFyc2VkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuICAgIHNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLmZsYXRNYXAoKHYpID0+IHtcbiAgICAgICAgcmV0dXJuIGlubmVyLnNlcmlhbGl6ZSh2KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKiogTWFyayBkZXNjcmlwdG9yIG9wdGlvbmFsICovXG5mdW5jdGlvbiBvcHRpb25hbDxUPihkOiBRdWVyeURlc2NyaXB0b3I8VD4pOiBRdWVyeURlc2NyaXB0b3I8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4geyAuLi5kLCBvcHRpb25hbDogdHJ1ZSB9IGFzIGFueTtcbn1cblxuLyoqIEF0dGFjaCBkZWZhdWx0IHZhbHVlICovXG5mdW5jdGlvbiB3aXRoRGVmYXVsdDxUPihkOiBRdWVyeURlc2NyaXB0b3I8VD4sIHZhbHVlOiBUKTogUXVlcnlEZXNjcmlwdG9yPFQ+IHtcbiAgcmV0dXJuIHsgLi4uZCwgZGVmYXVsdFZhbHVlOiB2YWx1ZSwgaGFzRGVmYXVsdDogdHJ1ZSB9O1xufVxuXG4vKiogVHJlYXQgZW1wdHkgc3RyaW5nIHJlc3VsdCBmcm9tIHVuZGVybHlpbmcgZGVzY3JpcHRvciBhcyB1bmRlZmluZWQgKHBhcnNlIHNpZGUgb25seSkgKi9cbmZ1bmN0aW9uIGVtcHR5QXNVbmRlZmluZWQoZDogUXVlcnlEZXNjcmlwdG9yPHN0cmluZz4pOiBRdWVyeURlc2NyaXB0b3I8c3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgLi4uZCxcbiAgICBwYXJzZSh2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IHYgPSBkLnBhcnNlKHZhbHVlcyk7XG4gICAgICBpZiAodiA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdjtcbiAgICB9LFxuICB9IGFzIFF1ZXJ5RGVzY3JpcHRvcjxzdHJpbmc+O1xufVxuXG4vKiogQ3VzdG9tIGRlc2NyaXB0b3IgZmFjdG9yeSAqL1xuZnVuY3Rpb24gY3VzdG9tPFQ+KGhhbmRsZXJzOiB7XG4gIHBhcnNlOiAodmFsdWVzOiBzdHJpbmdbXSkgPT4gVCB8IHVuZGVmaW5lZDtcbiAgc2VyaWFsaXplOiAodmFsdWU6IFQpID0+IHN0cmluZ1tdO1xufSk6IFF1ZXJ5RGVzY3JpcHRvcjxUPiB7XG4gIHJldHVybiBtYWtlRGVzY3JpcHRvcjxUPih7XG4gICAgcGFyc2U6IGhhbmRsZXJzLnBhcnNlLFxuICAgIHNlcmlhbGl6ZTogaGFuZGxlcnMuc2VyaWFsaXplLFxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHEgPSB7XG4gIHN0cmluZzogc3RyaW5nRGVzYyxcbiAgbnVtYmVyOiBudW1iZXJEZXNjLFxuICBib29sZWFuOiBib29sZWFuRGVzYyxcbiAgZW51bTogZW51bURlc2MsXG4gIGFycmF5OiBhcnJheU9mLFxuICBvcHRpb25hbCxcbiAgZGVmYXVsdDogd2l0aERlZmF1bHQsXG4gIGVtcHR5QXNVbmRlZmluZWQsXG4gIGN1c3RvbSxcbn07XG5cbi8qKiBQYXJzZSByYXcgcXVlcnkgb2JqZWN0IHVzaW5nIGEgc2NoZW1hIGludG8gYSB0eXBlZCBvYmplY3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVkUXVlcnk8UyBleHRlbmRzIFF1ZXJ5U2NoZW1hIHwgdW5kZWZpbmVkPihcbiAgc2NoZW1hOiBTLFxuICByYXc6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPixcbik6IFMgZXh0ZW5kcyBRdWVyeVNjaGVtYSA/IEluZmVyUXVlcnk8RXhjbHVkZTxTLCB1bmRlZmluZWQ+PiA6IHR5cGVvZiByYXcge1xuICBpZiAoc2NoZW1hID09IG51bGwpIHJldHVybiByYXcgYXMgYW55O1xuICAvLyBCdWlsZCBjYW5vbmljYWwga2V5IGZyb20gcmF3IGVudHJpZXMgKHNvcnRlZCBrZXlzICYgdmFsdWVzKVxuICBsZXQgY2FjaGVGb3JTY2hlbWEgPSBfX3R5cGVkQ2FjaGUuZ2V0KHNjaGVtYSBhcyB1bmtub3duIGFzIG9iamVjdCk7XG4gIGlmIChjYWNoZUZvclNjaGVtYSA9PSBudWxsKSB7XG4gICAgY2FjaGVGb3JTY2hlbWEgPSBuZXcgTWFwKCk7XG4gICAgX190eXBlZENhY2hlLnNldChzY2hlbWEgYXMgdW5rbm93biBhcyBvYmplY3QsIGNhY2hlRm9yU2NoZW1hKTtcbiAgfVxuICBjb25zdCBjYW5vbmljYWxQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc29ydGVkS2V5cyA9IE9iamVjdC5rZXlzKHJhdykuc29ydCgpO1xuICBmb3IgKGNvbnN0IGsgb2Ygc29ydGVkS2V5cykge1xuICAgIGNvbnN0IHYgPSByYXdba107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgIHYuZm9yRWFjaCgodnYpID0+IHtcbiAgICAgICAgY2Fub25pY2FsUGFydHMucHVzaChgJHtrfT0ke3Z2fWApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbm9uaWNhbFBhcnRzLnB1c2goYCR7a309JHt2fWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBjYWNoZUtleSA9IGNhbm9uaWNhbFBhcnRzLmpvaW4oJyYnKTtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGVGb3JTY2hlbWEuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gY2FjaGVkO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNjaGVtYSk7XG4gIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRvcl0gb2YgZW50cmllcykge1xuICAgIGNvbnN0IHJhd1ZhbHVlID0gcmF3W2tleV07XG4gICAgbGV0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmF3VmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3VmFsdWUpKSB7XG4gICAgICAgIHZhbHVlcyA9IHJhd1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVzID0gW3Jhd1ZhbHVlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHBhcnNlZCA9IGRlc2NyaXB0b3IucGFyc2UodmFsdWVzKTtcbiAgICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChkZXNjcmlwdG9yLmhhc0RlZmF1bHQpIHBhcnNlZCA9IGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlO1xuICAgICAgZWxzZSBpZiAoZGVzY3JpcHRvci5vcHRpb25hbCkgcGFyc2VkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocGFyc2VkICE9PSB1bmRlZmluZWQpIHJlc3VsdFtrZXldID0gcGFyc2VkO1xuICAgIGVsc2UgaWYgKCFkZXNjcmlwdG9yLm9wdGlvbmFsICYmIGRlc2NyaXB0b3IuaGFzRGVmYXVsdCkge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cbiAgLy8gRGVlcCBlcXVhbGl0eTogaWYgYW5vdGhlciBjYWNoZWQgdmFsdWUgaXMgc3RydWN0dXJhbGx5IGVxdWFsLCByZXVzZSBpdHMgcmVmZXJlbmNlIGZvciBzdGFiaWxpdHlcbiAgbGV0IHJldXNlOiBhbnk7XG4gIGNhY2hlRm9yU2NoZW1hLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgaWYgKHJldXNlICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJLZXlzID0gT2JqZWN0LmtleXMocmVzdWx0KTtcbiAgICAgIGNvbnN0IHZLZXlzID0gT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgaWYgKHJLZXlzLmxlbmd0aCAhPT0gdktleXMubGVuZ3RoKSB7XG4gICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgcktleXMpIHtcbiAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHtcbiAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVzUmVjID0gcmVzdWx0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIGNvbnN0IHZhbFJlYyA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIGNvbnN0IGEgPSByZXNSZWNba107XG4gICAgICAgICAgY29uc3QgYiA9IHZhbFJlY1trXTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFlcXVhbCkgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXF1YWwpIHtcbiAgICAgICAgcmV1c2UgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBpZiAocmV1c2UgIT0gbnVsbCkge1xuICAgIGNhY2hlRm9yU2NoZW1hLnNldChjYWNoZUtleSwgcmV1c2UpO1xuICAgIHJldHVybiByZXVzZTtcbiAgfVxuICBjYWNoZUZvclNjaGVtYS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQgYXMgYW55O1xufVxuXG4vKiogQ29udmVuaWVuY2UgYWxpYXM6IHBhcnNlIGZ1bGwgc2VhcmNoIHN0cmluZyB3aXRoIG9wdGlvbmFsIHNjaGVtYSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VhcmNoPFMgZXh0ZW5kcyBRdWVyeVNjaGVtYSB8IHVuZGVmaW5lZD4oXG4gIHNjaGVtYTogUyxcbiAgc2VhcmNoOiBzdHJpbmcsXG4pOiBTIGV4dGVuZHMgUXVlcnlTY2hlbWFcbiAgPyBJbmZlclF1ZXJ5PEV4Y2x1ZGU8UywgdW5kZWZpbmVkPj5cbiAgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBsZXQgYWN0dWFsID0gc2VhcmNoO1xuICBpZiAoc2VhcmNoLnN0YXJ0c1dpdGgoJz8nKSkge1xuICAgIGFjdHVhbCA9IHNlYXJjaC5zbGljZSgxKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFjdHVhbCk7XG4gIGNvbnN0IHJhdzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+ID0ge307XG4gIHBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSByYXdba2V5XTtcbiAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkgcmF3W2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkgZXhpc3RpbmcucHVzaCh2YWx1ZSk7XG4gICAgZWxzZSByYXdba2V5XSA9IFtleGlzdGluZywgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHBhcnNlVHlwZWRRdWVyeShzY2hlbWEsIHJhdykgYXMgYW55O1xufVxuIl19
|