angular-odata 0.90.0 → 0.99.2
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 +31 -25
- package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
- package/esm2020/lib/api.mjs +303 -0
- package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
- package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
- package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
- package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
- package/esm2020/lib/client.mjs +271 -0
- package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +8 -3
- package/esm2020/lib/helper.mjs +268 -0
- package/esm2020/lib/index.mjs +19 -0
- package/esm2020/lib/models/collection.mjs +757 -0
- package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
- package/esm2020/lib/models/model.mjs +453 -0
- package/esm2020/lib/models/options.mjs +956 -0
- package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +7 -7
- package/esm2020/lib/options.mjs +32 -0
- package/{esm2015/lib/resources/index.js → esm2020/lib/resources/index.mjs} +0 -0
- package/{esm2015/lib/resources/path/handlers.js → esm2020/lib/resources/path/handlers.mjs} +1 -1
- package/{esm2015/lib/resources/path/index.js → esm2020/lib/resources/path/index.mjs} +0 -0
- package/esm2020/lib/resources/path/segments.mjs +124 -0
- package/esm2020/lib/resources/query/builder.mjs +590 -0
- package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
- package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
- package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
- package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
- package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
- package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
- package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
- package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
- package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
- package/esm2020/lib/resources/query/handlers.mjs +188 -0
- package/{esm2015/lib/resources/query/index.js → esm2020/lib/resources/query/index.mjs} +0 -0
- package/esm2020/lib/resources/query/options.mjs +103 -0
- package/esm2020/lib/resources/request.mjs +167 -0
- package/esm2020/lib/resources/resource.mjs +318 -0
- package/esm2020/lib/resources/responses/annotations.mjs +119 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
- package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
- package/esm2020/lib/resources/responses/metadata.mjs +547 -0
- package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
- package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
- package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
- package/esm2020/lib/resources/types/action.mjs +104 -0
- package/esm2020/lib/resources/types/batch.mjs +314 -0
- package/esm2020/lib/resources/types/count.mjs +30 -0
- package/esm2020/lib/resources/types/entity-set.mjs +97 -0
- package/esm2020/lib/resources/types/entity.mjs +109 -0
- package/esm2020/lib/resources/types/function.mjs +140 -0
- package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
- package/esm2020/lib/resources/types/media.mjs +44 -0
- package/esm2020/lib/resources/types/metadata.mjs +33 -0
- package/esm2020/lib/resources/types/navigation-property.mjs +229 -0
- package/esm2020/lib/resources/types/options.mjs +2 -0
- package/esm2020/lib/resources/types/property.mjs +186 -0
- package/esm2020/lib/resources/types/reference.mjs +88 -0
- package/esm2020/lib/resources/types/singleton.mjs +129 -0
- package/esm2020/lib/resources/types/value.mjs +44 -0
- package/esm2020/lib/schema/annotation.mjs +37 -0
- package/esm2020/lib/schema/callable.mjs +62 -0
- package/esm2020/lib/schema/element.mjs +61 -0
- package/esm2020/lib/schema/entity-container.mjs +9 -0
- package/esm2020/lib/schema/entity-set.mjs +9 -0
- package/esm2020/lib/schema/enum-type.mjs +71 -0
- package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +2 -1
- package/esm2020/lib/schema/parsers/callable.mjs +113 -0
- package/esm2020/lib/schema/parsers/edm.mjs +95 -0
- package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
- package/esm2020/lib/schema/parsers/index.mjs +5 -0
- package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
- package/esm2020/lib/schema/schema.mjs +61 -0
- package/esm2020/lib/schema/structured-type.mjs +207 -0
- package/esm2020/lib/services/base.mjs +29 -0
- package/esm2020/lib/services/entity-set.mjs +143 -0
- package/esm2020/lib/services/entity.mjs +12 -0
- package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
- package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- package/{esm2015/lib/services/singleton.js → esm2020/lib/services/singleton.mjs} +1 -1
- package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/esm2020/lib/types.mjs +37 -0
- package/{esm2015/lib/utils/arraybuffers.js → esm2020/lib/utils/arraybuffers.mjs} +0 -0
- package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
- package/{esm2015/lib/utils/durations.js → esm2020/lib/utils/durations.mjs} +0 -0
- package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
- package/{esm2015/lib/utils/http.js → esm2020/lib/utils/http.mjs} +0 -0
- package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
- package/{esm2015/lib/utils/objects.js → esm2020/lib/utils/objects.mjs} +13 -13
- package/esm2020/lib/utils/odata.mjs +22 -0
- package/esm2020/lib/utils/strings.mjs +20 -0
- package/{esm2015/lib/utils/types.js → esm2020/lib/utils/types.mjs} +0 -0
- package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{angular-odata.js → angular-odata.mjs} +3427 -2872
- package/fesm2015/angular-odata.mjs.map +1 -0
- package/fesm2020/angular-odata.mjs +10589 -0
- package/fesm2020/angular-odata.mjs.map +1 -0
- package/lib/api.d.ts +14 -14
- package/lib/cache/cache.d.ts +2 -2
- package/lib/cache/storage.d.ts +1 -1
- package/lib/client.d.ts +3 -3
- package/lib/constants.d.ts +5 -2
- package/lib/index.d.ts +0 -1
- package/lib/models/collection.d.ts +21 -21
- package/lib/models/model.d.ts +34 -22
- package/lib/models/options.d.ts +26 -29
- package/lib/module.d.ts +1 -1
- package/lib/options.d.ts +1 -0
- package/lib/resources/path/segments.d.ts +2 -2
- package/lib/resources/query/builder.d.ts +7 -3
- package/lib/resources/query/expressions/base.d.ts +19 -0
- package/lib/resources/query/expressions/compute.d.ts +26 -0
- package/lib/resources/query/expressions/expand.d.ts +40 -0
- package/lib/resources/query/expressions/filter.d.ts +58 -0
- package/lib/resources/query/expressions/index.d.ts +6 -0
- package/lib/resources/query/expressions/orderby.d.ts +37 -0
- package/lib/resources/query/expressions/search.d.ts +47 -0
- package/lib/resources/query/expressions/select.d.ts +21 -0
- package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +74 -55
- package/lib/resources/query/handlers.d.ts +30 -19
- package/lib/resources/query/options.d.ts +3 -3
- package/lib/resources/request.d.ts +1 -1
- package/lib/resources/resource.d.ts +30 -12
- package/lib/resources/types/action.d.ts +12 -18
- package/lib/resources/types/batch.d.ts +10 -2
- package/lib/resources/types/count.d.ts +6 -4
- package/lib/resources/types/entity-set.d.ts +11 -14
- package/lib/resources/types/entity.d.ts +13 -15
- package/lib/resources/types/function.d.ts +11 -17
- package/lib/resources/types/media.d.ts +8 -6
- package/lib/resources/types/metadata.d.ts +3 -4
- package/lib/resources/types/navigation-property.d.ts +17 -22
- package/lib/resources/types/property.d.ts +13 -18
- package/lib/resources/types/reference.d.ts +41 -7
- package/lib/resources/types/singleton.d.ts +12 -15
- package/lib/resources/types/value.d.ts +9 -4
- package/lib/schema/annotation.d.ts +18 -0
- package/lib/schema/callable.d.ts +4 -20
- package/lib/schema/element.d.ts +45 -0
- package/lib/schema/entity-container.d.ts +2 -12
- package/lib/schema/entity-set.d.ts +2 -18
- package/lib/schema/enum-type.d.ts +3 -34
- package/lib/schema/index.d.ts +1 -0
- package/lib/{parsers → schema/parsers}/callable.d.ts +1 -1
- package/lib/{parsers → schema/parsers}/edm.d.ts +1 -1
- package/lib/{parsers → schema/parsers}/enum-type.d.ts +12 -11
- package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
- package/lib/{parsers → schema/parsers}/structured-type.d.ts +12 -12
- package/lib/schema/schema.d.ts +3 -10
- package/lib/schema/structured-type.d.ts +12 -24
- package/lib/services/base.d.ts +2 -2
- package/lib/services/entity-set.d.ts +2 -2
- package/lib/services/entity.d.ts +1 -1
- package/lib/services/singleton.d.ts +2 -2
- package/lib/settings.d.ts +5 -5
- package/lib/types.d.ts +1 -0
- package/lib/utils/strings.d.ts +1 -0
- package/package.json +21 -8
- package/bundles/angular-odata.umd.js +0 -11694
- package/bundles/angular-odata.umd.js.map +0 -1
- package/esm2015/lib/api.js +0 -297
- package/esm2015/lib/client.js +0 -272
- package/esm2015/lib/helper.js +0 -271
- package/esm2015/lib/index.js +0 -21
- package/esm2015/lib/models/collection.js +0 -717
- package/esm2015/lib/models/model.js +0 -419
- package/esm2015/lib/models/options.js +0 -924
- package/esm2015/lib/options.js +0 -31
- package/esm2015/lib/parsers/callable.js +0 -107
- package/esm2015/lib/parsers/edm.js +0 -95
- package/esm2015/lib/parsers/enum-type.js +0 -102
- package/esm2015/lib/parsers/index.js +0 -5
- package/esm2015/lib/parsers/structured-type.js +0 -388
- package/esm2015/lib/resources/path/segments.js +0 -121
- package/esm2015/lib/resources/query/builder.js +0 -544
- package/esm2015/lib/resources/query/expressions.js +0 -194
- package/esm2015/lib/resources/query/handlers.js +0 -192
- package/esm2015/lib/resources/query/options.js +0 -103
- package/esm2015/lib/resources/query/syntax.js +0 -349
- package/esm2015/lib/resources/request.js +0 -168
- package/esm2015/lib/resources/resource.js +0 -243
- package/esm2015/lib/resources/responses/annotations.js +0 -121
- package/esm2015/lib/resources/responses/metadata.js +0 -548
- package/esm2015/lib/resources/types/action.js +0 -105
- package/esm2015/lib/resources/types/batch.js +0 -294
- package/esm2015/lib/resources/types/count.js +0 -33
- package/esm2015/lib/resources/types/entity-set.js +0 -101
- package/esm2015/lib/resources/types/entity.js +0 -137
- package/esm2015/lib/resources/types/function.js +0 -130
- package/esm2015/lib/resources/types/media.js +0 -47
- package/esm2015/lib/resources/types/metadata.js +0 -36
- package/esm2015/lib/resources/types/navigation-property.js +0 -205
- package/esm2015/lib/resources/types/options.js +0 -2
- package/esm2015/lib/resources/types/property.js +0 -151
- package/esm2015/lib/resources/types/reference.js +0 -73
- package/esm2015/lib/resources/types/singleton.js +0 -167
- package/esm2015/lib/resources/types/value.js +0 -35
- package/esm2015/lib/schema/annotation.js +0 -7
- package/esm2015/lib/schema/callable.js +0 -82
- package/esm2015/lib/schema/entity-container.js +0 -22
- package/esm2015/lib/schema/entity-set.js +0 -33
- package/esm2015/lib/schema/enum-type.js +0 -126
- package/esm2015/lib/schema/schema.js +0 -60
- package/esm2015/lib/schema/structured-type.js +0 -217
- package/esm2015/lib/services/base.js +0 -23
- package/esm2015/lib/services/entity-set.js +0 -146
- package/esm2015/lib/services/entity.js +0 -12
- package/esm2015/lib/types.js +0 -37
- package/esm2015/lib/utils/odata.js +0 -21
- package/esm2015/lib/utils/strings.js +0 -13
- package/fesm2015/angular-odata.js.map +0 -1
- package/lib/resources/query/expressions.d.ts +0 -50
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
import { normalizeValue } from './builder';
|
|
2
|
-
function applyMixins(derivedCtor, constructors) {
|
|
3
|
-
constructors.forEach((baseCtor) => {
|
|
4
|
-
Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
|
|
5
|
-
Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
|
|
6
|
-
Object.create(null));
|
|
7
|
-
});
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
function render(value, aliases, normalize) {
|
|
11
|
-
if (typeof value === 'function') {
|
|
12
|
-
return render(value(syntax), aliases, normalize);
|
|
13
|
-
}
|
|
14
|
-
if (typeof value === 'object' && value !== null && 'render' in value) {
|
|
15
|
-
return render(value.render(aliases), aliases, normalize);
|
|
16
|
-
}
|
|
17
|
-
return normalize ? normalizeValue(value, aliases) : value;
|
|
18
|
-
}
|
|
19
|
-
export class Function {
|
|
20
|
-
constructor(name, values, normalize = true) {
|
|
21
|
-
this.name = name;
|
|
22
|
-
this.values = values;
|
|
23
|
-
this.normalize = normalize;
|
|
24
|
-
}
|
|
25
|
-
get [Symbol.toStringTag]() {
|
|
26
|
-
return 'Function';
|
|
27
|
-
}
|
|
28
|
-
toJSON() {
|
|
29
|
-
return {
|
|
30
|
-
name: this.name,
|
|
31
|
-
values: this.values,
|
|
32
|
-
normalize: this.normalize,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
render(aliases) {
|
|
36
|
-
let [field, ...values] = this.values;
|
|
37
|
-
field = render(field);
|
|
38
|
-
let params = [
|
|
39
|
-
field,
|
|
40
|
-
...values.map((v) => render(v, aliases, this.normalize)),
|
|
41
|
-
];
|
|
42
|
-
return `${this.name}(${params.join(', ')})`;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export class StringAndCollectionFunctions {
|
|
46
|
-
concat(field, value, normalize) {
|
|
47
|
-
return new Function('concat', [field, value], normalize);
|
|
48
|
-
}
|
|
49
|
-
contains(field, value, normalize) {
|
|
50
|
-
return new Function('contains', [field, value], normalize);
|
|
51
|
-
}
|
|
52
|
-
endsWith(field, value, normalize) {
|
|
53
|
-
return new Function('endswith', [field, value], normalize);
|
|
54
|
-
}
|
|
55
|
-
indexOf(field, value, normalize) {
|
|
56
|
-
return new Function('indexof', [field, value], normalize);
|
|
57
|
-
}
|
|
58
|
-
length(value, normalize) {
|
|
59
|
-
return new Function('length', [value], normalize);
|
|
60
|
-
}
|
|
61
|
-
startsWith(field, value, normalize) {
|
|
62
|
-
return new Function('startswith', [field, value], normalize);
|
|
63
|
-
}
|
|
64
|
-
subString(field, start, length, normalize) {
|
|
65
|
-
let values = [field, start];
|
|
66
|
-
if (length !== undefined) {
|
|
67
|
-
values.push(length);
|
|
68
|
-
}
|
|
69
|
-
return new Function('substring', values, normalize);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export class CollectionFunctions {
|
|
73
|
-
hasSubset(s1, s2) {
|
|
74
|
-
return new Function('hassubset', [s1, s2]);
|
|
75
|
-
}
|
|
76
|
-
hasSubsequence(s1, s2) {
|
|
77
|
-
return new Function('hassubsequence', [s1, s2]);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
export class StringFunctions {
|
|
81
|
-
matchesPattern(value, pattern) {
|
|
82
|
-
return new Function('matchesPattern', [value, pattern]);
|
|
83
|
-
}
|
|
84
|
-
toLower(value) {
|
|
85
|
-
return new Function('tolower', [value]);
|
|
86
|
-
}
|
|
87
|
-
toUpper(value) {
|
|
88
|
-
return new Function('toupper', [value]);
|
|
89
|
-
}
|
|
90
|
-
trim(value) {
|
|
91
|
-
return new Function('trim', [value]);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
export class DateAndTimeFunctions {
|
|
95
|
-
date(value) {
|
|
96
|
-
return new Function('date', [value]);
|
|
97
|
-
}
|
|
98
|
-
day(value) {
|
|
99
|
-
return new Function('day', [value]);
|
|
100
|
-
}
|
|
101
|
-
fractionalseconds(value) {
|
|
102
|
-
return new Function('fractionalseconds', [value]);
|
|
103
|
-
}
|
|
104
|
-
hour(value) {
|
|
105
|
-
return new Function('hour', [value]);
|
|
106
|
-
}
|
|
107
|
-
maxdatetime(value) {
|
|
108
|
-
return new Function('maxdatetime', [value]);
|
|
109
|
-
}
|
|
110
|
-
mindatetime(value) {
|
|
111
|
-
return new Function('mindatetime', [value]);
|
|
112
|
-
}
|
|
113
|
-
minute(value) {
|
|
114
|
-
return new Function('minute', [value]);
|
|
115
|
-
}
|
|
116
|
-
month(value) {
|
|
117
|
-
return new Function('month', [value]);
|
|
118
|
-
}
|
|
119
|
-
now() {
|
|
120
|
-
return new Function('now', []);
|
|
121
|
-
}
|
|
122
|
-
second(value) {
|
|
123
|
-
return new Function('second', [value]);
|
|
124
|
-
}
|
|
125
|
-
time(value) {
|
|
126
|
-
return new Function('time', [value]);
|
|
127
|
-
}
|
|
128
|
-
totaloffsetminutes(value) {
|
|
129
|
-
return new Function('totaloffsetminutes', [value]);
|
|
130
|
-
}
|
|
131
|
-
totalseconds(value) {
|
|
132
|
-
return new Function('totalseconds', [value]);
|
|
133
|
-
}
|
|
134
|
-
year(value) {
|
|
135
|
-
return new Function('year', [value]);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
export class ArithmeticFunctions {
|
|
139
|
-
ceiling(value) {
|
|
140
|
-
return new Function('ceiling', [value]);
|
|
141
|
-
}
|
|
142
|
-
floor(value) {
|
|
143
|
-
return new Function('floor', [value]);
|
|
144
|
-
}
|
|
145
|
-
round(value) {
|
|
146
|
-
return new Function('round', [value]);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
export class TypeFunctions {
|
|
150
|
-
cast(value, type) {
|
|
151
|
-
return new Function('cast', [value, type]);
|
|
152
|
-
}
|
|
153
|
-
isof(value, type) {
|
|
154
|
-
return new Function('isof', [value, type]);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
export class GeoFunctions {
|
|
158
|
-
distance(value, point, normalize) {
|
|
159
|
-
return new Function('distance', [value, point], normalize);
|
|
160
|
-
}
|
|
161
|
-
intersects(value, polygon, normalize) {
|
|
162
|
-
return new Function('intersects', [value, polygon], normalize);
|
|
163
|
-
}
|
|
164
|
-
length(value, normalize) {
|
|
165
|
-
return new Function('length', [value], normalize);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
export class ConditionalFunctions {
|
|
169
|
-
case(condition, value) {
|
|
170
|
-
return new Function('case', [condition, value]);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
export class Operator {
|
|
174
|
-
constructor(op, values, normalize = true) {
|
|
175
|
-
this.op = op;
|
|
176
|
-
this.values = values;
|
|
177
|
-
this.normalize = normalize;
|
|
178
|
-
}
|
|
179
|
-
get [Symbol.toStringTag]() {
|
|
180
|
-
return 'Operator';
|
|
181
|
-
}
|
|
182
|
-
toJSON() {
|
|
183
|
-
return {
|
|
184
|
-
op: this.op,
|
|
185
|
-
values: this.values,
|
|
186
|
-
normalize: this.normalize,
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
render(aliases) {
|
|
190
|
-
let [left, right] = this.values;
|
|
191
|
-
left = render(left);
|
|
192
|
-
if (right !== undefined) {
|
|
193
|
-
right = Array.isArray(right)
|
|
194
|
-
? `(${right.map((v) => render(v, aliases, this.normalize)).join(',')})`
|
|
195
|
-
: render(right, aliases, this.normalize);
|
|
196
|
-
return `${left} ${this.op} ${right}`;
|
|
197
|
-
}
|
|
198
|
-
return `${this.op}(${left})`;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
export class LogicalOperators {
|
|
202
|
-
eq(left, right, normalize) {
|
|
203
|
-
return new Operator('eq', [left, right], normalize);
|
|
204
|
-
}
|
|
205
|
-
ne(left, right, normalize) {
|
|
206
|
-
return new Operator('ne', [left, right], normalize);
|
|
207
|
-
}
|
|
208
|
-
gt(left, right, normalize) {
|
|
209
|
-
return new Operator('gt', [left, right], normalize);
|
|
210
|
-
}
|
|
211
|
-
ge(left, right, normalize) {
|
|
212
|
-
return new Operator('ge', [left, right], normalize);
|
|
213
|
-
}
|
|
214
|
-
lt(left, right, normalize) {
|
|
215
|
-
return new Operator('lt', [left, right], normalize);
|
|
216
|
-
}
|
|
217
|
-
le(left, right, normalize) {
|
|
218
|
-
return new Operator('le', [left, right], normalize);
|
|
219
|
-
}
|
|
220
|
-
and(left, right, normalize) {
|
|
221
|
-
return new Operator('and', [left, right], normalize);
|
|
222
|
-
}
|
|
223
|
-
or(left, right, normalize) {
|
|
224
|
-
return new Operator('or', [left, right], normalize);
|
|
225
|
-
}
|
|
226
|
-
not(value, normalize) {
|
|
227
|
-
return new Operator('not', [value], normalize);
|
|
228
|
-
}
|
|
229
|
-
has(left, right, normalize) {
|
|
230
|
-
return new Operator('has', [left, right], normalize);
|
|
231
|
-
}
|
|
232
|
-
in(left, right, normalize) {
|
|
233
|
-
return new Operator('in', [left, right], normalize);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
export class ArithmeticOperators {
|
|
237
|
-
add(left, right, normalize) {
|
|
238
|
-
return new Operator('add', [left, right], normalize);
|
|
239
|
-
}
|
|
240
|
-
sub(left, right, normalize) {
|
|
241
|
-
return new Operator('sub', [left, right], normalize);
|
|
242
|
-
}
|
|
243
|
-
mul(left, right, normalize) {
|
|
244
|
-
return new Operator('mul', [left, right], normalize);
|
|
245
|
-
}
|
|
246
|
-
div(left, right, normalize) {
|
|
247
|
-
return new Operator('div', [left, right], normalize);
|
|
248
|
-
}
|
|
249
|
-
mod(left, right, normalize) {
|
|
250
|
-
return new Operator('mod', [left, right], normalize);
|
|
251
|
-
}
|
|
252
|
-
neg(value, normalize) {
|
|
253
|
-
return new Operator('-', [value], normalize);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
export class Grouping {
|
|
257
|
-
constructor(group) {
|
|
258
|
-
this.group = group;
|
|
259
|
-
}
|
|
260
|
-
get [Symbol.toStringTag]() {
|
|
261
|
-
return 'Grouping';
|
|
262
|
-
}
|
|
263
|
-
toJSON() {
|
|
264
|
-
return {
|
|
265
|
-
group: this.group.toJSON(),
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
render(aliases) {
|
|
269
|
-
return `(${render(this.group, aliases)})`;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
export class Navigation {
|
|
273
|
-
constructor(field, value) {
|
|
274
|
-
this.field = field;
|
|
275
|
-
this.value = value;
|
|
276
|
-
}
|
|
277
|
-
get [Symbol.toStringTag]() {
|
|
278
|
-
return 'Navigation';
|
|
279
|
-
}
|
|
280
|
-
toJSON() {
|
|
281
|
-
return {
|
|
282
|
-
field: this.field,
|
|
283
|
-
value: this.value,
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
render(aliases) {
|
|
287
|
-
return `${this.field}/${render(this.value, aliases)}`;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
export class GroupingAndNavigationOperators {
|
|
291
|
-
grouping(value) {
|
|
292
|
-
return new Grouping(value);
|
|
293
|
-
}
|
|
294
|
-
navigation(field, value) {
|
|
295
|
-
return new Navigation(field, value);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
export class Lambda extends Operator {
|
|
299
|
-
constructor(op, values, normalize = true) {
|
|
300
|
-
super(op, values, normalize);
|
|
301
|
-
this.op = op;
|
|
302
|
-
this.values = values;
|
|
303
|
-
this.normalize = normalize;
|
|
304
|
-
}
|
|
305
|
-
get [Symbol.toStringTag]() {
|
|
306
|
-
return 'Lambda';
|
|
307
|
-
}
|
|
308
|
-
render(aliases) {
|
|
309
|
-
let [left, right] = this.values;
|
|
310
|
-
left = render(left, aliases);
|
|
311
|
-
let alias = left.split('/').pop().toLowerCase();
|
|
312
|
-
return `${left}/${this.op}(${alias}:${alias}/${render(right, aliases)})`;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
export class LambdaOperators {
|
|
316
|
-
any(field, value) {
|
|
317
|
-
return new Lambda('any', [field, value]);
|
|
318
|
-
}
|
|
319
|
-
all(field, value) {
|
|
320
|
-
return new Lambda('all', [field, value]);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
export class ODataOperators {
|
|
324
|
-
}
|
|
325
|
-
applyMixins(ODataOperators, [
|
|
326
|
-
LogicalOperators,
|
|
327
|
-
ArithmeticOperators,
|
|
328
|
-
GroupingAndNavigationOperators,
|
|
329
|
-
LambdaOperators,
|
|
330
|
-
]);
|
|
331
|
-
export const operators = new ODataOperators();
|
|
332
|
-
export class ODataFunctions {
|
|
333
|
-
}
|
|
334
|
-
applyMixins(ODataFunctions, [
|
|
335
|
-
StringAndCollectionFunctions,
|
|
336
|
-
CollectionFunctions,
|
|
337
|
-
StringFunctions,
|
|
338
|
-
DateAndTimeFunctions,
|
|
339
|
-
ArithmeticFunctions,
|
|
340
|
-
TypeFunctions,
|
|
341
|
-
GeoFunctions,
|
|
342
|
-
ConditionalFunctions,
|
|
343
|
-
]);
|
|
344
|
-
export const functions = new ODataFunctions();
|
|
345
|
-
export class ODataSyntax {
|
|
346
|
-
}
|
|
347
|
-
applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
|
|
348
|
-
export const syntax = new ODataSyntax();
|
|
349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQWMzQyxTQUFTLFdBQVcsQ0FBQyxXQUFnQixFQUFFLFlBQW1CO0lBQ3hELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNoQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzlELE1BQU0sQ0FBQyxjQUFjLENBQ25CLFdBQVcsQ0FBQyxTQUFTLEVBQ3JCLElBQUksRUFDSixNQUFNLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7Z0JBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3RCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUNiLEtBQVUsRUFDVixPQUEyQixFQUMzQixTQUFtQjtJQUVuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFO1FBQ3BFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFEO0lB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QUMzQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FBYztDQUFNO0FBT2pDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7SUFDMUIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsZUFBZTtDQUNoQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXdCLElBQUksY0FBYyxFQUFPLENBQUM7QUFFeEUsTUFBTSxPQUFPLGNBQWM7Q0FBTTtBQVdqQyxXQUFXLENBQUMsY0FBYyxFQUFFO0lBQzFCLDRCQUE0QjtJQUM1QixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLFlBQVk7SUFDWixvQkFBb0I7Q0FDckIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF3QixJQUFJLGNBQWMsRUFBTyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxXQUFXO0NBQU07QUFFOUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBcUIsSUFBSSxXQUFXLEVBQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZVZhbHVlIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi9idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJhYmxlIHtcbiAgcmVuZGVyKGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXSk6IHN0cmluZztcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICB0b0pTT04oKTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBGdW5jczxUPiA9IChcbiAgeDogT0RhdGFTeW50YXg8VD5cbikgPT4gRnVuY3Rpb248VD4gfCBPcGVyYXRvcjxUPiB8IEdyb3VwaW5nPFQ+IHwgTmF2aWdhdGlvbjxULCBhbnk+O1xuZXhwb3J0IHR5cGUgRmllbGQ8VD4gPSBrZXlvZiBUIHwgRnVuY3M8a2V5b2YgVD47XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdLFxuICBub3JtYWxpemU/OiBib29sZWFuXG4pOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIGFsaWFzZXMsIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ3JlbmRlcicgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlLnJlbmRlcihhbGlhc2VzKSwgYWxpYXNlcywgbm9ybWFsaXplKTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplID8gbm9ybWFsaXplVmFsdWUodmFsdWUsIGFsaWFzZXMpIDogdmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBub3JtYWxpemU6IGJvb2xlYW4gPSB0cnVlXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdGdW5jdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdKTogc3RyaW5nIHtcbiAgICBsZXQgW2ZpZWxkLCAuLi52YWx1ZXNdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBmaWVsZCA9IHJlbmRlcihmaWVsZCk7XG4gICAgbGV0IHBhcmFtcyA9IFtcbiAgICAgIGZpZWxkLFxuICAgICAgLi4udmFsdWVzLm1hcCgodikgPT4gcmVuZGVyKHYsIGFsaWFzZXMsIHRoaXMubm9ybWFsaXplKSksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSgke3BhcmFtcy5qb2luKCcsICcpfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgY29uY2F0KGZpZWxkOiBULCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29uY2F0JywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgY29udGFpbnMoZmllbGQ6IFQsIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjb250YWlucycsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGVuZHNXaXRoKGZpZWxkOiBULCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZW5kc3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuICBpbmRleE9mKGZpZWxkOiBULCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaW5kZXhvZicsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlbmd0aCh2YWx1ZTogVCwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2xlbmd0aCcsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgc3RhcnRzV2l0aChmaWVsZDogVCwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N0YXJ0c3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuICBzdWJTdHJpbmcoZmllbGQ6IFQsIHN0YXJ0OiBhbnksIGxlbmd0aD86IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIGxldCB2YWx1ZXMgPSBbZmllbGQsIHN0YXJ0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcywgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGhhc1N1YnNldChzMTogVCwgczI6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hhc3N1YnNldCcsIFtzMSwgczJdKTtcbiAgfVxuICBoYXNTdWJzZXF1ZW5jZShzMTogVCwgczI6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hhc3N1YnNlcXVlbmNlJywgW3MxLCBzMl0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdGdW5jdGlvbnM8VD4ge1xuICBtYXRjaGVzUGF0dGVybih2YWx1ZTogVCB8IHN0cmluZywgcGF0dGVybjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF0Y2hlc1BhdHRlcm4nLCBbdmFsdWUsIHBhdHRlcm5dKTtcbiAgfVxuICB0b0xvd2VyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG9sb3dlcicsIFt2YWx1ZV0pO1xuICB9XG4gIHRvVXBwZXIodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3VwcGVyJywgW3ZhbHVlXSk7XG4gIH1cbiAgdHJpbSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RyaW0nLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0ZUFuZFRpbWVGdW5jdGlvbnM8VD4ge1xuICBkYXRlKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIGRheSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RheScsIFt2YWx1ZV0pO1xuICB9XG4gIGZyYWN0aW9uYWxzZWNvbmRzKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZnJhY3Rpb25hbHNlY29uZHMnLCBbdmFsdWVdKTtcbiAgfVxuICBob3VyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaG91cicsIFt2YWx1ZV0pO1xuICB9XG4gIG1heGRhdGV0aW1lKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF4ZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW5kYXRldGltZSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbmRhdGV0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgbWludXRlKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWludXRlJywgW3ZhbHVlXSk7XG4gIH1cbiAgbW9udGgodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtb250aCcsIFt2YWx1ZV0pO1xuICB9XG4gIG5vdygpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdub3cnLCBbXSk7XG4gIH1cbiAgc2Vjb25kKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc2Vjb25kJywgW3ZhbHVlXSk7XG4gIH1cbiAgdGltZSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbG9mZnNldG1pbnV0ZXModmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbG9mZnNldG1pbnV0ZXMnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbHNlY29uZHModmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbHNlY29uZHMnLCBbdmFsdWVdKTtcbiAgfVxuICB5ZWFyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigneWVhcicsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljRnVuY3Rpb25zPFQ+IHtcbiAgY2VpbGluZyh2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NlaWxpbmcnLCBbdmFsdWVdKTtcbiAgfVxuICBmbG9vcih2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Zsb29yJywgW3ZhbHVlXSk7XG4gIH1cbiAgcm91bmQodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdyb3VuZCcsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlRnVuY3Rpb25zPFQ+IHtcbiAgY2FzdCh2YWx1ZTogVCB8IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc3QnLCBbdmFsdWUsIHR5cGVdKTtcbiAgfVxuXG4gIGlzb2YodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdpc29mJywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0Z1bmN0aW9uczxUPiB7XG4gIGRpc3RhbmNlKHZhbHVlOiBULCBwb2ludDogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGlzdGFuY2UnLCBbdmFsdWUsIHBvaW50XSwgbm9ybWFsaXplKTtcbiAgfVxuICBpbnRlcnNlY3RzKHZhbHVlOiBULCBwb2x5Z29uOiBzdHJpbmcsIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdpbnRlcnNlY3RzJywgW3ZhbHVlLCBwb2x5Z29uXSwgbm9ybWFsaXplKTtcbiAgfVxuICBsZW5ndGgodmFsdWU6IFQsIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdsZW5ndGgnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbEZ1bmN0aW9uczxUPiB7XG4gIGNhc2UoY29uZGl0aW9uOiBUIHwgc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY2FzZScsIFtjb25kaXRpb24sIHZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhdG9yPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBub3JtYWxpemU6IGJvb2xlYW4gPSB0cnVlXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdPcGVyYXRvcic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW10pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQpO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0Lm1hcCgodikgPT4gcmVuZGVyKHYsIGFsaWFzZXMsIHRoaXMubm9ybWFsaXplKSkuam9pbignLCcpfSlgXG4gICAgICAgIDogcmVuZGVyKHJpZ2h0LCBhbGlhc2VzLCB0aGlzLm5vcm1hbGl6ZSk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHt0aGlzLm9wfSAke3JpZ2h0fWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLm9wfSgke2xlZnR9KWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvZ2ljYWxPcGVyYXRvcnM8VD4ge1xuICBlcShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdlcScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbmUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGd0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2d0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdnZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbHQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2xlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBhbmQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignYW5kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBvcihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdvcicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbm90KHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdub3QnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGhhcyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdoYXMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2luJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY09wZXJhdG9yczxUPiB7XG4gIGFkZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdhZGQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIHN1YihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdzdWInLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG11bChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtdWwnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGRpdihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdkaXYnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1vZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtb2QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lZyh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignLScsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBncm91cDogUmVuZGVyYWJsZSkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdHcm91cGluZyc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCBhbGlhc2VzKX0pYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbjxULCBOPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZmllbGQ6IFQsIHByb3RlY3RlZCB2YWx1ZTogRmllbGQ8Tj4pIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTmF2aWdhdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmZpZWxkfS8ke3JlbmRlcih0aGlzLnZhbHVlLCBhbGlhc2VzKX1gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcm91cGluZ0FuZE5hdmlnYXRpb25PcGVyYXRvcnM8VD4ge1xuICBncm91cGluZyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cGluZyh2YWx1ZSk7XG4gIH1cblxuICBuYXZpZ2F0aW9uPE4+KGZpZWxkOiBULCB2YWx1ZTogRmllbGQ8Tj4pIHtcbiAgICByZXR1cm4gbmV3IE5hdmlnYXRpb248VCwgTj4oZmllbGQsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGV4dGVuZHMgT3BlcmF0b3I8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3A6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICBzdXBlcihvcCwgdmFsdWVzLCBub3JtYWxpemUpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHJlbmRlcihhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW10pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIGFsaWFzZXMpO1xuICAgIGxldCBhbGlhcyA9IGxlZnQuc3BsaXQoJy8nKS5wb3AoKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KCR7YWxpYXN9OiR7YWxpYXN9LyR7cmVuZGVyKHJpZ2h0LCBhbGlhc2VzKX0pYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhT3BlcmF0b3JzPFQ+IHtcbiAgYW55KGZpZWxkOiBULCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FueScsIFtmaWVsZCwgdmFsdWVdKTtcbiAgfVxuXG4gIGFsbChmaWVsZDogVCwgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbGwnLCBbZmllbGQsIHZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhT3BlcmF0b3JzPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhT3BlcmF0b3JzPFQ+XG4gIGV4dGVuZHMgTG9naWNhbE9wZXJhdG9yczxUPixcbiAgICBBcml0aG1ldGljT3BlcmF0b3JzPFQ+LFxuICAgIEdyb3VwaW5nQW5kTmF2aWdhdGlvbk9wZXJhdG9yczxUPixcbiAgICBMYW1iZGFPcGVyYXRvcnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFPcGVyYXRvcnMsIFtcbiAgTG9naWNhbE9wZXJhdG9ycyxcbiAgQXJpdGhtZXRpY09wZXJhdG9ycyxcbiAgR3JvdXBpbmdBbmROYXZpZ2F0aW9uT3BlcmF0b3JzLFxuICBMYW1iZGFPcGVyYXRvcnMsXG5dKTtcbmV4cG9ydCBjb25zdCBvcGVyYXRvcnM6IE9EYXRhT3BlcmF0b3JzPGFueT4gPSBuZXcgT0RhdGFPcGVyYXRvcnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFGdW5jdGlvbnM8VD5cbiAgZXh0ZW5kcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4sXG4gICAgU3RyaW5nRnVuY3Rpb25zPFQ+LFxuICAgIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+LFxuICAgIEFyaXRobWV0aWNGdW5jdGlvbnM8VD4sXG4gICAgVHlwZUZ1bmN0aW9uczxUPixcbiAgICBHZW9GdW5jdGlvbnM8VD4sXG4gICAgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFGdW5jdGlvbnMsIFtcbiAgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgU3RyaW5nRnVuY3Rpb25zLFxuICBEYXRlQW5kVGltZUZ1bmN0aW9ucyxcbiAgQXJpdGhtZXRpY0Z1bmN0aW9ucyxcbiAgVHlwZUZ1bmN0aW9ucyxcbiAgR2VvRnVuY3Rpb25zLFxuICBDb25kaXRpb25hbEZ1bmN0aW9ucyxcbl0pO1xuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogT0RhdGFGdW5jdGlvbnM8YW55PiA9IG5ldyBPRGF0YUZ1bmN0aW9uczxhbnk+KCk7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVN5bnRheDxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YVN5bnRheDxUPiBleHRlbmRzIE9EYXRhT3BlcmF0b3JzPFQ+LCBPRGF0YUZ1bmN0aW9uczxUPiB7fVxuYXBwbHlNaXhpbnMoT0RhdGFTeW50YXgsIFtPRGF0YU9wZXJhdG9ycywgT0RhdGFGdW5jdGlvbnNdKTtcblxuZXhwb3J0IGNvbnN0IHN5bnRheDogT0RhdGFTeW50YXg8YW55PiA9IG5ldyBPRGF0YVN5bnRheDxhbnk+KCk7XG4iXX0=
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { $BATCH, $QUERY, ACCEPT, IF_MATCH_HEADER, IF_NONE_MATCH_HEADER, PREFER, TEXT_PLAIN, } from '../constants';
|
|
2
|
-
import { Http } from '../utils';
|
|
3
|
-
export class ODataRequest {
|
|
4
|
-
constructor(init) {
|
|
5
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
6
|
-
this._method = init.method;
|
|
7
|
-
this.resource = init.resource;
|
|
8
|
-
this.api = init.api;
|
|
9
|
-
this.reportProgress = init.reportProgress;
|
|
10
|
-
this.observe = init.observe;
|
|
11
|
-
// Response Type
|
|
12
|
-
this._responseType = init.responseType;
|
|
13
|
-
// The Body
|
|
14
|
-
this._body = init.body !== undefined ? init.body : null;
|
|
15
|
-
if (this._body !== null)
|
|
16
|
-
this._body = this.resource.serialize(this._body);
|
|
17
|
-
this.withCredentials =
|
|
18
|
-
init.withCredentials === undefined
|
|
19
|
-
? this.api.options.withCredentials
|
|
20
|
-
: init.withCredentials;
|
|
21
|
-
this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;
|
|
22
|
-
this.bodyQueryOptions =
|
|
23
|
-
init.bodyQueryOptions || this.api.options.bodyQueryOptions;
|
|
24
|
-
// The Path and Params from resource
|
|
25
|
-
const [resourcePath, resourceParams] = this.resource.pathAndParams();
|
|
26
|
-
this._path = resourcePath;
|
|
27
|
-
//#region Headers
|
|
28
|
-
const customHeaders = {};
|
|
29
|
-
if (typeof init.etag === 'string') {
|
|
30
|
-
if (this.api.options.etag.ifMatch &&
|
|
31
|
-
['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1)
|
|
32
|
-
customHeaders[IF_MATCH_HEADER] = init.etag;
|
|
33
|
-
else if (this.api.options.etag.ifNoneMatch &&
|
|
34
|
-
['GET'].indexOf(this._method) !== -1)
|
|
35
|
-
customHeaders[IF_NONE_MATCH_HEADER] = init.etag;
|
|
36
|
-
}
|
|
37
|
-
const accept = [];
|
|
38
|
-
// Metadata
|
|
39
|
-
if (((_a = this.api.options.accept) === null || _a === void 0 ? void 0 : _a.metadata) !== undefined)
|
|
40
|
-
accept.push(`odata.metadata=${(_b = this.api.options.accept) === null || _b === void 0 ? void 0 : _b.metadata}`);
|
|
41
|
-
// IEEE754
|
|
42
|
-
if (((_c = this.api.options.accept) === null || _c === void 0 ? void 0 : _c.ieee754Compatible) !== undefined)
|
|
43
|
-
accept.push(`IEEE754Compatible=${(_d = this.api.options.accept) === null || _d === void 0 ? void 0 : _d.ieee754Compatible}`);
|
|
44
|
-
// streaming
|
|
45
|
-
if (((_e = this.api.options.accept) === null || _e === void 0 ? void 0 : _e.streaming) !== undefined)
|
|
46
|
-
accept.push(`streaming=${(_f = this.api.options.accept) === null || _f === void 0 ? void 0 : _f.streaming}`);
|
|
47
|
-
// ExponentialDecimals
|
|
48
|
-
if (((_g = this.api.options.accept) === null || _g === void 0 ? void 0 : _g.exponentialDecimals) !== undefined)
|
|
49
|
-
accept.push(`ExponentialDecimals=${(_h = this.api.options.accept) === null || _h === void 0 ? void 0 : _h.exponentialDecimals}`);
|
|
50
|
-
if (accept.length > 0)
|
|
51
|
-
customHeaders[ACCEPT] = [
|
|
52
|
-
`application/json;${accept.join(';')}`,
|
|
53
|
-
'text/plain',
|
|
54
|
-
'*/*',
|
|
55
|
-
];
|
|
56
|
-
const prefer = [];
|
|
57
|
-
// Return
|
|
58
|
-
if (((_j = this.api.options.prefer) === null || _j === void 0 ? void 0 : _j.return) !== undefined &&
|
|
59
|
-
['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1)
|
|
60
|
-
prefer.push(`return=${(_k = this.api.options.prefer) === null || _k === void 0 ? void 0 : _k.return}`);
|
|
61
|
-
// MaxPageSize
|
|
62
|
-
if (((_l = this.api.options.prefer) === null || _l === void 0 ? void 0 : _l.maxPageSize) !== undefined &&
|
|
63
|
-
['GET'].indexOf(this._method) !== -1)
|
|
64
|
-
prefer.push(`odata.maxpagesize=${(_m = this.api.options.prefer) === null || _m === void 0 ? void 0 : _m.maxPageSize}`);
|
|
65
|
-
// Annotations
|
|
66
|
-
if (((_o = this.api.options.prefer) === null || _o === void 0 ? void 0 : _o.includeAnnotations) !== undefined &&
|
|
67
|
-
['GET'].indexOf(this._method) !== -1)
|
|
68
|
-
prefer.push(`odata.include-annotations=${(_p = this.api.options.prefer) === null || _p === void 0 ? void 0 : _p.includeAnnotations}`);
|
|
69
|
-
if (((_q = this.api.options.prefer) === null || _q === void 0 ? void 0 : _q.continueOnError) === true &&
|
|
70
|
-
['POST'].indexOf(this._method) !== -1)
|
|
71
|
-
prefer.push(`odata.continue-on-error`);
|
|
72
|
-
if (prefer.length > 0)
|
|
73
|
-
customHeaders[PREFER] = prefer;
|
|
74
|
-
this._headers = Http.mergeHttpHeaders(this.api.options.headers, customHeaders, init.headers || {});
|
|
75
|
-
//#endregion
|
|
76
|
-
//#region Params
|
|
77
|
-
const customParams = {};
|
|
78
|
-
if (['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1 &&
|
|
79
|
-
'$select' in resourceParams) {
|
|
80
|
-
customParams['$select'] = resourceParams['$select'];
|
|
81
|
-
}
|
|
82
|
-
if (['POST'].indexOf(this._method) !== -1 && '$expand' in resourceParams) {
|
|
83
|
-
customParams['$expand'] = resourceParams['$expand'];
|
|
84
|
-
}
|
|
85
|
-
if (['GET'].indexOf(this._method) !== -1) {
|
|
86
|
-
Object.assign(customParams, resourceParams);
|
|
87
|
-
}
|
|
88
|
-
const params = Http.mergeHttpParams(this.api.options.params, customParams, init.params || {});
|
|
89
|
-
this._params =
|
|
90
|
-
this._responseType === 'entity'
|
|
91
|
-
? Http.withoutHttpParams(params, [
|
|
92
|
-
'$filter',
|
|
93
|
-
'$orderby',
|
|
94
|
-
'$count',
|
|
95
|
-
'$skip',
|
|
96
|
-
'$top',
|
|
97
|
-
])
|
|
98
|
-
: params;
|
|
99
|
-
//#endregion
|
|
100
|
-
this._queryBody =
|
|
101
|
-
this._method === 'GET' &&
|
|
102
|
-
this.bodyQueryOptions.length > 0 &&
|
|
103
|
-
this.bodyQueryOptions.some((name) => this._params.has(`$${name}`));
|
|
104
|
-
}
|
|
105
|
-
get responseType() {
|
|
106
|
-
return this._responseType &&
|
|
107
|
-
['property', 'entity', 'entities'].indexOf(this._responseType) !== -1
|
|
108
|
-
? 'json'
|
|
109
|
-
: this._responseType === 'value'
|
|
110
|
-
? 'text'
|
|
111
|
-
: this._responseType;
|
|
112
|
-
}
|
|
113
|
-
get path() {
|
|
114
|
-
return this._queryBody ? `${this._path}/${$QUERY}` : this._path;
|
|
115
|
-
}
|
|
116
|
-
get method() {
|
|
117
|
-
return this._queryBody ? 'POST' : this._method;
|
|
118
|
-
}
|
|
119
|
-
get body() {
|
|
120
|
-
if (this._queryBody) {
|
|
121
|
-
let [, bodyParams] = Http.splitHttpParams(this._params, this.bodyQueryOptions.map((name) => `$${name}`));
|
|
122
|
-
return bodyParams.toString();
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
return this._body;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
get params() {
|
|
129
|
-
if (this._queryBody) {
|
|
130
|
-
let [queryParams] = Http.splitHttpParams(this._params, this.bodyQueryOptions.map((name) => `$${name}`));
|
|
131
|
-
return queryParams;
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
return this._params;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
get headers() {
|
|
138
|
-
if (this._queryBody) {
|
|
139
|
-
return Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN });
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
return this._headers;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
get pathWithParams() {
|
|
146
|
-
let path = this._path;
|
|
147
|
-
if (this._params.keys().length > 0) {
|
|
148
|
-
path = `${path}?${this._params}`;
|
|
149
|
-
}
|
|
150
|
-
return path;
|
|
151
|
-
}
|
|
152
|
-
get url() {
|
|
153
|
-
return `${this.api.serviceRootUrl}${this._path}`;
|
|
154
|
-
}
|
|
155
|
-
get urlWithParams() {
|
|
156
|
-
return `${this.api.serviceRootUrl}${this.pathWithParams}`;
|
|
157
|
-
}
|
|
158
|
-
isBatch() {
|
|
159
|
-
return this._path.endsWith($BATCH);
|
|
160
|
-
}
|
|
161
|
-
isFetch() {
|
|
162
|
-
return ['GET'].indexOf(this._method) !== -1;
|
|
163
|
-
}
|
|
164
|
-
isMutate() {
|
|
165
|
-
return ['PUT', 'PATCH', 'POST', 'DELETE'].indexOf(this._method) !== -1;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sVUFBVSxHQUNYLE1BQU0sY0FBYyxDQUFDO0FBR3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFLaEMsTUFBTSxPQUFPLFlBQVk7SUE2QnZCLFlBQVksSUEyQlg7O1FBQ0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU1QixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXZDLFdBQVc7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUk7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsZUFBZTtZQUNsQixJQUFJLENBQUMsZUFBZSxL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Q3RCO0lBQ0gsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgJEJBVENILFxuICAkUVVFUlksXG4gIEFDQ0VQVCxcbiAgSUZfTUFUQ0hfSEVBREVSLFxuICBJRl9OT05FX01BVENIX0hFQURFUixcbiAgUFJFRkVSLFxuICBURVhUX1BMQUlOLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IEh0dHAgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFSZXF1ZXN0PFQ+IHtcbiAgcmVhZG9ubHkgYXBpOiBPRGF0YUFwaTtcbiAgcmVhZG9ubHkgb2JzZXJ2ZTogJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICByZWFkb25seSByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGJvZHlRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgcmVhZG9ubHkgZmV0Y2hQb2xpY3k6XG4gICAgfCAnY2FjaGUtZmlyc3QnXG4gICAgfCAnY2FjaGUtYW5kLW5ldHdvcmsnXG4gICAgfCAnbmV0d29yay1vbmx5J1xuICAgIHwgJ25vLWNhY2hlJ1xuICAgIHwgJ2NhY2hlLW9ubHknO1xuICByZWFkb25seSByZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxUPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzcG9uc2VUeXBlPzpcbiAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICB8ICdibG9iJ1xuICAgIHwgJ2pzb24nXG4gICAgfCAndGV4dCdcbiAgICB8ICd2YWx1ZSdcbiAgICB8ICdwcm9wZXJ0eSdcbiAgICB8ICdlbnRpdHknXG4gICAgfCAnZW50aXRpZXMnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRob2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYm9keTogYW55IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyczogSHR0cEhlYWRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcmFtczogSHR0cFBhcmFtcztcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyeUJvZHk6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoaW5pdDoge1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIGFwaTogT0RhdGFBcGk7XG4gICAgcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8VD47XG4gICAgYm9keTogYW55O1xuICAgIG9ic2VydmU6ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICAgIHwgJ2Jsb2InXG4gICAgICB8ICdqc29uJ1xuICAgICAgfCAndGV4dCdcbiAgICAgIHwgJ3ZhbHVlJ1xuICAgICAgfCAncHJvcGVydHknXG4gICAgICB8ICdlbnRpdHknXG4gICAgICB8ICdlbnRpdGllcyc7XG4gICAgZmV0Y2hQb2xpY3k/OlxuICAgICAgfCAnY2FjaGUtZmlyc3QnXG4gICAgICB8ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICAgIHwgJ25ldHdvcmstb25seSdcbiAgICAgIHwgJ25vLWNhY2hlJ1xuICAgICAgfCAnY2FjaGUtb25seSc7XG4gICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICB9KSB7XG4gICAgdGhpcy5fbWV0aG9kID0gaW5pdC5tZXRob2Q7XG4gICAgdGhpcy5yZXNvdXJjZSA9IGluaXQucmVzb3VyY2U7XG5cbiAgICB0aGlzLmFwaSA9IGluaXQuYXBpO1xuICAgIHRoaXMucmVwb3J0UHJvZ3Jlc3MgPSBpbml0LnJlcG9ydFByb2dyZXNzO1xuICAgIHRoaXMub2JzZXJ2ZSA9IGluaXQub2JzZXJ2ZTtcblxuICAgIC8vIFJlc3BvbnNlIFR5cGVcbiAgICB0aGlzLl9yZXNwb25zZVR5cGUgPSBpbml0LnJlc3BvbnNlVHlwZTtcblxuICAgIC8vIFRoZSBCb2R5XG4gICAgdGhpcy5fYm9keSA9IGluaXQuYm9keSAhPT0gdW5kZWZpbmVkID8gaW5pdC5ib2R5IDogbnVsbDtcbiAgICBpZiAodGhpcy5fYm9keSAhPT0gbnVsbCkgdGhpcy5fYm9keSA9IHRoaXMucmVzb3VyY2Uuc2VyaWFsaXplKHRoaXMuX2JvZHkpO1xuXG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPVxuICAgICAgaW5pdC53aXRoQ3JlZGVudGlhbHMgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuYXBpLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzXG4gICAgICAgIDogaW5pdC53aXRoQ3JlZGVudGlhbHM7XG4gICAgdGhpcy5mZXRjaFBvbGljeSA9IGluaXQuZmV0Y2hQb2xpY3kgfHwgdGhpcy5hcGkub3B0aW9ucy5mZXRjaFBvbGljeTtcbiAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMgPVxuICAgICAgaW5pdC5ib2R5UXVlcnlPcHRpb25zIHx8IHRoaXMuYXBpLm9wdGlvbnMuYm9keVF1ZXJ5T3B0aW9ucztcblxuICAgIC8vIFRoZSBQYXRoIGFuZCBQYXJhbXMgZnJvbSByZXNvdXJjZVxuICAgIGNvbnN0IFtyZXNvdXJjZVBhdGgsIHJlc291cmNlUGFyYW1zXSA9IHRoaXMucmVzb3VyY2UucGF0aEFuZFBhcmFtcygpO1xuICAgIHRoaXMuX3BhdGggPSByZXNvdXJjZVBhdGg7XG5cbiAgICAvLyNyZWdpb24gSGVhZGVyc1xuICAgIGNvbnN0IGN1c3RvbUhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gPSB7fTtcbiAgICBpZiAodHlwZW9mIGluaXQuZXRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hcGkub3B0aW9ucy5ldGFnLmlmTWF0Y2ggJiZcbiAgICAgICAgWydQVVQnLCAnUEFUQ0gnLCAnREVMRVRFJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgICAgKVxuICAgICAgICBjdXN0b21IZWFkZXJzW0lGX01BVENIX0hFQURFUl0gPSBpbml0LmV0YWc7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5hcGkub3B0aW9ucy5ldGFnLmlmTm9uZU1hdGNoICYmXG4gICAgICAgIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgICAgKVxuICAgICAgICBjdXN0b21IZWFkZXJzW0lGX05PTkVfTUFUQ0hfSEVBREVSXSA9IGluaXQuZXRhZztcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHQgPSBbXTtcbiAgICAvLyBNZXRhZGF0YVxuICAgIGlmICh0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8ubWV0YWRhdGEgIT09IHVuZGVmaW5lZClcbiAgICAgIGFjY2VwdC5wdXNoKGBvZGF0YS5tZXRhZGF0YT0ke3RoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5tZXRhZGF0YX1gKTtcbiAgICAvLyBJRUVFNzU0XG4gICAgaWYgKHRoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5pZWVlNzU0Q29tcGF0aWJsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgYWNjZXB0LnB1c2goXG4gICAgICAgIGBJRUVFNzU0Q29tcGF0aWJsZT0ke3RoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5pZWVlNzU0Q29tcGF0aWJsZX1gXG4gICAgICApO1xuICAgIC8vIHN0cmVhbWluZ1xuICAgIGlmICh0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8uc3RyZWFtaW5nICE9PSB1bmRlZmluZWQpXG4gICAgICBhY2NlcHQucHVzaChgc3RyZWFtaW5nPSR7dGhpcy5hcGkub3B0aW9ucy5hY2NlcHQ/LnN0cmVhbWluZ31gKTtcbiAgICAvLyBFeHBvbmVudGlhbERlY2ltYWxzXG4gICAgaWYgKHRoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5leHBvbmVudGlhbERlY2ltYWxzICE9PSB1bmRlZmluZWQpXG4gICAgICBhY2NlcHQucHVzaChcbiAgICAgICAgYEV4cG9uZW50aWFsRGVjaW1hbHM9JHt0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8uZXhwb25lbnRpYWxEZWNpbWFsc31gXG4gICAgICApO1xuICAgIGlmIChhY2NlcHQubGVuZ3RoID4gMClcbiAgICAgIGN1c3RvbUhlYWRlcnNbQUNDRVBUXSA9IFtcbiAgICAgICAgYGFwcGxpY2F0aW9uL2pzb247JHthY2NlcHQuam9pbignOycpfWAsXG4gICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgJyovKicsXG4gICAgICBdO1xuXG4gICAgY29uc3QgcHJlZmVyID0gW107XG4gICAgLy8gUmV0dXJuXG4gICAgaWYgKFxuICAgICAgdGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/LnJldHVybiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgIClcbiAgICAgIHByZWZlci5wdXNoKGByZXR1cm49JHt0aGlzLmFwaS5vcHRpb25zLnByZWZlcj8ucmV0dXJufWApO1xuICAgIC8vIE1heFBhZ2VTaXplXG4gICAgaWYgKFxuICAgICAgdGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/Lm1heFBhZ2VTaXplICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgIClcbiAgICAgIHByZWZlci5wdXNoKGBvZGF0YS5tYXhwYWdlc2l6ZT0ke3RoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5tYXhQYWdlU2l6ZX1gKTtcbiAgICAvLyBBbm5vdGF0aW9uc1xuICAgIGlmIChcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5pbmNsdWRlQW5ub3RhdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgWydHRVQnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xXG4gICAgKVxuICAgICAgcHJlZmVyLnB1c2goXG4gICAgICAgIGBvZGF0YS5pbmNsdWRlLWFubm90YXRpb25zPSR7dGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/LmluY2x1ZGVBbm5vdGF0aW9uc31gXG4gICAgICApO1xuICAgIGlmIChcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5jb250aW51ZU9uRXJyb3IgPT09IHRydWUgJiZcbiAgICAgIFsnUE9TVCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTFcbiAgICApXG4gICAgICBwcmVmZXIucHVzaChgb2RhdGEuY29udGludWUtb24tZXJyb3JgKTtcbiAgICBpZiAocHJlZmVyLmxlbmd0aCA+IDApIGN1c3RvbUhlYWRlcnNbUFJFRkVSXSA9IHByZWZlcjtcbiAgICB0aGlzLl9oZWFkZXJzID0gSHR0cC5tZXJnZUh0dHBIZWFkZXJzKFxuICAgICAgdGhpcy5hcGkub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgY3VzdG9tSGVhZGVycyxcbiAgICAgIGluaXQuaGVhZGVycyB8fCB7fVxuICAgICk7XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gUGFyYW1zXG4gICAgY29uc3QgY3VzdG9tUGFyYW1zOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9ID0ge307XG4gICAgaWYgKFxuICAgICAgWydQT1NUJywgJ1BVVCcsICdQQVRDSCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTEgJiZcbiAgICAgICckc2VsZWN0JyBpbiByZXNvdXJjZVBhcmFtc1xuICAgICkge1xuICAgICAgY3VzdG9tUGFyYW1zWyckc2VsZWN0J10gPSByZXNvdXJjZVBhcmFtc1snJHNlbGVjdCddO1xuICAgIH1cbiAgICBpZiAoWydQT1NUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMSAmJiAnJGV4cGFuZCcgaW4gcmVzb3VyY2VQYXJhbXMpIHtcbiAgICAgIGN1c3RvbVBhcmFtc1snJGV4cGFuZCddID0gcmVzb3VyY2VQYXJhbXNbJyRleHBhbmQnXTtcbiAgICB9XG4gICAgaWYgKFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjdXN0b21QYXJhbXMsIHJlc291cmNlUGFyYW1zKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSBIdHRwLm1lcmdlSHR0cFBhcmFtcyhcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucGFyYW1zLFxuICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgaW5pdC5wYXJhbXMgfHwge31cbiAgICApO1xuXG4gICAgdGhpcy5fcGFyYW1zID1cbiAgICAgIHRoaXMuX3Jlc3BvbnNlVHlwZSA9PT0gJ2VudGl0eSdcbiAgICAgICAgPyBIdHRwLndpdGhvdXRIdHRwUGFyYW1zKHBhcmFtcywgW1xuICAgICAgICAgICAgJyRmaWx0ZXInLFxuICAgICAgICAgICAgJyRvcmRlcmJ5JyxcbiAgICAgICAgICAgICckY291bnQnLFxuICAgICAgICAgICAgJyRza2lwJyxcbiAgICAgICAgICAgICckdG9wJyxcbiAgICAgICAgICBdKVxuICAgICAgICA6IHBhcmFtcztcbiAgICAvLyNlbmRyZWdpb25cblxuICAgIHRoaXMuX3F1ZXJ5Qm9keSA9XG4gICAgICB0aGlzLl9tZXRob2QgPT09ICdHRVQnICYmXG4gICAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLnNvbWUoKG5hbWUpID0+IHRoaXMuX3BhcmFtcy5oYXMoYCQke25hbWV9YCkpO1xuICB9XG5cbiAgZ2V0IHJlc3BvbnNlVHlwZSgpOiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VUeXBlICYmXG4gICAgICBbJ3Byb3BlcnR5JywgJ2VudGl0eScsICdlbnRpdGllcyddLmluZGV4T2YodGhpcy5fcmVzcG9uc2VUeXBlKSAhPT0gLTFcbiAgICAgID8gJ2pzb24nXG4gICAgICA6IHRoaXMuX3Jlc3BvbnNlVHlwZSA9PT0gJ3ZhbHVlJ1xuICAgICAgPyAndGV4dCdcbiAgICAgIDogPCdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc+dGhpcy5fcmVzcG9uc2VUeXBlO1xuICB9XG5cbiAgZ2V0IHBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Qm9keSA/IGAke3RoaXMuX3BhdGh9LyR7JFFVRVJZfWAgOiB0aGlzLl9wYXRoO1xuICB9XG5cbiAgZ2V0IG1ldGhvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlCb2R5ID8gJ1BPU1QnIDogdGhpcy5fbWV0aG9kO1xuICB9XG5cbiAgZ2V0IGJvZHkoKSB7XG4gICAgaWYgKHRoaXMuX3F1ZXJ5Qm9keSkge1xuICAgICAgbGV0IFssIGJvZHlQYXJhbXNdID0gSHR0cC5zcGxpdEh0dHBQYXJhbXMoXG4gICAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLm1hcCgobmFtZSkgPT4gYCQke25hbWV9YClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYm9keVBhcmFtcy50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fYm9keTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFyYW1zKCkge1xuICAgIGlmICh0aGlzLl9xdWVyeUJvZHkpIHtcbiAgICAgIGxldCBbcXVlcnlQYXJhbXNdID0gSHR0cC5zcGxpdEh0dHBQYXJhbXMoXG4gICAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLm1hcCgobmFtZSkgPT4gYCQke25hbWV9YClcbiAgICAgICk7XG4gICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJhbXM7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhlYWRlcnMoKSB7XG4gICAgaWYgKHRoaXMuX3F1ZXJ5Qm9keSkge1xuICAgICAgcmV0dXJuIEh0dHAubWVyZ2VIdHRwSGVhZGVycyh0aGlzLl9oZWFkZXJzLCB7IENPTlRFTlRfVFlQRTogVEVYVF9QTEFJTiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnM7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhdGhXaXRoUGFyYW1zKCkge1xuICAgIGxldCBwYXRoID0gdGhpcy5fcGF0aDtcbiAgICBpZiAodGhpcy5fcGFyYW1zLmtleXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXRoID0gYCR7cGF0aH0/JHt0aGlzLl9wYXJhbXN9YDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBnZXQgdXJsKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaS5zZXJ2aWNlUm9vdFVybH0ke3RoaXMuX3BhdGh9YDtcbiAgfVxuXG4gIGdldCB1cmxXaXRoUGFyYW1zKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaS5zZXJ2aWNlUm9vdFVybH0ke3RoaXMucGF0aFdpdGhQYXJhbXN9YDtcbiAgfVxuXG4gIGlzQmF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGguZW5kc1dpdGgoJEJBVENIKTtcbiAgfVxuXG4gIGlzRmV0Y2goKSB7XG4gICAgcmV0dXJuIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMTtcbiAgfVxuXG4gIGlzTXV0YXRlKCkge1xuICAgIHJldHVybiBbJ1BVVCcsICdQQVRDSCcsICdQT1NUJywgJ0RFTEVURSddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTE7XG4gIH1cbn1cbiJdfQ==
|