angular-odata 0.128.0 → 0.131.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.
- package/README.md +27 -244
- package/fesm2022/angular-odata.mjs +2320 -1118
- package/fesm2022/angular-odata.mjs.map +1 -1
- package/lib/api.d.ts +10 -11
- package/lib/cache/cache.d.ts +2 -2
- package/lib/cache/memory.d.ts +2 -2
- package/lib/cache/storage.d.ts +2 -2
- package/lib/index.d.ts +1 -0
- package/lib/loaders.d.ts +8 -8
- package/lib/metadata/csdl/csdl-annotation.d.ts +62 -26
- package/lib/metadata/csdl/csdl-entity-container.d.ts +8 -3
- package/lib/metadata/csdl/csdl-entity-set.d.ts +7 -2
- package/lib/metadata/csdl/csdl-enum-type.d.ts +11 -3
- package/lib/metadata/csdl/csdl-function-action.d.ts +54 -11
- package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +4 -0
- package/lib/metadata/csdl/csdl-reference.d.ts +26 -3
- package/lib/metadata/csdl/csdl-schema.d.ts +5 -2
- package/lib/metadata/csdl/csdl-singleton.d.ts +5 -0
- package/lib/metadata/csdl/csdl-structural-property.d.ts +19 -3
- package/lib/metadata/csdl/csdl-structured-type.d.ts +28 -7
- package/lib/metadata/csdl/csdl-type-definition.d.ts +3 -0
- package/lib/metadata/metadata.d.ts +16 -3
- package/lib/models/collection.d.ts +2 -1
- package/lib/models/model.d.ts +6 -5
- package/lib/models/options.d.ts +11 -4
- package/lib/module.d.ts +3 -3
- package/lib/options.d.ts +3 -3
- package/lib/resources/path/segments.d.ts +3 -3
- package/lib/resources/query/builder.d.ts +3 -2
- package/lib/resources/query/expressions/apply.d.ts +1 -1
- package/lib/resources/query/expressions/compute.d.ts +1 -1
- package/lib/resources/query/expressions/count.d.ts +1 -1
- package/lib/resources/query/expressions/expand.d.ts +5 -2
- package/lib/resources/query/expressions/filter.d.ts +2 -1
- package/lib/resources/query/expressions/orderby.d.ts +2 -1
- package/lib/resources/query/expressions/search.d.ts +2 -1
- package/lib/resources/query/expressions/select.d.ts +2 -1
- package/lib/resources/query/expressions/syntax.d.ts +2 -2
- package/lib/resources/query/handlers.d.ts +17 -5
- package/lib/resources/query/options.d.ts +3 -3
- package/lib/resources/resource.d.ts +36 -8
- package/lib/resources/types/action.d.ts +4 -4
- package/lib/resources/types/entity-set.d.ts +15 -8
- package/lib/resources/types/entity.d.ts +5 -1
- package/lib/resources/types/function.d.ts +4 -4
- package/lib/resources/types/navigation-property.d.ts +12 -3
- package/lib/resources/types/property.d.ts +14 -3
- package/lib/resources/types/singleton.d.ts +5 -1
- package/lib/schema/annotation.d.ts +3 -3
- package/lib/schema/callable.d.ts +3 -3
- package/lib/schema/element.d.ts +3 -3
- package/lib/schema/entity-container.d.ts +2 -2
- package/lib/schema/entity-set.d.ts +2 -2
- package/lib/schema/enum-type.d.ts +10 -10
- package/lib/schema/parsers/callable.d.ts +4 -4
- package/lib/schema/parsers/enum-type.d.ts +15 -15
- package/lib/schema/parsers/structured-type.d.ts +8 -5
- package/lib/schema/schema.d.ts +3 -3
- package/lib/schema/singleton.d.ts +2 -2
- package/lib/schema/structured-type.d.ts +7 -4
- package/lib/services/entity-set.d.ts +9 -6
- package/lib/services/entity.d.ts +1 -1
- package/lib/services/singleton.d.ts +1 -1
- package/lib/settings.d.ts +2 -2
- package/lib/types.d.ts +82 -69
- package/lib/utils/enums.d.ts +12 -12
- package/lib/utils/http.d.ts +1 -1
- package/lib/utils/objects.d.ts +1 -1
- package/lib/utils/odata.d.ts +2 -2
- package/lib/utils/strings.d.ts +2 -2
- package/package.json +3 -5
- package/schematics/apigen/angular/api-config.js +7 -1
- package/schematics/apigen/angular/api-config.js.map +1 -1
- package/schematics/apigen/angular/base.d.ts +22 -2
- package/schematics/apigen/angular/base.js +82 -42
- package/schematics/apigen/angular/base.js.map +1 -1
- package/schematics/apigen/angular/entity.js +7 -1
- package/schematics/apigen/angular/entity.js.map +1 -1
- package/schematics/apigen/angular/enum.js +1 -0
- package/schematics/apigen/angular/enum.js.map +1 -1
- package/schematics/apigen/angular/module.js.map +1 -1
- package/schematics/apigen/angular/service.js +3 -2
- package/schematics/apigen/angular/service.js.map +1 -1
- package/schematics/apigen/files/api-config/__fileName__.ts +8 -6
- package/schematics/apigen/files/entity/__fileName__.ts +2 -2
- package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +1 -1
- package/schematics/apigen/files/entityset-service/__fileName__.ts +1 -1
- package/schematics/apigen/files/enum/__fileName__.ts +1 -1
- package/schematics/apigen/files/metadata/metadata.json +1 -0
- package/schematics/apigen/files/singleton-service/__fileName__.ts +1 -1
- package/schematics/apigen/index.js +56 -12
- package/schematics/apigen/index.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +56 -23
- package/schematics/apigen/metadata/csdl/csdl-annotation.js +143 -13
- package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-container.js +19 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-set.js +11 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +6 -0
- package/schematics/apigen/metadata/csdl/csdl-enum-type.js +17 -0
- package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +37 -0
- package/schematics/apigen/metadata/csdl/csdl-function-action.js +52 -0
- package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +4 -0
- package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +6 -0
- package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +15 -3
- package/schematics/apigen/metadata/csdl/csdl-reference.js +26 -2
- package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-schema.js +37 -0
- package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-singleton.js +8 -0
- package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +16 -0
- package/schematics/apigen/metadata/csdl/csdl-structural-property.js +53 -0
- package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +22 -3
- package/schematics/apigen/metadata/csdl/csdl-structured-type.js +47 -2
- package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-type-definition.js +19 -0
- package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -1
- package/schematics/apigen/metadata/metadata.d.ts +10 -0
- package/schematics/apigen/metadata/metadata.js +12 -6
- package/schematics/apigen/metadata/metadata.js.map +1 -1
- package/schematics/apigen/metadata/parser.js.map +1 -1
- package/schematics/apigen/schema.d.ts +2 -1
- package/schematics/apigen/schema.json +15 -14
- package/schematics/apigen/utils.d.ts +1 -0
- package/schematics/apigen/utils.js +25 -1
- package/schematics/apigen/utils.js.map +1 -1
- package/schematics/ng-add/index.js +1 -2
- package/schematics/ng-add/index.js.map +1 -1
- package/esm2022/angular-odata.mjs +0 -5
- package/esm2022/lib/annotations.mjs +0 -140
- package/esm2022/lib/api.mjs +0 -419
- package/esm2022/lib/cache/cache.mjs +0 -175
- package/esm2022/lib/cache/index.mjs +0 -4
- package/esm2022/lib/cache/memory.mjs +0 -30
- package/esm2022/lib/cache/storage.mjs +0 -55
- package/esm2022/lib/client.mjs +0 -212
- package/esm2022/lib/constants.mjs +0 -95
- package/esm2022/lib/helper.mjs +0 -280
- package/esm2022/lib/index.mjs +0 -21
- package/esm2022/lib/loaders.mjs +0 -39
- package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +0 -95
- package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +0 -27
- package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +0 -24
- package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +0 -37
- package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +0 -94
- package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +0 -7
- package/esm2022/lib/metadata/csdl/csdl-reference.mjs +0 -23
- package/esm2022/lib/metadata/csdl/csdl-schema.mjs +0 -39
- package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +0 -15
- package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +0 -70
- package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +0 -92
- package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +0 -15
- package/esm2022/lib/metadata/index.mjs +0 -3
- package/esm2022/lib/metadata/metadata.mjs +0 -14
- package/esm2022/lib/metadata/parser.mjs +0 -563
- package/esm2022/lib/models/collection.mjs +0 -814
- package/esm2022/lib/models/index.mjs +0 -4
- package/esm2022/lib/models/model.mjs +0 -553
- package/esm2022/lib/models/options.mjs +0 -1179
- package/esm2022/lib/module.mjs +0 -55
- package/esm2022/lib/options.mjs +0 -36
- package/esm2022/lib/resources/index.mjs +0 -7
- package/esm2022/lib/resources/options.mjs +0 -56
- package/esm2022/lib/resources/path/handlers.mjs +0 -79
- package/esm2022/lib/resources/path/index.mjs +0 -3
- package/esm2022/lib/resources/path/segments.mjs +0 -148
- package/esm2022/lib/resources/query/builder.mjs +0 -636
- package/esm2022/lib/resources/query/expressions/apply.mjs +0 -236
- package/esm2022/lib/resources/query/expressions/base.mjs +0 -25
- package/esm2022/lib/resources/query/expressions/compute.mjs +0 -54
- package/esm2022/lib/resources/query/expressions/count.mjs +0 -116
- package/esm2022/lib/resources/query/expressions/expand.mjs +0 -147
- package/esm2022/lib/resources/query/expressions/filter.mjs +0 -178
- package/esm2022/lib/resources/query/expressions/index.mjs +0 -10
- package/esm2022/lib/resources/query/expressions/orderby.mjs +0 -79
- package/esm2022/lib/resources/query/expressions/search.mjs +0 -141
- package/esm2022/lib/resources/query/expressions/select.mjs +0 -47
- package/esm2022/lib/resources/query/expressions/syntax.mjs +0 -751
- package/esm2022/lib/resources/query/handlers.mjs +0 -420
- package/esm2022/lib/resources/query/index.mjs +0 -5
- package/esm2022/lib/resources/query/options.mjs +0 -139
- package/esm2022/lib/resources/request.mjs +0 -196
- package/esm2022/lib/resources/resource.mjs +0 -311
- package/esm2022/lib/resources/response.mjs +0 -174
- package/esm2022/lib/resources/types/action.mjs +0 -116
- package/esm2022/lib/resources/types/batch.mjs +0 -428
- package/esm2022/lib/resources/types/count.mjs +0 -33
- package/esm2022/lib/resources/types/entity-set.mjs +0 -131
- package/esm2022/lib/resources/types/entity.mjs +0 -112
- package/esm2022/lib/resources/types/function.mjs +0 -146
- package/esm2022/lib/resources/types/index.mjs +0 -15
- package/esm2022/lib/resources/types/media.mjs +0 -44
- package/esm2022/lib/resources/types/metadata.mjs +0 -35
- package/esm2022/lib/resources/types/navigation-property.mjs +0 -256
- package/esm2022/lib/resources/types/options.mjs +0 -2
- package/esm2022/lib/resources/types/property.mjs +0 -197
- package/esm2022/lib/resources/types/reference.mjs +0 -87
- package/esm2022/lib/resources/types/singleton.mjs +0 -130
- package/esm2022/lib/resources/types/value.mjs +0 -48
- package/esm2022/lib/schema/annotation.mjs +0 -37
- package/esm2022/lib/schema/callable.mjs +0 -66
- package/esm2022/lib/schema/element.mjs +0 -67
- package/esm2022/lib/schema/entity-container.mjs +0 -11
- package/esm2022/lib/schema/entity-set.mjs +0 -9
- package/esm2022/lib/schema/enum-type.mjs +0 -68
- package/esm2022/lib/schema/index.mjs +0 -9
- package/esm2022/lib/schema/parsers/callable.mjs +0 -110
- package/esm2022/lib/schema/parsers/edm.mjs +0 -101
- package/esm2022/lib/schema/parsers/enum-type.mjs +0 -130
- package/esm2022/lib/schema/parsers/index.mjs +0 -5
- package/esm2022/lib/schema/parsers/structured-type.mjs +0 -514
- package/esm2022/lib/schema/schema.mjs +0 -45
- package/esm2022/lib/schema/singleton.mjs +0 -9
- package/esm2022/lib/schema/structured-type.mjs +0 -213
- package/esm2022/lib/services/base.mjs +0 -29
- package/esm2022/lib/services/entity-set.mjs +0 -155
- package/esm2022/lib/services/entity.mjs +0 -12
- package/esm2022/lib/services/factory.mjs +0 -44
- package/esm2022/lib/services/index.mjs +0 -5
- package/esm2022/lib/services/singleton.mjs +0 -54
- package/esm2022/lib/settings.mjs +0 -112
- package/esm2022/lib/types.mjs +0 -118
- package/esm2022/lib/utils/arraybuffers.mjs +0 -46
- package/esm2022/lib/utils/arrays.mjs +0 -10
- package/esm2022/lib/utils/dates.mjs +0 -18
- package/esm2022/lib/utils/durations.mjs +0 -40
- package/esm2022/lib/utils/enums.mjs +0 -61
- package/esm2022/lib/utils/http.mjs +0 -95
- package/esm2022/lib/utils/index.mjs +0 -10
- package/esm2022/lib/utils/objects.mjs +0 -204
- package/esm2022/lib/utils/odata.mjs +0 -22
- package/esm2022/lib/utils/strings.mjs +0 -20
- package/esm2022/lib/utils/types.mjs +0 -136
- package/esm2022/lib/utils/urls.mjs +0 -24
- package/esm2022/public-api.mjs +0 -5
|
@@ -1,420 +0,0 @@
|
|
|
1
|
-
import { QueryOption } from '../../types';
|
|
2
|
-
import { Objects, Types } from '../../utils';
|
|
3
|
-
import { alias, normalizeValue, raw, duration, binary, } from './builder';
|
|
4
|
-
import { ComputeExpression, FilterExpression, OrderByExpression, SearchExpression, ExpandExpression, SelectExpression, ApplyExpression, } from './expressions';
|
|
5
|
-
import { pathAndParamsFromQueryOptions, } from './options';
|
|
6
|
-
export class ODataQueryOptionHandler {
|
|
7
|
-
constructor(o, n) {
|
|
8
|
-
this.o = o;
|
|
9
|
-
this.n = n;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* The name of the managed odata query option.
|
|
13
|
-
*/
|
|
14
|
-
get name() {
|
|
15
|
-
return this.n;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Converts the managed odata query option to a json object.
|
|
19
|
-
* @returns {any}
|
|
20
|
-
*/
|
|
21
|
-
toJson() {
|
|
22
|
-
return this.o.get(this.n);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Returns a boolean indicating if the managed odata query option is empty.
|
|
26
|
-
* @returns True if the managed odata query option is empty.
|
|
27
|
-
*/
|
|
28
|
-
empty() {
|
|
29
|
-
return Types.isEmpty(this.o.get(this.n));
|
|
30
|
-
}
|
|
31
|
-
//#region Primitive Value
|
|
32
|
-
/**
|
|
33
|
-
* Get or Set the value of the managed odata query option.
|
|
34
|
-
* @param v The value to set.
|
|
35
|
-
* @returns
|
|
36
|
-
*/
|
|
37
|
-
value(v) {
|
|
38
|
-
if (v !== undefined)
|
|
39
|
-
this.o.set(this.n, v);
|
|
40
|
-
return this.o.get(this.n);
|
|
41
|
-
}
|
|
42
|
-
//#endregion
|
|
43
|
-
//#region Array Value
|
|
44
|
-
assertArray() {
|
|
45
|
-
if (!Types.isArray(this.o.get(this.n)))
|
|
46
|
-
this.o.set(this.n, this.o.has(this.n) ? [this.o.get(this.n)] : []);
|
|
47
|
-
return this.o.get(this.n);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Push value to the managed odata query option.
|
|
51
|
-
* @param value Value to push
|
|
52
|
-
*/
|
|
53
|
-
push(value) {
|
|
54
|
-
this.assertArray().push(value);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Remove value from the managed odata query option.
|
|
58
|
-
* @param value Value to remove
|
|
59
|
-
*/
|
|
60
|
-
remove(value) {
|
|
61
|
-
this.o.set(this.n, this.assertArray().filter((v) => v !== value));
|
|
62
|
-
// If only one and not is array... down to value
|
|
63
|
-
if (this.o.get(this.n).length === 1 &&
|
|
64
|
-
!Types.isArray(this.o.get(this.n)[0]))
|
|
65
|
-
this.o.set(this.n, this.o.get(this.n)[0]);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Return value at index of the managed odata query option.
|
|
69
|
-
* @param index Index of the value
|
|
70
|
-
* @returns The value
|
|
71
|
-
*/
|
|
72
|
-
at(index) {
|
|
73
|
-
return this.assertArray()[index];
|
|
74
|
-
}
|
|
75
|
-
some(predicate) {
|
|
76
|
-
return this.assertArray().some(predicate);
|
|
77
|
-
}
|
|
78
|
-
every(predicate) {
|
|
79
|
-
return this.assertArray().every(predicate);
|
|
80
|
-
}
|
|
81
|
-
find(predicate) {
|
|
82
|
-
return this.assertArray().find(predicate);
|
|
83
|
-
}
|
|
84
|
-
//#endregion
|
|
85
|
-
//#region HashMap Value
|
|
86
|
-
assertObject(create) {
|
|
87
|
-
if (!Types.isArray(this.o.get(this.n)) &&
|
|
88
|
-
Types.isPlainObject(this.o.get(this.n))) {
|
|
89
|
-
return this.o.get(this.n);
|
|
90
|
-
}
|
|
91
|
-
let arr = this.assertArray();
|
|
92
|
-
let obj = arr.find((v) => Types.isPlainObject(v));
|
|
93
|
-
if (!obj && create) {
|
|
94
|
-
obj = {};
|
|
95
|
-
arr.push(obj);
|
|
96
|
-
}
|
|
97
|
-
return obj;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Set the value for path in the managed odata query option.
|
|
101
|
-
* @param path Path for set the value
|
|
102
|
-
* @param value Value to set
|
|
103
|
-
*/
|
|
104
|
-
set(path, value) {
|
|
105
|
-
let obj = this.assertObject(true);
|
|
106
|
-
Objects.set(obj, path, value);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Get the value for path from the managed odata query option.
|
|
110
|
-
* @param path The path from get the value
|
|
111
|
-
* @param def Default if not found
|
|
112
|
-
* @returns
|
|
113
|
-
*/
|
|
114
|
-
get(path, def) {
|
|
115
|
-
let obj = this.assertObject(false) || {};
|
|
116
|
-
return Objects.get(obj, path, def);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Unset the value for path in the managed odata query option.
|
|
120
|
-
* @param path
|
|
121
|
-
*/
|
|
122
|
-
unset(path) {
|
|
123
|
-
let obj = this.assertObject(true);
|
|
124
|
-
Objects.unset(obj, path);
|
|
125
|
-
if (Types.isArray(this.o.get(this.n))) {
|
|
126
|
-
this.o.set(this.n, this.o.get(this.n).filter((v) => !Types.isEmpty(v)));
|
|
127
|
-
if (this.o.get(this.n).length === 1)
|
|
128
|
-
this.o.set(this.n, this.o.get(this.n)[0]);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Test if the managed odata query option has the value.
|
|
133
|
-
* @param path The path fot test if the value is set
|
|
134
|
-
* @returns Boolean indicating if the value is set
|
|
135
|
-
*/
|
|
136
|
-
has(path) {
|
|
137
|
-
let obj = this.assertObject(false) || {};
|
|
138
|
-
return Objects.has(obj, path);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Merge values from object into the managed odata query option.
|
|
142
|
-
* @param values Object to merge
|
|
143
|
-
* @returns
|
|
144
|
-
*/
|
|
145
|
-
assign(values) {
|
|
146
|
-
let obj = this.assertObject(true);
|
|
147
|
-
return Objects.merge(obj, values);
|
|
148
|
-
}
|
|
149
|
-
//#endregion
|
|
150
|
-
/**
|
|
151
|
-
* Clear the managed odata query option.
|
|
152
|
-
*/
|
|
153
|
-
clear() {
|
|
154
|
-
this.o.delete(this.n);
|
|
155
|
-
}
|
|
156
|
-
toString({ escape, parser, } = {}) {
|
|
157
|
-
const [_, params] = pathAndParamsFromQueryOptions(new Map([[this.n, this.o.get(this.n)]]), { escape, parser });
|
|
158
|
-
return params[`$${this.n}`];
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
export class ODataQueryOptionsHandler {
|
|
162
|
-
constructor(options) {
|
|
163
|
-
this.options = options;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Create a raw odata value
|
|
167
|
-
* @param value The value to raw
|
|
168
|
-
* @returns The raw value
|
|
169
|
-
*/
|
|
170
|
-
raw(value) {
|
|
171
|
-
return raw(value);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Create a new odata alias parameter
|
|
175
|
-
* @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ParameterAliases
|
|
176
|
-
* @param value The value of the alias
|
|
177
|
-
* @param name The name of the alias
|
|
178
|
-
* @returns The alias
|
|
179
|
-
*/
|
|
180
|
-
alias(value, name) {
|
|
181
|
-
return alias(value, name);
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Create a duration odata value
|
|
185
|
-
* @param value The value to duration
|
|
186
|
-
* @returns The duration value
|
|
187
|
-
*/
|
|
188
|
-
duration(value) {
|
|
189
|
-
return duration(value);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Create a binary odata value
|
|
193
|
-
* @param value The value to binary
|
|
194
|
-
* @returns The binary value
|
|
195
|
-
*/
|
|
196
|
-
binary(value) {
|
|
197
|
-
return binary(value);
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Normalize the given value to a valid odata value
|
|
201
|
-
* @param value The value to normalize
|
|
202
|
-
* @returns The normalized value
|
|
203
|
-
*/
|
|
204
|
-
normalize(value) {
|
|
205
|
-
return normalizeValue(value);
|
|
206
|
-
}
|
|
207
|
-
select(opts) {
|
|
208
|
-
if (Types.isFunction(opts)) {
|
|
209
|
-
return this.options.expression(QueryOption.select, SelectExpression.factory(opts, this.options.expression(QueryOption.select)));
|
|
210
|
-
}
|
|
211
|
-
return this.options.option(QueryOption.select, opts);
|
|
212
|
-
}
|
|
213
|
-
expand(opts) {
|
|
214
|
-
if (Types.isFunction(opts)) {
|
|
215
|
-
return this.options.expression(QueryOption.expand, ExpandExpression.factory(opts, this.options.expression(QueryOption.expand)));
|
|
216
|
-
}
|
|
217
|
-
return this.options.option(QueryOption.expand, opts);
|
|
218
|
-
}
|
|
219
|
-
compute(opts) {
|
|
220
|
-
if (Types.isFunction(opts)) {
|
|
221
|
-
return this.options.expression(QueryOption.compute, ComputeExpression.factory(opts, this.options.expression(QueryOption.compute)));
|
|
222
|
-
}
|
|
223
|
-
return this.options.option(QueryOption.compute, opts);
|
|
224
|
-
}
|
|
225
|
-
apply(opts) {
|
|
226
|
-
if (Types.isFunction(opts)) {
|
|
227
|
-
return this.options.expression(QueryOption.apply, ApplyExpression.factory(opts, this.options.expression(QueryOption.apply)));
|
|
228
|
-
}
|
|
229
|
-
return this.options.option(QueryOption.apply, opts);
|
|
230
|
-
}
|
|
231
|
-
format(opts) {
|
|
232
|
-
return this.options.option(QueryOption.format, opts);
|
|
233
|
-
}
|
|
234
|
-
transform(opts) {
|
|
235
|
-
return this.options.option(QueryOption.transform, opts);
|
|
236
|
-
}
|
|
237
|
-
search(opts) {
|
|
238
|
-
if (Types.isFunction(opts)) {
|
|
239
|
-
return this.options.expression(QueryOption.search, SearchExpression.factory(opts, this.options.expression(QueryOption.search)));
|
|
240
|
-
}
|
|
241
|
-
return this.options.option(QueryOption.search, opts);
|
|
242
|
-
}
|
|
243
|
-
filter(opts) {
|
|
244
|
-
if (Types.isFunction(opts)) {
|
|
245
|
-
return this.options.expression(QueryOption.filter, FilterExpression.factory(opts, this.options.expression(QueryOption.filter)));
|
|
246
|
-
}
|
|
247
|
-
return this.options.option(QueryOption.filter, opts);
|
|
248
|
-
}
|
|
249
|
-
orderBy(opts) {
|
|
250
|
-
if (Types.isFunction(opts)) {
|
|
251
|
-
return this.options.option(QueryOption.orderBy, OrderByExpression.factory(opts, this.options.expression(QueryOption.orderBy)));
|
|
252
|
-
}
|
|
253
|
-
return this.options.option(QueryOption.orderBy, opts);
|
|
254
|
-
}
|
|
255
|
-
top(opts) {
|
|
256
|
-
return this.options.option(QueryOption.top, opts);
|
|
257
|
-
}
|
|
258
|
-
skip(opts) {
|
|
259
|
-
return this.options.option(QueryOption.skip, opts);
|
|
260
|
-
}
|
|
261
|
-
skiptoken(opts) {
|
|
262
|
-
return this.options.option(QueryOption.skiptoken, opts);
|
|
263
|
-
}
|
|
264
|
-
remove(...keys) {
|
|
265
|
-
this.options.remove(...keys);
|
|
266
|
-
}
|
|
267
|
-
keep(...keys) {
|
|
268
|
-
this.options.keep(...keys);
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Shortcut for set $top, $skip, $skiptoken.
|
|
272
|
-
* @param param0 skip or top or skiptoken
|
|
273
|
-
*/
|
|
274
|
-
paging({ skip, skiptoken, top, } = {}) {
|
|
275
|
-
if (skiptoken !== undefined) {
|
|
276
|
-
if (skiptoken !== null) {
|
|
277
|
-
this.skiptoken(skiptoken);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
this.remove(QueryOption.skiptoken);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
if (skip !== undefined) {
|
|
284
|
-
if (skip !== null) {
|
|
285
|
-
this.skip(skip);
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
this.remove(QueryOption.skip);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
if (top !== undefined) {
|
|
292
|
-
if (top !== null) {
|
|
293
|
-
this.top(top);
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
this.remove(QueryOption.top);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Shortcut for clear pagination by unset $top, $skip, $skiptoken.
|
|
302
|
-
*/
|
|
303
|
-
removePaging() {
|
|
304
|
-
this.remove(QueryOption.skip, QueryOption.top, QueryOption.skiptoken);
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Shortcut for clear query.
|
|
308
|
-
*/
|
|
309
|
-
clear() {
|
|
310
|
-
this.options.clear();
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Store the query options from the current query.
|
|
314
|
-
*/
|
|
315
|
-
store() {
|
|
316
|
-
return this.options.toQueryArguments();
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Restore the given query options to the current query.
|
|
320
|
-
* @param options The query to be applied.
|
|
321
|
-
*/
|
|
322
|
-
restore(options) {
|
|
323
|
-
if (options.select !== undefined) {
|
|
324
|
-
if (options.select instanceof SelectExpression) {
|
|
325
|
-
this.options.expression(QueryOption.select, options.select);
|
|
326
|
-
}
|
|
327
|
-
else if (options.select !== null) {
|
|
328
|
-
this.options.option(QueryOption.select, options.select);
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
this.options.remove(QueryOption.select);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
if (options.expand !== undefined) {
|
|
335
|
-
if (options.expand instanceof ExpandExpression) {
|
|
336
|
-
this.options.expression(QueryOption.expand, options.expand);
|
|
337
|
-
}
|
|
338
|
-
else if (options.expand !== null) {
|
|
339
|
-
this.options.option(QueryOption.expand, options.expand);
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
this.options.remove(QueryOption.expand);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
if (options.compute !== undefined) {
|
|
346
|
-
if (options.compute instanceof ComputeExpression) {
|
|
347
|
-
this.options.expression(QueryOption.compute, options.compute);
|
|
348
|
-
}
|
|
349
|
-
else if (options.compute !== null) {
|
|
350
|
-
this.options.option(QueryOption.compute, options.compute);
|
|
351
|
-
}
|
|
352
|
-
else {
|
|
353
|
-
this.options.remove(QueryOption.compute);
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
if (options.apply !== undefined) {
|
|
357
|
-
if (options.apply instanceof ApplyExpression) {
|
|
358
|
-
this.options.expression(QueryOption.apply, options.apply);
|
|
359
|
-
}
|
|
360
|
-
else if (options.apply !== null) {
|
|
361
|
-
this.options.option(QueryOption.apply, options.apply);
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
this.options.remove(QueryOption.apply);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
if (options.transform !== undefined) {
|
|
368
|
-
if (options.transform !== null) {
|
|
369
|
-
this.options.option(QueryOption.transform, options.transform);
|
|
370
|
-
}
|
|
371
|
-
else {
|
|
372
|
-
this.options.remove(QueryOption.transform);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
if (options.search !== undefined) {
|
|
376
|
-
if (options.search instanceof SearchExpression) {
|
|
377
|
-
this.options.expression(QueryOption.search, options.search);
|
|
378
|
-
}
|
|
379
|
-
else if (options.search !== null) {
|
|
380
|
-
this.options.option(QueryOption.search, options.search);
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
this.options.remove(QueryOption.search);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
if (options.filter !== undefined) {
|
|
387
|
-
if (options.filter instanceof FilterExpression) {
|
|
388
|
-
this.options.expression(QueryOption.filter, options.filter);
|
|
389
|
-
}
|
|
390
|
-
else if (options.filter !== null) {
|
|
391
|
-
this.options.option(QueryOption.filter, options.filter);
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
this.options.remove(QueryOption.filter);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
if (options.orderBy !== undefined) {
|
|
398
|
-
if (options.orderBy instanceof OrderByExpression) {
|
|
399
|
-
this.options.expression(QueryOption.orderBy, options.orderBy);
|
|
400
|
-
}
|
|
401
|
-
else if (options.orderBy !== null) {
|
|
402
|
-
this.options.option(QueryOption.orderBy, options.orderBy);
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
this.options.remove(QueryOption.orderBy);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
this.paging(options);
|
|
409
|
-
}
|
|
410
|
-
toJson() {
|
|
411
|
-
return this.options.toJson();
|
|
412
|
-
}
|
|
413
|
-
fromJson(json) {
|
|
414
|
-
this.options.fromJson(json);
|
|
415
|
-
}
|
|
416
|
-
toString({ escape, parser, } = {}) {
|
|
417
|
-
return this.options.toString({ escape, parser });
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUNMLEtBQUssRUFNTCxjQUFjLEVBQ2QsR0FBRyxFQUNILFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFFaEIsZ0JBQWdCLEVBRWhCLGVBQWUsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLDZCQUE2QixHQUM5QixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLFlBQ1UsQ0FBd0IsRUFDeEIsQ0FBYztRQURkLE1BQUMsR0FBRCxDQUFDLENBQXVCO1FBQ3hCLE1BQUMsR0FBRCxDQUFDLENBQWE7SUFDckIsQ0FBQztJQUVKOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FB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QyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ2pDLElBQUksT0FBTyxDQUFDLE9BQU8sWUFBWSxpQkFBaUIsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQ3JCLFdBQVcsQ0FBQyxPQUFPLEVBQ25CLE9BQU8sQ0FBQyxPQUErQixDQUN4QyxDQUFDO2FBQ0g7aUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDM0Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBNkI7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUNQLE1BQU0sRUFDTixNQUFNLE1BQ3NDLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGUgfSBmcm9tICcuLi8uLi9zY2hlbWEnO1xuaW1wb3J0IHsgUGFyc2VyLCBRdWVyeU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdHMsIFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgYWxpYXMsXG4gIEV4cGFuZCxcbiAgRmlsdGVyLFxuICBPcmRlckJ5LFxuICBTZWxlY3QsXG4gIFRyYW5zZm9ybSxcbiAgbm9ybWFsaXplVmFsdWUsXG4gIHJhdyxcbiAgZHVyYXRpb24sXG4gIGJpbmFyeSxcbn0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7XG4gIENvbXB1dGVFeHByZXNzaW9uLFxuICBDb21wdXRlRXhwcmVzc2lvbkJ1aWxkZXIsXG4gIEZpbHRlckV4cHJlc3Npb24sXG4gIEZpbHRlckV4cHJlc3Npb25CdWlsZGVyLFxuICBPcmRlckJ5RXhwcmVzc2lvbixcbiAgT3JkZXJCeUV4cHJlc3Npb25CdWlsZGVyLFxuICBTZWFyY2hFeHByZXNzaW9uLFxuICBTZWFyY2hFeHByZXNzaW9uQnVpbGRlcixcbiAgRXhwYW5kRXhwcmVzc2lvbixcbiAgRXhwYW5kRXhwcmVzc2lvbkJ1aWxkZXIsXG4gIFNlbGVjdEV4cHJlc3Npb24sXG4gIFNlbGVjdEV4cHJlc3Npb25CdWlsZGVyLFxuICBBcHBseUV4cHJlc3Npb24sXG4gIEFwcGx5RXhwcmVzc2lvbkJ1aWxkZXIsXG59IGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHtcbiAgT0RhdGFRdWVyeUFyZ3VtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIHBhdGhBbmRQYXJhbXNGcm9tUXVlcnlPcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG86IE1hcDxRdWVyeU9wdGlvbiwgYW55PixcbiAgICBwcml2YXRlIG46IFF1ZXJ5T3B0aW9uLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm47XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uIHRvIGEganNvbiBvYmplY3QuXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuby5nZXQodGhpcy5uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbiBpcyBlbXB0eS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24gaXMgZW1wdHkuXG4gICAqL1xuICBlbXB0eSgpIHtcbiAgICByZXR1cm4gVHlwZXMuaXNFbXB0eSh0aGlzLm8uZ2V0KHRoaXMubikpO1xuICB9XG5cbiAgLy8jcmVnaW9uIFByaW1pdGl2ZSBWYWx1ZVxuICAvKipcbiAgICogR2V0IG9yIFNldCB0aGUgdmFsdWUgb2YgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdiBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdmFsdWUodj86IGFueSkge1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHRoaXMuby5zZXQodGhpcy5uLCB2KTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBcnJheSBWYWx1ZVxuICBwcml2YXRlIGFzc2VydEFycmF5KCk6IGFueVtdIHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSlcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uaGFzKHRoaXMubikgPyBbdGhpcy5vLmdldCh0aGlzLm4pXSA6IFtdKTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggdmFsdWUgdG8gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gcHVzaFxuICAgKi9cbiAgcHVzaCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5hc3NlcnRBcnJheSgpLnB1c2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB2YWx1ZSBmcm9tIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm8uc2V0KFxuICAgICAgdGhpcy5uLFxuICAgICAgdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpLFxuICAgICk7XG4gICAgLy8gSWYgb25seSBvbmUgYW5kIG5vdCBpcyBhcnJheS4uLiBkb3duIHRvIHZhbHVlXG4gICAgaWYgKFxuICAgICAgdGhpcy5vLmdldCh0aGlzLm4pLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pWzBdKVxuICAgIClcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uZ2V0KHRoaXMubilbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB2YWx1ZSBhdCBpbmRleCBvZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgdmFsdWVcbiAgICogQHJldHVybnMgVGhlIHZhbHVlXG4gICAqL1xuICBhdChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0QXJyYXkoKVtpbmRleF07XG4gIH1cblxuICBzb21lKHByZWRpY2F0ZTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpLnNvbWUocHJlZGljYXRlKTtcbiAgfVxuXG4gIGV2ZXJ5KHByZWRpY2F0ZTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpLmV2ZXJ5KHByZWRpY2F0ZSk7XG4gIH1cblxuICBmaW5kKHByZWRpY2F0ZTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSGFzaE1hcCBWYWx1ZVxuICBwcml2YXRlIGFzc2VydE9iamVjdChjcmVhdGU6IGJvb2xlYW4pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKFxuICAgICAgIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSAmJlxuICAgICAgVHlwZXMuaXNQbGFpbk9iamVjdCh0aGlzLm8uZ2V0KHRoaXMubikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICAgIH1cbiAgICBsZXQgYXJyID0gdGhpcy5hc3NlcnRBcnJheSgpO1xuICAgIGxldCBvYmogPSBhcnIuZmluZCgodikgPT4gVHlwZXMuaXNQbGFpbk9iamVjdCh2KSk7XG4gICAgaWYgKCFvYmogJiYgY3JlYXRlKSB7XG4gICAgICBvYmogPSB7fTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBmb3IgcGF0aCBpbiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggZm9yIHNldCB0aGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0KHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnNldChvYmosIHBhdGgsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIGZvciBwYXRoIGZyb20gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmcm9tIGdldCB0aGUgdmFsdWVcbiAgICogQHBhcmFtIGRlZiBEZWZhdWx0IGlmIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0KHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QoZmFsc2UpIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3RzLmdldChvYmosIHBhdGgsIGRlZik7XG4gIH1cblxuICAvKipcbiAgICogVW5zZXQgdGhlIHZhbHVlIGZvciBwYXRoIGluIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICogQHBhcmFtIHBhdGhcbiAgICovXG4gIHVuc2V0KHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnVuc2V0KG9iaiwgcGF0aCk7XG5cbiAgICBpZiAoVHlwZXMuaXNBcnJheSh0aGlzLm8uZ2V0KHRoaXMubikpKSB7XG4gICAgICB0aGlzLm8uc2V0KFxuICAgICAgICB0aGlzLm4sXG4gICAgICAgIHRoaXMuby5nZXQodGhpcy5uKS5maWx0ZXIoKHY6IGFueSkgPT4gIVR5cGVzLmlzRW1wdHkodikpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLm8uZ2V0KHRoaXMubikubGVuZ3RoID09PSAxKVxuICAgICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24gaGFzIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggZm90IHRlc3QgaWYgdGhlIHZhbHVlIGlzIHNldFxuICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZhbHVlIGlzIHNldFxuICAgKi9cbiAgaGFzKHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuaGFzKG9iaiwgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdmFsdWVzIGZyb20gb2JqZWN0IGludG8gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdmFsdWVzIE9iamVjdCB0byBtZXJnZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXNzaWduKHZhbHVlczogeyBbYXR0cjogc3RyaW5nXTogYW55IH0pIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgcmV0dXJuIE9iamVjdHMubWVyZ2Uob2JqLCB2YWx1ZXMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uXG4gICAqL1xuICBjbGVhcigpIHtcbiAgICB0aGlzLm8uZGVsZXRlKHRoaXMubik7XG4gIH1cbiAgdG9TdHJpbmcoe1xuICAgIGVzY2FwZSxcbiAgICBwYXJzZXIsXG4gIH06IHsgZXNjYXBlPzogYm9vbGVhbjsgcGFyc2VyPzogUGFyc2VyPFQ+IH0gPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgW18sIHBhcmFtc10gPSBwYXRoQW5kUGFyYW1zRnJvbVF1ZXJ5T3B0aW9ucyhcbiAgICAgIG5ldyBNYXA8UXVlcnlPcHRpb24sIGFueT4oW1t0aGlzLm4sIHRoaXMuby5nZXQodGhpcy5uKV1dKSxcbiAgICAgIHsgZXNjYXBlLCBwYXJzZXIgfSxcbiAgICApO1xuICAgIHJldHVybiBwYXJhbXNbYCQke3RoaXMubn1gXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyPFQ+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9wdGlvbnM6IE9EYXRhUXVlcnlPcHRpb25zPFQ+KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYXcgb2RhdGEgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byByYXdcbiAgICogQHJldHVybnMgVGhlIHJhdyB2YWx1ZVxuICAgKi9cbiAgcmF3KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gcmF3KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb2RhdGEgYWxpYXMgcGFyYW1ldGVyXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfUGFyYW1ldGVyQWxpYXNlc1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYWxpYXNcbiAgICogQHJldHVybnMgVGhlIGFsaWFzXG4gICAqL1xuICBhbGlhcyh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFsaWFzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkdXJhdGlvbiBvZGF0YSB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGR1cmF0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBkdXJhdGlvbiB2YWx1ZVxuICAgKi9cbiAgZHVyYXRpb24odmFsdWU6IGFueSkge1xuICAgIHJldHVybiBkdXJhdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYmluYXJ5IG9kYXRhIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmluYXJ5XG4gICAqIEByZXR1cm5zIFRoZSBiaW5hcnkgdmFsdWVcbiAgICovXG4gIGJpbmFyeSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGJpbmFyeSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIHRoZSBnaXZlbiB2YWx1ZSB0byBhIHZhbGlkIG9kYXRhIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gbm9ybWFsaXplXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHZhbHVlXG4gICAqL1xuICBub3JtYWxpemUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJHNlbGVjdCBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkc2VsZWN0LlxuICAgKiBAcGFyYW0gb3B0cyBTZWxlY3Q8VD4gdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgU2VsZWN0RXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgc2VsZWN0KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IFNlbGVjdEV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IFNlbGVjdEV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+LFxuICApOiBTZWxlY3RFeHByZXNzaW9uPFQ+O1xuICBzZWxlY3Qob3B0czogU2VsZWN0PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VsZWN0KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uLnNlbGVjdCxcbiAgICAgICAgU2VsZWN0RXhwcmVzc2lvbi5mYWN0b3J5KFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb24uc2VsZWN0KSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPFNlbGVjdDxUPj4oUXVlcnlPcHRpb24uc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkZXhwYW5kIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRleHBhbmQuXG4gICAqIEBwYXJhbSBvcHRzIEV4cGFuZDxUPiB2YWx1ZSBvciBidWlsZGVyIGZ1bmN0aW9uIGZvciBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICAqL1xuICBleHBhbmQoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogRXhwYW5kRXhwcmVzc2lvbkJ1aWxkZXI8VD4sXG4gICAgICBjdXJyZW50PzogRXhwYW5kRXhwcmVzc2lvbjxUPixcbiAgICApID0+IEV4cGFuZEV4cHJlc3Npb248VD4sXG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD47XG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb24uZXhwYW5kLFxuICAgICAgICBFeHBhbmRFeHByZXNzaW9uLmZhY3RvcnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbi5leHBhbmQpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248RXhwYW5kPFQ+PihRdWVyeU9wdGlvbi5leHBhbmQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRjb21wdXRlIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRjb21wdXRlLlxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1N5c3RlbVF1ZXJ5T3B0aW9uY29tcHV0ZVxuICAgKiBAcGFyYW0gb3B0cyBzdHJpbmcgdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgICovXG4gIGNvbXB1dGUoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogQ29tcHV0ZUV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IENvbXB1dGVFeHByZXNzaW9uPFQ+LFxuICAgICkgPT4gQ29tcHV0ZUV4cHJlc3Npb248VD4sXG4gICk6IENvbXB1dGVFeHByZXNzaW9uPFQ+O1xuICBjb21wdXRlKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uLmNvbXB1dGUsXG4gICAgICAgIENvbXB1dGVFeHByZXNzaW9uLmZhY3RvcnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbi5jb21wdXRlKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb24uY29tcHV0ZSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJGFwcGx5IG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRjb21wdXRlLlxuICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS1kYXRhLWFnZ3JlZ2F0aW9uLWV4dC92NC4wL2NzMDIvb2RhdGEtZGF0YS1hZ2dyZWdhdGlvbi1leHQtdjQuMC1jczAyLmh0bWxcbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIG9yIGJ1aWxkZXIgZnVuY3Rpb24gZm9yIEFwcGx5RXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgYXBwbHkoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogQXBwbHlFeHByZXNzaW9uQnVpbGRlcjxUPixcbiAgICAgIGN1cnJlbnQ/OiBBcHBseUV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBBcHBseUV4cHJlc3Npb248VD4sXG4gICk6IEFwcGx5RXhwcmVzc2lvbjxUPjtcbiAgYXBwbHkob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGFwcGx5KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBhcHBseShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbi5hcHBseSxcbiAgICAgICAgQXBwbHlFeHByZXNzaW9uLmZhY3RvcnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbi5hcHBseSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uLmFwcGx5LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkZm9ybWF0IG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRmb3JtYXQuXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25mb3JtYXRcbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIGZvciBmb3JtYXRcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbi5mb3JtYXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICR0cmFuc2Zvcm0gb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIGZvciB0cmFuc2Zvcm1cbiAgICovXG4gIHRyYW5zZm9ybShvcHRzOiBUcmFuc2Zvcm08VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0cmFuc2Zvcm0ob3B0cz86IFRyYW5zZm9ybTxUPik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248VHJhbnNmb3JtPFQ+PihRdWVyeU9wdGlvbi50cmFuc2Zvcm0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRzZWFyY2ggb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHNlYXJjaC5cbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIG9yIGJ1aWxkZXIgZnVuY3Rpb24gZm9yIFNlYXJjaEV4cHJlc3Npb248VD5cbiAgICovXG4gIHNlYXJjaChcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiBTZWFyY2hFeHByZXNzaW9uQnVpbGRlcjxUPixcbiAgICAgIGN1cnJlbnQ/OiBTZWFyY2hFeHByZXNzaW9uPFQ+LFxuICAgICkgPT4gU2VhcmNoRXhwcmVzc2lvbjxUPixcbiAgKTogU2VhcmNoRXhwcmVzc2lvbjxUPjtcbiAgc2VhcmNoKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWFyY2goKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlYXJjaChvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbi5zZWFyY2gsXG4gICAgICAgIFNlYXJjaEV4cHJlc3Npb24uZmFjdG9yeShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uLnNlYXJjaCksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uLnNlYXJjaCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJGZpbHRlciBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkZmlsdGVyLlxuICAgKiBAcGFyYW0gb3B0cyBGaWx0ZXI8VD4gdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgRmlsdGVyRXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgZmlsdGVyKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IEZpbHRlckV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IEZpbHRlckV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+LFxuICApOiBGaWx0ZXJFeHByZXNzaW9uPFQ+O1xuICBmaWx0ZXIob3B0czogRmlsdGVyPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZpbHRlcigpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uLmZpbHRlcixcbiAgICAgICAgRmlsdGVyRXhwcmVzc2lvbi5mYWN0b3J5KFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb24uZmlsdGVyKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEZpbHRlcjxUPj4oUXVlcnlPcHRpb24uZmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkb3JkZXJieSBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkb3JkZXJieS5cbiAgICogQHBhcmFtIG9wdHMgT3JkZXJCeTxUPiB2YWx1ZSBvciBidWlsZGVyIGZ1bmN0aW9uIGZvciBPcmRlckJ5RXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgb3JkZXJCeShcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiBPcmRlckJ5RXhwcmVzc2lvbkJ1aWxkZXI8VD4sXG4gICAgICBjdXJyZW50PzogT3JkZXJCeUV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBPcmRlckJ5RXhwcmVzc2lvbjxUPixcbiAgKTogT3JkZXJCeUV4cHJlc3Npb248VD47XG4gIG9yZGVyQnkob3B0czogT3JkZXJCeTxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbihcbiAgICAgICAgUXVlcnlPcHRpb24ub3JkZXJCeSxcbiAgICAgICAgT3JkZXJCeUV4cHJlc3Npb24uZmFjdG9yeShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uLm9yZGVyQnkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248T3JkZXJCeTxUPj4oUXVlcnlPcHRpb24ub3JkZXJCeSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJHRvcCBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkdG9wLlxuICAgKiBAcGFyYW0gb3B0cyBudW1iZXIgdmFsdWVcbiAgICovXG4gIHRvcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3Aob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbi50b3AsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRza2lwIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRza2lwLlxuICAgKiBAcGFyYW0gb3B0cyBudW1iZXIgdmFsdWVcbiAgICovXG4gIHNraXAob3B0czogbnVtYmVyKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbi5za2lwLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkc2tpcHRva2VuIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRza2lwdG9rZW4uXG4gICAqIEBwYXJhbSBvcHRzIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgc2tpcHRva2VuKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4oKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXB0b2tlbihvcHRzPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uLnNraXB0b2tlbiwgb3B0cyk7XG4gIH1cblxuICByZW1vdmUoLi4ua2V5czogUXVlcnlPcHRpb25bXSkge1xuICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoLi4ua2V5cyk7XG4gIH1cblxuICBrZWVwKC4uLmtleXM6IFF1ZXJ5T3B0aW9uW10pIHtcbiAgICB0aGlzLm9wdGlvbnMua2VlcCguLi5rZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3Igc2V0ICR0b3AsICRza2lwLCAkc2tpcHRva2VuLlxuICAgKiBAcGFyYW0gcGFyYW0wIHNraXAgb3IgdG9wIG9yIHNraXB0b2tlblxuICAgKi9cbiAgcGFnaW5nKHtcbiAgICBza2lwLFxuICAgIHNraXB0b2tlbixcbiAgICB0b3AsXG4gIH06IHtcbiAgICBza2lwPzogbnVtYmVyIHwgbnVsbDtcbiAgICBza2lwdG9rZW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIHRvcD86IG51bWJlciB8IG51bGw7XG4gIH0gPSB7fSkge1xuICAgIGlmIChza2lwdG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHNraXB0b2tlbiAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNraXB0b2tlbihza2lwdG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24uc2tpcHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNraXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHNraXAgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5za2lwKHNraXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24uc2tpcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0b3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRvcCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRvcCh0b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24udG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGNsZWFyIHBhZ2luYXRpb24gYnkgdW5zZXQgJHRvcCwgJHNraXAsICRza2lwdG9rZW4uXG4gICAqL1xuICByZW1vdmVQYWdpbmcoKSB7XG4gICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24uc2tpcCwgUXVlcnlPcHRpb24udG9wLCBRdWVyeU9wdGlvbi5za2lwdG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IGZvciBjbGVhciBxdWVyeS5cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMub3B0aW9ucy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBxdWVyeSBvcHRpb25zIGZyb20gdGhlIGN1cnJlbnQgcXVlcnkuXG4gICAqL1xuICBzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvUXVlcnlBcmd1bWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBnaXZlbiBxdWVyeSBvcHRpb25zIHRvIHRoZSBjdXJyZW50IHF1ZXJ5LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcXVlcnkgdG8gYmUgYXBwbGllZC5cbiAgICovXG4gIHJlc3RvcmUob3B0aW9uczogT0RhdGFRdWVyeUFyZ3VtZW50czxUPikge1xuICAgIGlmIChvcHRpb25zLnNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5zZWxlY3QgaW5zdGFuY2VvZiBTZWxlY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICAgIFF1ZXJ5T3B0aW9uLnNlbGVjdCxcbiAgICAgICAgICBvcHRpb25zLnNlbGVjdCBhcyBTZWxlY3RFeHByZXNzaW9uPFQ+LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnNlbGVjdCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLnNlbGVjdCwgb3B0aW9ucy5zZWxlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlbW92ZShRdWVyeU9wdGlvbi5zZWxlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuZXhwYW5kIGluc3RhbmNlb2YgRXhwYW5kRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgICBRdWVyeU9wdGlvbi5leHBhbmQsXG4gICAgICAgICAgb3B0aW9ucy5leHBhbmQgYXMgRXhwYW5kRXhwcmVzc2lvbjxUPixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5leHBhbmQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbi5leHBhbmQsIG9wdGlvbnMuZXhwYW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoUXVlcnlPcHRpb24uZXhwYW5kKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY29tcHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5jb21wdXRlIGluc3RhbmNlb2YgQ29tcHV0ZUV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgICAgUXVlcnlPcHRpb24uY29tcHV0ZSxcbiAgICAgICAgICBvcHRpb25zLmNvbXB1dGUgYXMgQ29tcHV0ZUV4cHJlc3Npb248VD4sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY29tcHV0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLmNvbXB1dGUsIG9wdGlvbnMuY29tcHV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlKFF1ZXJ5T3B0aW9uLmNvbXB1dGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hcHBseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5hcHBseSBpbnN0YW5jZW9mIEFwcGx5RXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgICBRdWVyeU9wdGlvbi5hcHBseSxcbiAgICAgICAgICBvcHRpb25zLmFwcGx5IGFzIEFwcGx5RXhwcmVzc2lvbjxUPixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hcHBseSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLmFwcGx5LCBvcHRpb25zLmFwcGx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoUXVlcnlPcHRpb24uYXBwbHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMudHJhbnNmb3JtICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb24udHJhbnNmb3JtLCBvcHRpb25zLnRyYW5zZm9ybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlKFF1ZXJ5T3B0aW9uLnRyYW5zZm9ybSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5zZWFyY2ggaW5zdGFuY2VvZiBTZWFyY2hFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICAgIFF1ZXJ5T3B0aW9uLnNlYXJjaCxcbiAgICAgICAgICBvcHRpb25zLnNlYXJjaCBhcyBTZWFyY2hFeHByZXNzaW9uPFQ+LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLnNlYXJjaCwgb3B0aW9ucy5zZWFyY2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlbW92ZShRdWVyeU9wdGlvbi5zZWFyY2gpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyIGluc3RhbmNlb2YgRmlsdGVyRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgICBRdWVyeU9wdGlvbi5maWx0ZXIsXG4gICAgICAgICAgb3B0aW9ucy5maWx0ZXIgYXMgRmlsdGVyRXhwcmVzc2lvbjxUPixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5maWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbi5maWx0ZXIsIG9wdGlvbnMuZmlsdGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoUXVlcnlPcHRpb24uZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5vcmRlckJ5IGluc3RhbmNlb2YgT3JkZXJCeUV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgICAgUXVlcnlPcHRpb24ub3JkZXJCeSxcbiAgICAgICAgICBvcHRpb25zLm9yZGVyQnkgYXMgT3JkZXJCeUV4cHJlc3Npb248VD4sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMub3JkZXJCeSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLm9yZGVyQnksIG9wdGlvbnMub3JkZXJCeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlKFF1ZXJ5T3B0aW9uLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhvcHRpb25zKTtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvSnNvbigpO1xuICB9XG5cbiAgZnJvbUpzb24oanNvbjogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLm9wdGlvbnMuZnJvbUpzb24oanNvbik7XG4gIH1cblxuICB0b1N0cmluZyh7XG4gICAgZXNjYXBlLFxuICAgIHBhcnNlcixcbiAgfTogeyBlc2NhcGU/OiBib29sZWFuOyBwYXJzZXI/OiBQYXJzZXI8VD4gfSA9IHt9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvU3RyaW5nKHsgZXNjYXBlLCBwYXJzZXIgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './builder';
|
|
2
|
-
export * from './options';
|
|
3
|
-
export * from './handlers';
|
|
4
|
-
export * from './expressions';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2hhbmRsZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuIl19
|