angular-odata 0.95.0 → 0.99.0

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.
Files changed (32) hide show
  1. package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
  2. package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
  3. package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
  4. package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
  5. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  6. package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
  7. package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
  8. package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
  9. package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
  10. package/esm2020/lib/resources/query/handlers.mjs +16 -14
  11. package/esm2020/lib/resources/query/options.mjs +2 -2
  12. package/esm2020/lib/resources/resource.mjs +2 -2
  13. package/esm2020/lib/resources/types/batch.mjs +31 -10
  14. package/fesm2015/angular-odata.mjs +359 -123
  15. package/fesm2015/angular-odata.mjs.map +1 -1
  16. package/fesm2020/angular-odata.mjs +359 -123
  17. package/fesm2020/angular-odata.mjs.map +1 -1
  18. package/lib/resources/query/expressions/base.d.ts +19 -0
  19. package/lib/resources/query/expressions/compute.d.ts +26 -0
  20. package/lib/resources/query/expressions/expand.d.ts +40 -0
  21. package/lib/resources/query/expressions/filter.d.ts +58 -0
  22. package/lib/resources/query/expressions/index.d.ts +6 -0
  23. package/lib/resources/query/expressions/orderby.d.ts +37 -0
  24. package/lib/resources/query/expressions/search.d.ts +47 -0
  25. package/lib/resources/query/expressions/select.d.ts +21 -0
  26. package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +8 -6
  27. package/lib/resources/query/handlers.d.ts +24 -9
  28. package/lib/resources/types/batch.d.ts +9 -0
  29. package/package.json +1 -1
  30. package/esm2020/lib/resources/query/expressions.mjs +0 -207
  31. package/esm2020/lib/resources/query/syntax.mjs +0 -406
  32. package/lib/resources/query/expressions.d.ts +0 -63
@@ -1,406 +0,0 @@
1
- import { normalizeValue } from './builder';
2
- //export type Field<T> = keyof T | Funcs<keyof T>;
3
- export class Field {
4
- constructor(name = '') {
5
- this.name = name;
6
- }
7
- static factory() {
8
- const h = new Field();
9
- return new Proxy({ _name: '' }, h);
10
- }
11
- get(target, p) {
12
- let name = target['_name'];
13
- if (p === 'render') {
14
- return ({ prefix }) => prefix ? `${prefix}/${name}` : name;
15
- }
16
- name = name ? `${name}/${p}` : p;
17
- return new Proxy({ _name: name }, this);
18
- }
19
- }
20
- function applyMixins(derivedCtor, constructors) {
21
- constructors.forEach((baseCtor) => {
22
- Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
23
- Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
24
- Object.create(null));
25
- });
26
- });
27
- }
28
- function render(value, { aliases, normalize, escape, prefix, } = {}) {
29
- if (typeof value === 'function') {
30
- return render(value(syntax), { aliases, normalize, prefix });
31
- }
32
- if (typeof value === 'object' &&
33
- value !== null &&
34
- value.render !== undefined) {
35
- return render(value.render({ aliases, escape, prefix }), {
36
- aliases,
37
- normalize,
38
- escape,
39
- prefix,
40
- });
41
- }
42
- return normalize ? normalizeValue(value, { aliases, escape }) : value;
43
- }
44
- export class Function {
45
- constructor(name, values, normalize = true, escape = false) {
46
- this.name = name;
47
- this.values = values;
48
- this.normalize = normalize;
49
- this.escape = escape;
50
- }
51
- get [Symbol.toStringTag]() {
52
- return 'Function';
53
- }
54
- toJSON() {
55
- return {
56
- name: this.name,
57
- values: this.values,
58
- normalize: this.normalize,
59
- };
60
- }
61
- render({ aliases, escape, prefix, }) {
62
- let [field, ...values] = this.values;
63
- field = render(field, { aliases, escape, prefix });
64
- let params = [
65
- field,
66
- ...values.map((v) => render(v, { aliases, escape, prefix, normalize: this.normalize })),
67
- ];
68
- return `${this.name}(${params.join(', ')})`;
69
- }
70
- }
71
- export class StringAndCollectionFunctions {
72
- concat(field, value, normalize) {
73
- return new Function('concat', [field, value], normalize);
74
- }
75
- contains(field, value, normalize) {
76
- return new Function('contains', [field, value], normalize);
77
- }
78
- endsWith(field, value, normalize) {
79
- return new Function('endswith', [field, value], normalize);
80
- }
81
- indexOf(field, value, normalize) {
82
- return new Function('indexof', [field, value], normalize);
83
- }
84
- length(value, normalize) {
85
- return new Function('length', [value], normalize);
86
- }
87
- startsWith(field, value, normalize) {
88
- return new Function('startswith', [field, value], normalize);
89
- }
90
- subString(field, start, length) {
91
- let values = [field, start];
92
- if (length !== undefined) {
93
- values.push(length);
94
- }
95
- return new Function('substring', values);
96
- }
97
- }
98
- export class CollectionFunctions {
99
- hasSubset(s1, s2) {
100
- return new Function('hassubset', [s1, s2]);
101
- }
102
- hasSubsequence(s1, s2) {
103
- return new Function('hassubsequence', [s1, s2]);
104
- }
105
- }
106
- export class StringFunctions {
107
- matchesPattern(value, pattern) {
108
- return new Function('matchesPattern', [value, pattern]);
109
- }
110
- toLower(value) {
111
- return new Function('tolower', [value]);
112
- }
113
- toUpper(value) {
114
- return new Function('toupper', [value]);
115
- }
116
- trim(value) {
117
- return new Function('trim', [value]);
118
- }
119
- }
120
- export class DateAndTimeFunctions {
121
- date(value) {
122
- return new Function('date', [value]);
123
- }
124
- day(value) {
125
- return new Function('day', [value]);
126
- }
127
- fractionalseconds(value) {
128
- return new Function('fractionalseconds', [value]);
129
- }
130
- hour(value) {
131
- return new Function('hour', [value]);
132
- }
133
- maxdatetime(value) {
134
- return new Function('maxdatetime', [value]);
135
- }
136
- mindatetime(value) {
137
- return new Function('mindatetime', [value]);
138
- }
139
- minute(value) {
140
- return new Function('minute', [value]);
141
- }
142
- month(value) {
143
- return new Function('month', [value]);
144
- }
145
- now() {
146
- return new Function('now', []);
147
- }
148
- second(value) {
149
- return new Function('second', [value]);
150
- }
151
- time(value) {
152
- return new Function('time', [value]);
153
- }
154
- totaloffsetminutes(value) {
155
- return new Function('totaloffsetminutes', [value]);
156
- }
157
- totalseconds(value) {
158
- return new Function('totalseconds', [value]);
159
- }
160
- year(value) {
161
- return new Function('year', [value]);
162
- }
163
- }
164
- export class ArithmeticFunctions {
165
- ceiling(value) {
166
- return new Function('ceiling', [value]);
167
- }
168
- floor(value) {
169
- return new Function('floor', [value]);
170
- }
171
- round(value) {
172
- return new Function('round', [value]);
173
- }
174
- }
175
- export class TypeFunctions {
176
- cast(value, type) {
177
- return new Function('cast', [value, type]);
178
- }
179
- isof(value, type) {
180
- return new Function('isof', [value, type]);
181
- }
182
- }
183
- export class GeoFunctions {
184
- geoDistance(value, point, normalize) {
185
- return new Function('geo.distance', [value, point], normalize);
186
- }
187
- geoIntersects(value, polygon, normalize) {
188
- return new Function('geo.intersects', [value, polygon], normalize);
189
- }
190
- geoLength(line, normalize) {
191
- return new Function('geo.length', [line], normalize);
192
- }
193
- }
194
- export class ConditionalFunctions {
195
- case(condition, value) {
196
- return new Function('case', [condition, value]);
197
- }
198
- }
199
- export class Operator {
200
- constructor(op, values, normalize = true) {
201
- this.op = op;
202
- this.values = values;
203
- this.normalize = normalize;
204
- }
205
- get [Symbol.toStringTag]() {
206
- return 'Operator';
207
- }
208
- toJSON() {
209
- return {
210
- op: this.op,
211
- values: this.values,
212
- normalize: this.normalize,
213
- };
214
- }
215
- render({ aliases, escape, prefix, }) {
216
- let [left, right] = this.values;
217
- left = render(left, { aliases, escape, prefix });
218
- if (right !== undefined) {
219
- right = Array.isArray(right)
220
- ? `(${right
221
- .map((v) => render(v, {
222
- aliases,
223
- escape,
224
- prefix,
225
- normalize: this.normalize,
226
- }))
227
- .join(',')})`
228
- : render(right, {
229
- aliases,
230
- escape,
231
- prefix,
232
- normalize: this.normalize,
233
- });
234
- return `${left} ${this.op} ${right}`;
235
- }
236
- return `${this.op}(${left})`;
237
- }
238
- }
239
- export class LogicalOperators {
240
- eq(left, right, normalize) {
241
- return new Operator('eq', [left, right], normalize);
242
- }
243
- ne(left, right, normalize) {
244
- return new Operator('ne', [left, right], normalize);
245
- }
246
- gt(left, right, normalize) {
247
- return new Operator('gt', [left, right], normalize);
248
- }
249
- ge(left, right, normalize) {
250
- return new Operator('ge', [left, right], normalize);
251
- }
252
- lt(left, right, normalize) {
253
- return new Operator('lt', [left, right], normalize);
254
- }
255
- le(left, right, normalize) {
256
- return new Operator('le', [left, right], normalize);
257
- }
258
- /*
259
- and(left: any, right: any, normalize?: boolean) {
260
- return new Operator('and', [left, right], normalize);
261
- }
262
- or(left: any, right: any, normalize?: boolean) {
263
- return new Operator('or', [left, right], normalize);
264
- }
265
- */
266
- not(value, normalize) {
267
- return new Operator('not', [value], normalize);
268
- }
269
- has(left, right, normalize) {
270
- return new Operator('has', [left, right], normalize);
271
- }
272
- in(left, right, normalize) {
273
- return new Operator('in', [left, right], normalize);
274
- }
275
- }
276
- export class ArithmeticOperators {
277
- add(left, right, normalize) {
278
- return new Operator('add', [left, right], normalize);
279
- }
280
- sub(left, right, normalize) {
281
- return new Operator('sub', [left, right], normalize);
282
- }
283
- mul(left, right, normalize) {
284
- return new Operator('mul', [left, right], normalize);
285
- }
286
- div(left, right, normalize) {
287
- return new Operator('div', [left, right], normalize);
288
- }
289
- mod(left, right, normalize) {
290
- return new Operator('mod', [left, right], normalize);
291
- }
292
- neg(value, normalize) {
293
- return new Operator('-', [value], normalize);
294
- }
295
- }
296
- export class Grouping {
297
- constructor(group) {
298
- this.group = group;
299
- }
300
- get [Symbol.toStringTag]() {
301
- return 'Grouping';
302
- }
303
- toJSON() {
304
- return {
305
- group: this.group.toJSON(),
306
- };
307
- }
308
- render({ aliases, escape, prefix, }) {
309
- return `(${render(this.group, { aliases, escape, prefix })})`;
310
- }
311
- }
312
- /*
313
- export class Navigation<T, N> implements Renderable {
314
- constructor(protected field: T, protected value: Field<N>) {}
315
-
316
- get [Symbol.toStringTag]() {
317
- return 'Navigation';
318
- }
319
-
320
- toJSON() {
321
- return {
322
- field: this.field,
323
- value: this.value,
324
- };
325
- }
326
-
327
- render({
328
- aliases,
329
- escape,
330
- prefix,
331
- }: {
332
- aliases?: QueryCustomType[];
333
- escape?: boolean;
334
- prefix?: string;
335
- }): string {
336
- return `${this.field}/${render(this.value, { aliases, escape, prefix })}`;
337
- }
338
- }
339
- */
340
- export class GroupingOperators {
341
- grouping(value) {
342
- return new Grouping(value);
343
- }
344
- }
345
- export class Lambda {
346
- constructor(op, values, alias) {
347
- this.op = op;
348
- this.values = values;
349
- this.alias = alias;
350
- }
351
- get [Symbol.toStringTag]() {
352
- return 'Lambda';
353
- }
354
- toJSON() {
355
- return {
356
- op: this.op,
357
- values: this.values,
358
- alias: this.alias,
359
- };
360
- }
361
- render({ aliases, escape, prefix, }) {
362
- let [left, right] = this.values;
363
- left = render(left, { aliases, escape, prefix });
364
- let alias = this.alias || left.split('/').pop().toLowerCase()[0];
365
- return `${left}/${this.op}(${alias}:${render(right, {
366
- aliases,
367
- escape,
368
- prefix: alias,
369
- })})`;
370
- }
371
- }
372
- export class LambdaOperators {
373
- any(field, value, alias) {
374
- return new Lambda('any', [field, value], alias);
375
- }
376
- all(field, value, alias) {
377
- return new Lambda('all', [field, value], alias);
378
- }
379
- }
380
- export class ODataOperators {
381
- }
382
- applyMixins(ODataOperators, [
383
- LogicalOperators,
384
- ArithmeticOperators,
385
- GroupingOperators,
386
- LambdaOperators,
387
- ]);
388
- export const operators = new ODataOperators();
389
- export class ODataFunctions {
390
- }
391
- applyMixins(ODataFunctions, [
392
- StringAndCollectionFunctions,
393
- CollectionFunctions,
394
- StringFunctions,
395
- DateAndTimeFunctions,
396
- ArithmeticFunctions,
397
- TypeFunctions,
398
- GeoFunctions,
399
- ConditionalFunctions,
400
- ]);
401
- export const functions = new ODataFunctions();
402
- export class ODataSyntax {
403
- }
404
- applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
405
- export const syntax = new ODataSyntax();
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQW1CM0Msa0RBQWtEO0FBRWxELE1BQU0sT0FBTyxLQUFLO0lBQ2hCLFlBQW1CLE9BQWUsRUFBRTtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO0lBQUcsQ0FBQztJQUV4QyxNQUFNLENBQUMsT0FBTztRQUNaLE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFLLENBQUM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQVMsRUFBRSxDQUFrQjtRQUMvQixJQUFJLElBQUksR0FBSSxNQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBdUIsRUFBRSxFQUFFLENBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUN2QztRQUNELElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFdBQVcsQ0FBQyxXQUFnQixFQUFFLFlBQW1CO0lBQ3hELFlBQVksQ0FBQyxPQUFPLENB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QjtJQUM1QixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLFlBQVk7SUFDWixvQkFBb0I7Q0FDckIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF3QixJQUFJLGNBQWMsRUFBTyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxXQUFXO0NBQU07QUFFOUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBcUIsSUFBSSxXQUFXLEVBQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZhbHVlIH0gZnJvbSAnLi9idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJhYmxlIHtcbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmc7XG4gIHRvU3RyaW5nKCk6IHN0cmluZztcbiAgdG9KU09OKCk6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgRnVuY3M8VD4gPSAoXG4gIHg6IE9EYXRhU3ludGF4PFQ+XG4pID0+IEZ1bmN0aW9uPFQ+IHwgT3BlcmF0b3I8VD4gfCBHcm91cGluZzxUPjtcbi8vZXhwb3J0IHR5cGUgRmllbGQ8VD4gPSBrZXlvZiBUIHwgRnVuY3M8a2V5b2YgVD47XG5cbmV4cG9ydCBjbGFzcyBGaWVsZDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAnJykge31cblxuICBzdGF0aWMgZmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0PigpIHtcbiAgICBjb25zdCBoID0gbmV3IEZpZWxkPFQ+KCk7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7IF9uYW1lOiAnJyB9IGFzIFQsIGgpO1xuICB9XG5cbiAgZ2V0KHRhcmdldDogVCwgcDogc3RyaW5nIHwgc3ltYm9sKTogYW55IHtcbiAgICBsZXQgbmFtZSA9ICh0YXJnZXQgYXMgYW55KVsnX25hbWUnXTtcbiAgICBpZiAocCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgIHJldHVybiAoeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgcHJlZml4ID8gYCR7cHJlZml4fS8ke25hbWV9YCA6IG5hbWU7XG4gICAgfVxuICAgIG5hbWUgPSBuYW1lID8gYCR7bmFtZX0vJHtwIGFzIHN0cmluZ31gIDogcDtcbiAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBhbnksIHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgbm9ybWFsaXplLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIHsgYWxpYXNlcywgbm9ybWFsaXplLCBwcmVmaXggfSk7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHZhbHVlLnJlbmRlciAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiByZW5kZXIodmFsdWUucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSksIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBub3JtYWxpemUsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSA6IHZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwcm90ZWN0ZWQgZXNjYXBlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2ZpZWxkLCAuLi52YWx1ZXNdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBmaWVsZCA9IHJlbmRlcihmaWVsZCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KTtcbiAgICBsZXQgcGFyYW1zID0gW1xuICAgICAgZmllbGQsXG4gICAgICAuLi52YWx1ZXMubWFwKCh2KSA9PlxuICAgICAgICByZW5kZXIodiwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSB9KVxuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9KCR7cGFyYW1zLmpvaW4oJywgJyl9KWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBjb25jYXQoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbmNhdCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgY29udGFpbnMoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbnRhaW5zJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBlbmRzV2l0aChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZW5kc3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGluZGV4T2YoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2luZGV4b2YnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGxlbmd0aCh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbGVuZ3RoJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN0YXJ0c1dpdGgoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N0YXJ0c3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN1YlN0cmluZyhmaWVsZDogYW55LCBzdGFydDogbnVtYmVyLCBsZW5ndGg/OiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzID0gW2ZpZWxkLCBzdGFydF07XG4gICAgaWYgKGxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZXMucHVzaChsZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzdWJzdHJpbmcnLCB2YWx1ZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgaGFzU3Vic2V0KHMxOiBULCBzMjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaGFzc3Vic2V0JywgW3MxLCBzMl0pO1xuICB9XG4gIGhhc1N1YnNlcXVlbmNlKHMxOiBULCBzMjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaGFzc3Vic2VxdWVuY2UnLCBbczEsIHMyXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0Z1bmN0aW9uczxUPiB7XG4gIG1hdGNoZXNQYXR0ZXJuKHZhbHVlOiBUIHwgc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtYXRjaGVzUGF0dGVybicsIFt2YWx1ZSwgcGF0dGVybl0pO1xuICB9XG4gIHRvTG93ZXIodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b2xvd2VyJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG9VcHBlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdXBwZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0cmltKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndHJpbScsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPiB7XG4gIGRhdGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RhdGUnLCBbdmFsdWVdKTtcbiAgfVxuICBkYXkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RheScsIFt2YWx1ZV0pO1xuICB9XG4gIGZyYWN0aW9uYWxzZWNvbmRzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmcmFjdGlvbmFsc2Vjb25kcycsIFt2YWx1ZV0pO1xuICB9XG4gIGhvdXIodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hvdXInLCBbdmFsdWVdKTtcbiAgfVxuICBtYXhkYXRldGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF4ZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW5kYXRldGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWluZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW51dGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbnV0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1vbnRoKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtb250aCcsIFt2YWx1ZV0pO1xuICB9XG4gIG5vdygpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdub3cnLCBbXSk7XG4gIH1cbiAgc2Vjb25kKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzZWNvbmQnLCBbdmFsdWVdKTtcbiAgfVxuICB0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG90YWxvZmZzZXRtaW51dGVzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbG9mZnNldG1pbnV0ZXMnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbHNlY29uZHModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsc2Vjb25kcycsIFt2YWx1ZV0pO1xuICB9XG4gIHllYXIodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3llYXInLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPiB7XG4gIGNlaWxpbmcodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjZWlsaW5nJywgW3ZhbHVlXSk7XG4gIH1cbiAgZmxvb3IodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmbG9vcicsIFt2YWx1ZV0pO1xuICB9XG4gIHJvdW5kKHZhbHVlOiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigncm91bmQnLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZUZ1bmN0aW9uczxUPiB7XG4gIGNhc3QodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXN0JywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cblxuICBpc29mKHZhbHVlOiBUIHwgc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaXNvZicsIFt2YWx1ZSwgdHlwZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW9GdW5jdGlvbnM8VD4ge1xuICBnZW9EaXN0YW5jZSh2YWx1ZTogVCwgcG9pbnQ6IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5kaXN0YW5jZScsIFt2YWx1ZSwgcG9pbnRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0ludGVyc2VjdHModmFsdWU6IFQsIHBvbHlnb246IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5pbnRlcnNlY3RzJywgW3ZhbHVlLCBwb2x5Z29uXSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9MZW5ndGgobGluZTogVCwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5sZW5ndGgnLCBbbGluZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHtcbiAgY2FzZShjb25kaXRpb246IFQgfCBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXNlJywgW2NvbmRpdGlvbiwgdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9wOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWVcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ09wZXJhdG9yJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSk7XG4gICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJpZ2h0ID0gQXJyYXkuaXNBcnJheShyaWdodClcbiAgICAgICAgPyBgKCR7cmlnaHRcbiAgICAgICAgICAgIC5tYXAoKHYpID0+XG4gICAgICAgICAgICAgIHJlbmRlcih2LCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignLCcpfSlgXG4gICAgICAgIDogcmVuZGVyKHJpZ2h0LCB7XG4gICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBgJHtsZWZ0fSAke3RoaXMub3B9ICR7cmlnaHR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMub3B9KCR7bGVmdH0pYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbE9wZXJhdG9yczxUPiB7XG4gIGVxKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2VxJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBuZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCduZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ3QobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZ3QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2dlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBsdChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdsdCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbGUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbGUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIC8qXG4gIGFuZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdhbmQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG9yKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ29yJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAqL1xuICBub3QodmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ25vdCcsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaGFzKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2hhcycsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaW4obGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignaW4nLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljT3BlcmF0b3JzPFQ+IHtcbiAgYWRkKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ2FkZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgc3ViKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ3N1YicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbXVsKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ211bCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZGl2KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2RpdicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbW9kKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ21vZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmVnKHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCctJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JvdXBpbmc8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGdyb3VwOiBSZW5kZXJhYmxlKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0dyb3VwaW5nJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pfSlgO1xuICB9XG59XG5cbi8qXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbjxULCBOPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZmllbGQ6IFQsIHByb3RlY3RlZCB2YWx1ZTogRmllbGQ8Tj4pIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTmF2aWdhdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5maWVsZH0vJHtyZW5kZXIodGhpcy52YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KX1gO1xuICB9XG59XG4qL1xuXG5leHBvcnQgY2xhc3MgR3JvdXBpbmdPcGVyYXRvcnM8VD4ge1xuICBncm91cGluZyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cGluZyh2YWx1ZSk7XG4gIH1cblxuICAvKlxuICBuYXZpZ2F0aW9uPE4+KGZpZWxkOiBULCB2YWx1ZTogRmllbGQ8Tj4pIHtcbiAgICByZXR1cm4gbmV3IE5hdmlnYXRpb248VCwgTj4oZmllbGQsIHZhbHVlKTtcbiAgfVxuICAqL1xufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBhbGlhcz86IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgYWxpYXM6IHRoaXMuYWxpYXMsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGxldCBhbGlhcyA9IHRoaXMuYWxpYXMgfHwgbGVmdC5zcGxpdCgnLycpLnBvcCgpLnRvTG93ZXJDYXNlKClbMF07XG4gICAgcmV0dXJuIGAke2xlZnR9LyR7dGhpcy5vcH0oJHthbGlhc306JHtyZW5kZXIocmlnaHQsIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXg6IGFsaWFzLFxuICAgIH0pfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPcGVyYXRvcnM8VD4ge1xuICBhbnkoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FueScsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cblxuICBhbGwoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FsbCcsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhT3BlcmF0b3JzPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhT3BlcmF0b3JzPFQ+XG4gIGV4dGVuZHMgTG9naWNhbE9wZXJhdG9yczxUPixcbiAgICBBcml0aG1ldGljT3BlcmF0b3JzPFQ+LFxuICAgIEdyb3VwaW5nT3BlcmF0b3JzPFQ+LFxuICAgIExhbWJkYU9wZXJhdG9yczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YU9wZXJhdG9ycywgW1xuICBMb2dpY2FsT3BlcmF0b3JzLFxuICBBcml0aG1ldGljT3BlcmF0b3JzLFxuICBHcm91cGluZ09wZXJhdG9ycyxcbiAgTGFtYmRhT3BlcmF0b3JzLFxuXSk7XG5leHBvcnQgY29uc3Qgb3BlcmF0b3JzOiBPRGF0YU9wZXJhdG9yczxhbnk+ID0gbmV3IE9EYXRhT3BlcmF0b3JzPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhRnVuY3Rpb25zPFQ+XG4gIGV4dGVuZHMgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIFN0cmluZ0Z1bmN0aW9uczxUPixcbiAgICBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPixcbiAgICBBcml0aG1ldGljRnVuY3Rpb25zPFQ+LFxuICAgIFR5cGVGdW5jdGlvbnM8VD4sXG4gICAgR2VvRnVuY3Rpb25zPFQ+LFxuICAgIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHt9XG5cbmFwcGx5TWl4aW5zKE9EYXRhRnVuY3Rpb25zLCBbXG4gIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIFN0cmluZ0Z1bmN0aW9ucyxcbiAgRGF0ZUFuZFRpbWVGdW5jdGlvbnMsXG4gIEFyaXRobWV0aWNGdW5jdGlvbnMsXG4gIFR5cGVGdW5jdGlvbnMsXG4gIEdlb0Z1bmN0aW9ucyxcbiAgQ29uZGl0aW9uYWxGdW5jdGlvbnMsXG5dKTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvbnM6IE9EYXRhRnVuY3Rpb25zPGFueT4gPSBuZXcgT0RhdGFGdW5jdGlvbnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFTeW50YXg8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFTeW50YXg8VD4gZXh0ZW5kcyBPRGF0YU9wZXJhdG9yczxUPiwgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmFwcGx5TWl4aW5zKE9EYXRhU3ludGF4LCBbT0RhdGFPcGVyYXRvcnMsIE9EYXRhRnVuY3Rpb25zXSk7XG5cbmV4cG9ydCBjb25zdCBzeW50YXg6IE9EYXRhU3ludGF4PGFueT4gPSBuZXcgT0RhdGFTeW50YXg8YW55PigpO1xuIl19
@@ -1,63 +0,0 @@
1
- import type { QueryCustomType } from './builder';
2
- import { ODataFunctions, ODataOperators, Renderable } from './syntax';
3
- export declare type Connector = 'and' | 'or';
4
- export declare class Expression<T> implements Renderable {
5
- private _connector;
6
- private _negated;
7
- private _children;
8
- constructor({ children, connector, negated, }?: {
9
- children?: Renderable[];
10
- connector?: Connector;
11
- negated?: boolean;
12
- });
13
- get [Symbol.toStringTag](): string;
14
- static s<T extends object>(): T;
15
- static e<T>(connector?: Connector): Expression<T>;
16
- static o<T>(): ODataOperators<T>;
17
- static f<T>(): ODataFunctions<T>;
18
- static filter<T extends object>(opts: (e: {
19
- s: T;
20
- e: (connector?: Connector) => Expression<T>;
21
- o: ODataOperators<T>;
22
- f: ODataFunctions<T>;
23
- }) => Expression<T>): Expression<T>;
24
- toJSON(): {
25
- children: any[];
26
- connector: Connector;
27
- negated: boolean;
28
- };
29
- children(): Renderable[];
30
- connector(): Connector;
31
- negated(): boolean;
32
- length(): number;
33
- render({ aliases, escape, prefix, }?: {
34
- aliases?: QueryCustomType[];
35
- escape?: boolean;
36
- prefix?: string;
37
- }): string;
38
- private _add;
39
- or(exp: Expression<T>): Expression<T>;
40
- and(exp: Expression<T>): Expression<T>;
41
- not(exp: Expression<T>): Expression<T>;
42
- eq(left: any, right: any, normalize?: boolean): Expression<T>;
43
- ne(left: any, right: any, normalize?: boolean): Expression<T>;
44
- gt(left: any, right: any, normalize?: boolean): Expression<T>;
45
- ge(left: any, right: any, normalize?: boolean): Expression<T>;
46
- lt(left: any, right: any, normalize?: boolean): Expression<T>;
47
- le(left: any, right: any, normalize?: boolean): Expression<T>;
48
- has(left: any, right: any, normalize?: boolean): Expression<T>;
49
- in(left: any, right: any, normalize?: boolean): Expression<T>;
50
- contains(left: any, right: any, normalize?: boolean): Expression<T>;
51
- startsWith(left: any, right: any, normalize?: boolean): Expression<T>;
52
- endsWith(left: any, right: any, normalize?: boolean): Expression<T>;
53
- any<N extends object>(left: N[], opts: (e: {
54
- s: N;
55
- e: (connector?: Connector) => Expression<N>;
56
- }) => Expression<N>, alias?: string): Expression<T>;
57
- all<N extends object>(left: N[], opts: (e: {
58
- s: N;
59
- e: (connector?: Connector) => Expression<N>;
60
- }) => Expression<N>, alias?: string): Expression<T>;
61
- isof(type: string): Expression<T>;
62
- isof(left: T, type: string): Expression<T>;
63
- }