@plumile/filter-query 0.1.42 → 0.1.43

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 CHANGED
@@ -52,6 +52,7 @@ The package is ESM-only; ensure your bundler supports native ESM (Vite, Next.js,
52
52
 
53
53
  - Number field: attempts `Number()`, rejects `NaN` / `Infinity`.
54
54
  - String field: raw decoded string (empty string allowed, but not produced by numeric parse).
55
+ - Boolean field: accepts `true`, `false`, `1`, `0` (case-insensitive).
55
56
  - Lists: split by comma; invalid members emit `InvalidValue` and are skipped; empty result discards whole operator.
56
57
  - Between: must have exactly 2 comma-separated values; otherwise `InvalidArity`.
57
58
  - Duplicate `between`: first valid stored, later ones produce `DuplicateBetween`.
@@ -60,7 +61,9 @@ The package is ESM-only; ensure your bundler supports native ESM (Vite, Next.js,
60
61
 
61
62
  ```ts
62
63
  import {
64
+ booleanField,
63
65
  defineSchema,
66
+ enumField,
64
67
  numberField,
65
68
  stringField,
66
69
  parse,
@@ -71,6 +74,8 @@ import {
71
74
  const schema = defineSchema({
72
75
  price: numberField(),
73
76
  title: stringField(),
77
+ active: booleanField(),
78
+ status: enumField(['OPEN', 'CLOSED']),
74
79
  });
75
80
 
76
81
  // Parse URL search (leading '?' optional)
@@ -133,6 +138,8 @@ function ProductsList() {
133
138
  const schema = defineSchema({
134
139
  price: numberField(), // full numeric operator set
135
140
  title: stringField(['contains', 'sw']), // restrict to subset
141
+ active: booleanField(['eq', 'neq']),
142
+ status: enumField(['OPEN', 'CLOSED'], ['eq', 'in']),
136
143
  });
137
144
  ```
138
145
 
@@ -142,6 +149,8 @@ Both helpers accept an optional operator list to _whitelist_ allowed operators (
142
149
 
143
150
  - `numberField()` default: `gt,gte,lt,lte,eq,neq,between,in,nin`
144
151
  - `stringField()` default: `contains,sw,ew,eq,neq,in,nin`
152
+ - `booleanField()` default: `eq,neq,in,nin`
153
+ - `enumField()` default: `eq,neq,in,nin`
145
154
 
146
155
  ## Diagnostics
147
156
 
@@ -185,6 +194,30 @@ The inferred `filters` type is roughly:
185
194
 
186
195
  Everything is optional so you can build partial filters progressively.
187
196
 
197
+ ## Custom Field Parsing
198
+
199
+ You can enforce custom parsing/serialisation rules via `customField`:
200
+
201
+ ```ts
202
+ import { customField, defineSchema } from '@plumile/filter-query';
203
+
204
+ const schema = defineSchema({
205
+ since: customField<Date>({
206
+ operators: ['eq'],
207
+ parse(raw) {
208
+ const parsed = new Date(raw);
209
+ if (Number.isNaN(parsed.getTime())) {
210
+ return undefined;
211
+ }
212
+ return parsed;
213
+ },
214
+ serialize(value) {
215
+ return value.toISOString();
216
+ },
217
+ }),
218
+ });
219
+ ```
220
+
188
221
  ## Mutation Helpers
189
222
 
190
223
  ```ts
@@ -1,9 +1,8 @@
1
1
  import type { InferFilters, Schema } from './types.js';
2
- type EqFieldKeys<S extends Schema> = {
3
- [K in keyof S]: 'eq' extends keyof NonNullable<InferFilters<S>[K]> ? K : never;
4
- }[keyof S];
5
2
  export type EqInput<S extends Schema> = Partial<{
6
- [K in EqFieldKeys<S>]: NonNullable<InferFilters<S>[K]>['eq'];
3
+ [K in keyof S as 'eq' extends keyof NonNullable<InferFilters<S>[K]> ? K : never]: NonNullable<InferFilters<S>[K]> extends {
4
+ eq?: infer V;
5
+ } ? V : never;
7
6
  }>;
8
7
  export declare function eq<S extends Schema>(input: EqInput<S>): InferFilters<S>;
9
8
  export declare const buildEqFilters: typeof eq;
@@ -11,5 +10,4 @@ export declare function setFilter<S extends Schema, F extends keyof S, O extends
11
10
  export declare function removeFilter<S extends Schema, F extends keyof S>(filters: Readonly<InferFilters<S>>, field: F, operator?: keyof NonNullable<InferFilters<S>[F]>): InferFilters<S>;
12
11
  export declare function mergeFilters<S extends Schema>(base: Readonly<InferFilters<S>>, patch: Readonly<InferFilters<S>>): InferFilters<S>;
13
12
  export declare function isEmpty<S extends Schema>(filters: Readonly<InferFilters<S>>): boolean;
14
- export {};
15
13
  //# sourceMappingURL=mutate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../src/mutate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAgCvD,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,SAAS,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC9D,CAAC,GACD,KAAK;CACV,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC;KAC7C,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;CAC7D,CAAC,CAAC;AAOH,wBAAgB,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQvE;AAKD,eAAO,MAAM,cAAc,WAAK,CAAC;AAYjC,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAE/C,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACpD,YAAY,CAAC,CAAC,CAAC,CAwBjB;AASD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAC9D,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/C,YAAY,CAAC,CAAC,CAAC,CAkBjB;AASD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC/B,YAAY,CAAC,CAAC,CAAC,CAoBjB;AAOD,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACtC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACjC,OAAO,CAET"}
1
+ {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../src/mutate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAgCvD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC;KAC7C,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/D,CAAC,GACD,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,GAChE,CAAC,GACD,KAAK;CACV,CAAC,CAAC;AAOH,wBAAgB,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQvE;AAKD,eAAO,MAAM,cAAc,WAAK,CAAC;AAYjC,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAE/C,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACpD,YAAY,CAAC,CAAC,CAAC,CAwBjB;AASD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAC9D,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/C,YAAY,CAAC,CAAC,CAAC,CAkBjB;AASD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC/B,YAAY,CAAC,CAAC,CAAC,CAoBjB;AAOD,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACtC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACjC,OAAO,CAET"}
package/lib/esm/mutate.js CHANGED
@@ -95,4 +95,4 @@ export function mergeFilters(base, patch) {
95
95
  export function isEmpty(filters) {
96
96
  return Object.keys(filters).length === 0;
97
97
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTLFlBQVksQ0FBQyxDQUFVLEVBQUUsQ0FBVTtJQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQ0UsT0FBTyxDQUFDLEtBQUssUUFBUTtRQUNyQixDQUFDLEtBQUssSUFBSTtRQUNWLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDckIsQ0FBQyxLQUFLLElBQUksRUFDVixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBNEIsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxDQUE0QixDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQWlCRCxNQUFNLFVBQVUsRUFBRSxDQUFtQixLQUFpQjtJQUNwRCxNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFDO0lBQzVDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUEwQixDQUFDO0FBQ3BDLENBQUM7QUFLRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBWWpDLE1BQU0sVUFBVSxTQUFTLENBS3ZCLE9BQWtDLEVBQ2xDLE9BQVUsRUFDVixLQUFRLEVBQ1IsUUFBVyxFQUNYLEtBQXFEO0lBRXJELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLE9BQTBCLENBQUM7UUFDcEMsQ0FBQztRQUNELE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFlBR3pDLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLE9BQWtDLENBQUM7WUFDckUsT0FBTyxLQUF3QixDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQXFCLENBQUM7SUFDMUQsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHO1FBQ2YsR0FBSSxZQUFvRDtRQUN4RCxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUs7S0FDbEIsQ0FBQztJQUNGLElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkUsT0FBTyxPQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQXFCLENBQUM7QUFDOUQsQ0FBQztBQVNELE1BQU0sVUFBVSxZQUFZLENBQzFCLE9BQWtDLEVBQ2xDLEtBQVEsRUFDUixRQUFnRDtJQUVoRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxPQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFDRCxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMzQixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFrQyxDQUFDO1FBQzNFLE9BQU8sS0FBd0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsWUFHM0MsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsT0FBa0MsQ0FBQztRQUNyRSxPQUFPLEtBQXdCLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBcUIsQ0FBQztBQUMxRCxDQUFDO0FBU0QsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBK0IsRUFDL0IsS0FBZ0M7SUFFaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sTUFBTSxHQUE2QixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDckQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBZ0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFFN0IsQ0FBQzthQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUF1QyxDQUFDO1lBQ3RELE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQzthQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQXVDLENBQUM7WUFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLE1BQXlCLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sSUFBdUIsQ0FBQztBQUNqQyxDQUFDO0FBT0QsTUFBTSxVQUFVLE9BQU8sQ0FDckIsT0FBa0M7SUFFbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5mZXJGaWx0ZXJzLCBTY2hlbWEgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBDaGVja3Mgc2hhbGxvdyBlcXVhbGl0eSBiZXR3ZWVuIHR3byBwbGFpbiBvYmplY3RzIChvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5cyBvbmx5KS5cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoXG4gICAgdHlwZW9mIGEgIT09ICdvYmplY3QnIHx8XG4gICAgYSA9PT0gbnVsbCB8fFxuICAgIHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fFxuICAgIGIgPT09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGFPYmogPSBhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBiT2JqID0gYiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhhT2JqKTtcbiAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhiT2JqKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3QgayBvZiBhS2V5cykge1xuICAgIGlmIChhT2JqW2tdICE9PSBiT2JqW2tdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG50eXBlIEVxRmllbGRLZXlzPFMgZXh0ZW5kcyBTY2hlbWE+ID0ge1xuICBbSyBpbiBrZXlvZiBTXTogJ2VxJyBleHRlbmRzIGtleW9mIE5vbk51bGxhYmxlPEluZmVyRmlsdGVyczxTPltLXT5cbiAgICA/IEtcbiAgICA6IG5ldmVyO1xufVtrZXlvZiBTXTtcblxuZXhwb3J0IHR5cGUgRXFJbnB1dDxTIGV4dGVuZHMgU2NoZW1hPiA9IFBhcnRpYWw8e1xuICBbSyBpbiBFcUZpZWxkS2V5czxTPl06IE5vbk51bGxhYmxlPEluZmVyRmlsdGVyczxTPltLXT5bJ2VxJ107XG59PjtcblxuLyoqXG4gKiBCdWlsZHMgYSBmaWx0ZXJzIG9iamVjdCB1c2luZyBpbXBsaWNpdCBlcXVhbGl0eSBmb3IgZWFjaCBwcm92aWRlZCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBSZWNvcmQgb2YgZmllbGQgdmFsdWVzIHRvIGVuY29kZSBhcyBgeyBlcTogdmFsdWUgfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcTxTIGV4dGVuZHMgU2NoZW1hPihpbnB1dDogRXFJbnB1dDxTPik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGNvbnN0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWx0ZXJzW2tleV0gPSB7IGVxOiB2YWx1ZSB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBlcX0gZm9yIGNhbGxlcnMgd2hvIHByZWZlciBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRXFGaWx0ZXJzID0gZXE7XG5cbi8qKlxuICogU2V0cyBvciB1bnNldHMgYSBzcGVjaWZpYyBvcGVyYXRvciB2YWx1ZSBvbiBhIGZpZWxkIHdoaWxlIHByZXNlcnZpbmcgcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSB3aGVuIG5vdGhpbmcgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gZmlsdGVycyAtIEN1cnJlbnQgZmlsdGVycyBvYmplY3QgdGhhdCB3aWxsIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGlucHV0LlxuICogQHBhcmFtIF9zY2hlbWEgLSBTY2hlbWEgcmVmZXJlbmNlIChyZXNlcnZlZCBmb3IgZnV0dXJlIHZhbGlkYXRpb24gaG9va3MpLlxuICogQHBhcmFtIGZpZWxkIC0gRmllbGQga2V5IHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSBvcGVyYXRvciAtIE9wZXJhdG9yIG5hbWUgdG8gc2V0IG9yIHJlbW92ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIE5ldyBvcGVyYXRvciB2YWx1ZTsgcGFzcyBgdW5kZWZpbmVkYCB0byByZW1vdmUgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXI8XG4gIFMgZXh0ZW5kcyBTY2hlbWEsXG4gIEYgZXh0ZW5kcyBrZXlvZiBTLFxuICBPIGV4dGVuZHMga2V5b2YgTm9uTnVsbGFibGU8SW5mZXJGaWx0ZXJzPFM+W0ZdPixcbj4oXG4gIGZpbHRlcnM6IFJlYWRvbmx5PEluZmVyRmlsdGVyczxTPj4sXG4gIF9zY2hlbWE6IFMsIC8vIHJlc2VydmVkIGZvciBmdXR1cmUgdmFsaWRhdGlvbiBob29rc1xuICBmaWVsZDogRixcbiAgb3BlcmF0b3I6IE8sXG4gIHZhbHVlOiBOb25OdWxsYWJsZTxJbmZlckZpbHRlcnM8Uz5bRl0+W09dIHwgdW5kZWZpbmVkLFxuKTogSW5mZXJGaWx0ZXJzPFM+IHtcbiAgY29uc3QgY3VycmVudEZpZWxkID0gZmlsdGVyc1tmaWVsZF07XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGN1cnJlbnRGaWVsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gICAgfVxuICAgIGNvbnN0IHsgW29wZXJhdG9yXTogX3JlbW92ZWQsIC4uLnJlc3QgfSA9IGN1cnJlbnRGaWVsZCBhcyBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICB1bmtub3duXG4gICAgPjtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCB7IFtmaWVsZF06IF9mLCAuLi5jbG9uZSB9ID0gZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiBjbG9uZSBhcyBJbmZlckZpbHRlcnM8Uz47XG4gICAgfVxuICAgIHJldHVybiB7IC4uLmZpbHRlcnMsIFtmaWVsZF06IHJlc3QgfSBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgY29uc3QgbmV3RmllbGQgPSB7XG4gICAgLi4uKGN1cnJlbnRGaWVsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCksXG4gICAgW29wZXJhdG9yXTogdmFsdWUsXG4gIH07XG4gIGlmIChjdXJyZW50RmllbGQgIT09IHVuZGVmaW5lZCAmJiBzaGFsbG93RXF1YWwoY3VycmVudEZpZWxkLCBuZXdGaWVsZCkpIHtcbiAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgcmV0dXJuIHsgLi4uZmlsdGVycywgW2ZpZWxkXTogbmV3RmllbGQgfSBhcyBJbmZlckZpbHRlcnM8Uz47XG59XG5cbi8qKlxuICogUmVtb3ZlcyBlaXRoZXIgYW4gZW50aXJlIGZpZWxkIG9yIGEgc3BlY2lmaWMgb3BlcmF0b3IgZnJvbSB0aGUgZmlsdGVycyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGZpbHRlcnMgLSBDdXJyZW50IGZpbHRlcnMgb2JqZWN0ICh0cmVhdGVkIGltbXV0YWJseSkuXG4gKiBAcGFyYW0gZmllbGQgLSBGaWVsZCBuYW1lIHRvIGFsdGVyLlxuICogQHBhcmFtIG9wZXJhdG9yIC0gT3B0aW9uYWwgb3BlcmF0b3IgdG8gcmVtb3ZlOyBvbWl0IHRvIGRyb3AgdGhlIHdob2xlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmlsdGVyPFMgZXh0ZW5kcyBTY2hlbWEsIEYgZXh0ZW5kcyBrZXlvZiBTPihcbiAgZmlsdGVyczogUmVhZG9ubHk8SW5mZXJGaWx0ZXJzPFM+PixcbiAgZmllbGQ6IEYsXG4gIG9wZXJhdG9yPzoga2V5b2YgTm9uTnVsbGFibGU8SW5mZXJGaWx0ZXJzPFM+W0ZdPixcbik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpbHRlcnNbZmllbGRdO1xuICBpZiAoY3VycmVudEZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgaWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB7IFtmaWVsZF06IF9yZW1vdmVkLCAuLi5jbG9uZSB9ID0gZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gY2xvbmUgYXMgSW5mZXJGaWx0ZXJzPFM+O1xuICB9XG4gIGNvbnN0IHsgW29wZXJhdG9yXTogX29wUmVtb3ZlZCwgLi4ucmVzdCB9ID0gY3VycmVudEZpZWxkIGFzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgdW5rbm93blxuICA+O1xuICBpZiAoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgeyBbZmllbGRdOiBfZiwgLi4uY2xvbmUgfSA9IGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGNsb25lIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgfVxuICByZXR1cm4geyAuLi5maWx0ZXJzLCBbZmllbGRdOiByZXN0IH0gYXMgSW5mZXJGaWx0ZXJzPFM+O1xufVxuXG4vKipcbiAqIE1lcmdlcyBhIHBhdGNoIG9mIGZpbHRlcnMgaW50byBhbiBleGlzdGluZyBmaWx0ZXJzIG9iamVjdCB3aGlsZSBwcmVzZXJ2aW5nIHJlZmVyZW5jZVxuICogaWRlbnRpdHkgZm9yIHVuY2hhbmdlZCBmaWVsZHMuXG4gKlxuICogQHBhcmFtIGJhc2UgLSBPcmlnaW5hbCBmaWx0ZXJzLlxuICogQHBhcmFtIHBhdGNoIC0gRmlsdGVycyB0byBvdmVybGF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBiYXNlOiBSZWFkb25seTxJbmZlckZpbHRlcnM8Uz4+LFxuICBwYXRjaDogUmVhZG9ubHk8SW5mZXJGaWx0ZXJzPFM+Pixcbik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IHJlc3VsdDogUGFydGlhbDxJbmZlckZpbHRlcnM8Uz4+ID0geyAuLi5iYXNlIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhdGNoKSBhcyAoa2V5b2YgUylbXSkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYmFzZVtrZXldO1xuICAgIGNvbnN0IGluY29taW5nID0gcGF0Y2hba2V5XTtcbiAgICBpZiAoaW5jb21pbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2tpcCB1bmRlZmluZWQgaW5jb21pbmdcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gaW5jb21pbmcgYXMgSW5mZXJGaWx0ZXJzPFM+W3R5cGVvZiBrZXldO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghc2hhbGxvd0VxdWFsKGV4aXN0aW5nLCBpbmNvbWluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gaW5jb21pbmcgYXMgSW5mZXJGaWx0ZXJzPFM+W3R5cGVvZiBrZXldO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgcmV0dXJuIGJhc2UgYXMgSW5mZXJGaWx0ZXJzPFM+O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGZpbHRlcnMgb2JqZWN0IGlzIGVtcHR5IChubyBmaWVsZHMgcHJlc2VudCkuXG4gKlxuICogQHBhcmFtIGZpbHRlcnMgLSBGaWx0ZXJzIHRvIGluc3BlY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5PFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBmaWx0ZXJzOiBSZWFkb25seTxJbmZlckZpbHRlcnM8Uz4+LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPT09IDA7XG59XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTLFlBQVksQ0FBQyxDQUFVLEVBQUUsQ0FBVTtJQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQ0UsT0FBTyxDQUFDLEtBQUssUUFBUTtRQUNyQixDQUFDLEtBQUssSUFBSTtRQUNWLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDckIsQ0FBQyxLQUFLLElBQUksRUFDVixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBNEIsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxDQUE0QixDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQWVELE1BQU0sVUFBVSxFQUFFLENBQW1CLEtBQWlCO0lBQ3BELE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7SUFDNUMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FB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QUUsQ0FBQztJQUNyRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFnQixFQUFFLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUU3QixDQUFDO2FBQU0sSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQXVDLENBQUM7WUFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNqQixDQUFDO2FBQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBdUMsQ0FBQztZQUN0RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sTUFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxJQUF1QixDQUFDO0FBQ2pDLENBQUM7QUFPRCxNQUFNLFVBQVUsT0FBTyxDQUNyQixPQUFrQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbmZlckZpbHRlcnMsIFNjaGVtYSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIENoZWNrcyBzaGFsbG93IGVxdWFsaXR5IGJldHdlZW4gdHdvIHBsYWluIG9iamVjdHMgKG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXlzIG9ubHkpLlxuICovXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHxcbiAgICBhID09PSBudWxsIHx8XG4gICAgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8XG4gICAgYiA9PT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYU9iaiA9IGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGJPYmogPSBiIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGFPYmopO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGJPYmopO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChjb25zdCBrIG9mIGFLZXlzKSB7XG4gICAgaWYgKGFPYmpba10gIT09IGJPYmpba10pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIEVxSW5wdXQ8UyBleHRlbmRzIFNjaGVtYT4gPSBQYXJ0aWFsPHtcbiAgW0sgaW4ga2V5b2YgUyBhcyAnZXEnIGV4dGVuZHMga2V5b2YgTm9uTnVsbGFibGU8SW5mZXJGaWx0ZXJzPFM+W0tdPlxuICAgID8gS1xuICAgIDogbmV2ZXJdOiBOb25OdWxsYWJsZTxJbmZlckZpbHRlcnM8Uz5bS10+IGV4dGVuZHMgeyBlcT86IGluZmVyIFYgfVxuICAgID8gVlxuICAgIDogbmV2ZXI7XG59PjtcblxuLyoqXG4gKiBCdWlsZHMgYSBmaWx0ZXJzIG9iamVjdCB1c2luZyBpbXBsaWNpdCBlcXVhbGl0eSBmb3IgZWFjaCBwcm92aWRlZCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBSZWNvcmQgb2YgZmllbGQgdmFsdWVzIHRvIGVuY29kZSBhcyBgeyBlcTogdmFsdWUgfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcTxTIGV4dGVuZHMgU2NoZW1hPihpbnB1dDogRXFJbnB1dDxTPik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGNvbnN0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWx0ZXJzW2tleV0gPSB7IGVxOiB2YWx1ZSB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBlcX0gZm9yIGNhbGxlcnMgd2hvIHByZWZlciBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRXFGaWx0ZXJzID0gZXE7XG5cbi8qKlxuICogU2V0cyBvciB1bnNldHMgYSBzcGVjaWZpYyBvcGVyYXRvciB2YWx1ZSBvbiBhIGZpZWxkIHdoaWxlIHByZXNlcnZpbmcgcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSB3aGVuIG5vdGhpbmcgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gZmlsdGVycyAtIEN1cnJlbnQgZmlsdGVycyBvYmplY3QgdGhhdCB3aWxsIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGlucHV0LlxuICogQHBhcmFtIF9zY2hlbWEgLSBTY2hlbWEgcmVmZXJlbmNlIChyZXNlcnZlZCBmb3IgZnV0dXJlIHZhbGlkYXRpb24gaG9va3MpLlxuICogQHBhcmFtIGZpZWxkIC0gRmllbGQga2V5IHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSBvcGVyYXRvciAtIE9wZXJhdG9yIG5hbWUgdG8gc2V0IG9yIHJlbW92ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIE5ldyBvcGVyYXRvciB2YWx1ZTsgcGFzcyBgdW5kZWZpbmVkYCB0byByZW1vdmUgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXI8XG4gIFMgZXh0ZW5kcyBTY2hlbWEsXG4gIEYgZXh0ZW5kcyBrZXlvZiBTLFxuICBPIGV4dGVuZHMga2V5b2YgTm9uTnVsbGFibGU8SW5mZXJGaWx0ZXJzPFM+W0ZdPixcbj4oXG4gIGZpbHRlcnM6IFJlYWRvbmx5PEluZmVyRmlsdGVyczxTPj4sXG4gIF9zY2hlbWE6IFMsIC8vIHJlc2VydmVkIGZvciBmdXR1cmUgdmFsaWRhdGlvbiBob29rc1xuICBmaWVsZDogRixcbiAgb3BlcmF0b3I6IE8sXG4gIHZhbHVlOiBOb25OdWxsYWJsZTxJbmZlckZpbHRlcnM8Uz5bRl0+W09dIHwgdW5kZWZpbmVkLFxuKTogSW5mZXJGaWx0ZXJzPFM+IHtcbiAgY29uc3QgY3VycmVudEZpZWxkID0gZmlsdGVyc1tmaWVsZF07XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGN1cnJlbnRGaWVsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gICAgfVxuICAgIGNvbnN0IHsgW29wZXJhdG9yXTogX3JlbW92ZWQsIC4uLnJlc3QgfSA9IGN1cnJlbnRGaWVsZCBhcyBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICB1bmtub3duXG4gICAgPjtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCB7IFtmaWVsZF06IF9mLCAuLi5jbG9uZSB9ID0gZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiBjbG9uZSBhcyBJbmZlckZpbHRlcnM8Uz47XG4gICAgfVxuICAgIHJldHVybiB7IC4uLmZpbHRlcnMsIFtmaWVsZF06IHJlc3QgfSBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgY29uc3QgbmV3RmllbGQgPSB7XG4gICAgLi4uKGN1cnJlbnRGaWVsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCksXG4gICAgW29wZXJhdG9yXTogdmFsdWUsXG4gIH07XG4gIGlmIChjdXJyZW50RmllbGQgIT09IHVuZGVmaW5lZCAmJiBzaGFsbG93RXF1YWwoY3VycmVudEZpZWxkLCBuZXdGaWVsZCkpIHtcbiAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgcmV0dXJuIHsgLi4uZmlsdGVycywgW2ZpZWxkXTogbmV3RmllbGQgfSBhcyBJbmZlckZpbHRlcnM8Uz47XG59XG5cbi8qKlxuICogUmVtb3ZlcyBlaXRoZXIgYW4gZW50aXJlIGZpZWxkIG9yIGEgc3BlY2lmaWMgb3BlcmF0b3IgZnJvbSB0aGUgZmlsdGVycyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGZpbHRlcnMgLSBDdXJyZW50IGZpbHRlcnMgb2JqZWN0ICh0cmVhdGVkIGltbXV0YWJseSkuXG4gKiBAcGFyYW0gZmllbGQgLSBGaWVsZCBuYW1lIHRvIGFsdGVyLlxuICogQHBhcmFtIG9wZXJhdG9yIC0gT3B0aW9uYWwgb3BlcmF0b3IgdG8gcmVtb3ZlOyBvbWl0IHRvIGRyb3AgdGhlIHdob2xlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmlsdGVyPFMgZXh0ZW5kcyBTY2hlbWEsIEYgZXh0ZW5kcyBrZXlvZiBTPihcbiAgZmlsdGVyczogUmVhZG9ubHk8SW5mZXJGaWx0ZXJzPFM+PixcbiAgZmllbGQ6IEYsXG4gIG9wZXJhdG9yPzoga2V5b2YgTm9uTnVsbGFibGU8SW5mZXJGaWx0ZXJzPFM+W0ZdPixcbik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpbHRlcnNbZmllbGRdO1xuICBpZiAoY3VycmVudEZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgaWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB7IFtmaWVsZF06IF9yZW1vdmVkLCAuLi5jbG9uZSB9ID0gZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gY2xvbmUgYXMgSW5mZXJGaWx0ZXJzPFM+O1xuICB9XG4gIGNvbnN0IHsgW29wZXJhdG9yXTogX29wUmVtb3ZlZCwgLi4ucmVzdCB9ID0gY3VycmVudEZpZWxkIGFzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgdW5rbm93blxuICA+O1xuICBpZiAoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgeyBbZmllbGRdOiBfZiwgLi4uY2xvbmUgfSA9IGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGNsb25lIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgfVxuICByZXR1cm4geyAuLi5maWx0ZXJzLCBbZmllbGRdOiByZXN0IH0gYXMgSW5mZXJGaWx0ZXJzPFM+O1xufVxuXG4vKipcbiAqIE1lcmdlcyBhIHBhdGNoIG9mIGZpbHRlcnMgaW50byBhbiBleGlzdGluZyBmaWx0ZXJzIG9iamVjdCB3aGlsZSBwcmVzZXJ2aW5nIHJlZmVyZW5jZVxuICogaWRlbnRpdHkgZm9yIHVuY2hhbmdlZCBmaWVsZHMuXG4gKlxuICogQHBhcmFtIGJhc2UgLSBPcmlnaW5hbCBmaWx0ZXJzLlxuICogQHBhcmFtIHBhdGNoIC0gRmlsdGVycyB0byBvdmVybGF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBiYXNlOiBSZWFkb25seTxJbmZlckZpbHRlcnM8Uz4+LFxuICBwYXRjaDogUmVhZG9ubHk8SW5mZXJGaWx0ZXJzPFM+Pixcbik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IHJlc3VsdDogUGFydGlhbDxJbmZlckZpbHRlcnM8Uz4+ID0geyAuLi5iYXNlIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhdGNoKSBhcyAoa2V5b2YgUylbXSkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYmFzZVtrZXldO1xuICAgIGNvbnN0IGluY29taW5nID0gcGF0Y2hba2V5XTtcbiAgICBpZiAoaW5jb21pbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2tpcCB1bmRlZmluZWQgaW5jb21pbmdcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gaW5jb21pbmcgYXMgSW5mZXJGaWx0ZXJzPFM+W3R5cGVvZiBrZXldO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghc2hhbGxvd0VxdWFsKGV4aXN0aW5nLCBpbmNvbWluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gaW5jb21pbmcgYXMgSW5mZXJGaWx0ZXJzPFM+W3R5cGVvZiBrZXldO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgcmV0dXJuIGJhc2UgYXMgSW5mZXJGaWx0ZXJzPFM+O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGZpbHRlcnMgb2JqZWN0IGlzIGVtcHR5IChubyBmaWVsZHMgcHJlc2VudCkuXG4gKlxuICogQHBhcmFtIGZpbHRlcnMgLSBGaWx0ZXJzIHRvIGluc3BlY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5PFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBmaWx0ZXJzOiBSZWFkb25seTxJbmZlckZpbHRlcnM8Uz4+LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPT09IDA7XG59XG4iXX0=
package/lib/esm/parse.js CHANGED
@@ -25,6 +25,9 @@ function decodeValue(value, field, operator, diagnostics) {
25
25
  }
26
26
  }
27
27
  function parseSingleValue(descriptor, raw) {
28
+ if (descriptor.parse != null) {
29
+ return descriptor.parse(raw);
30
+ }
28
31
  if (descriptor.kind === 'number') {
29
32
  if (raw === '') {
30
33
  return undefined;
@@ -178,4 +181,4 @@ export function parse(rawSearch, schema) {
178
181
  }
179
182
  return acc;
180
183
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxPQUFPLEdBQW9CLFNBQVMsQ0FBQztBQUMzQyxNQUFNLFFBQVEsR0FBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFReEQsU0FBUyxpQkFBaUIsQ0FDeEIsT0FBd0IsRUFDeEIsS0FBYTtJQUViLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFnQixDQUU1QixDQUFDO0lBQ2QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxNQUFNLEtBQUssR0FBb0IsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7SUFDM0MsS0FBaUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFHRCxTQUFTLFdBQVcsQ0FDbEIsS0FBYSxFQUNiLEtBQWEsRUFDYixRQUFnQixFQUNoQixXQUF5QjtJQUV6QixJQUFJLENBQUM7UUFDSCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLGFBQWE7WUFDbkIsS0FBSztZQUNMLFFBQVE7WUFDUixNQUFNLEVBQUUsa0JBQWtCO1NBQzNCLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBR0QsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBMkIsRUFDM0IsR0FBVztJQUVY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VSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUMxRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIFNjaGVtYSxcbiAgT3BlcmF0b3IsXG4gIExpc3RPcGVyYXRvcixcbiAgQmV0d2Vlbk9wZXJhdG9yLFxuICBJbmZlckZpbHRlcnMsXG4gIEZpZWxkRGVzY3JpcHRvcixcbiAgUGFyc2VSZXN1bHQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEaWFnbm9zdGljIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuXG5jb25zdCBCRVRXRUVOOiBCZXR3ZWVuT3BlcmF0b3IgPSAnYmV0d2Vlbic7XG5jb25zdCBMSVNUX09QUzogcmVhZG9ubHkgTGlzdE9wZXJhdG9yW10gPSBbJ2luJywgJ25pbiddO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxBY2N1bXVsYXRvcjxTIGV4dGVuZHMgU2NoZW1hPiB7XG4gIGZpbHRlcnM6IEluZmVyRmlsdGVyczxTPjtcbiAgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXTtcbn1cblxuLyoqIFNoYWxsb3cgY2xvbmUgcGx1cyBlbnN1cmUgZmllbGQgb2JqZWN0IGhlbHBlciAoaW1tdXRhYmxlIHVwZGF0ZSkuICovXG5mdW5jdGlvbiBlbnN1cmVGaWVsZE9iamVjdDxTIGV4dGVuZHMgU2NoZW1hPihcbiAgZmlsdGVyczogSW5mZXJGaWx0ZXJzPFM+LFxuICBmaWVsZDogc3RyaW5nLFxuKTogeyBjb250YWluZXI6IEluZmVyRmlsdGVyczxTPjsgdGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBmaWx0ZXJzW2ZpZWxkIGFzIGtleW9mIFNdIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgdW5kZWZpbmVkO1xuICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogZmlsdGVycywgdGFyZ2V0OiBleGlzdGluZyB9O1xuICB9XG4gIGNvbnN0IGNsb25lOiBJbmZlckZpbHRlcnM8Uz4gPSB7IC4uLmZpbHRlcnMgfTtcbiAgY29uc3QgY3JlYXRlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgKGNsb25lIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtmaWVsZF0gPSBjcmVhdGVkO1xuICByZXR1cm4geyBjb250YWluZXI6IGNsb25lLCB0YXJnZXQ6IGNyZWF0ZWQgfTtcbn1cblxuLyoqIERlY29kZSBjb21wb25lbnQsIHJlY29yZGluZyBhIGRpYWdub3N0aWMgb24gZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIGRlY29kZVZhbHVlKFxuICB2YWx1ZTogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgfSBjYXRjaCB7XG4gICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICBraW5kOiAnRGVjb2RlRXJyb3InLFxuICAgICAgZmllbGQsXG4gICAgICBvcGVyYXRvcixcbiAgICAgIGRldGFpbDogJ0ZhaWxlZCB0byBkZWNvZGUnLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgc2luZ2xlIHJhdyB2YWx1ZSBhY2NvcmRpbmcgdG8gZmllbGQga2luZC4gKi9cbmZ1bmN0aW9uIHBhcnNlU2luZ2xlVmFsdWUoXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgcmF3OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAoZGVzY3JpcHRvci5raW5kID09PSAnbnVtYmVyJykge1xuICAgIGlmIChyYXcgPT09ICcnKSB7XG4gICAgICAvLyBUcmVhdCBlbXB0eSBzdHJpbmcgYXMgaW52YWxpZCBmb3IgbnVtZXJpYyBmaWVsZHMgKHJlamVjdCBpbnN0ZWFkIG9mIGNvZXJjaW5nIHRvIDApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBuID0gTnVtYmVyKHJhdyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG4gIHJldHVybiByYXc7XG59XG5cbi8qKiBIYW5kbGUgYSBiZXR3ZWVuIG9wZXJhdG9yIHZhbHVlLiAqL1xuZnVuY3Rpb24gaGFuZGxlQmV0d2VlbjxTIGV4dGVuZHMgU2NoZW1hPihcbiAgZGVzY3JpcHRvcjogRmllbGREZXNjcmlwdG9yLFxuICBkZWNvZGVkOiBzdHJpbmcsXG4gIGZpZWxkOiBzdHJpbmcsXG4gIG9wZXJhdG9yOiBzdHJpbmcsXG4gIGFjYzogSW50ZXJuYWxBY2N1bXVsYXRvcjxTPixcbik6IHZvaWQge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBkZWNvZGVkLnNwbGl0KCcsJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICBraW5kOiAnSW52YWxpZEFyaXR5JyxcbiAgICAgIGZpZWxkLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBkZXRhaWw6ICdFeHBlY3RlZCBleGFjdGx5IDIgdmFsdWVzJyxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgW2FSYXcsIGJSYXddID0gcGFydHMgYXMgW3N0cmluZywgc3RyaW5nXTtcbiAgY29uc3QgYSA9IHBhcnNlU2luZ2xlVmFsdWUoZGVzY3JpcHRvciwgYVJhdyk7XG4gIGNvbnN0IGIgPSBwYXJzZVNpbmdsZVZhbHVlKGRlc2NyaXB0b3IsIGJSYXcpO1xuICBpZiAoYSA9PT0gdW5kZWZpbmVkIHx8IGIgPT09IHVuZGVmaW5lZCkge1xuICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgIGtpbmQ6ICdJbnZhbGlkVmFsdWUnLFxuICAgICAgZmllbGQsXG4gICAgICBvcGVyYXRvcixcbiAgICAgIGRldGFpbDogJ09uZSBvZiB0aGUgYmV0d2VlbiB2YWx1ZXMgaW52YWxpZCcsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVuc3VyZWQgPSBlbnN1cmVGaWVsZE9iamVjdChhY2MuZmlsdGVycywgZmllbGQpO1xuICBhY2MuZmlsdGVycyA9IGVuc3VyZWQuY29udGFpbmVyO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVuc3VyZWQudGFyZ2V0LCAnYmV0d2VlbicpKSB7XG4gICAgYWNjLmRpYWdub3N0aWNzLnB1c2goeyBraW5kOiAnRHVwbGljYXRlQmV0d2VlbicsIGZpZWxkIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBlbnN1cmVkLnRhcmdldC5iZXR3ZWVuID0gW2EsIGJdIGFzIHVua25vd247XG59XG5cbi8qKiBIYW5kbGUgbGlzdCBvcGVyYXRvcnMgKGluLCBuaW4pLiAqL1xuZnVuY3Rpb24gaGFuZGxlTGlzdDxTIGV4dGVuZHMgU2NoZW1hPihcbiAgZGVzY3JpcHRvcjogRmllbGREZXNjcmlwdG9yLFxuICBkZWNvZGVkOiBzdHJpbmcsXG4gIGZpZWxkOiBzdHJpbmcsXG4gIG9wZXJhdG9yOiBzdHJpbmcsXG4gIGFjYzogSW50ZXJuYWxBY2N1bXVsYXRvcjxTPixcbik6IHZvaWQge1xuICBjb25zdCBsaXN0UmF3ID0gZGVjb2RlZC5zcGxpdCgnLCcpO1xuICBjb25zdCBwYXJzZWRMaXN0OiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0UmF3KSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaW5nbGVWYWx1ZShkZXNjcmlwdG9yLCBpdGVtKTtcbiAgICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAga2luZDogJ0ludmFsaWRWYWx1ZScsXG4gICAgICAgIGZpZWxkLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgZGV0YWlsOiAnTGlzdCBpdGVtIGludmFsaWQnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZExpc3QucHVzaChwYXJzZWQpO1xuICAgIH1cbiAgfVxuICBpZiAocGFyc2VkTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZW5zdXJlZCA9IGVuc3VyZUZpZWxkT2JqZWN0KGFjYy5maWx0ZXJzLCBmaWVsZCk7XG4gIGFjYy5maWx0ZXJzID0gZW5zdXJlZC5jb250YWluZXI7XG4gIGNvbnN0IHRhcmdldE9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBlbnN1cmVkLnRhcmdldDtcbiAgY29uc3QgZXhpc3RpbmcgPSB0YXJnZXRPYmpbb3BlcmF0b3JdO1xuICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICB0YXJnZXRPYmpbb3BlcmF0b3JdID0gWy4uLmV4aXN0aW5nLCAuLi5wYXJzZWRMaXN0XTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRPYmpbb3BlcmF0b3JdID0gcGFyc2VkTGlzdDtcbiAgfVxufVxuXG4vKiogSGFuZGxlIHNjYWxhciBvcGVyYXRvciB2YWx1ZXMuICovXG5mdW5jdGlvbiBoYW5kbGVTY2FsYXI8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgZGVjb2RlZDogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBhY2M6IEludGVybmFsQWNjdW11bGF0b3I8Uz4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2NhbGFyID0gcGFyc2VTaW5nbGVWYWx1ZShkZXNjcmlwdG9yLCBkZWNvZGVkKTtcbiAgaWYgKHNjYWxhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYWNjLmRpYWdub3N0aWNzLnB1c2goeyBraW5kOiAnSW52YWxpZFZhbHVlJywgZmllbGQsIG9wZXJhdG9yIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbnN1cmVkID0gZW5zdXJlRmllbGRPYmplY3QoYWNjLmZpbHRlcnMsIGZpZWxkKTtcbiAgYWNjLmZpbHRlcnMgPSBlbnN1cmVkLmNvbnRhaW5lcjtcbiAgY29uc3Qgc2NhbGFyVGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGVuc3VyZWQudGFyZ2V0O1xuICBzY2FsYXJUYXJnZXRbb3BlcmF0b3JdID0gc2NhbGFyO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIHJhdyBzZWFyY2ggc3RyaW5nIChsZWFkaW5nIGA/YCBvcHRpb25hbCkgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBzY2hlbWFcbiAqIGFuZCByZXR1cm5zIHRoZSBmaWx0ZXJzIHBsdXMgZGlhZ25vc3RpY3MuXG4gKlxuICogQHBhcmFtIHJhd1NlYXJjaCAtIFF1ZXJ5IHN0cmluZyB0byBwYXJzZSAod2l0aCBvciB3aXRob3V0IHRoZSBsZWFkaW5nIHF1ZXN0aW9uIG1hcmspLlxuICogQHBhcmFtIHNjaGVtYSAtIFNjaGVtYSBkZXNjcmliaW5nIGFsbG93ZWQgZmllbGRzIGFuZCBvcGVyYXRvcnMuXG4gKiBAcmV0dXJucyBQYXJzZWQgZmlsdGVycyBhbG9uZ3NpZGUgbm9uLWJsb2NraW5nIGRpYWdub3N0aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2U8UyBleHRlbmRzIFNjaGVtYT4oXG4gIHJhd1NlYXJjaDogc3RyaW5nLFxuICBzY2hlbWE6IFMsXG4pOiBQYXJzZVJlc3VsdDxTPiB7XG4gIGNvbnN0IGFjYzogSW50ZXJuYWxBY2N1bXVsYXRvcjxTPiA9IHsgZmlsdGVyczoge30sIGRpYWdub3N0aWNzOiBbXSB9O1xuICBsZXQgc2VhcmNoID0gcmF3U2VhcmNoO1xuICBpZiAoc2VhcmNoLnN0YXJ0c1dpdGgoJz8nKSkge1xuICAgIHNlYXJjaCA9IHNlYXJjaC5zbGljZSgxKTtcbiAgfVxuICBpZiAoc2VhcmNoLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VhcmNoLnNwbGl0KCcmJyk7XG4gIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKSB7XG4gICAgY29uc3QgZXFJZHggPSBzZWcuaW5kZXhPZignPScpO1xuICAgIGNvbnN0IHZhbGlkQmFzaWMgPSBzZWcgIT09ICcnICYmIGVxSWR4ICE9PSAtMTtcbiAgICBpZiAodmFsaWRCYXNpYykge1xuICAgICAgY29uc3QgcmF3S2V5ID0gc2VnLnNsaWNlKDAsIGVxSWR4KTtcbiAgICAgIGNvbnN0IHJhd1ZhbCA9IHNlZy5zbGljZShlcUlkeCArIDEpO1xuICAgICAgY29uc3QgbGFzdERvdCA9IHJhd0tleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgLy8gQ2FzZSAxOiBrZXkgd2l0aCBleHBsaWNpdCBvcGVyYXRvciAoZmllbGQub3ApXG4gICAgICBjb25zdCBleHBsaWNpdFNoYXBlID0gIShsYXN0RG90IDw9IDAgfHwgbGFzdERvdCA9PT0gcmF3S2V5Lmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGV4cGxpY2l0U2hhcGUpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSByYXdLZXkuc2xpY2UoMCwgbGFzdERvdCk7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yID0gcmF3S2V5LnNsaWNlKGxhc3REb3QgKyAxKSBhcyBPcGVyYXRvcjtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHNjaGVtYVtmaWVsZF07XG4gICAgICAgIGNvbnN0IGRlc2NPayA9IGRlc2NyaXB0b3I/Lm9wZXJhdG9ycy5pbmNsdWRlcyhvcGVyYXRvcikgPT09IHRydWU7XG4gICAgICAgIGlmICghZGVzY09rKSB7XG4gICAgICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCkge1xuICAgICAgICAgICAgYWNjLmRpYWdub3N0aWNzLnB1c2goeyBraW5kOiAnVW5rbm93bkZpZWxkJywgZmllbGQgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ1Vua25vd25PcGVyYXRvcicsIGZpZWxkLCBvcGVyYXRvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVZhbHVlKHJhd1ZhbCwgZmllbGQsIG9wZXJhdG9yLCBhY2MuZGlhZ25vc3RpY3MpO1xuICAgICAgICAgIGlmIChkZWNvZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTGlzdCA9IChMSVNUX09QUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMob3BlcmF0b3IpO1xuICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBCRVRXRUVOKSB7XG4gICAgICAgICAgICAgIGhhbmRsZUJldHdlZW4oZGVzY3JpcHRvciwgZGVjb2RlZCwgZmllbGQsIG9wZXJhdG9yLCBhY2MpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpc3QpIHtcbiAgICAgICAgICAgICAgaGFuZGxlTGlzdChkZXNjcmlwdG9yLCBkZWNvZGVkLCBmaWVsZCwgb3BlcmF0b3IsIGFjYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoYW5kbGVTY2FsYXIoZGVzY3JpcHRvciwgZGVjb2RlZCwgZmllbGQsIG9wZXJhdG9yLCBhY2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsYXN0RG90ID09PSAtMSkge1xuICAgICAgICAvLyBpbXBsaWNpdCBlcXVhbGl0eSAobm8gZG90KSA9PiBvcGVyYXRvciAnZXEnXG4gICAgICAgIGNvbnN0IGZpZWxkID0gcmF3S2V5O1xuICAgICAgICBjb25zdCBvcGVyYXRvcjogT3BlcmF0b3IgPSAnZXEnO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gc2NoZW1hW2ZpZWxkXTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCkge1xuICAgICAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ1Vua25vd25GaWVsZCcsIGZpZWxkIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFkZXNjcmlwdG9yLm9wZXJhdG9ycy5pbmNsdWRlcyhvcGVyYXRvcikpIHtcbiAgICAgICAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7IGtpbmQ6ICdVbmtub3duT3BlcmF0b3InLCBmaWVsZCwgb3BlcmF0b3IgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVZhbHVlKHJhd1ZhbCwgZmllbGQsIG9wZXJhdG9yLCBhY2MuZGlhZ25vc3RpY3MpO1xuICAgICAgICAgIGlmIChkZWNvZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhhbmRsZVNjYWxhcihkZXNjcmlwdG9yLCBkZWNvZGVkLCBmaWVsZCwgb3BlcmF0b3IsIGFjYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhY2M7XG59XG4iXX0=
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxPQUFPLEdBQW9CLFNBQVMsQ0FBQztBQUMzQyxNQUFNLFFBQVEsR0FBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFReEQsU0FBUyxpQkFBaUIsQ0FDeEIsT0FBd0IsRUFDeEIsS0FBYTtJQUViLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFnQixDQUU1QixDQUFDO0lBQ2QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxNQUFNLEtBQUssR0FBb0IsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7SUFDM0MsS0FBaUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFHRCxTQUFTLFdBQVcsQ0FDbEIsS0FBYSxFQUNiLEtBQWEsRUFDYixRQUFnQixFQUNoQixXQUF5QjtJQUV6QixJQUFJLENBQUM7UUFDSCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLGFBQWE7WUFDbkIsS0FBSztZQUNMLFFBQVE7WUFDUixNQUFNLEVBQUUsa0JBQWtCO1NBQzNCLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBR0QsU0FBUyxnQkFBZ0IsQ0FBQyxVQUEyQixFQUFFLEdBQVc7SUFDaEUs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QUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN0RSxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDMUIsWUFBWSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDMUQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBTY2hlbWEsXG4gIE9wZXJhdG9yLFxuICBMaXN0T3BlcmF0b3IsXG4gIEJldHdlZW5PcGVyYXRvcixcbiAgSW5mZXJGaWx0ZXJzLFxuICBGaWVsZERlc2NyaXB0b3IsXG4gIFBhcnNlUmVzdWx0LFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGlhZ25vc3RpYyB9IGZyb20gJy4vZXJyb3JzLmpzJztcblxuY29uc3QgQkVUV0VFTjogQmV0d2Vlbk9wZXJhdG9yID0gJ2JldHdlZW4nO1xuY29uc3QgTElTVF9PUFM6IHJlYWRvbmx5IExpc3RPcGVyYXRvcltdID0gWydpbicsICduaW4nXTtcblxuaW50ZXJmYWNlIEludGVybmFsQWNjdW11bGF0b3I8UyBleHRlbmRzIFNjaGVtYT4ge1xuICBmaWx0ZXJzOiBJbmZlckZpbHRlcnM8Uz47XG4gIGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW107XG59XG5cbi8qKiBTaGFsbG93IGNsb25lIHBsdXMgZW5zdXJlIGZpZWxkIG9iamVjdCBoZWxwZXIgKGltbXV0YWJsZSB1cGRhdGUpLiAqL1xuZnVuY3Rpb24gZW5zdXJlRmllbGRPYmplY3Q8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGZpbHRlcnM6IEluZmVyRmlsdGVyczxTPixcbiAgZmllbGQ6IHN0cmluZyxcbik6IHsgY29udGFpbmVyOiBJbmZlckZpbHRlcnM8Uz47IHRhcmdldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gIGNvbnN0IGV4aXN0aW5nID0gZmlsdGVyc1tmaWVsZCBhcyBrZXlvZiBTXSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IGZpbHRlcnMsIHRhcmdldDogZXhpc3RpbmcgfTtcbiAgfVxuICBjb25zdCBjbG9uZTogSW5mZXJGaWx0ZXJzPFM+ID0geyAuLi5maWx0ZXJzIH07XG4gIGNvbnN0IGNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIChjbG9uZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbZmllbGRdID0gY3JlYXRlZDtcbiAgcmV0dXJuIHsgY29udGFpbmVyOiBjbG9uZSwgdGFyZ2V0OiBjcmVhdGVkIH07XG59XG5cbi8qKiBEZWNvZGUgY29tcG9uZW50LCByZWNvcmRpbmcgYSBkaWFnbm9zdGljIG9uIGZhaWx1cmUuICovXG5mdW5jdGlvbiBkZWNvZGVWYWx1ZShcbiAgdmFsdWU6IHN0cmluZyxcbiAgZmllbGQ6IHN0cmluZyxcbiAgb3BlcmF0b3I6IHN0cmluZyxcbiAgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAga2luZDogJ0RlY29kZUVycm9yJyxcbiAgICAgIGZpZWxkLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBkZXRhaWw6ICdGYWlsZWQgdG8gZGVjb2RlJyxcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBQYXJzZSBhIHNpbmdsZSByYXcgdmFsdWUgYWNjb3JkaW5nIHRvIGZpZWxkIGtpbmQuICovXG5mdW5jdGlvbiBwYXJzZVNpbmdsZVZhbHVlKGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvciwgcmF3OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgaWYgKGRlc2NyaXB0b3IucGFyc2UgIT0gbnVsbCkge1xuICAgIHJldHVybiBkZXNjcmlwdG9yLnBhcnNlKHJhdyk7XG4gIH1cbiAgaWYgKGRlc2NyaXB0b3Iua2luZCA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAocmF3ID09PSAnJykge1xuICAgICAgLy8gVHJlYXQgZW1wdHkgc3RyaW5nIGFzIGludmFsaWQgZm9yIG51bWVyaWMgZmllbGRzIChyZWplY3QgaW5zdGVhZCBvZiBjb2VyY2luZyB0byAwKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbiA9IE51bWJlcihyYXcpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG4vKiogSGFuZGxlIGEgYmV0d2VlbiBvcGVyYXRvciB2YWx1ZS4gKi9cbmZ1bmN0aW9uIGhhbmRsZUJldHdlZW48UyBleHRlbmRzIFNjaGVtYT4oXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgZGVjb2RlZDogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBhY2M6IEludGVybmFsQWNjdW11bGF0b3I8Uz4sXG4pOiB2b2lkIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gZGVjb2RlZC5zcGxpdCgnLCcpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgYWNjLmRpYWdub3N0aWNzLnB1c2goe1xuICAgICAga2luZDogJ0ludmFsaWRBcml0eScsXG4gICAgICBmaWVsZCxcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgZGV0YWlsOiAnRXhwZWN0ZWQgZXhhY3RseSAyIHZhbHVlcycsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IFthUmF3LCBiUmF3XSA9IHBhcnRzIGFzIFtzdHJpbmcsIHN0cmluZ107XG4gIGNvbnN0IGEgPSBwYXJzZVNpbmdsZVZhbHVlKGRlc2NyaXB0b3IsIGFSYXcpO1xuICBjb25zdCBiID0gcGFyc2VTaW5nbGVWYWx1ZShkZXNjcmlwdG9yLCBiUmF3KTtcbiAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSB1bmRlZmluZWQpIHtcbiAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICBraW5kOiAnSW52YWxpZFZhbHVlJyxcbiAgICAgIGZpZWxkLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBkZXRhaWw6ICdPbmUgb2YgdGhlIGJldHdlZW4gdmFsdWVzIGludmFsaWQnLFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbnN1cmVkID0gZW5zdXJlRmllbGRPYmplY3QoYWNjLmZpbHRlcnMsIGZpZWxkKTtcbiAgYWNjLmZpbHRlcnMgPSBlbnN1cmVkLmNvbnRhaW5lcjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnN1cmVkLnRhcmdldCwgJ2JldHdlZW4nKSkge1xuICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ0R1cGxpY2F0ZUJldHdlZW4nLCBmaWVsZCB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlZC50YXJnZXQuYmV0d2VlbiA9IFthLCBiXSBhcyB1bmtub3duO1xufVxuXG4vKiogSGFuZGxlIGxpc3Qgb3BlcmF0b3JzIChpbiwgbmluKS4gKi9cbmZ1bmN0aW9uIGhhbmRsZUxpc3Q8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgZGVjb2RlZDogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBhY2M6IEludGVybmFsQWNjdW11bGF0b3I8Uz4sXG4pOiB2b2lkIHtcbiAgY29uc3QgbGlzdFJhdyA9IGRlY29kZWQuc3BsaXQoJywnKTtcbiAgY29uc3QgcGFyc2VkTGlzdDogdW5rbm93bltdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0UmF3KSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaW5nbGVWYWx1ZShkZXNjcmlwdG9yLCBpdGVtKTtcbiAgICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAga2luZDogJ0ludmFsaWRWYWx1ZScsXG4gICAgICAgIGZpZWxkLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgZGV0YWlsOiAnTGlzdCBpdGVtIGludmFsaWQnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZExpc3QucHVzaChwYXJzZWQpO1xuICAgIH1cbiAgfVxuICBpZiAocGFyc2VkTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZW5zdXJlZCA9IGVuc3VyZUZpZWxkT2JqZWN0KGFjYy5maWx0ZXJzLCBmaWVsZCk7XG4gIGFjYy5maWx0ZXJzID0gZW5zdXJlZC5jb250YWluZXI7XG4gIGNvbnN0IHRhcmdldE9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBlbnN1cmVkLnRhcmdldDtcbiAgY29uc3QgZXhpc3RpbmcgPSB0YXJnZXRPYmpbb3BlcmF0b3JdO1xuICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICB0YXJnZXRPYmpbb3BlcmF0b3JdID0gWy4uLmV4aXN0aW5nLCAuLi5wYXJzZWRMaXN0XTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRPYmpbb3BlcmF0b3JdID0gcGFyc2VkTGlzdDtcbiAgfVxufVxuXG4vKiogSGFuZGxlIHNjYWxhciBvcGVyYXRvciB2YWx1ZXMuICovXG5mdW5jdGlvbiBoYW5kbGVTY2FsYXI8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgZGVjb2RlZDogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBhY2M6IEludGVybmFsQWNjdW11bGF0b3I8Uz4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2NhbGFyID0gcGFyc2VTaW5nbGVWYWx1ZShkZXNjcmlwdG9yLCBkZWNvZGVkKTtcbiAgaWYgKHNjYWxhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYWNjLmRpYWdub3N0aWNzLnB1c2goeyBraW5kOiAnSW52YWxpZFZhbHVlJywgZmllbGQsIG9wZXJhdG9yIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbnN1cmVkID0gZW5zdXJlRmllbGRPYmplY3QoYWNjLmZpbHRlcnMsIGZpZWxkKTtcbiAgYWNjLmZpbHRlcnMgPSBlbnN1cmVkLmNvbnRhaW5lcjtcbiAgY29uc3Qgc2NhbGFyVGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGVuc3VyZWQudGFyZ2V0O1xuICBzY2FsYXJUYXJnZXRbb3BlcmF0b3JdID0gc2NhbGFyO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIHJhdyBzZWFyY2ggc3RyaW5nIChsZWFkaW5nIGA/YCBvcHRpb25hbCkgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBzY2hlbWFcbiAqIGFuZCByZXR1cm5zIHRoZSBmaWx0ZXJzIHBsdXMgZGlhZ25vc3RpY3MuXG4gKlxuICogQHBhcmFtIHJhd1NlYXJjaCAtIFF1ZXJ5IHN0cmluZyB0byBwYXJzZSAod2l0aCBvciB3aXRob3V0IHRoZSBsZWFkaW5nIHF1ZXN0aW9uIG1hcmspLlxuICogQHBhcmFtIHNjaGVtYSAtIFNjaGVtYSBkZXNjcmliaW5nIGFsbG93ZWQgZmllbGRzIGFuZCBvcGVyYXRvcnMuXG4gKiBAcmV0dXJucyBQYXJzZWQgZmlsdGVycyBhbG9uZ3NpZGUgbm9uLWJsb2NraW5nIGRpYWdub3N0aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2U8UyBleHRlbmRzIFNjaGVtYT4oXG4gIHJhd1NlYXJjaDogc3RyaW5nLFxuICBzY2hlbWE6IFMsXG4pOiBQYXJzZVJlc3VsdDxTPiB7XG4gIGNvbnN0IGFjYzogSW50ZXJuYWxBY2N1bXVsYXRvcjxTPiA9IHsgZmlsdGVyczoge30sIGRpYWdub3N0aWNzOiBbXSB9O1xuICBsZXQgc2VhcmNoID0gcmF3U2VhcmNoO1xuICBpZiAoc2VhcmNoLnN0YXJ0c1dpdGgoJz8nKSkge1xuICAgIHNlYXJjaCA9IHNlYXJjaC5zbGljZSgxKTtcbiAgfVxuICBpZiAoc2VhcmNoLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VhcmNoLnNwbGl0KCcmJyk7XG4gIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKSB7XG4gICAgY29uc3QgZXFJZHggPSBzZWcuaW5kZXhPZignPScpO1xuICAgIGNvbnN0IHZhbGlkQmFzaWMgPSBzZWcgIT09ICcnICYmIGVxSWR4ICE9PSAtMTtcbiAgICBpZiAodmFsaWRCYXNpYykge1xuICAgICAgY29uc3QgcmF3S2V5ID0gc2VnLnNsaWNlKDAsIGVxSWR4KTtcbiAgICAgIGNvbnN0IHJhd1ZhbCA9IHNlZy5zbGljZShlcUlkeCArIDEpO1xuICAgICAgY29uc3QgbGFzdERvdCA9IHJhd0tleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgLy8gQ2FzZSAxOiBrZXkgd2l0aCBleHBsaWNpdCBvcGVyYXRvciAoZmllbGQub3ApXG4gICAgICBjb25zdCBleHBsaWNpdFNoYXBlID0gIShsYXN0RG90IDw9IDAgfHwgbGFzdERvdCA9PT0gcmF3S2V5Lmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGV4cGxpY2l0U2hhcGUpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSByYXdLZXkuc2xpY2UoMCwgbGFzdERvdCk7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yID0gcmF3S2V5LnNsaWNlKGxhc3REb3QgKyAxKSBhcyBPcGVyYXRvcjtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHNjaGVtYVtmaWVsZF07XG4gICAgICAgIGNvbnN0IGRlc2NPayA9IGRlc2NyaXB0b3I/Lm9wZXJhdG9ycy5pbmNsdWRlcyhvcGVyYXRvcikgPT09IHRydWU7XG4gICAgICAgIGlmICghZGVzY09rKSB7XG4gICAgICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCkge1xuICAgICAgICAgICAgYWNjLmRpYWdub3N0aWNzLnB1c2goeyBraW5kOiAnVW5rbm93bkZpZWxkJywgZmllbGQgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ1Vua25vd25PcGVyYXRvcicsIGZpZWxkLCBvcGVyYXRvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVZhbHVlKHJhd1ZhbCwgZmllbGQsIG9wZXJhdG9yLCBhY2MuZGlhZ25vc3RpY3MpO1xuICAgICAgICAgIGlmIChkZWNvZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTGlzdCA9IChMSVNUX09QUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMob3BlcmF0b3IpO1xuICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBCRVRXRUVOKSB7XG4gICAgICAgICAgICAgIGhhbmRsZUJldHdlZW4oZGVzY3JpcHRvciwgZGVjb2RlZCwgZmllbGQsIG9wZXJhdG9yLCBhY2MpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpc3QpIHtcbiAgICAgICAgICAgICAgaGFuZGxlTGlzdChkZXNjcmlwdG9yLCBkZWNvZGVkLCBmaWVsZCwgb3BlcmF0b3IsIGFjYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoYW5kbGVTY2FsYXIoZGVzY3JpcHRvciwgZGVjb2RlZCwgZmllbGQsIG9wZXJhdG9yLCBhY2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsYXN0RG90ID09PSAtMSkge1xuICAgICAgICAvLyBpbXBsaWNpdCBlcXVhbGl0eSAobm8gZG90KSA9PiBvcGVyYXRvciAnZXEnXG4gICAgICAgIGNvbnN0IGZpZWxkID0gcmF3S2V5O1xuICAgICAgICBjb25zdCBvcGVyYXRvcjogT3BlcmF0b3IgPSAnZXEnO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gc2NoZW1hW2ZpZWxkXTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCkge1xuICAgICAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ1Vua25vd25GaWVsZCcsIGZpZWxkIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFkZXNjcmlwdG9yLm9wZXJhdG9ycy5pbmNsdWRlcyhvcGVyYXRvcikpIHtcbiAgICAgICAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7IGtpbmQ6ICdVbmtub3duT3BlcmF0b3InLCBmaWVsZCwgb3BlcmF0b3IgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVZhbHVlKHJhd1ZhbCwgZmllbGQsIG9wZXJhdG9yLCBhY2MuZGlhZ25vc3RpY3MpO1xuICAgICAgICAgIGlmIChkZWNvZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhhbmRsZVNjYWxhcihkZXNjcmlwdG9yLCBkZWNvZGVkLCBmaWVsZCwgb3BlcmF0b3IsIGFjYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhY2M7XG59XG4iXX0=
@@ -1,5 +1,14 @@
1
- import type { FieldDescriptor, NumberFieldDescriptor, StringFieldDescriptor, Operator } from './types.js';
1
+ import type { FieldDescriptor, NumberFieldDescriptor, StringFieldDescriptor, BooleanFieldDescriptor, EnumFieldDescriptor, CustomFieldDescriptor, Operator } from './types.js';
2
2
  export declare function numberField(ops?: readonly Operator[]): NumberFieldDescriptor;
3
3
  export declare function stringField(ops?: readonly Operator[]): StringFieldDescriptor;
4
+ export declare function booleanField(ops?: readonly Operator[]): BooleanFieldDescriptor;
5
+ export declare function enumField<const T extends string>(values: readonly T[], ops?: readonly Operator[]): EnumFieldDescriptor<T>;
6
+ type CustomFieldOptions<T> = {
7
+ operators: readonly Operator[];
8
+ parse: (raw: string) => T | undefined;
9
+ serialize?: (value: T) => string;
10
+ };
11
+ export declare function customField<T>(options: CustomFieldOptions<T>): CustomFieldDescriptor<T>;
4
12
  export declare function defineSchema<S extends Record<string, FieldDescriptor>>(schema: S): S;
13
+ export {};
5
14
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACT,MAAM,YAAY,CAAC;AA0BpB,wBAAgB,WAAW,CACzB,GAAG,GAAE,SAAS,QAAQ,EAA6B,GAClD,qBAAqB,CAmBvB;AAKD,wBAAgB,WAAW,CACzB,GAAG,GAAE,SAAS,QAAQ,EAA6B,GAClD,qBAAqB,CAWvB;AAKD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACpE,MAAM,EAAE,CAAC,GACR,CAAC,CAEH"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACT,MAAM,YAAY,CAAC;AAiCpB,wBAAgB,WAAW,CACzB,GAAG,GAAE,SAAS,QAAQ,EAA6B,GAClD,qBAAqB,CAmBvB;AAKD,wBAAgB,WAAW,CACzB,GAAG,GAAE,SAAS,QAAQ,EAA6B,GAClD,qBAAqB,CAWvB;AAKD,wBAAgB,YAAY,CAC1B,GAAG,GAAE,SAAS,QAAQ,EAA8B,GACnD,sBAAsB,CAqBxB;AAKD,wBAAgB,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAC9C,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,GAAG,GAAE,SAAS,QAAQ,EAA2B,GAChD,mBAAmB,CAAC,CAAC,CAAC,CAexB;AAED,KAAK,kBAAkB,CAAC,CAAC,IAAI;IAC3B,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC/B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;CAClC,CAAC;AAKF,wBAAgB,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,qBAAqB,CAAC,CAAC,CAAC,CAO1B;AAKD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACpE,MAAM,EAAE,CAAC,GACR,CAAC,CAEH"}
package/lib/esm/schema.js CHANGED
@@ -18,6 +18,13 @@ const DEFAULT_STRING_OPERATORS = [
18
18
  'in',
19
19
  'nin',
20
20
  ];
21
+ const DEFAULT_BOOLEAN_OPERATORS = [
22
+ 'eq',
23
+ 'neq',
24
+ 'in',
25
+ 'nin',
26
+ ];
27
+ const DEFAULT_ENUM_OPERATORS = ['eq', 'neq', 'in', 'nin'];
21
28
  export function numberField(ops = DEFAULT_NUMBER_OPERATORS) {
22
29
  return {
23
30
  kind: 'number',
@@ -49,7 +56,53 @@ export function stringField(ops = DEFAULT_STRING_OPERATORS) {
49
56
  },
50
57
  };
51
58
  }
59
+ export function booleanField(ops = DEFAULT_BOOLEAN_OPERATORS) {
60
+ return {
61
+ kind: 'boolean',
62
+ operators: ops,
63
+ parse(raw) {
64
+ const normalized = raw.trim().toLowerCase();
65
+ if (normalized === 'true' || normalized === '1') {
66
+ return true;
67
+ }
68
+ if (normalized === 'false' || normalized === '0') {
69
+ return false;
70
+ }
71
+ return undefined;
72
+ },
73
+ serialize(value) {
74
+ if (value === true) {
75
+ return 'true';
76
+ }
77
+ return 'false';
78
+ },
79
+ };
80
+ }
81
+ export function enumField(values, ops = DEFAULT_ENUM_OPERATORS) {
82
+ const valueSet = new Set(values);
83
+ return {
84
+ kind: 'enum',
85
+ operators: ops,
86
+ parse(raw) {
87
+ if (valueSet.has(raw)) {
88
+ return raw;
89
+ }
90
+ return undefined;
91
+ },
92
+ serialize(value) {
93
+ return String(value);
94
+ },
95
+ };
96
+ }
97
+ export function customField(options) {
98
+ return {
99
+ kind: 'custom',
100
+ operators: options.operators,
101
+ parse: options.parse,
102
+ serialize: options.serialize,
103
+ };
104
+ }
52
105
  export function defineSchema(schema) {
53
106
  return Object.freeze({ ...schema });
54
107
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLHdCQUF3QixHQUF3QjtJQUNwRCxJQUFJO0lBQ0osS0FBSztJQUNMLElBQUk7SUFDSixLQUFLO0lBQ0wsSUFBSTtJQUNKLEtBQUs7SUFDTCxTQUFTO0lBQ1QsSUFBSTtJQUNKLEtBQUs7Q0FDTixDQUFDO0FBQ0YsTUFBTSx3QkFBd0IsR0FBd0I7SUFDcEQsVUFBVTtJQUNWLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxJQUFJO0lBQ0osS0FBSztDQUNOLENBQUM7QUFLRixNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUEyQix3QkFBd0I7SUFFbkQsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLEdBQUc7UUFDZCxLQUFLLENBQUMsR0FBVztZQUNmLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxTQUFTLENBQUMsS0FBYztZQUN0QixPQUFPLE1BQU0sQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQ3VCLENBQUM7QUFDN0IsQ0FBQztBQUtELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTJCLHdCQUF3QjtJQUVuRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFFBQVE7UUFDZCxTQUFTLEVBQUUsR0FBRztRQUNkLEtBQUssQ0FBQyxHQUFXO1lBQ2YsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQWM7WUFDdEIsT0FBTyxNQUFNLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUN1QixDQUFDO0FBQzdCLENBQUM7QUFLRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUFTO0lBRVQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEZpZWxkRGVzY3JpcHRvcixcbiAgTnVtYmVyRmllbGREZXNjcmlwdG9yLFxuICBTdHJpbmdGaWVsZERlc2NyaXB0b3IsXG4gIE9wZXJhdG9yLFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgREVGQVVMVF9OVU1CRVJfT1BFUkFUT1JTOiByZWFkb25seSBPcGVyYXRvcltdID0gW1xuICAnZ3QnLFxuICAnZ3RlJyxcbiAgJ2x0JyxcbiAgJ2x0ZScsXG4gICdlcScsXG4gICduZXEnLFxuICAnYmV0d2VlbicsXG4gICdpbicsXG4gICduaW4nLFxuXTtcbmNvbnN0IERFRkFVTFRfU1RSSU5HX09QRVJBVE9SUzogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IFtcbiAgJ2NvbnRhaW5zJyxcbiAgJ3N3JyxcbiAgJ2V3JyxcbiAgJ2VxJyxcbiAgJ25lcScsXG4gICdpbicsXG4gICduaW4nLFxuXTtcblxuLyoqXG4gKiBDcmVhdGUgYSBudW1lcmljIGZpZWxkIGRlc2NyaXB0b3Igd2l0aCBhIGdpdmVuIG9wZXJhdG9yIHdoaXRlbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG51bWJlckZpZWxkKFxuICBvcHM6IHJlYWRvbmx5IE9wZXJhdG9yW10gPSBERUZBVUxUX05VTUJFUl9PUEVSQVRPUlMsXG4pOiBOdW1iZXJGaWVsZERlc2NyaXB0b3Ige1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdudW1iZXInLFxuICAgIG9wZXJhdG9yczogb3BzLFxuICAgIHBhcnNlKHJhdzogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChyYXcgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBuID0gTnVtYmVyKHJhdyk7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG4pKSB7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIC8vIEFjY2VwdCB1bmtub3duIHRvIHNhdGlzZnkgYmFzZSBpbnRlcmZhY2UgaW50ZXJzZWN0aW9uOyBjYWxsZXIgZW5zdXJlcyB0eXBlIGNvcnJlY3RuZXNzXG4gICAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUgYXMgbnVtYmVyKTtcbiAgICB9LFxuICB9IGFzIE51bWJlckZpZWxkRGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgZmllbGQgZGVzY3JpcHRvciB3aXRoIGEgZ2l2ZW4gb3BlcmF0b3Igd2hpdGVsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRmllbGQoXG4gIG9wczogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IERFRkFVTFRfU1RSSU5HX09QRVJBVE9SUyxcbik6IFN0cmluZ0ZpZWxkRGVzY3JpcHRvciB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3N0cmluZycsXG4gICAgb3BlcmF0b3JzOiBvcHMsXG4gICAgcGFyc2UocmF3OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHJhdztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgfSxcbiAgfSBhcyBTdHJpbmdGaWVsZERlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogRnJlZXplIGFuZCByZXR1cm4gdGhlIHNjaGVtYSAoaW1tdXRhYmlsaXR5IGd1YXJkIGZvciBjb25zdW1lcnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU2NoZW1hPFMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBGaWVsZERlc2NyaXB0b3I+PihcbiAgc2NoZW1hOiBTLFxuKTogUyB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4uc2NoZW1hIH0pO1xufVxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLHdCQUF3QixHQUF3QjtJQUNwRCxJQUFJO0lBQ0osS0FBSztJQUNMLElBQUk7SUFDSixLQUFLO0lBQ0wsSUFBSTtJQUNKLEtBQUs7SUFDTCxTQUFTO0lBQ1QsSUFBSTtJQUNKLEtBQUs7Q0FDTixDQUFDO0FBQ0YsTUFBTSx3QkFBd0IsR0FBd0I7SUFDcEQsVUFBVTtJQUNWLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxJQUFJO0lBQ0osS0FBSztDQUNOLENBQUM7QUFDRixNQUFNLHlCQUF5QixHQUF3QjtJQUNyRCxJQUFJO0lBQ0osS0FBSztJQUNMLElBQUk7SUFDSixLQUFLO0NBQ04sQ0FBQztBQUNGLE1BQU0sc0JBQXNCLEdBQXdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFLL0UsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBMkIsd0JBQXdCO0lBRW5ELE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUTtRQUNkLFNBQVMsRUFBRSxHQUFHO1FBQ2QsS0FBSyxDQUFDLEdBQVc7WUFDZixJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDZixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsU0FBUyxDQUFDLEtBQWM7WUFDdEIsT0FBTyxNQUFNLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUN1QixDQUFDO0FBQzdCLENBQUM7QUFLRCxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUEyQix3QkFBd0I7SUFFbkQsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLEdBQUc7UUFDZCxLQUFLLENBQUMsR0FBVztZQUNmLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELFNBQVMsQ0FBQyxLQUFjO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7S0FDdUIsQ0FBQztBQUM3QixDQUFDO0FBS0QsTUFBTSxVQUFVLFlBQVksQ0FDMUIsTUFBMkIseUJBQXlCO0lBRXBELE9BQU87UUFDTCxJQUFJLEVBQUUsU0FBUztRQUNmLFNBQVMsRUFBRSxHQUFHO1FBQ2QsS0FBSyxDQUFDLEdBQVc7WUFDZixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsSUFBSSxVQUFVLEtBQUssTUFBTSxJQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDaEQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsSUFBSSxVQUFVLEtBQUssT0FBTyxJQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELFNBQVMsQ0FBQyxLQUFjO1lBQ3RCLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztLQUN3QixDQUFDO0FBQzlCLENBQUM7QUFLRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixNQUFvQixFQUNwQixNQUEyQixzQkFBc0I7SUFFakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNO1FBQ1osU0FBUyxFQUFFLEdBQUc7UUFDZCxLQUFLLENBQUMsR0FBVztZQUNmLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLEdBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELFNBQVMsQ0FBQyxLQUFjO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLEtBQVUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7S0FDd0IsQ0FBQztBQUM5QixDQUFDO0FBV0QsTUFBTSxVQUFVLFdBQVcsQ0FDekIsT0FBOEI7SUFFOUIsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7S0FDRCxDQUFDO0FBQ2hDLENBQUM7QUFLRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUFTO0lBRVQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEZpZWxkRGVzY3JpcHRvcixcbiAgTnVtYmVyRmllbGREZXNjcmlwdG9yLFxuICBTdHJpbmdGaWVsZERlc2NyaXB0b3IsXG4gIEJvb2xlYW5GaWVsZERlc2NyaXB0b3IsXG4gIEVudW1GaWVsZERlc2NyaXB0b3IsXG4gIEN1c3RvbUZpZWxkRGVzY3JpcHRvcixcbiAgT3BlcmF0b3IsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBERUZBVUxUX05VTUJFUl9PUEVSQVRPUlM6IHJlYWRvbmx5IE9wZXJhdG9yW10gPSBbXG4gICdndCcsXG4gICdndGUnLFxuICAnbHQnLFxuICAnbHRlJyxcbiAgJ2VxJyxcbiAgJ25lcScsXG4gICdiZXR3ZWVuJyxcbiAgJ2luJyxcbiAgJ25pbicsXG5dO1xuY29uc3QgREVGQVVMVF9TVFJJTkdfT1BFUkFUT1JTOiByZWFkb25seSBPcGVyYXRvcltdID0gW1xuICAnY29udGFpbnMnLFxuICAnc3cnLFxuICAnZXcnLFxuICAnZXEnLFxuICAnbmVxJyxcbiAgJ2luJyxcbiAgJ25pbicsXG5dO1xuY29uc3QgREVGQVVMVF9CT09MRUFOX09QRVJBVE9SUzogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IFtcbiAgJ2VxJyxcbiAgJ25lcScsXG4gICdpbicsXG4gICduaW4nLFxuXTtcbmNvbnN0IERFRkFVTFRfRU5VTV9PUEVSQVRPUlM6IHJlYWRvbmx5IE9wZXJhdG9yW10gPSBbJ2VxJywgJ25lcScsICdpbicsICduaW4nXTtcblxuLyoqXG4gKiBDcmVhdGUgYSBudW1lcmljIGZpZWxkIGRlc2NyaXB0b3Igd2l0aCBhIGdpdmVuIG9wZXJhdG9yIHdoaXRlbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG51bWJlckZpZWxkKFxuICBvcHM6IHJlYWRvbmx5IE9wZXJhdG9yW10gPSBERUZBVUxUX05VTUJFUl9PUEVSQVRPUlMsXG4pOiBOdW1iZXJGaWVsZERlc2NyaXB0b3Ige1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdudW1iZXInLFxuICAgIG9wZXJhdG9yczogb3BzLFxuICAgIHBhcnNlKHJhdzogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChyYXcgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBuID0gTnVtYmVyKHJhdyk7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG4pKSB7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIC8vIEFjY2VwdCB1bmtub3duIHRvIHNhdGlzZnkgYmFzZSBpbnRlcmZhY2UgaW50ZXJzZWN0aW9uOyBjYWxsZXIgZW5zdXJlcyB0eXBlIGNvcnJlY3RuZXNzXG4gICAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUgYXMgbnVtYmVyKTtcbiAgICB9LFxuICB9IGFzIE51bWJlckZpZWxkRGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgZmllbGQgZGVzY3JpcHRvciB3aXRoIGEgZ2l2ZW4gb3BlcmF0b3Igd2hpdGVsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRmllbGQoXG4gIG9wczogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IERFRkFVTFRfU1RSSU5HX09QRVJBVE9SUyxcbik6IFN0cmluZ0ZpZWxkRGVzY3JpcHRvciB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3N0cmluZycsXG4gICAgb3BlcmF0b3JzOiBvcHMsXG4gICAgcGFyc2UocmF3OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHJhdztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgfSxcbiAgfSBhcyBTdHJpbmdGaWVsZERlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYm9vbGVhbiBmaWVsZCBkZXNjcmlwdG9yIHdpdGggYSBnaXZlbiBvcGVyYXRvciB3aGl0ZWxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuRmllbGQoXG4gIG9wczogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IERFRkFVTFRfQk9PTEVBTl9PUEVSQVRPUlMsXG4pOiBCb29sZWFuRmllbGREZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnYm9vbGVhbicsXG4gICAgb3BlcmF0b3JzOiBvcHMsXG4gICAgcGFyc2UocmF3OiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSByYXcudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobm9ybWFsaXplZCA9PT0gJ3RydWUnIHx8IG5vcm1hbGl6ZWQgPT09ICcxJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChub3JtYWxpemVkID09PSAnZmFsc2UnIHx8IG5vcm1hbGl6ZWQgPT09ICcwJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gJ3RydWUnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdmYWxzZSc7XG4gICAgfSxcbiAgfSBhcyBCb29sZWFuRmllbGREZXNjcmlwdG9yO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbnVtIGZpZWxkIGRlc2NyaXB0b3Igd2l0aCBhIGdpdmVuIG9wZXJhdG9yIHdoaXRlbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudW1GaWVsZDxjb25zdCBUIGV4dGVuZHMgc3RyaW5nPihcbiAgdmFsdWVzOiByZWFkb25seSBUW10sXG4gIG9wczogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IERFRkFVTFRfRU5VTV9PUEVSQVRPUlMsXG4pOiBFbnVtRmllbGREZXNjcmlwdG9yPFQ+IHtcbiAgY29uc3QgdmFsdWVTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gIHJldHVybiB7XG4gICAga2luZDogJ2VudW0nLFxuICAgIG9wZXJhdG9yczogb3BzLFxuICAgIHBhcnNlKHJhdzogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAodmFsdWVTZXQuaGFzKHJhdyBhcyBUKSkge1xuICAgICAgICByZXR1cm4gcmF3IGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUgYXMgVCk7XG4gICAgfSxcbiAgfSBhcyBFbnVtRmllbGREZXNjcmlwdG9yPFQ+O1xufVxuXG50eXBlIEN1c3RvbUZpZWxkT3B0aW9uczxUPiA9IHtcbiAgb3BlcmF0b3JzOiByZWFkb25seSBPcGVyYXRvcltdO1xuICBwYXJzZTogKHJhdzogc3RyaW5nKSA9PiBUIHwgdW5kZWZpbmVkO1xuICBzZXJpYWxpemU/OiAodmFsdWU6IFQpID0+IHN0cmluZztcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY3VzdG9tIGZpZWxkIGRlc2NyaXB0b3Igd2l0aCBleHBsaWNpdCBwYXJzZS9zZXJpYWxpemUgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRmllbGQ8VD4oXG4gIG9wdGlvbnM6IEN1c3RvbUZpZWxkT3B0aW9uczxUPixcbik6IEN1c3RvbUZpZWxkRGVzY3JpcHRvcjxUPiB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ2N1c3RvbScsXG4gICAgb3BlcmF0b3JzOiBvcHRpb25zLm9wZXJhdG9ycyxcbiAgICBwYXJzZTogb3B0aW9ucy5wYXJzZSxcbiAgICBzZXJpYWxpemU6IG9wdGlvbnMuc2VyaWFsaXplLFxuICB9IGFzIEN1c3RvbUZpZWxkRGVzY3JpcHRvcjxUPjtcbn1cblxuLyoqXG4gKiBGcmVlemUgYW5kIHJldHVybiB0aGUgc2NoZW1hIChpbW11dGFiaWxpdHkgZ3VhcmQgZm9yIGNvbnN1bWVycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY2hlbWE8UyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIEZpZWxkRGVzY3JpcHRvcj4+KFxuICBzY2hlbWE6IFMsXG4pOiBTIHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5zY2hlbWEgfSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAY,MAAM,YAAY,CAAC;AAiBjE,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,CAAC,GACR,MAAM,CA8DR"}
1
+ {"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,MAAM,EAGP,MAAM,YAAY,CAAC;AAmDpB,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,CAAC,GACR,MAAM,CAkER"}
@@ -3,6 +3,34 @@ function encodeKey(field, op) {
3
3
  return field;
4
4
  return `${field}.${op}`;
5
5
  }
6
+ function serializeScalar(descriptor, value) {
7
+ if (value === undefined) {
8
+ return undefined;
9
+ }
10
+ const isPrimitive = typeof value === 'string' ||
11
+ typeof value === 'number' ||
12
+ typeof value === 'boolean';
13
+ if (isPrimitive) {
14
+ if (descriptor.serialize != null) {
15
+ try {
16
+ return descriptor.serialize(value);
17
+ }
18
+ catch {
19
+ return undefined;
20
+ }
21
+ }
22
+ return String(value);
23
+ }
24
+ if (descriptor.kind === 'custom' && descriptor.serialize != null) {
25
+ try {
26
+ return descriptor.serialize(value);
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ return JSON.stringify(value);
33
+ }
6
34
  export function stringify(filters, schema) {
7
35
  const parts = [];
8
36
  for (const field of Object.keys(schema)) {
@@ -14,21 +42,19 @@ export function stringify(filters, schema) {
14
42
  for (const op of descriptor.operators) {
15
43
  if (op === 'eq') {
16
44
  const scalar = value[op];
17
- if (scalar !== undefined) {
18
- let printable = scalar;
19
- if (typeof printable !== 'string' &&
20
- typeof printable !== 'number') {
21
- printable = JSON.stringify(printable);
22
- }
23
- parts.push(`${encodeKey(field, op)}=${encodeURIComponent(String(printable))}`);
45
+ const printable = serializeScalar(descriptor, scalar);
46
+ if (printable !== undefined) {
47
+ parts.push(`${encodeKey(field, op)}=${encodeURIComponent(printable)}`);
24
48
  }
25
49
  }
26
50
  else if (op === 'between') {
27
51
  const tuple = value.between;
28
52
  if (Array.isArray(tuple) && tuple.length === 2) {
29
- const first = encodeURIComponent(String(tuple[0]));
30
- const second = encodeURIComponent(String(tuple[1]));
31
- parts.push(`${encodeKey(field, op)}=${first},${second}`);
53
+ const first = serializeScalar(descriptor, tuple[0]);
54
+ const second = serializeScalar(descriptor, tuple[1]);
55
+ if (first !== undefined && second !== undefined) {
56
+ parts.push(`${encodeKey(field, op)}=${encodeURIComponent(first)},${encodeURIComponent(second)}`);
57
+ }
32
58
  }
33
59
  }
34
60
  else if (op === 'in' || op === 'nin') {
@@ -36,23 +62,26 @@ export function stringify(filters, schema) {
36
62
  if (Array.isArray(list) && list.length > 0) {
37
63
  const encodedItems = list
38
64
  .map((v) => {
39
- return encodeURIComponent(String(v));
65
+ const printable = serializeScalar(descriptor, v);
66
+ if (printable === undefined) {
67
+ return undefined;
68
+ }
69
+ return encodeURIComponent(printable);
70
+ })
71
+ .filter((item) => {
72
+ return item !== undefined;
40
73
  })
41
74
  .join(',');
42
- parts.push(`${encodeKey(field, op)}=${encodedItems}`);
75
+ if (encodedItems !== '') {
76
+ parts.push(`${encodeKey(field, op)}=${encodedItems}`);
77
+ }
43
78
  }
44
79
  }
45
80
  else {
46
81
  const scalar = value[op];
47
- if (scalar !== undefined) {
48
- let printable;
49
- if (typeof scalar === 'string' || typeof scalar === 'number') {
50
- printable = scalar;
51
- }
52
- else {
53
- printable = JSON.stringify(scalar);
54
- }
55
- parts.push(`${encodeKey(field, op)}=${encodeURIComponent(String(printable))}`);
82
+ const printable = serializeScalar(descriptor, scalar);
83
+ if (printable !== undefined) {
84
+ parts.push(`${encodeKey(field, op)}=${encodeURIComponent(printable)}`);
56
85
  }
57
86
  }
58
87
  }
@@ -60,4 +89,4 @@ export function stringify(filters, schema) {
60
89
  }
61
90
  return parts.join('&');
62
91
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsRUFBWTtJQUM1QyxJQUFJLEVBQUUsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUIsT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBU0QsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBd0IsRUFDeEIsTUFBUztJQUVULE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBZ0IsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBRXRELENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNoQixNQUFNLE1BQU0sR0FBSSxLQUFpQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxTQUFTLEdBQVksTUFBTSxDQUFDO3dCQUNoQyxJQUNFLE9BQU8sU0FBUyxLQUFLLFFBQVE7NEJBQzdCLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFDN0IsQ0FBQzs0QkFDRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDeEMsQ0FBQzt3QkFDRCxLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUNuRSxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxLQUFLLEdBQUksS0FBaUMsQ0FBQyxPQUVwQyxDQUFDO29CQUNkLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxJQUFJLEdBQUksS0FBaUMsQ0FBQyxFQUFFLENBRXJDLENBQUM7b0JBQ2QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUk7NkJBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUNULE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLENBQUMsQ0FBQzs2QkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDeEQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxNQUFNLEdBQUksS0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3pCLElBQUksU0FBa0IsQ0FBQzt3QkFDdkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7NEJBQzdELFNBQVMsR0FBRyxNQUFNLENBQUM7d0JBQ3JCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDckMsQ0FBQzt3QkFDRCxLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUNuRSxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbmZlckZpbHRlcnMsIFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGVuY29kZWQga2V5IHBvcnRpb24gZm9yIGEgZmllbGQvb3BlcmF0b3IgcGFpciAoaW1wbGljaXQgYGVxYCBoYXMgbm8gZG90IHN1ZmZpeCkuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUtleShmaWVsZDogc3RyaW5nLCBvcDogT3BlcmF0b3IpOiBzdHJpbmcge1xuICBpZiAob3AgPT09ICdlcScpIHJldHVybiBmaWVsZDsgLy8gaW1wbGljaXQgZXF1YWxpdHkgZm9ybVxuICByZXR1cm4gYCR7ZmllbGR9LiR7b3B9YDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgZmlsdGVycyBvYmplY3QgaW50byBhIGNhbm9uaWNhbCBxdWVyeSBzdHJpbmcgcmVzcGVjdGluZyB0aGUgc2NoZW1hIG9wZXJhdG9yIG9yZGVyaW5nLlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJzIC0gUGFyc2VkIGZpbHRlcnMgdG8gZW5jb2RlLlxuICogQHBhcmFtIHNjaGVtYSAtIFNjaGVtYSB1c2VkIHRvIGRldGVybWluZSBvcGVyYXRvciBvcmRlcmluZyBhbmQgZm9ybWF0dGluZy5cbiAqIEByZXR1cm5zIFF1ZXJ5IHN0cmluZyB3aXRob3V0IGxlYWRpbmcgcXVlc3Rpb24gbWFyay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeTxTIGV4dGVuZHMgU2NoZW1hPihcbiAgZmlsdGVyczogSW5mZXJGaWx0ZXJzPFM+LFxuICBzY2hlbWE6IFMsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJzW2ZpZWxkIGFzIGtleW9mIFNdO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBzY2hlbWFbZmllbGRdO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2tpcCBhYnNlbnRcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBvcCBvZiBkZXNjcmlwdG9yLm9wZXJhdG9ycykge1xuICAgICAgICBpZiAob3AgPT09ICdlcScpIHtcbiAgICAgICAgICBjb25zdCBzY2FsYXIgPSAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW29wXTtcbiAgICAgICAgICBpZiAoc2NhbGFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBwcmludGFibGU6IHVua25vd24gPSBzY2FsYXI7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiBwcmludGFibGUgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBwcmludGFibGUgIT09ICdudW1iZXInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcHJpbnRhYmxlID0gSlNPTi5zdHJpbmdpZnkocHJpbnRhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICAgICAgIGAke2VuY29kZUtleShmaWVsZCwgb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcocHJpbnRhYmxlKSl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnYmV0d2VlbicpIHtcbiAgICAgICAgICBjb25zdCB0dXBsZSA9ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuYmV0d2VlbiBhc1xuICAgICAgICAgICAgfCB1bmtub3duW11cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR1cGxlKSAmJiB0dXBsZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0dXBsZVswXSkpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0dXBsZVsxXSkpO1xuICAgICAgICAgICAgcGFydHMucHVzaChgJHtlbmNvZGVLZXkoZmllbGQsIG9wKX09JHtmaXJzdH0sJHtzZWNvbmR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnaW4nIHx8IG9wID09PSAnbmluJykge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW29wXSBhc1xuICAgICAgICAgICAgfCB1bmtub3duW11cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEl0ZW1zID0gbGlzdFxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodikpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICAgICAgcGFydHMucHVzaChgJHtlbmNvZGVLZXkoZmllbGQsIG9wKX09JHtlbmNvZGVkSXRlbXN9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNjYWxhciA9ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbb3BdO1xuICAgICAgICAgIGlmIChzY2FsYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHByaW50YWJsZTogdW5rbm93bjtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NhbGFyID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygc2NhbGFyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICBwcmludGFibGUgPSBzY2FsYXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcmludGFibGUgPSBKU09OLnN0cmluZ2lmeShzY2FsYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHMucHVzaChcbiAgICAgICAgICAgICAgYCR7ZW5jb2RlS2V5KGZpZWxkLCBvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhwcmludGFibGUpKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTtcbn1cbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsRUFBWTtJQUM1QyxJQUFJLEVBQUUsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUIsT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBS0QsU0FBUyxlQUFlLENBQ3RCLFVBQTJCLEVBQzNCLEtBQWM7SUFFZCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQ2YsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQztJQUM3QixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQWMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQztZQUNILE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFjLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFD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LElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRSxDQUFDOzRCQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sTUFBTSxHQUFJLEtBQWlDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3RELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM1QixLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUMzRCxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJbmZlckZpbHRlcnMsXG4gIFNjaGVtYSxcbiAgT3BlcmF0b3IsXG4gIEZpZWxkRGVzY3JpcHRvcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBlbmNvZGVkIGtleSBwb3J0aW9uIGZvciBhIGZpZWxkL29wZXJhdG9yIHBhaXIgKGltcGxpY2l0IGBlcWAgaGFzIG5vIGRvdCBzdWZmaXgpLlxuICovXG5mdW5jdGlvbiBlbmNvZGVLZXkoZmllbGQ6IHN0cmluZywgb3A6IE9wZXJhdG9yKTogc3RyaW5nIHtcbiAgaWYgKG9wID09PSAnZXEnKSByZXR1cm4gZmllbGQ7IC8vIGltcGxpY2l0IGVxdWFsaXR5IGZvcm1cbiAgcmV0dXJuIGAke2ZpZWxkfS4ke29wfWA7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIHNjYWxhciB2YWx1ZSB1c2luZyB0aGUgZmllbGQgZGVzY3JpcHRvciB3aGVuIHBvc3NpYmxlLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVTY2FsYXIoXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgdmFsdWU6IHVua25vd24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaXNQcmltaXRpdmUgPVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG4gIGlmIChpc1ByaW1pdGl2ZSkge1xuICAgIGlmIChkZXNjcmlwdG9yLnNlcmlhbGl6ZSAhPSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5zZXJpYWxpemUodmFsdWUgYXMgbmV2ZXIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIGlmIChkZXNjcmlwdG9yLmtpbmQgPT09ICdjdXN0b20nICYmIGRlc2NyaXB0b3Iuc2VyaWFsaXplICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iuc2VyaWFsaXplKHZhbHVlIGFzIG5ldmVyKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIGZpbHRlcnMgb2JqZWN0IGludG8gYSBjYW5vbmljYWwgcXVlcnkgc3RyaW5nIHJlc3BlY3RpbmcgdGhlIHNjaGVtYSBvcGVyYXRvciBvcmRlcmluZy5cbiAqXG4gKiBAcGFyYW0gZmlsdGVycyAtIFBhcnNlZCBmaWx0ZXJzIHRvIGVuY29kZS5cbiAqIEBwYXJhbSBzY2hlbWEgLSBTY2hlbWEgdXNlZCB0byBkZXRlcm1pbmUgb3BlcmF0b3Igb3JkZXJpbmcgYW5kIGZvcm1hdHRpbmcuXG4gKiBAcmV0dXJucyBRdWVyeSBzdHJpbmcgd2l0aG91dCBsZWFkaW5nIHF1ZXN0aW9uIG1hcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnk8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGZpbHRlcnM6IEluZmVyRmlsdGVyczxTPixcbiAgc2NoZW1hOiBTLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyc1tmaWVsZCBhcyBrZXlvZiBTXTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gc2NoZW1hW2ZpZWxkXTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNraXAgYWJzZW50XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qgb3Agb2YgZGVzY3JpcHRvci5vcGVyYXRvcnMpIHtcbiAgICAgICAgaWYgKG9wID09PSAnZXEnKSB7XG4gICAgICAgICAgY29uc3Qgc2NhbGFyID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtvcF07XG4gICAgICAgICAgY29uc3QgcHJpbnRhYmxlID0gc2VyaWFsaXplU2NhbGFyKGRlc2NyaXB0b3IsIHNjYWxhcik7XG4gICAgICAgICAgaWYgKHByaW50YWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICAgICAgICBgJHtlbmNvZGVLZXkoZmllbGQsIG9wKX09JHtlbmNvZGVVUklDb21wb25lbnQocHJpbnRhYmxlKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdiZXR3ZWVuJykge1xuICAgICAgICAgIGNvbnN0IHR1cGxlID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5iZXR3ZWVuIGFzXG4gICAgICAgICAgICB8IHVua25vd25bXVxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHVwbGUpICYmIHR1cGxlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBzZXJpYWxpemVTY2FsYXIoZGVzY3JpcHRvciwgdHVwbGVbMF0pO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gc2VyaWFsaXplU2NhbGFyKGRlc2NyaXB0b3IsIHR1cGxlWzFdKTtcbiAgICAgICAgICAgIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkICYmIHNlY29uZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICAgICAgICAgYCR7ZW5jb2RlS2V5KGZpZWxkLCBvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgZmlyc3QsXG4gICAgICAgICAgICAgICAgKX0sJHtlbmNvZGVVUklDb21wb25lbnQoc2Vjb25kKX1gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2luJyB8fCBvcCA9PT0gJ25pbicpIHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtvcF0gYXNcbiAgICAgICAgICAgIHwgdW5rbm93bltdXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRJdGVtcyA9IGxpc3RcbiAgICAgICAgICAgICAgLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW50YWJsZSA9IHNlcmlhbGl6ZVNjYWxhcihkZXNjcmlwdG9yLCB2KTtcbiAgICAgICAgICAgICAgICBpZiAocHJpbnRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQocHJpbnRhYmxlKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICAgICAgaWYgKGVuY29kZWRJdGVtcyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgcGFydHMucHVzaChgJHtlbmNvZGVLZXkoZmllbGQsIG9wKX09JHtlbmNvZGVkSXRlbXN9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNjYWxhciA9ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbb3BdO1xuICAgICAgICAgIGNvbnN0IHByaW50YWJsZSA9IHNlcmlhbGl6ZVNjYWxhcihkZXNjcmlwdG9yLCBzY2FsYXIpO1xuICAgICAgICAgIGlmIChwcmludGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFydHMucHVzaChcbiAgICAgICAgICAgICAgYCR7ZW5jb2RlS2V5KGZpZWxkLCBvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHByaW50YWJsZSl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKCcmJyk7XG59XG4iXX0=
@@ -3,33 +3,31 @@ export type ScalarOperator = 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'neq' | 'conta
3
3
  export type BetweenOperator = 'between';
4
4
  export type ListOperator = 'in' | 'nin';
5
5
  export type Operator = ScalarOperator | BetweenOperator | ListOperator;
6
- export type PrimitiveKind = 'number' | 'string';
7
- export interface FieldDescriptorBase<TKind extends PrimitiveKind> {
6
+ export type PrimitiveKind = 'number' | 'string' | 'boolean' | 'enum' | 'custom';
7
+ export interface FieldDescriptorBase<TKind extends PrimitiveKind, TValue> {
8
8
  readonly kind: TKind;
9
9
  readonly operators: readonly Operator[];
10
- readonly parse?: (raw: string) => unknown;
11
- readonly serialize?: (value: unknown) => string;
10
+ readonly parse?: (raw: string) => TValue | undefined;
11
+ readonly serialize?: (value: TValue) => string;
12
12
  }
13
- export type NumberFieldDescriptor = FieldDescriptorBase<'number'> & {
14
- readonly parse?: (raw: string) => number | undefined;
15
- readonly serialize?: (value: number) => string;
16
- };
17
- export type StringFieldDescriptor = FieldDescriptorBase<'string'> & {
18
- readonly parse?: (raw: string) => string | undefined;
19
- readonly serialize?: (value: string) => string;
20
- };
21
- export type FieldDescriptor = NumberFieldDescriptor | StringFieldDescriptor;
13
+ export type NumberFieldDescriptor = FieldDescriptorBase<'number', number>;
14
+ export type StringFieldDescriptor = FieldDescriptorBase<'string', string>;
15
+ export type BooleanFieldDescriptor = FieldDescriptorBase<'boolean', boolean>;
16
+ export type EnumFieldDescriptor<T extends string> = FieldDescriptorBase<'enum', T>;
17
+ export type CustomFieldDescriptor<T> = FieldDescriptorBase<'custom', T>;
18
+ export type FieldDescriptor = NumberFieldDescriptor | StringFieldDescriptor | BooleanFieldDescriptor | EnumFieldDescriptor<string> | CustomFieldDescriptor<unknown>;
22
19
  export type Schema = Readonly<Record<string, FieldDescriptor>>;
23
20
  type OperatorKeys<D extends FieldDescriptor> = Extract<D['operators'][number], ScalarOperator>;
24
- type ScalarMap<D extends FieldDescriptor> = D extends FieldDescriptorBase<'number'> ? Record<OperatorKeys<D>, number | undefined> : Record<OperatorKeys<D>, string | undefined>;
21
+ type FieldValue<D extends FieldDescriptor> = D extends FieldDescriptorBase<PrimitiveKind, infer TValue> ? TValue : never;
22
+ type ScalarMap<D extends FieldDescriptor> = Record<OperatorKeys<D>, FieldValue<D> | undefined>;
25
23
  type BetweenMap<D extends FieldDescriptor> = 'between' extends D['operators'][number] ? {
26
- between?: D extends FieldDescriptorBase<'number'> ? readonly [number, number] : readonly [string, string];
24
+ between?: readonly [FieldValue<D>, FieldValue<D>];
27
25
  } : Record<never, never>;
28
26
  type ListOps<D extends FieldDescriptor> = Extract<D['operators'][number], ListOperator>;
29
27
  type ListMap<D extends FieldDescriptor> = ('in' extends ListOps<D> ? {
30
- in?: D extends FieldDescriptorBase<'number'> ? readonly number[] : readonly string[];
28
+ in?: readonly FieldValue<D>[];
31
29
  } : Record<never, never>) & ('nin' extends ListOps<D> ? {
32
- nin?: D extends FieldDescriptorBase<'number'> ? readonly number[] : readonly string[];
30
+ nin?: readonly FieldValue<D>[];
33
31
  } : Record<never, never>);
34
32
  export type InferField<D extends FieldDescriptor> = Partial<ScalarMap<D> & BetweenMap<D> & ListMap<D>>;
35
33
  export type InferFilters<S extends Schema> = {
@@ -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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"}