angular-odata 0.130.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/fesm2022/angular-odata.mjs +2298 -2162
- 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/loaders.d.ts +8 -8
- package/lib/metadata/csdl/csdl-annotation.d.ts +3 -3
- package/lib/metadata/csdl/csdl-entity-container.d.ts +2 -2
- package/lib/metadata/csdl/csdl-entity-set.d.ts +2 -2
- package/lib/metadata/csdl/csdl-enum-type.d.ts +3 -3
- package/lib/metadata/csdl/csdl-function-action.d.ts +4 -4
- package/lib/metadata/csdl/csdl-reference.d.ts +2 -2
- package/lib/metadata/csdl/csdl-schema.d.ts +2 -2
- package/lib/metadata/csdl/csdl-structural-property.d.ts +3 -3
- package/lib/metadata/csdl/csdl-structured-type.d.ts +3 -3
- package/lib/metadata/metadata.d.ts +2 -2
- package/lib/models/options.d.ts +2 -2
- package/lib/module.d.ts +3 -3
- package/lib/options.d.ts +3 -3
- 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 +4 -3
- 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/handlers.d.ts +17 -5
- package/lib/resources/resource.d.ts +5 -5
- package/lib/resources/types/action.d.ts +2 -2
- package/lib/resources/types/entity-set.d.ts +2 -2
- package/lib/resources/types/navigation-property.d.ts +2 -2
- package/lib/resources/types/property.d.ts +2 -2
- 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 +2 -2
- package/lib/schema/parsers/callable.d.ts +4 -4
- package/lib/schema/parsers/enum-type.d.ts +3 -3
- package/lib/schema/parsers/structured-type.d.ts +4 -4
- package/lib/schema/schema.d.ts +3 -3
- package/lib/schema/singleton.d.ts +2 -2
- package/lib/schema/structured-type.d.ts +3 -3
- package/lib/services/entity.d.ts +1 -1
- package/lib/settings.d.ts +2 -2
- package/lib/types.d.ts +76 -74
- package/lib/utils/odata.d.ts +2 -2
- package/package.json +3 -5
- package/schematics/apigen/files/api-config/__fileName__.ts +4 -4
- package/esm2022/angular-odata.mjs +0 -5
- package/esm2022/lib/annotations.mjs +0 -146
- package/esm2022/lib/api.mjs +0 -439
- package/esm2022/lib/cache/cache.mjs +0 -177
- package/esm2022/lib/cache/index.mjs +0 -4
- package/esm2022/lib/cache/memory.mjs +0 -30
- package/esm2022/lib/cache/storage.mjs +0 -57
- package/esm2022/lib/client.mjs +0 -215
- package/esm2022/lib/constants.mjs +0 -95
- package/esm2022/lib/helper.mjs +0 -288
- package/esm2022/lib/index.mjs +0 -22
- package/esm2022/lib/loaders.mjs +0 -43
- package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +0 -273
- package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +0 -59
- package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +0 -50
- package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +0 -74
- package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +0 -204
- package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +0 -15
- package/esm2022/lib/metadata/csdl/csdl-reference.mjs +0 -76
- package/esm2022/lib/metadata/csdl/csdl-schema.mjs +0 -87
- package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +0 -37
- package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +0 -145
- package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +0 -159
- package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +0 -46
- package/esm2022/lib/metadata/index.mjs +0 -3
- package/esm2022/lib/metadata/metadata.mjs +0 -41
- package/esm2022/lib/metadata/parser.mjs +0 -564
- package/esm2022/lib/models/collection.mjs +0 -816
- package/esm2022/lib/models/index.mjs +0 -4
- package/esm2022/lib/models/model.mjs +0 -577
- package/esm2022/lib/models/options.mjs +0 -1227
- package/esm2022/lib/module.mjs +0 -55
- package/esm2022/lib/options.mjs +0 -91
- package/esm2022/lib/resources/index.mjs +0 -7
- package/esm2022/lib/resources/options.mjs +0 -66
- package/esm2022/lib/resources/path/handlers.mjs +0 -81
- package/esm2022/lib/resources/path/index.mjs +0 -3
- package/esm2022/lib/resources/path/segments.mjs +0 -149
- package/esm2022/lib/resources/query/builder.mjs +0 -645
- package/esm2022/lib/resources/query/expressions/apply.mjs +0 -238
- package/esm2022/lib/resources/query/expressions/base.mjs +0 -26
- package/esm2022/lib/resources/query/expressions/compute.mjs +0 -55
- package/esm2022/lib/resources/query/expressions/count.mjs +0 -118
- package/esm2022/lib/resources/query/expressions/expand.mjs +0 -154
- package/esm2022/lib/resources/query/expressions/filter.mjs +0 -180
- package/esm2022/lib/resources/query/expressions/index.mjs +0 -10
- package/esm2022/lib/resources/query/expressions/orderby.mjs +0 -81
- package/esm2022/lib/resources/query/expressions/search.mjs +0 -144
- package/esm2022/lib/resources/query/expressions/select.mjs +0 -49
- package/esm2022/lib/resources/query/expressions/syntax.mjs +0 -770
- package/esm2022/lib/resources/query/handlers.mjs +0 -423
- package/esm2022/lib/resources/query/index.mjs +0 -5
- package/esm2022/lib/resources/query/options.mjs +0 -140
- package/esm2022/lib/resources/request.mjs +0 -210
- package/esm2022/lib/resources/resource.mjs +0 -316
- package/esm2022/lib/resources/response.mjs +0 -180
- package/esm2022/lib/resources/types/action.mjs +0 -118
- 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 -149
- 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 -246
- package/esm2022/lib/resources/types/options.mjs +0 -2
- package/esm2022/lib/resources/types/property.mjs +0 -187
- package/esm2022/lib/resources/types/reference.mjs +0 -87
- package/esm2022/lib/resources/types/singleton.mjs +0 -125
- package/esm2022/lib/resources/types/value.mjs +0 -48
- package/esm2022/lib/schema/annotation.mjs +0 -44
- package/esm2022/lib/schema/callable.mjs +0 -69
- package/esm2022/lib/schema/element.mjs +0 -70
- package/esm2022/lib/schema/entity-container.mjs +0 -13
- package/esm2022/lib/schema/entity-set.mjs +0 -11
- package/esm2022/lib/schema/enum-type.mjs +0 -69
- package/esm2022/lib/schema/index.mjs +0 -9
- package/esm2022/lib/schema/parsers/callable.mjs +0 -123
- package/esm2022/lib/schema/parsers/edm.mjs +0 -101
- package/esm2022/lib/schema/parsers/enum-type.mjs +0 -148
- package/esm2022/lib/schema/parsers/index.mjs +0 -5
- package/esm2022/lib/schema/parsers/structured-type.mjs +0 -548
- package/esm2022/lib/schema/schema.mjs +0 -52
- package/esm2022/lib/schema/singleton.mjs +0 -11
- package/esm2022/lib/schema/structured-type.mjs +0 -220
- package/esm2022/lib/services/base.mjs +0 -32
- package/esm2022/lib/services/entity-set.mjs +0 -161
- package/esm2022/lib/services/entity.mjs +0 -12
- package/esm2022/lib/services/factory.mjs +0 -39
- package/esm2022/lib/services/index.mjs +0 -5
- package/esm2022/lib/services/singleton.mjs +0 -55
- package/esm2022/lib/settings.mjs +0 -113
- 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,316 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_VERSION, PARAM_SEPARATOR, QUERY_SEPARATOR, VALUE_SEPARATOR, } from '../constants';
|
|
2
|
-
import { ODataHelper } from '../helper';
|
|
3
|
-
import { ODataStructuredType } from '../schema';
|
|
4
|
-
import { PathSegment, } from '../types';
|
|
5
|
-
import { Objects, Strings, Types } from '../utils';
|
|
6
|
-
import { ODataPathSegments, ODataPathSegmentsHandler } from './path';
|
|
7
|
-
import { isQueryCustomType, ODataQueryOptions, ODataQueryOptionsHandler, } from './query';
|
|
8
|
-
export class ODataResource {
|
|
9
|
-
// VARIABLES
|
|
10
|
-
api;
|
|
11
|
-
pathSegments;
|
|
12
|
-
queryOptions;
|
|
13
|
-
constructor(api, { segments, query, } = {}) {
|
|
14
|
-
this.api = api;
|
|
15
|
-
this.pathSegments = segments ?? new ODataPathSegments();
|
|
16
|
-
this.queryOptions = query ?? new ODataQueryOptions();
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @returns string The outgoing type of the resource
|
|
20
|
-
*/
|
|
21
|
-
outgoingType() {
|
|
22
|
-
return this.pathSegments.last()?.outgoingType();
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* @returns string The incoming type of the resource
|
|
26
|
-
*/
|
|
27
|
-
incomingType() {
|
|
28
|
-
return this.pathSegments.last()?.incomingType();
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* @returns string The binding type of the resource
|
|
32
|
-
*/
|
|
33
|
-
bindingType() {
|
|
34
|
-
return this.pathSegments.last()?.bindingType();
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* @returns string All covered types of the resource
|
|
38
|
-
*/
|
|
39
|
-
types() {
|
|
40
|
-
return this.pathSegments.types();
|
|
41
|
-
}
|
|
42
|
-
callable() {
|
|
43
|
-
const type = this.outgoingType() ?? this.incomingType();
|
|
44
|
-
return type !== undefined ? this.api.callable(type) : undefined;
|
|
45
|
-
}
|
|
46
|
-
enumType() {
|
|
47
|
-
const type = this.outgoingType() ?? this.incomingType();
|
|
48
|
-
return type !== undefined ? this.api.enumType(type) : undefined;
|
|
49
|
-
}
|
|
50
|
-
structuredType() {
|
|
51
|
-
const type = this.outgoingType() ?? this.incomingType();
|
|
52
|
-
return type !== undefined ? this.api.structuredType(type) : undefined;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* @returns boolean The resource has key ?
|
|
56
|
-
*/
|
|
57
|
-
hasKey() {
|
|
58
|
-
return Boolean(this.pathSegments.last({ key: true })?.hasKey());
|
|
59
|
-
}
|
|
60
|
-
hasEntityKey() {
|
|
61
|
-
return Boolean(this.pathSegments.get(PathSegment.entitySet)?.hasKey());
|
|
62
|
-
}
|
|
63
|
-
clearKey() {
|
|
64
|
-
return this.pathSegments.last({ key: true })?.clearKey();
|
|
65
|
-
}
|
|
66
|
-
asModel(entity, { reset, annots, ModelType, } = {}) {
|
|
67
|
-
reset ??= annots !== undefined;
|
|
68
|
-
let resource = this;
|
|
69
|
-
const type = annots?.type ?? this.incomingType();
|
|
70
|
-
if (type === undefined)
|
|
71
|
-
throw Error(`No type for model`);
|
|
72
|
-
if (ModelType === undefined)
|
|
73
|
-
ModelType = this.api.modelForType(type);
|
|
74
|
-
let entitySet = annots?.entitySet;
|
|
75
|
-
if (entitySet !== undefined) {
|
|
76
|
-
resource = this.api.entitySet(entitySet).entity(entity);
|
|
77
|
-
resource.query((q) => q.restore(this.queryOptions.toQueryArguments()));
|
|
78
|
-
}
|
|
79
|
-
return new ModelType(entity, { resource, annots, reset });
|
|
80
|
-
}
|
|
81
|
-
asCollection(entities, { reset, annots, CollectionType, } = {}) {
|
|
82
|
-
reset ??= annots !== undefined;
|
|
83
|
-
let resource = this;
|
|
84
|
-
const type = annots?.type ?? this.incomingType();
|
|
85
|
-
if (type === undefined)
|
|
86
|
-
throw Error(`No type for collection`);
|
|
87
|
-
if (CollectionType === undefined)
|
|
88
|
-
CollectionType = this.api.collectionForType(type);
|
|
89
|
-
let entitySet = annots?.entitySet;
|
|
90
|
-
if (entitySet !== undefined) {
|
|
91
|
-
resource = this.api.entitySet(entitySet);
|
|
92
|
-
resource.query((q) => q.restore(this.queryOptions.toQueryArguments()));
|
|
93
|
-
}
|
|
94
|
-
return new CollectionType(entities, { resource, annots, reset });
|
|
95
|
-
}
|
|
96
|
-
//#endregion
|
|
97
|
-
isTypeOf(other) {
|
|
98
|
-
const thisStructured = this.structuredType();
|
|
99
|
-
const otherStructured = other.structuredType();
|
|
100
|
-
return (thisStructured !== undefined &&
|
|
101
|
-
otherStructured !== undefined &&
|
|
102
|
-
thisStructured.isTypeOf(otherStructured));
|
|
103
|
-
}
|
|
104
|
-
isSubtypeOf(other) {
|
|
105
|
-
const thisStructured = this.structuredType();
|
|
106
|
-
const otherStructured = other.structuredType();
|
|
107
|
-
return (thisStructured !== undefined &&
|
|
108
|
-
otherStructured !== undefined &&
|
|
109
|
-
thisStructured.isSubtypeOf(otherStructured));
|
|
110
|
-
}
|
|
111
|
-
isSupertypeOf(other) {
|
|
112
|
-
const thisStructured = this.structuredType();
|
|
113
|
-
const otherStructured = other.structuredType();
|
|
114
|
-
return (thisStructured !== undefined &&
|
|
115
|
-
otherStructured !== undefined &&
|
|
116
|
-
thisStructured.isSupertypeOf(otherStructured));
|
|
117
|
-
}
|
|
118
|
-
isEqualTo(other, test) {
|
|
119
|
-
const [selfPath, selfParams] = this.pathAndParams();
|
|
120
|
-
const [otherPath, otherParams] = other.pathAndParams();
|
|
121
|
-
return test === 'path'
|
|
122
|
-
? otherPath === selfPath
|
|
123
|
-
: test === 'params'
|
|
124
|
-
? Types.isEqual(selfParams, otherParams)
|
|
125
|
-
: otherPath === selfPath && Types.isEqual(selfParams, otherParams);
|
|
126
|
-
}
|
|
127
|
-
pathAndParams({ escape, ...options } = {
|
|
128
|
-
escape: false,
|
|
129
|
-
}) {
|
|
130
|
-
const type = this.outgoingType();
|
|
131
|
-
const parser = type !== undefined ? this.api.parserForType(type) : undefined;
|
|
132
|
-
const [spath, sparams] = this.pathSegments.pathAndParams({
|
|
133
|
-
escape,
|
|
134
|
-
parser,
|
|
135
|
-
options,
|
|
136
|
-
});
|
|
137
|
-
const [, qparams] = this.queryOptions.pathAndParams({
|
|
138
|
-
escape,
|
|
139
|
-
parser,
|
|
140
|
-
options,
|
|
141
|
-
});
|
|
142
|
-
return [spath, { ...sparams, ...qparams }];
|
|
143
|
-
}
|
|
144
|
-
endpointUrl({ escape = false, params = true, ...options } = {}) {
|
|
145
|
-
let [path, qparams] = this.pathAndParams({ escape, ...options });
|
|
146
|
-
if (params && !Types.isEmpty(qparams)) {
|
|
147
|
-
path = `${path}${QUERY_SEPARATOR}${Object.entries(qparams)
|
|
148
|
-
.map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)
|
|
149
|
-
.join(PARAM_SEPARATOR)}`;
|
|
150
|
-
}
|
|
151
|
-
return `${this.api.serviceRootUrl}${path}`;
|
|
152
|
-
}
|
|
153
|
-
toString({ escape, ...options } = {
|
|
154
|
-
escape: false,
|
|
155
|
-
}) {
|
|
156
|
-
let [path, params] = this.pathAndParams({ escape, ...options });
|
|
157
|
-
let queryString = Object.entries(params)
|
|
158
|
-
.map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)
|
|
159
|
-
.join(PARAM_SEPARATOR);
|
|
160
|
-
return queryString ? `${path}${QUERY_SEPARATOR}${queryString}` : path;
|
|
161
|
-
}
|
|
162
|
-
clone() {
|
|
163
|
-
const Ctor = this.constructor;
|
|
164
|
-
return new Ctor(this.api, {
|
|
165
|
-
segments: this.cloneSegments(),
|
|
166
|
-
query: this.cloneQuery(),
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
__parser(value, options, resourceType, bindingType) {
|
|
170
|
-
const dataType = options !== undefined && Types.isPlainObject(value)
|
|
171
|
-
? ODataHelper[options.version ?? DEFAULT_VERSION].type(value)
|
|
172
|
-
: undefined;
|
|
173
|
-
if (dataType !== undefined) {
|
|
174
|
-
// Parser from data type
|
|
175
|
-
return this.api.parserForType(dataType);
|
|
176
|
-
}
|
|
177
|
-
else if (resourceType !== undefined) {
|
|
178
|
-
// Parser from resource type
|
|
179
|
-
return this.api.parserForType(resourceType, bindingType);
|
|
180
|
-
}
|
|
181
|
-
return undefined;
|
|
182
|
-
}
|
|
183
|
-
deserialize(value, options) {
|
|
184
|
-
const resourceType = this.incomingType();
|
|
185
|
-
const bindingType = this.bindingType();
|
|
186
|
-
const _d = (value, options) => {
|
|
187
|
-
const parser = this.__parser(value, options, resourceType, bindingType);
|
|
188
|
-
return parser !== undefined ? parser.deserialize(value, options) : value;
|
|
189
|
-
};
|
|
190
|
-
return Array.isArray(value)
|
|
191
|
-
? value.map((v) => _d(v, options))
|
|
192
|
-
: _d(value, options);
|
|
193
|
-
}
|
|
194
|
-
serialize(value, options) {
|
|
195
|
-
const resourceType = this.outgoingType();
|
|
196
|
-
const bindingType = this.bindingType();
|
|
197
|
-
const _s = (value, options) => {
|
|
198
|
-
const parser = this.__parser(value, options, resourceType, bindingType);
|
|
199
|
-
return parser !== undefined ? parser.serialize(value, options) : value;
|
|
200
|
-
};
|
|
201
|
-
return Array.isArray(value)
|
|
202
|
-
? value.map((v) => _s(v, options))
|
|
203
|
-
: _s(value, options);
|
|
204
|
-
}
|
|
205
|
-
encode(value, options) {
|
|
206
|
-
const resourceType = this.outgoingType();
|
|
207
|
-
const bindingType = this.bindingType();
|
|
208
|
-
const _e = (value, options) => {
|
|
209
|
-
const parser = this.__parser(value, options, resourceType, bindingType);
|
|
210
|
-
return parser !== undefined ? parser.encode(value, options) : value;
|
|
211
|
-
};
|
|
212
|
-
return Array.isArray(value)
|
|
213
|
-
? value.map((v) => _e(v, options))
|
|
214
|
-
: _e(value, options);
|
|
215
|
-
}
|
|
216
|
-
toJson() {
|
|
217
|
-
return {
|
|
218
|
-
segments: this.pathSegments.toJson(),
|
|
219
|
-
options: this.queryOptions.toJson(),
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
cloneSegments() {
|
|
223
|
-
return this.pathSegments.clone();
|
|
224
|
-
}
|
|
225
|
-
//#region Query Options
|
|
226
|
-
clearQuery() {
|
|
227
|
-
this.queryOptions.clear();
|
|
228
|
-
return this;
|
|
229
|
-
}
|
|
230
|
-
cloneQuery() {
|
|
231
|
-
return this.queryOptions.clone();
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Handle the path segments of the resource
|
|
235
|
-
* Create an object handler for mutate the path segments of the resource
|
|
236
|
-
* @param f Function context for handle the segments
|
|
237
|
-
* @returns ODataActionResource
|
|
238
|
-
*/
|
|
239
|
-
segment(f) {
|
|
240
|
-
const type = this.outgoingType();
|
|
241
|
-
f(new ODataPathSegmentsHandler(this.pathSegments), type !== undefined ? this.api.structuredType(type) : undefined);
|
|
242
|
-
return this;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Handle the query options of the resource
|
|
246
|
-
* Create an object handler for mutate the query options of the resource
|
|
247
|
-
* @param f Function context for handle the query options
|
|
248
|
-
*/
|
|
249
|
-
query(f) {
|
|
250
|
-
const type = this.outgoingType();
|
|
251
|
-
f(new ODataQueryOptionsHandler(this.queryOptions), type !== undefined ? this.api.structuredType(type) : undefined);
|
|
252
|
-
return this;
|
|
253
|
-
}
|
|
254
|
-
transform(opts, { type, fields, } = {}) {
|
|
255
|
-
if (type === undefined) {
|
|
256
|
-
type = Strings.uniqueId({ prefix: 'Transformation', suffix: 'Type' });
|
|
257
|
-
}
|
|
258
|
-
// Resolve Structured Type
|
|
259
|
-
let structuredType = this.api.findStructuredType(type);
|
|
260
|
-
if (structuredType === undefined) {
|
|
261
|
-
// Resolve Schema
|
|
262
|
-
let schema = this.api.findSchema(type);
|
|
263
|
-
if (schema === undefined) {
|
|
264
|
-
const namespace = type.substring(0, type.lastIndexOf('.')) ?? this.api.name;
|
|
265
|
-
schema = this.api.createSchema({ namespace });
|
|
266
|
-
}
|
|
267
|
-
const name = type.substring(type.lastIndexOf('.'));
|
|
268
|
-
structuredType = schema.createStructuredType({ name, fields });
|
|
269
|
-
}
|
|
270
|
-
// Segments
|
|
271
|
-
const segments = this.cloneSegments();
|
|
272
|
-
segments.last()?.incomingType(structuredType.type());
|
|
273
|
-
// Query
|
|
274
|
-
const query = this.cloneQuery();
|
|
275
|
-
const handler = new ODataQueryOptionsHandler(query);
|
|
276
|
-
handler.apply(opts);
|
|
277
|
-
const Ctor = this.constructor;
|
|
278
|
-
return new Ctor(this.api, {
|
|
279
|
-
segments,
|
|
280
|
-
query,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
static resolveKey(value, schema) {
|
|
284
|
-
if (isQueryCustomType(value)) {
|
|
285
|
-
return value;
|
|
286
|
-
}
|
|
287
|
-
else if (Types.isPlainObject(value)) {
|
|
288
|
-
return schema instanceof ODataStructuredType
|
|
289
|
-
? schema.resolveKey(value)
|
|
290
|
-
: Objects.resolveKey(value);
|
|
291
|
-
}
|
|
292
|
-
return value;
|
|
293
|
-
}
|
|
294
|
-
resolveKey(value) {
|
|
295
|
-
const type = this.outgoingType();
|
|
296
|
-
const structured = type !== undefined ? this.api.structuredType(type) : undefined;
|
|
297
|
-
return ODataResource.resolveKey(value, structured);
|
|
298
|
-
}
|
|
299
|
-
//#endregion
|
|
300
|
-
get(options = {}) {
|
|
301
|
-
return this.api.request('GET', this, options);
|
|
302
|
-
}
|
|
303
|
-
post(body, options = {}) {
|
|
304
|
-
return this.api.request('POST', this, { body, ...options });
|
|
305
|
-
}
|
|
306
|
-
put(body, options = {}) {
|
|
307
|
-
return this.api.request('PUT', this, { body, ...options });
|
|
308
|
-
}
|
|
309
|
-
patch(body, options = {}) {
|
|
310
|
-
return this.api.request('PATCH', this, { body, ...options });
|
|
311
|
-
}
|
|
312
|
-
delete(options = {}) {
|
|
313
|
-
return this.api.request('DELETE', this, options);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFJTCxXQUFXLEdBRVosTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQix3QkFBd0IsR0FDekIsTUFBTSxTQUFTLENBQUM7QUFvQmpCLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQVk7SUFDTCxHQUFHLENBQVc7SUFDWCxZQUFZLENBQW9CO0lBQ2hDLFlBQVksQ0FBdUI7SUFDN0MsWUFDRSxHQUFhLEVBQ2IsRUFDRSxRQUFRLEVBQ1IsS0FBSyxNQUlILEVBQUU7UUFFTixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckUsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQWlDRCxPQUFPLENBQ0wsTUFBNkMsRUFDN0MsRUFDRSxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsTUFLUCxFQUFFO1FBRU4sS0FBSyxLQUFLLE1BQU0sS0FBSyxTQUFTLENBQUM7UUFDL0IsSUFBSSxRQUFRLEdBQXFCLElBQXdCLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakQsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsSUFBSSxTQUFTLEtBQUssU0FBUztZQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQ2xDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBSSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBb0IsQ0FBQyxDQUFDO1lBQ3pFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQWdDRCxZQUFZLENBQ1YsUUFBbUQsRUFDbkQsRUFDRSxLQUFLLEVBQ0wsTUFBTSxFQUNOLGNBQWMsTUFLWixFQUFFO1FBRU4sS0FBSyxLQUFLLE1BQU0sS0FBSyxTQUFTLENBQUM7UUFDL0IsSUFBSSxRQUFRLEdBQXFCLElBQXdCLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakQsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDOUQsSUFBSSxjQUFjLEtBQUssU0FBUztZQUM5QixjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQ2xDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBSSxTQUFTLENBQUMsQ0FBQztZQUM1QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxZQUFZO0lBRVosUUFBUSxDQUFDLEtBQXlCO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0MsT0FBTyxDQUNMLGNBQWMsS0FBSyxTQUFTO1lBQzVCLGVBQWUsS0FBSyxTQUFTO1lBQzdCLGNBQWMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQXlCO1FBQ25DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0MsT0FBTyxDQUNMLGNBQWMsS0FBSyxTQUFTO1lBQzVCLGVBQWUsS0FBSyxTQUFTO1lBQzdCLGNBQWMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXlCO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0MsT0FBTyxDQUNMLGNBQWMsS0FBSyxTQUFTO1lBQzVCLGVBQWUsS0FBSyxTQUFTO1lBQzdCLGNBQWMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQXlCLEVBQUUsSUFBd0I7UUFDM0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEQsTUFBTSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkQsT0FBTyxJQUFJLEtBQUssTUFBTTtZQUNwQixDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVE7WUFDeEIsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO2dCQUNqQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsYUFBYSxDQUNYLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxLQUEyQztRQUM3RCxNQUFNLEVBQUUsS0FBSztLQUNkO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUNWLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbkUsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztZQUN2RCxNQUFNO1lBQ04sTUFBTTtZQUNOLE9BQU87U0FDUixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztZQUNsRCxNQUFNO1lBQ04sTUFBTTtZQUNOLE9BQU87U0FDUixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsRUFDVixNQUFNLEdBQUcsS0FBSyxFQUNkLE1BQU0sR0FBRyxJQUFJLEVBQ2IsR0FBRyxPQUFPLEtBQ2dELEVBQUU7UUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2lCQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsUUFBUSxDQUNOLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxLQUEyQztRQUM3RCxNQUFNLEVBQUUsS0FBSztLQUNkO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekIsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLGVBQWUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQW1DLENBQUM7UUFDdEQsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFLO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxRQUFRLENBQ2QsS0FBVSxFQUNWLE9BQXVCLEVBQ3ZCLFlBQXFCLEVBQ3JCLFdBQW9CO1FBRXBCLE1BQU0sUUFBUSxHQUNaLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDakQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDN0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQix3QkFBd0I7WUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBSSxRQUFRLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsNEJBQTRCO1lBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUksWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVUsRUFBRSxPQUF1QjtRQUM3QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBVSxFQUFFLE9BQXVCLEVBQUUsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzRSxDQUFDLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLE9BQXVCO1FBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFVLEVBQUUsT0FBdUIsRUFBRSxFQUFFO1lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDeEUsT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3pFLENBQUMsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFVLEVBQUUsT0FBdUI7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQVUsRUFBRSxPQUF1QixFQUFFLEVBQUU7WUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN4RSxPQUFPLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEUsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUNMLENBQXVFO1FBRXZFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQ0MsSUFBSSx3QkFBd0IsQ0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ2xELElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2xFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUNILENBQXVFO1FBRXZFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQ0MsSUFBSSx3QkFBd0IsQ0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ2xELElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2xFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLENBQ1AsSUFHdUIsRUFDdkIsRUFDRSxJQUFJLEVBQ0osTUFBTSxNQUlKLEVBQUU7UUFFTixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUksSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsaUJBQWlCO1lBQ2pCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFLLENBQUM7Z0JBQzdELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELGNBQWMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsV0FBVztRQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXJELFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFPLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBd0IsQ0FBSSxLQUFLLENBQUMsQ0FBQztRQUN2RCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFtQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN4QixRQUFRO1lBQ1IsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUNmLEtBQVUsRUFDVixNQUErQjtRQUUvQixJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxNQUFNLFlBQVksbUJBQW1CO2dCQUMxQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEtBQWlDLENBQUM7SUFDM0MsQ0FBQztJQUVTLFVBQVUsQ0FBQyxLQUFVO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FDZCxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BFLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBSSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELFlBQVk7SUFFRixHQUFHLENBQ1gsVUFhSSxFQUFFO1FBRU4sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFUyxJQUFJLENBQ1osSUFBUyxFQUNULFVBV0ksRUFBRTtRQUVOLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUksTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLEdBQUcsQ0FDWCxJQUFTLEVBQ1QsVUFZSSxFQUFFO1FBRU4sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRVMsS0FBSyxDQUNiLElBQVMsRUFDVCxVQVlJLEVBQUU7UUFFTixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFUyxNQUFNLENBQ2QsVUFZSSxFQUFFO1FBRU4sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBSSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7XG4gIERFRkFVTFRfVkVSU0lPTixcbiAgUEFSQU1fU0VQQVJBVE9SLFxuICBRVUVSWV9TRVBBUkFUT1IsXG4gIFZBTFVFX1NFUEFSQVRPUixcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhSGVscGVyIH0gZnJvbSAnLi4vaGVscGVyJztcbmltcG9ydCB7IE1vZGVsSW50ZXJmYWNlLCBPRGF0YUNvbGxlY3Rpb24sIE9EYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgT0RhdGFTdHJ1Y3R1cmVkVHlwZSB9IGZyb20gJy4uL3NjaGVtYSc7XG5pbXBvcnQge1xuICBQYXJzZXJPcHRpb25zLFxuICBQYXJzZXIsXG4gIFF1ZXJ5T3B0aW9uLFxuICBQYXRoU2VnbWVudCxcbiAgU3RydWN0dXJlZFR5cGVGaWVsZENvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cywgU3RyaW5ncywgVHlwZXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBPRGF0YVBhdGhTZWdtZW50cywgT0RhdGFQYXRoU2VnbWVudHNIYW5kbGVyIH0gZnJvbSAnLi9wYXRoJztcbmltcG9ydCB7XG4gIGlzUXVlcnlDdXN0b21UeXBlLFxuICBPRGF0YVF1ZXJ5T3B0aW9ucyxcbiAgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyLFxufSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7XG4gIEFwcGx5RXhwcmVzc2lvbixcbiAgQXBwbHlFeHByZXNzaW9uQnVpbGRlcixcbiAgUXVlcnlDdXN0b21UeXBlLFxufSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zLFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxufSBmcm9tICcuLi9hbm5vdGF0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIEVudGl0eUtleTxUPiA9XG4gIHwge1xuICAgICAgcmVhZG9ubHkgW1AgaW4ga2V5b2YgVF0/OiBUW1BdO1xuICAgIH1cbiAgfCBRdWVyeUN1c3RvbVR5cGVcbiAgfCBzdHJpbmdcbiAgfCBudW1iZXI7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVJlc291cmNlPFQ+IHtcbiAgLy8gVkFSSUFCTEVTXG4gIHB1YmxpYyBhcGk6IE9EYXRhQXBpO1xuICBwcm90ZWN0ZWQgcGF0aFNlZ21lbnRzOiBPRGF0YVBhdGhTZWdtZW50cztcbiAgcHJvdGVjdGVkIHF1ZXJ5T3B0aW9uczogT0RhdGFRdWVyeU9wdGlvbnM8VD47XG4gIGNvbnN0cnVjdG9yKFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAge1xuICAgICAgc2VnbWVudHMsXG4gICAgICBxdWVyeSxcbiAgICB9OiB7XG4gICAgICBzZWdtZW50cz86IE9EYXRhUGF0aFNlZ21lbnRzO1xuICAgICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxUPjtcbiAgICB9ID0ge30sXG4gICkge1xuICAgIHRoaXMuYXBpID0gYXBpO1xuICAgIHRoaXMucGF0aFNlZ21lbnRzID0gc2VnbWVudHMgPz8gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKCk7XG4gICAgdGhpcy5xdWVyeU9wdGlvbnMgPSBxdWVyeSA/PyBuZXcgT0RhdGFRdWVyeU9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBzdHJpbmcgVGhlIG91dGdvaW5nIHR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICBvdXRnb2luZ1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFNlZ21lbnRzLmxhc3QoKT8ub3V0Z29pbmdUeXBlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgc3RyaW5nIFRoZSBpbmNvbWluZyB0eXBlIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgaW5jb21pbmdUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhTZWdtZW50cy5sYXN0KCk/LmluY29taW5nVHlwZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHN0cmluZyBUaGUgYmluZGluZyB0eXBlIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgYmluZGluZ1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFNlZ21lbnRzLmxhc3QoKT8uYmluZGluZ1R5cGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBzdHJpbmcgQWxsIGNvdmVyZWQgdHlwZXMgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICB0eXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFNlZ21lbnRzLnR5cGVzKCk7XG4gIH1cblxuICBjYWxsYWJsZSgpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vdXRnb2luZ1R5cGUoKSA/PyB0aGlzLmluY29taW5nVHlwZSgpO1xuICAgIHJldHVybiB0eXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmFwaS5jYWxsYWJsZTxUPih0eXBlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVudW1UeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpID8/IHRoaXMuaW5jb21pbmdUeXBlKCk7XG4gICAgcmV0dXJuIHR5cGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuYXBpLmVudW1UeXBlPFQ+KHR5cGUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RydWN0dXJlZFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMub3V0Z29pbmdUeXBlKCkgPz8gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICByZXR1cm4gdHlwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5hcGkuc3RydWN0dXJlZFR5cGU8VD4odHlwZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYm9vbGVhbiBUaGUgcmVzb3VyY2UgaGFzIGtleSA/XG4gICAqL1xuICBoYXNLZXkoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5wYXRoU2VnbWVudHMubGFzdCh7IGtleTogdHJ1ZSB9KT8uaGFzS2V5KCkpO1xuICB9XG5cbiAgaGFzRW50aXR5S2V5KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMucGF0aFNlZ21lbnRzLmdldChQYXRoU2VnbWVudC5lbnRpdHlTZXQpPy5oYXNLZXkoKSk7XG4gIH1cblxuICBjbGVhcktleSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoU2VnbWVudHMubGFzdCh7IGtleTogdHJ1ZSB9KT8uY2xlYXJLZXkoKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBNb2RlbHNcbiAgYXNNb2RlbChcbiAgICBlbnRpdHk/OiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICk6IE9EYXRhTW9kZWw8VD4gJiBNb2RlbEludGVyZmFjZTxUPjtcbiAgYXNNb2RlbChcbiAgICBlbnRpdHk6IFBhcnRpYWw8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICB7XG4gICAgICByZXNldCxcbiAgICAgIGFubm90cyxcbiAgICAgIE1vZGVsVHlwZSxcbiAgICB9OiB7XG4gICAgICByZXNldD86IGJvb2xlYW47XG4gICAgICBhbm5vdHM/OiBPRGF0YUVudGl0eUFubm90YXRpb25zPFQ+O1xuICAgICAgTW9kZWxUeXBlPzogdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgfSxcbiAgKTogT0RhdGFNb2RlbDxUPiAmIE1vZGVsSW50ZXJmYWNlPFQ+O1xuICBhc01vZGVsPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PihcbiAgICBlbnRpdHk/OiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICk6IE07XG4gIGFzTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIGVudGl0eTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgIHtcbiAgICAgIHJlc2V0LFxuICAgICAgYW5ub3RzLFxuICAgICAgTW9kZWxUeXBlLFxuICAgIH06IHtcbiAgICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD47XG4gICAgICBNb2RlbFR5cGU/OiB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICB9LFxuICApOiBNO1xuICBhc01vZGVsKFxuICAgIGVudGl0eT86IFBhcnRpYWw8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICB7XG4gICAgICByZXNldCxcbiAgICAgIGFubm90cyxcbiAgICAgIE1vZGVsVHlwZSxcbiAgICB9OiB7XG4gICAgICByZXNldD86IGJvb2xlYW47XG4gICAgICBhbm5vdHM/OiBPRGF0YUVudGl0eUFubm90YXRpb25zPFQ+O1xuICAgICAgTW9kZWxUeXBlPzogdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgfSA9IHt9LFxuICApIHtcbiAgICByZXNldCA/Pz0gYW5ub3RzICE9PSB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+ID0gdGhpcyBhcyBPRGF0YVJlc291cmNlPFQ+O1xuICAgIGNvbnN0IHR5cGUgPSBhbm5vdHM/LnR5cGUgPz8gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gdHlwZSBmb3IgbW9kZWxgKTtcbiAgICBpZiAoTW9kZWxUeXBlID09PSB1bmRlZmluZWQpIE1vZGVsVHlwZSA9IHRoaXMuYXBpLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICBsZXQgZW50aXR5U2V0ID0gYW5ub3RzPy5lbnRpdHlTZXQ7XG4gICAgaWYgKGVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvdXJjZSA9IHRoaXMuYXBpLmVudGl0eVNldDxUPihlbnRpdHlTZXQpLmVudGl0eShlbnRpdHkgYXMgUGFydGlhbDxUPik7XG4gICAgICByZXNvdXJjZS5xdWVyeSgocSkgPT4gcS5yZXN0b3JlKHRoaXMucXVlcnlPcHRpb25zLnRvUXVlcnlBcmd1bWVudHMoKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsVHlwZShlbnRpdHksIHsgcmVzb3VyY2UsIGFubm90cywgcmVzZXQgfSk7XG4gIH1cblxuICBhc0NvbGxlY3Rpb24oXG4gICAgZW50aXRpZXM/OiBQYXJ0aWFsPFQ+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICApOiBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPiAmIE1vZGVsSW50ZXJmYWNlPFQ+PjtcbiAgYXNDb2xsZWN0aW9uKFxuICAgIGVudGl0aWVzOiBQYXJ0aWFsPFQ+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICAgIHtcbiAgICAgIHJlc2V0LFxuICAgICAgYW5ub3RzLFxuICAgICAgQ29sbGVjdGlvblR5cGUsXG4gICAgfToge1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgICAgYW5ub3RzPzogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+O1xuICAgICAgQ29sbGVjdGlvblR5cGU/OiB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uO1xuICAgIH0sXG4gICk6IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+ICYgTW9kZWxJbnRlcmZhY2U8VD4+O1xuICBhc0NvbGxlY3Rpb248TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4sIEMgZXh0ZW5kcyBPRGF0YUNvbGxlY3Rpb248VCwgTT4+KFxuICAgIGVudGl0aWVzPzogUGFydGlhbDxUPltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSxcbiAgKTogQztcbiAgYXNDb2xsZWN0aW9uPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+LCBDIGV4dGVuZHMgT0RhdGFDb2xsZWN0aW9uPFQsIE0+PihcbiAgICBlbnRpdGllczogUGFydGlhbDxUPltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSxcbiAgICB7XG4gICAgICByZXNldCxcbiAgICAgIGFubm90cyxcbiAgICAgIENvbGxlY3Rpb25UeXBlLFxuICAgIH06IHtcbiAgICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPjtcbiAgICAgIENvbGxlY3Rpb25UeXBlPzogdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICB9LFxuICApOiBDO1xuICBhc0NvbGxlY3Rpb24oXG4gICAgZW50aXRpZXM/OiBQYXJ0aWFsPFQ+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICAgIHtcbiAgICAgIHJlc2V0LFxuICAgICAgYW5ub3RzLFxuICAgICAgQ29sbGVjdGlvblR5cGUsXG4gICAgfToge1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgICAgYW5ub3RzPzogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+O1xuICAgICAgQ29sbGVjdGlvblR5cGU/OiB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uO1xuICAgIH0gPSB7fSxcbiAgKSB7XG4gICAgcmVzZXQgPz89IGFubm90cyAhPT0gdW5kZWZpbmVkO1xuICAgIGxldCByZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxUPiA9IHRoaXMgYXMgT0RhdGFSZXNvdXJjZTxUPjtcbiAgICBjb25zdCB0eXBlID0gYW5ub3RzPy50eXBlID8/IHRoaXMuaW5jb21pbmdUeXBlKCk7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoYE5vIHR5cGUgZm9yIGNvbGxlY3Rpb25gKTtcbiAgICBpZiAoQ29sbGVjdGlvblR5cGUgPT09IHVuZGVmaW5lZClcbiAgICAgIENvbGxlY3Rpb25UeXBlID0gdGhpcy5hcGkuY29sbGVjdGlvbkZvclR5cGUodHlwZSk7XG4gICAgbGV0IGVudGl0eVNldCA9IGFubm90cz8uZW50aXR5U2V0O1xuICAgIGlmIChlbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb3VyY2UgPSB0aGlzLmFwaS5lbnRpdHlTZXQ8VD4oZW50aXR5U2V0KTtcbiAgICAgIHJlc291cmNlLnF1ZXJ5KChxKSA9PiBxLnJlc3RvcmUodGhpcy5xdWVyeU9wdGlvbnMudG9RdWVyeUFyZ3VtZW50cygpKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvblR5cGUoZW50aXRpZXMsIHsgcmVzb3VyY2UsIGFubm90cywgcmVzZXQgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgaXNUeXBlT2Yob3RoZXI6IE9EYXRhUmVzb3VyY2U8YW55Pikge1xuICAgIGNvbnN0IHRoaXNTdHJ1Y3R1cmVkID0gdGhpcy5zdHJ1Y3R1cmVkVHlwZSgpO1xuICAgIGNvbnN0IG90aGVyU3RydWN0dXJlZCA9IG90aGVyLnN0cnVjdHVyZWRUeXBlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXNTdHJ1Y3R1cmVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG90aGVyU3RydWN0dXJlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzU3RydWN0dXJlZC5pc1R5cGVPZihvdGhlclN0cnVjdHVyZWQpXG4gICAgKTtcbiAgfVxuXG4gIGlzU3VidHlwZU9mKG90aGVyOiBPRGF0YVJlc291cmNlPGFueT4pIHtcbiAgICBjb25zdCB0aGlzU3RydWN0dXJlZCA9IHRoaXMuc3RydWN0dXJlZFR5cGUoKTtcbiAgICBjb25zdCBvdGhlclN0cnVjdHVyZWQgPSBvdGhlci5zdHJ1Y3R1cmVkVHlwZSgpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzU3RydWN0dXJlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvdGhlclN0cnVjdHVyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpc1N0cnVjdHVyZWQuaXNTdWJ0eXBlT2Yob3RoZXJTdHJ1Y3R1cmVkKVxuICAgICk7XG4gIH1cblxuICBpc1N1cGVydHlwZU9mKG90aGVyOiBPRGF0YVJlc291cmNlPGFueT4pIHtcbiAgICBjb25zdCB0aGlzU3RydWN0dXJlZCA9IHRoaXMuc3RydWN0dXJlZFR5cGUoKTtcbiAgICBjb25zdCBvdGhlclN0cnVjdHVyZWQgPSBvdGhlci5zdHJ1Y3R1cmVkVHlwZSgpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzU3RydWN0dXJlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvdGhlclN0cnVjdHVyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpc1N0cnVjdHVyZWQuaXNTdXBlcnR5cGVPZihvdGhlclN0cnVjdHVyZWQpXG4gICAgKTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhvdGhlcjogT0RhdGFSZXNvdXJjZTxhbnk+LCB0ZXN0PzogJ3BhdGgnIHwgJ3BhcmFtcycpIHtcbiAgICBjb25zdCBbc2VsZlBhdGgsIHNlbGZQYXJhbXNdID0gdGhpcy5wYXRoQW5kUGFyYW1zKCk7XG4gICAgY29uc3QgW290aGVyUGF0aCwgb3RoZXJQYXJhbXNdID0gb3RoZXIucGF0aEFuZFBhcmFtcygpO1xuICAgIHJldHVybiB0ZXN0ID09PSAncGF0aCdcbiAgICAgID8gb3RoZXJQYXRoID09PSBzZWxmUGF0aFxuICAgICAgOiB0ZXN0ID09PSAncGFyYW1zJ1xuICAgICAgICA/IFR5cGVzLmlzRXF1YWwoc2VsZlBhcmFtcywgb3RoZXJQYXJhbXMpXG4gICAgICAgIDogb3RoZXJQYXRoID09PSBzZWxmUGF0aCAmJiBUeXBlcy5pc0VxdWFsKHNlbGZQYXJhbXMsIG90aGVyUGFyYW1zKTtcbiAgfVxuXG4gIHBhdGhBbmRQYXJhbXMoXG4gICAgeyBlc2NhcGUsIC4uLm9wdGlvbnMgfTogUGFyc2VyT3B0aW9ucyAmIHsgZXNjYXBlPzogYm9vbGVhbiB9ID0ge1xuICAgICAgZXNjYXBlOiBmYWxzZSxcbiAgICB9LFxuICApOiBbc3RyaW5nLCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfV0ge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IHBhcnNlciA9XG4gICAgICB0eXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmFwaS5wYXJzZXJGb3JUeXBlPFQ+KHR5cGUpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtzcGF0aCwgc3BhcmFtc10gPSB0aGlzLnBhdGhTZWdtZW50cy5wYXRoQW5kUGFyYW1zKHtcbiAgICAgIGVzY2FwZSxcbiAgICAgIHBhcnNlcixcbiAgICAgIG9wdGlvbnMsXG4gICAgfSk7XG4gICAgY29uc3QgWywgcXBhcmFtc10gPSB0aGlzLnF1ZXJ5T3B0aW9ucy5wYXRoQW5kUGFyYW1zKHtcbiAgICAgIGVzY2FwZSxcbiAgICAgIHBhcnNlcixcbiAgICAgIG9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gW3NwYXRoLCB7IC4uLnNwYXJhbXMsIC4uLnFwYXJhbXMgfV07XG4gIH1cblxuICBlbmRwb2ludFVybCh7XG4gICAgZXNjYXBlID0gZmFsc2UsXG4gICAgcGFyYW1zID0gdHJ1ZSxcbiAgICAuLi5vcHRpb25zXG4gIH06IFBhcnNlck9wdGlvbnMgJiB7IGVzY2FwZT86IGJvb2xlYW47IHBhcmFtcz86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgW3BhdGgsIHFwYXJhbXNdID0gdGhpcy5wYXRoQW5kUGFyYW1zKHsgZXNjYXBlLCAuLi5vcHRpb25zIH0pO1xuICAgIGlmIChwYXJhbXMgJiYgIVR5cGVzLmlzRW1wdHkocXBhcmFtcykpIHtcbiAgICAgIHBhdGggPSBgJHtwYXRofSR7UVVFUllfU0VQQVJBVE9SfSR7T2JqZWN0LmVudHJpZXMocXBhcmFtcylcbiAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZVswXX0ke1ZBTFVFX1NFUEFSQVRPUn0ke2VbMV19YClcbiAgICAgICAgLmpvaW4oUEFSQU1fU0VQQVJBVE9SKX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5hcGkuc2VydmljZVJvb3RVcmx9JHtwYXRofWA7XG4gIH1cblxuICB0b1N0cmluZyhcbiAgICB7IGVzY2FwZSwgLi4ub3B0aW9ucyB9OiBQYXJzZXJPcHRpb25zICYgeyBlc2NhcGU/OiBib29sZWFuIH0gPSB7XG4gICAgICBlc2NhcGU6IGZhbHNlLFxuICAgIH0sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IFtwYXRoLCBwYXJhbXNdID0gdGhpcy5wYXRoQW5kUGFyYW1zKHsgZXNjYXBlLCAuLi5vcHRpb25zIH0pO1xuICAgIGxldCBxdWVyeVN0cmluZyA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcylcbiAgICAgIC5tYXAoKGUpID0+IGAke2VbMF19JHtWQUxVRV9TRVBBUkFUT1J9JHtlWzFdfWApXG4gICAgICAuam9pbihQQVJBTV9TRVBBUkFUT1IpO1xuICAgIHJldHVybiBxdWVyeVN0cmluZyA/IGAke3BhdGh9JHtRVUVSWV9TRVBBUkFUT1J9JHtxdWVyeVN0cmluZ31gIDogcGF0aDtcbiAgfVxuXG4gIGNsb25lKCk6IE9EYXRhUmVzb3VyY2U8VD4ge1xuICAgIGNvbnN0IEN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBPRGF0YVJlc291cmNlO1xuICAgIHJldHVybiBuZXcgQ3Rvcih0aGlzLmFwaSwge1xuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxUPigpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfX3BhcnNlcihcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zLFxuICAgIHJlc291cmNlVHlwZT86IHN0cmluZyxcbiAgICBiaW5kaW5nVHlwZT86IHN0cmluZyxcbiAgKTogUGFyc2VyPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkYXRhVHlwZSA9XG4gICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgVHlwZXMuaXNQbGFpbk9iamVjdCh2YWx1ZSlcbiAgICAgICAgPyBPRGF0YUhlbHBlcltvcHRpb25zLnZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OXS50eXBlKHZhbHVlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAoZGF0YVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUGFyc2VyIGZyb20gZGF0YSB0eXBlXG4gICAgICByZXR1cm4gdGhpcy5hcGkucGFyc2VyRm9yVHlwZTxUPihkYXRhVHlwZSk7XG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUGFyc2VyIGZyb20gcmVzb3VyY2UgdHlwZVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnBhcnNlckZvclR5cGU8VD4ocmVzb3VyY2VUeXBlLCBiaW5kaW5nVHlwZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBkZXNlcmlhbGl6ZSh2YWx1ZTogYW55LCBvcHRpb25zPzogUGFyc2VyT3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICBjb25zdCBiaW5kaW5nVHlwZSA9IHRoaXMuYmluZGluZ1R5cGUoKTtcbiAgICBjb25zdCBfZCA9ICh2YWx1ZTogYW55LCBvcHRpb25zPzogUGFyc2VyT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcGFyc2VyID0gdGhpcy5fX3BhcnNlcih2YWx1ZSwgb3B0aW9ucywgcmVzb3VyY2VUeXBlLCBiaW5kaW5nVHlwZSk7XG4gICAgICByZXR1cm4gcGFyc2VyICE9PSB1bmRlZmluZWQgPyBwYXJzZXIuZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbnMpIDogdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gdmFsdWUubWFwKCh2KSA9PiBfZCh2LCBvcHRpb25zKSlcbiAgICAgIDogX2QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2VyaWFsaXplKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gdGhpcy5iaW5kaW5nVHlwZSgpO1xuICAgIGNvbnN0IF9zID0gKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZXIgPSB0aGlzLl9fcGFyc2VyKHZhbHVlLCBvcHRpb25zLCByZXNvdXJjZVR5cGUsIGJpbmRpbmdUeXBlKTtcbiAgICAgIHJldHVybiBwYXJzZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlci5zZXJpYWxpemUodmFsdWUsIG9wdGlvbnMpIDogdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gdmFsdWUubWFwKCh2KSA9PiBfcyh2LCBvcHRpb25zKSlcbiAgICAgIDogX3ModmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5jb2RlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gdGhpcy5iaW5kaW5nVHlwZSgpO1xuICAgIGNvbnN0IF9lID0gKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZXIgPSB0aGlzLl9fcGFyc2VyKHZhbHVlLCBvcHRpb25zLCByZXNvdXJjZVR5cGUsIGJpbmRpbmdUeXBlKTtcbiAgICAgIHJldHVybiBwYXJzZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlci5lbmNvZGUodmFsdWUsIG9wdGlvbnMpIDogdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gdmFsdWUubWFwKCh2KSA9PiBfZSh2LCBvcHRpb25zKSlcbiAgICAgIDogX2UodmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWdtZW50czogdGhpcy5wYXRoU2VnbWVudHMudG9Kc29uKCksXG4gICAgICBvcHRpb25zOiB0aGlzLnF1ZXJ5T3B0aW9ucy50b0pzb24oKSxcbiAgICB9O1xuICB9XG5cbiAgY2xvbmVTZWdtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoU2VnbWVudHMuY2xvbmUoKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBRdWVyeSBPcHRpb25zXG4gIGNsZWFyUXVlcnkoKSB7XG4gICAgdGhpcy5xdWVyeU9wdGlvbnMuY2xlYXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNsb25lUXVlcnk8UD4oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlPcHRpb25zLmNsb25lPFA+KCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSBwYXRoIHNlZ21lbnRzIG9mIHRoZSByZXNvdXJjZVxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IGhhbmRsZXIgZm9yIG11dGF0ZSB0aGUgcGF0aCBzZWdtZW50cyBvZiB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIGYgRnVuY3Rpb24gY29udGV4dCBmb3IgaGFuZGxlIHRoZSBzZWdtZW50c1xuICAgKiBAcmV0dXJucyBPRGF0YUFjdGlvblJlc291cmNlXG4gICAqL1xuICBzZWdtZW50KFxuICAgIGY6IChxOiBPRGF0YVBhdGhTZWdtZW50c0hhbmRsZXI8VD4sIHM/OiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+KSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vdXRnb2luZ1R5cGUoKTtcbiAgICBmKFxuICAgICAgbmV3IE9EYXRhUGF0aFNlZ21lbnRzSGFuZGxlcjxUPih0aGlzLnBhdGhTZWdtZW50cyksXG4gICAgICB0eXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmFwaS5zdHJ1Y3R1cmVkVHlwZTxUPih0eXBlKSA6IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgcXVlcnkgb3B0aW9ucyBvZiB0aGUgcmVzb3VyY2VcbiAgICogQ3JlYXRlIGFuIG9iamVjdCBoYW5kbGVyIGZvciBtdXRhdGUgdGhlIHF1ZXJ5IG9wdGlvbnMgb2YgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSBmIEZ1bmN0aW9uIGNvbnRleHQgZm9yIGhhbmRsZSB0aGUgcXVlcnkgb3B0aW9uc1xuICAgKi9cbiAgcXVlcnkoXG4gICAgZjogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiwgcz86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4pID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGYoXG4gICAgICBuZXcgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyPFQ+KHRoaXMucXVlcnlPcHRpb25zKSxcbiAgICAgIHR5cGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuYXBpLnN0cnVjdHVyZWRUeXBlPFQ+KHR5cGUpIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0cmFuc2Zvcm08Uj4oXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogQXBwbHlFeHByZXNzaW9uQnVpbGRlcjxUPixcbiAgICAgIGN1cnJlbnQ/OiBBcHBseUV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBBcHBseUV4cHJlc3Npb248VD4sXG4gICAge1xuICAgICAgdHlwZSxcbiAgICAgIGZpZWxkcyxcbiAgICB9OiB7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgICAgZmllbGRzPzogeyBbbmFtZTogc3RyaW5nXTogU3RydWN0dXJlZFR5cGVGaWVsZENvbmZpZyB9O1xuICAgIH0gPSB7fSxcbiAgKTogT0RhdGFSZXNvdXJjZTxSPiB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IFN0cmluZ3MudW5pcXVlSWQoeyBwcmVmaXg6ICdUcmFuc2Zvcm1hdGlvbicsIHN1ZmZpeDogJ1R5cGUnIH0pO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgU3RydWN0dXJlZCBUeXBlXG4gICAgbGV0IHN0cnVjdHVyZWRUeXBlID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlPFI+KHR5cGUpO1xuICAgIGlmIChzdHJ1Y3R1cmVkVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBSZXNvbHZlIFNjaGVtYVxuICAgICAgbGV0IHNjaGVtYSA9IHRoaXMuYXBpLmZpbmRTY2hlbWEodHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlID1cbiAgICAgICAgICB0eXBlLnN1YnN0cmluZygwLCB0eXBlLmxhc3RJbmRleE9mKCcuJykpID8/IHRoaXMuYXBpLm5hbWUhO1xuICAgICAgICBzY2hlbWEgPSB0aGlzLmFwaS5jcmVhdGVTY2hlbWEoeyBuYW1lc3BhY2UgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lID0gdHlwZS5zdWJzdHJpbmcodHlwZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgIHN0cnVjdHVyZWRUeXBlID0gc2NoZW1hLmNyZWF0ZVN0cnVjdHVyZWRUeXBlKHsgbmFtZSwgZmllbGRzIH0pO1xuICAgIH1cblxuICAgIC8vIFNlZ21lbnRzXG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmNsb25lU2VnbWVudHMoKTtcbiAgICBzZWdtZW50cy5sYXN0KCk/LmluY29taW5nVHlwZShzdHJ1Y3R1cmVkVHlwZS50eXBlKCkpO1xuXG4gICAgLy8gUXVlcnlcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuY2xvbmVRdWVyeTxhbnk+KCk7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4ocXVlcnkpO1xuICAgIGhhbmRsZXIuYXBwbHkob3B0cyk7XG5cbiAgICBjb25zdCBDdG9yID0gdGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgT0RhdGFSZXNvdXJjZTtcbiAgICByZXR1cm4gbmV3IEN0b3IodGhpcy5hcGksIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZUtleTxUPihcbiAgICB2YWx1ZTogYW55LFxuICAgIHNjaGVtYT86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4sXG4gICk6IEVudGl0eUtleTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGlzUXVlcnlDdXN0b21UeXBlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoVHlwZXMuaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBzY2hlbWEgaW5zdGFuY2VvZiBPRGF0YVN0cnVjdHVyZWRUeXBlXG4gICAgICAgID8gc2NoZW1hLnJlc29sdmVLZXkodmFsdWUpXG4gICAgICAgIDogT2JqZWN0cy5yZXNvbHZlS2V5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlIGFzIEVudGl0eUtleTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlS2V5KHZhbHVlOiBhbnkpOiBFbnRpdHlLZXk8VD4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IHN0cnVjdHVyZWQgPVxuICAgICAgdHlwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5hcGkuc3RydWN0dXJlZFR5cGU8VD4odHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9EYXRhUmVzb3VyY2UucmVzb2x2ZUtleTxUPih2YWx1ZSwgc3RydWN0dXJlZCk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIGdldChcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgcmVzcG9uc2VUeXBlPzpcbiAgICAgICAgfCAnYXJyYXlidWZmZXInXG4gICAgICAgIHwgJ2Jsb2InXG4gICAgICAgIHwgJ2pzb24nXG4gICAgICAgIHwgJ3RleHQnXG4gICAgICAgIHwgJ3ZhbHVlJ1xuICAgICAgICB8ICdwcm9wZXJ0eSdcbiAgICAgICAgfCAnZW50aXR5J1xuICAgICAgICB8ICdlbnRpdGllcyc7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5yZXF1ZXN0PFQ+KCdHRVQnLCB0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0KFxuICAgIGJvZHk6IGFueSxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICByZXNwb25zZVR5cGU/OlxuICAgICAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgfCAnYmxvYidcbiAgICAgICAgfCAnanNvbidcbiAgICAgICAgfCAndGV4dCdcbiAgICAgICAgfCAndmFsdWUnXG4gICAgICAgIHwgJ3Byb3BlcnR5J1xuICAgICAgICB8ICdlbnRpdHknXG4gICAgICAgIHwgJ2VudGl0aWVzJztcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5yZXF1ZXN0PFQ+KCdQT1NUJywgdGhpcywgeyBib2R5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1dChcbiAgICBib2R5OiBhbnksXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICAgIHwgJ2FycmF5YnVmZmVyJ1xuICAgICAgICB8ICdibG9iJ1xuICAgICAgICB8ICdqc29uJ1xuICAgICAgICB8ICd0ZXh0J1xuICAgICAgICB8ICd2YWx1ZSdcbiAgICAgICAgfCAncHJvcGVydHknXG4gICAgICAgIHwgJ2VudGl0eSdcbiAgICAgICAgfCAnZW50aXRpZXMnO1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLnJlcXVlc3Q8VD4oJ1BVVCcsIHRoaXMsIHsgYm9keSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXRjaChcbiAgICBib2R5OiBhbnksXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICAgIHwgJ2FycmF5YnVmZmVyJ1xuICAgICAgICB8ICdibG9iJ1xuICAgICAgICB8ICdqc29uJ1xuICAgICAgICB8ICd0ZXh0J1xuICAgICAgICB8ICd2YWx1ZSdcbiAgICAgICAgfCAncHJvcGVydHknXG4gICAgICAgIHwgJ2VudGl0eSdcbiAgICAgICAgfCAnZW50aXRpZXMnO1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLnJlcXVlc3Q8VD4oJ1BBVENIJywgdGhpcywgeyBib2R5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZShcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgcmVzcG9uc2VUeXBlPzpcbiAgICAgICAgfCAnYXJyYXlidWZmZXInXG4gICAgICAgIHwgJ2Jsb2InXG4gICAgICAgIHwgJ2pzb24nXG4gICAgICAgIHwgJ3RleHQnXG4gICAgICAgIHwgJ3ZhbHVlJ1xuICAgICAgICB8ICdwcm9wZXJ0eSdcbiAgICAgICAgfCAnZW50aXR5J1xuICAgICAgICB8ICdlbnRpdGllcyc7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5hcGkucmVxdWVzdDxUPignREVMRVRFJywgdGhpcywgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { HttpHeaders, HttpResponse } from '@angular/common/http';
|
|
2
|
-
import { ODataEntityAnnotations, ODataEntitiesAnnotations, ODataPropertyAnnotations, } from '../annotations';
|
|
3
|
-
import { Types } from '../utils/types';
|
|
4
|
-
import { APPLICATION_JSON, ODATA_VERSION_HEADERS, CONTENT_TYPE, CACHE_CONTROL, LOCATION_HEADER, ETAG_HEADERS, ODATA_ENTITYID_HEADERS, PREFERENCE_APPLIED, } from '../constants';
|
|
5
|
-
import { Http } from '../utils/http';
|
|
6
|
-
import { ODataResponseOptions } from './options';
|
|
7
|
-
/**
|
|
8
|
-
* OData Response
|
|
9
|
-
*/
|
|
10
|
-
export class ODataResponse extends HttpResponse {
|
|
11
|
-
api;
|
|
12
|
-
resource;
|
|
13
|
-
constructor(init) {
|
|
14
|
-
super(init);
|
|
15
|
-
this.api = init.api;
|
|
16
|
-
this.resource = init.resource;
|
|
17
|
-
}
|
|
18
|
-
static fromHttpResponse(req, res) {
|
|
19
|
-
return new ODataResponse({
|
|
20
|
-
api: req.api,
|
|
21
|
-
resource: req.resource,
|
|
22
|
-
body: res.body,
|
|
23
|
-
headers: res.headers,
|
|
24
|
-
status: res.status,
|
|
25
|
-
statusText: res.statusText,
|
|
26
|
-
url: res.url || undefined,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
static fromJson(req, json) {
|
|
30
|
-
return new ODataResponse({
|
|
31
|
-
api: req.api,
|
|
32
|
-
resource: req.resource,
|
|
33
|
-
body: json.body,
|
|
34
|
-
headers: new HttpHeaders(json.headers),
|
|
35
|
-
status: json.status,
|
|
36
|
-
statusText: json.statusText,
|
|
37
|
-
url: json.url || undefined,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
toJson() {
|
|
41
|
-
return {
|
|
42
|
-
body: this.body,
|
|
43
|
-
headers: this.headers
|
|
44
|
-
.keys()
|
|
45
|
-
.map((name) => ({ [name]: this.headers.getAll(name) || [] }))
|
|
46
|
-
.reduce((acc, header) => Object.assign(acc, header), {}),
|
|
47
|
-
status: this.status,
|
|
48
|
-
statusText: this.statusText,
|
|
49
|
-
url: this.url,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
_options;
|
|
53
|
-
get options() {
|
|
54
|
-
if (this._options === undefined) {
|
|
55
|
-
this._options = new ODataResponseOptions(this.api.options.parserOptions);
|
|
56
|
-
const contentType = this.headers.get(CONTENT_TYPE);
|
|
57
|
-
if (contentType && contentType.includes(APPLICATION_JSON)) {
|
|
58
|
-
const features = contentType
|
|
59
|
-
.split(',')
|
|
60
|
-
.find((p) => p.startsWith(APPLICATION_JSON));
|
|
61
|
-
this._options.setFeatures(features);
|
|
62
|
-
}
|
|
63
|
-
const headerKey = Http.resolveHeaderKey(this.headers, ODATA_VERSION_HEADERS);
|
|
64
|
-
if (headerKey) {
|
|
65
|
-
const version = (this.headers.get(headerKey) || '').replace(/\;/g, '');
|
|
66
|
-
this._options.setVersion(version);
|
|
67
|
-
}
|
|
68
|
-
const preferenceApplied = this.headers.get(PREFERENCE_APPLIED);
|
|
69
|
-
if (preferenceApplied) {
|
|
70
|
-
this._options.setPreferenceApplied(preferenceApplied);
|
|
71
|
-
}
|
|
72
|
-
const location = this.headers.get(LOCATION_HEADER);
|
|
73
|
-
if (location) {
|
|
74
|
-
this._options.setLocation(location);
|
|
75
|
-
}
|
|
76
|
-
const cacheControl = this.headers.get(CACHE_CONTROL);
|
|
77
|
-
if (cacheControl) {
|
|
78
|
-
this._options.setCache(cacheControl);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return this._options;
|
|
82
|
-
}
|
|
83
|
-
_payload;
|
|
84
|
-
get payload() {
|
|
85
|
-
if (this._payload === undefined) {
|
|
86
|
-
this._payload =
|
|
87
|
-
this.body && this.options.version === '2.0'
|
|
88
|
-
? this.body['d']
|
|
89
|
-
: this.body;
|
|
90
|
-
}
|
|
91
|
-
return this._payload;
|
|
92
|
-
}
|
|
93
|
-
_context;
|
|
94
|
-
get context() {
|
|
95
|
-
if (this._context === undefined) {
|
|
96
|
-
this._context = this.options.helper.context(Types.isPlainObject(this.payload) ? this.payload : {});
|
|
97
|
-
}
|
|
98
|
-
return this._context;
|
|
99
|
-
}
|
|
100
|
-
_annotations;
|
|
101
|
-
get annotations() {
|
|
102
|
-
if (this._annotations === undefined) {
|
|
103
|
-
const options = this.options;
|
|
104
|
-
this._annotations = options.helper.annotations(this.payload || {});
|
|
105
|
-
let key = Http.resolveHeaderKey(this.headers, ETAG_HEADERS);
|
|
106
|
-
if (key) {
|
|
107
|
-
const etag = this.headers.get(key);
|
|
108
|
-
if (etag)
|
|
109
|
-
this._annotations.set(options.helper.ODATA_ETAG, etag);
|
|
110
|
-
}
|
|
111
|
-
key = Http.resolveHeaderKey(this.headers, ODATA_ENTITYID_HEADERS);
|
|
112
|
-
if (key) {
|
|
113
|
-
const entityId = this.headers.get(key);
|
|
114
|
-
if (entityId)
|
|
115
|
-
this._annotations.set(options.helper.ODATA_ID, entityId);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return this._annotations;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Handle the response body as an entity
|
|
122
|
-
* @returns
|
|
123
|
-
*/
|
|
124
|
-
entity() {
|
|
125
|
-
const options = this.options;
|
|
126
|
-
const payload = this.payload;
|
|
127
|
-
const annots = new ODataEntityAnnotations(options.helper, this.annotations, this.context);
|
|
128
|
-
const data = payload ? annots.data(payload) : null;
|
|
129
|
-
let entity = (data !== null && Types.isPlainObject(data)
|
|
130
|
-
? options.helper.attributes(data, this.api.options.stripMetadata)
|
|
131
|
-
: data);
|
|
132
|
-
if (entity !== null)
|
|
133
|
-
entity = this.resource.deserialize(entity, options);
|
|
134
|
-
return { entity, annots };
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Handle the response body as entities
|
|
138
|
-
* @returns
|
|
139
|
-
*/
|
|
140
|
-
entities() {
|
|
141
|
-
const options = this.options;
|
|
142
|
-
const payload = this.payload;
|
|
143
|
-
const annots = new ODataEntitiesAnnotations(options.helper, this.annotations, this.context);
|
|
144
|
-
let entities = payload ? annots.data(payload) : null;
|
|
145
|
-
if (entities !== null)
|
|
146
|
-
entities = this.resource.deserialize(entities, options);
|
|
147
|
-
return { entities, annots };
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Handle the response body as a property
|
|
151
|
-
* @returns
|
|
152
|
-
*/
|
|
153
|
-
property() {
|
|
154
|
-
const options = this.options;
|
|
155
|
-
const payload = this.payload;
|
|
156
|
-
const annots = new ODataPropertyAnnotations(options.helper, this.annotations, this.context);
|
|
157
|
-
const data = payload ? annots.data(payload) : null;
|
|
158
|
-
let property = (data !== null && Types.isPlainObject(data)
|
|
159
|
-
? options.helper.attributes(data, this.api.options.stripMetadata)
|
|
160
|
-
: data);
|
|
161
|
-
if (property !== null)
|
|
162
|
-
property = this.resource.deserialize(property, options);
|
|
163
|
-
return { property, annots };
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Handle the response body as a value
|
|
167
|
-
* @returns
|
|
168
|
-
*/
|
|
169
|
-
value() {
|
|
170
|
-
const options = this.options;
|
|
171
|
-
const payload = this.payload;
|
|
172
|
-
let value = (payload !== null && Types.isPlainObject(payload)
|
|
173
|
-
? options.helper.attributes(payload, this.api.options.stripMetadata)
|
|
174
|
-
: payload);
|
|
175
|
-
if (value !== null)
|
|
176
|
-
value = this.resource.deserialize(value, options);
|
|
177
|
-
return value;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsa0JBQWtCLEdBQ25CLE1BQU0sY0FBYyxDQUFDO0FBR3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBaUJqRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFpQixTQUFRLFlBQWU7SUFDMUMsR0FBRyxDQUFXO0lBQ2QsUUFBUSxDQUFtQjtJQUVwQyxZQUFZLElBUVg7UUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUksR0FBb0IsRUFBRSxHQUFvQjtRQUNuRSxPQUFPLElBQUksYUFBYSxDQUFJO1lBQzFCLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztZQUNaLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixJQUFJLEVBQUUs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QUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksS0FBSyxHQUFHLENBQ1YsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztZQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUNwRSxDQUFDLENBQUMsT0FBTyxDQUNBLENBQUM7UUFFZCxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQU0sQ0FBQztRQUMzRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhUHJvcGVydHlBbm5vdGF0aW9ucyxcbn0gZnJvbSAnLi4vYW5ub3RhdGlvbnMnO1xuaW1wb3J0IHsgVHlwZXMgfSBmcm9tICcuLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi9yZXNvdXJjZSc7XG5pbXBvcnQge1xuICBBUFBMSUNBVElPTl9KU09OLFxuICBPREFUQV9WRVJTSU9OX0hFQURFUlMsXG4gIENPTlRFTlRfVFlQRSxcbiAgQ0FDSEVfQ09OVFJPTCxcbiAgTE9DQVRJT05fSEVBREVSLFxuICBFVEFHX0hFQURFUlMsXG4gIE9EQVRBX0VOVElUWUlEX0hFQURFUlMsXG4gIFBSRUZFUkVOQ0VfQVBQTElFRCxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IE9EYXRhUmVxdWVzdCB9IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgeyBIdHRwIH0gZnJvbSAnLi4vdXRpbHMvaHR0cCc7XG5pbXBvcnQgeyBPRGF0YUNvbnRleHQgfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHsgT0RhdGFSZXNwb25zZU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBPRGF0YUVudGl0eTxUPiA9IHtcbiAgZW50aXR5OiBUIHwgbnVsbDtcbiAgYW5ub3RzOiBPRGF0YUVudGl0eUFubm90YXRpb25zPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgT0RhdGFFbnRpdGllczxUPiA9IHtcbiAgZW50aXRpZXM6IFRbXSB8IG51bGw7XG4gIGFubm90czogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eTxUPiA9IHtcbiAgcHJvcGVydHk6IFQgfCBudWxsO1xuICBhbm5vdHM6IE9EYXRhUHJvcGVydHlBbm5vdGF0aW9uczxUPjtcbn07XG5cbi8qKlxuICogT0RhdGEgUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIE9EYXRhUmVzcG9uc2U8VD4gZXh0ZW5kcyBIdHRwUmVzcG9uc2U8VD4ge1xuICByZWFkb25seSBhcGk6IE9EYXRhQXBpO1xuICByZWFkb25seSByZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxUPjtcblxuICBjb25zdHJ1Y3Rvcihpbml0OiB7XG4gICAgYXBpOiBPRGF0YUFwaTtcbiAgICByZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxUPjtcbiAgICBib2R5OiBUIHwgbnVsbDtcbiAgICBoZWFkZXJzOiBIdHRwSGVhZGVycztcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gICAgdXJsPzogc3RyaW5nO1xuICB9KSB7XG4gICAgc3VwZXIoaW5pdCk7XG4gICAgdGhpcy5hcGkgPSBpbml0LmFwaTtcbiAgICB0aGlzLnJlc291cmNlID0gaW5pdC5yZXNvdXJjZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSHR0cFJlc3BvbnNlPFQ+KHJlcTogT0RhdGFSZXF1ZXN0PFQ+LCByZXM6IEh0dHBSZXNwb25zZTxUPikge1xuICAgIHJldHVybiBuZXcgT0RhdGFSZXNwb25zZTxUPih7XG4gICAgICBhcGk6IHJlcS5hcGksXG4gICAgICByZXNvdXJjZTogcmVxLnJlc291cmNlLFxuICAgICAgYm9keTogcmVzLmJvZHksXG4gICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgIHN0YXR1czogcmVzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNUZXh0LFxuICAgICAgdXJsOiByZXMudXJsIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSnNvbjxUPihcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxUPixcbiAgICBqc29uOiB7XG4gICAgICBib2R5OiBUIHwgbnVsbDtcbiAgICAgIGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XG4gICAgICBzdGF0dXM6IG51bWJlcjtcbiAgICAgIHN0YXR1c1RleHQ6IHN0cmluZztcbiAgICAgIHVybDogc3RyaW5nIHwgbnVsbDtcbiAgICB9LFxuICApIHtcbiAgICByZXR1cm4gbmV3IE9EYXRhUmVzcG9uc2U8VD4oe1xuICAgICAgYXBpOiByZXEuYXBpLFxuICAgICAgcmVzb3VyY2U6IHJlcS5yZXNvdXJjZSxcbiAgICAgIGJvZHk6IGpzb24uYm9keSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyhqc29uLmhlYWRlcnMpLFxuICAgICAgc3RhdHVzOiBqc29uLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IGpzb24uc3RhdHVzVGV4dCxcbiAgICAgIHVybDoganNvbi51cmwgfHwgdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBib2R5OiB0aGlzLmJvZHksXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnNcbiAgICAgICAgLmtleXMoKVxuICAgICAgICAubWFwKChuYW1lKSA9PiAoeyBbbmFtZV06IHRoaXMuaGVhZGVycy5nZXRBbGwobmFtZSkgfHwgW10gfSkpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgaGVhZGVyKSA9PiBPYmplY3QuYXNzaWduKGFjYywgaGVhZGVyKSwge30pLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIHVybDogdGhpcy51cmwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX29wdGlvbnM/OiBPRGF0YVJlc3BvbnNlT3B0aW9ucztcbiAgZ2V0IG9wdGlvbnMoKTogT0RhdGFSZXNwb25zZU9wdGlvbnMge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBuZXcgT0RhdGFSZXNwb25zZU9wdGlvbnModGhpcy5hcGkub3B0aW9ucy5wYXJzZXJPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5oZWFkZXJzLmdldChDT05URU5UX1RZUEUpO1xuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluY2x1ZGVzKEFQUExJQ0FUSU9OX0pTT04pKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gY29udGVudFR5cGVcbiAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgIC5maW5kKChwKSA9PiBwLnN0YXJ0c1dpdGgoQVBQTElDQVRJT05fSlNPTikpIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5zZXRGZWF0dXJlcyhmZWF0dXJlcyk7XG4gICAgICB9XG4gICAgICBjb25zdCBoZWFkZXJLZXkgPSBIdHRwLnJlc29sdmVIZWFkZXJLZXkoXG4gICAgICAgIHRoaXMuaGVhZGVycyxcbiAgICAgICAgT0RBVEFfVkVSU0lPTl9IRUFERVJTLFxuICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXJLZXkpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9ICh0aGlzLmhlYWRlcnMuZ2V0KGhlYWRlcktleSkgfHwgJycpLnJlcGxhY2UoXG4gICAgICAgICAgL1xcOy9nLFxuICAgICAgICAgICcnLFxuICAgICAgICApIGFzICcyLjAnIHwgJzMuMCcgfCAnNC4wJztcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5zZXRWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmVmZXJlbmNlQXBwbGllZCA9IHRoaXMuaGVhZGVycy5nZXQoUFJFRkVSRU5DRV9BUFBMSUVEKTtcbiAgICAgIGlmIChwcmVmZXJlbmNlQXBwbGllZCkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLnNldFByZWZlcmVuY2VBcHBsaWVkKHByZWZlcmVuY2VBcHBsaWVkKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmhlYWRlcnMuZ2V0KExPQ0FUSU9OX0hFQURFUik7XG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5zZXRMb2NhdGlvbihsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhY2hlQ29udHJvbCA9IHRoaXMuaGVhZGVycy5nZXQoQ0FDSEVfQ09OVFJPTCk7XG4gICAgICBpZiAoY2FjaGVDb250cm9sKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMuc2V0Q2FjaGUoY2FjaGVDb250cm9sKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIF9wYXlsb2FkPzogYW55O1xuICBnZXQgcGF5bG9hZCgpIHtcbiAgICBpZiAodGhpcy5fcGF5bG9hZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wYXlsb2FkID1cbiAgICAgICAgdGhpcy5ib2R5ICYmIHRoaXMub3B0aW9ucy52ZXJzaW9uID09PSAnMi4wJ1xuICAgICAgICAgID8gKDxhbnk+dGhpcy5ib2R5KVsnZCddXG4gICAgICAgICAgOiB0aGlzLmJvZHk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wYXlsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29udGV4dD86IGFueTtcbiAgZ2V0IGNvbnRleHQoKTogT0RhdGFDb250ZXh0IHtcbiAgICBpZiAodGhpcy5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5vcHRpb25zLmhlbHBlci5jb250ZXh0KFxuICAgICAgICBUeXBlcy5pc1BsYWluT2JqZWN0KHRoaXMucGF5bG9hZCkgPyB0aGlzLnBheWxvYWQgOiB7fSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBfYW5ub3RhdGlvbnM/OiBNYXA8c3RyaW5nLCBhbnk+O1xuICBnZXQgYW5ub3RhdGlvbnMoKTogTWFwPHN0cmluZywgYW55PiB7XG4gICAgaWYgKHRoaXMuX2Fubm90YXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB0aGlzLl9hbm5vdGF0aW9ucyA9IG9wdGlvbnMuaGVscGVyLmFubm90YXRpb25zKHRoaXMucGF5bG9hZCB8fCB7fSk7XG4gICAgICBsZXQga2V5ID0gSHR0cC5yZXNvbHZlSGVhZGVyS2V5KHRoaXMuaGVhZGVycywgRVRBR19IRUFERVJTKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgZXRhZyA9IHRoaXMuaGVhZGVycy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV0YWcpIHRoaXMuX2Fubm90YXRpb25zLnNldChvcHRpb25zLmhlbHBlci5PREFUQV9FVEFHLCBldGFnKTtcbiAgICAgIH1cbiAgICAgIGtleSA9IEh0dHAucmVzb2x2ZUhlYWRlcktleSh0aGlzLmhlYWRlcnMsIE9EQVRBX0VOVElUWUlEX0hFQURFUlMpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBlbnRpdHlJZCA9IHRoaXMuaGVhZGVycy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudGl0eUlkKSB0aGlzLl9hbm5vdGF0aW9ucy5zZXQob3B0aW9ucy5oZWxwZXIuT0RBVEFfSUQsIGVudGl0eUlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgcmVzcG9uc2UgYm9keSBhcyBhbiBlbnRpdHlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0eSgpOiBPRGF0YUVudGl0eTxUPiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkO1xuICAgIGNvbnN0IGFubm90cyA9IG5ldyBPRGF0YUVudGl0eUFubm90YXRpb25zPFQ+KFxuICAgICAgb3B0aW9ucy5oZWxwZXIsXG4gICAgICB0aGlzLmFubm90YXRpb25zLFxuICAgICAgdGhpcy5jb250ZXh0LFxuICAgICk7XG4gICAgY29uc3QgZGF0YSA9IHBheWxvYWQgPyBhbm5vdHMuZGF0YShwYXlsb2FkKSA6IG51bGw7XG4gICAgbGV0IGVudGl0eSA9IChcbiAgICAgIGRhdGEgIT09IG51bGwgJiYgVHlwZXMuaXNQbGFpbk9iamVjdChkYXRhKVxuICAgICAgICA/IG9wdGlvbnMuaGVscGVyLmF0dHJpYnV0ZXMoZGF0YSwgdGhpcy5hcGkub3B0aW9ucy5zdHJpcE1ldGFkYXRhKVxuICAgICAgICA6IGRhdGFcbiAgICApIGFzIFQgfCBudWxsO1xuXG4gICAgaWYgKGVudGl0eSAhPT0gbnVsbClcbiAgICAgIGVudGl0eSA9IHRoaXMucmVzb3VyY2UuZGVzZXJpYWxpemUoZW50aXR5LCBvcHRpb25zKSBhcyBUO1xuICAgIHJldHVybiB7IGVudGl0eSwgYW5ub3RzIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSByZXNwb25zZSBib2R5IGFzIGVudGl0aWVzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBlbnRpdGllcygpOiBPRGF0YUVudGl0aWVzPFQ+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQ7XG4gICAgY29uc3QgYW5ub3RzID0gbmV3IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPihcbiAgICAgIG9wdGlvbnMuaGVscGVyLFxuICAgICAgdGhpcy5hbm5vdGF0aW9ucyxcbiAgICAgIHRoaXMuY29udGV4dCxcbiAgICApO1xuICAgIGxldCBlbnRpdGllcyA9IHBheWxvYWQgPyBhbm5vdHMuZGF0YShwYXlsb2FkKSA6IG51bGw7XG4gICAgaWYgKGVudGl0aWVzICE9PSBudWxsKVxuICAgICAgZW50aXRpZXMgPSB0aGlzLnJlc291cmNlLmRlc2VyaWFsaXplKGVudGl0aWVzLCBvcHRpb25zKSBhcyBUW107XG4gICAgcmV0dXJuIHsgZW50aXRpZXMsIGFubm90cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgcmVzcG9uc2UgYm9keSBhcyBhIHByb3BlcnR5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcm9wZXJ0eSgpOiBPRGF0YVByb3BlcnR5PFQ+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQ7XG4gICAgY29uc3QgYW5ub3RzID0gbmV3IE9EYXRhUHJvcGVydHlBbm5vdGF0aW9uczxUPihcbiAgICAgIG9wdGlvbnMuaGVscGVyLFxuICAgICAgdGhpcy5hbm5vdGF0aW9ucyxcbiAgICAgIHRoaXMuY29udGV4dCxcbiAgICApO1xuICAgIGNvbnN0IGRhdGEgPSBwYXlsb2FkID8gKGFubm90cy5kYXRhKHBheWxvYWQpIGFzIFQpIDogbnVsbDtcbiAgICBsZXQgcHJvcGVydHkgPSAoXG4gICAgICBkYXRhICE9PSBudWxsICYmIFR5cGVzLmlzUGxhaW5PYmplY3QoZGF0YSlcbiAgICAgICAgPyBvcHRpb25zLmhlbHBlci5hdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZGF0YSBhcyB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICAgICAgICAgIHRoaXMuYXBpLm9wdGlvbnMuc3RyaXBNZXRhZGF0YSxcbiAgICAgICAgICApXG4gICAgICAgIDogZGF0YVxuICAgICkgYXMgVCB8IG51bGw7XG5cbiAgICBpZiAocHJvcGVydHkgIT09IG51bGwpXG4gICAgICBwcm9wZXJ0eSA9IHRoaXMucmVzb3VyY2UuZGVzZXJpYWxpemUocHJvcGVydHksIG9wdGlvbnMpIGFzIFQ7XG4gICAgcmV0dXJuIHsgcHJvcGVydHksIGFubm90cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgcmVzcG9uc2UgYm9keSBhcyBhIHZhbHVlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB2YWx1ZSgpOiBUIHwgbnVsbCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkO1xuICAgIGxldCB2YWx1ZSA9IChcbiAgICAgIHBheWxvYWQgIT09IG51bGwgJiYgVHlwZXMuaXNQbGFpbk9iamVjdChwYXlsb2FkKVxuICAgICAgICA/IG9wdGlvbnMuaGVscGVyLmF0dHJpYnV0ZXMocGF5bG9hZCwgdGhpcy5hcGkub3B0aW9ucy5zdHJpcE1ldGFkYXRhKVxuICAgICAgICA6IHBheWxvYWRcbiAgICApIGFzIFQgfCBudWxsO1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB2YWx1ZSA9IHRoaXMucmVzb3VyY2UuZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbnMpIGFzIFQ7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=
|