angular-odata 0.128.0 → 0.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -244
- package/fesm2022/angular-odata.mjs +2320 -1118
- package/fesm2022/angular-odata.mjs.map +1 -1
- package/lib/api.d.ts +10 -11
- package/lib/cache/cache.d.ts +2 -2
- package/lib/cache/memory.d.ts +2 -2
- package/lib/cache/storage.d.ts +2 -2
- package/lib/index.d.ts +1 -0
- package/lib/loaders.d.ts +8 -8
- package/lib/metadata/csdl/csdl-annotation.d.ts +62 -26
- package/lib/metadata/csdl/csdl-entity-container.d.ts +8 -3
- package/lib/metadata/csdl/csdl-entity-set.d.ts +7 -2
- package/lib/metadata/csdl/csdl-enum-type.d.ts +11 -3
- package/lib/metadata/csdl/csdl-function-action.d.ts +54 -11
- package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +4 -0
- package/lib/metadata/csdl/csdl-reference.d.ts +26 -3
- package/lib/metadata/csdl/csdl-schema.d.ts +5 -2
- package/lib/metadata/csdl/csdl-singleton.d.ts +5 -0
- package/lib/metadata/csdl/csdl-structural-property.d.ts +19 -3
- package/lib/metadata/csdl/csdl-structured-type.d.ts +28 -7
- package/lib/metadata/csdl/csdl-type-definition.d.ts +3 -0
- package/lib/metadata/metadata.d.ts +16 -3
- package/lib/models/collection.d.ts +2 -1
- package/lib/models/model.d.ts +6 -5
- package/lib/models/options.d.ts +11 -4
- package/lib/module.d.ts +3 -3
- package/lib/options.d.ts +3 -3
- package/lib/resources/path/segments.d.ts +3 -3
- package/lib/resources/query/builder.d.ts +3 -2
- package/lib/resources/query/expressions/apply.d.ts +1 -1
- package/lib/resources/query/expressions/compute.d.ts +1 -1
- package/lib/resources/query/expressions/count.d.ts +1 -1
- package/lib/resources/query/expressions/expand.d.ts +5 -2
- package/lib/resources/query/expressions/filter.d.ts +2 -1
- package/lib/resources/query/expressions/orderby.d.ts +2 -1
- package/lib/resources/query/expressions/search.d.ts +2 -1
- package/lib/resources/query/expressions/select.d.ts +2 -1
- package/lib/resources/query/expressions/syntax.d.ts +2 -2
- package/lib/resources/query/handlers.d.ts +17 -5
- package/lib/resources/query/options.d.ts +3 -3
- package/lib/resources/resource.d.ts +36 -8
- package/lib/resources/types/action.d.ts +4 -4
- package/lib/resources/types/entity-set.d.ts +15 -8
- package/lib/resources/types/entity.d.ts +5 -1
- package/lib/resources/types/function.d.ts +4 -4
- package/lib/resources/types/navigation-property.d.ts +12 -3
- package/lib/resources/types/property.d.ts +14 -3
- package/lib/resources/types/singleton.d.ts +5 -1
- package/lib/schema/annotation.d.ts +3 -3
- package/lib/schema/callable.d.ts +3 -3
- package/lib/schema/element.d.ts +3 -3
- package/lib/schema/entity-container.d.ts +2 -2
- package/lib/schema/entity-set.d.ts +2 -2
- package/lib/schema/enum-type.d.ts +10 -10
- package/lib/schema/parsers/callable.d.ts +4 -4
- package/lib/schema/parsers/enum-type.d.ts +15 -15
- package/lib/schema/parsers/structured-type.d.ts +8 -5
- package/lib/schema/schema.d.ts +3 -3
- package/lib/schema/singleton.d.ts +2 -2
- package/lib/schema/structured-type.d.ts +7 -4
- package/lib/services/entity-set.d.ts +9 -6
- package/lib/services/entity.d.ts +1 -1
- package/lib/services/singleton.d.ts +1 -1
- package/lib/settings.d.ts +2 -2
- package/lib/types.d.ts +82 -69
- package/lib/utils/enums.d.ts +12 -12
- package/lib/utils/http.d.ts +1 -1
- package/lib/utils/objects.d.ts +1 -1
- package/lib/utils/odata.d.ts +2 -2
- package/lib/utils/strings.d.ts +2 -2
- package/package.json +3 -5
- package/schematics/apigen/angular/api-config.js +7 -1
- package/schematics/apigen/angular/api-config.js.map +1 -1
- package/schematics/apigen/angular/base.d.ts +22 -2
- package/schematics/apigen/angular/base.js +82 -42
- package/schematics/apigen/angular/base.js.map +1 -1
- package/schematics/apigen/angular/entity.js +7 -1
- package/schematics/apigen/angular/entity.js.map +1 -1
- package/schematics/apigen/angular/enum.js +1 -0
- package/schematics/apigen/angular/enum.js.map +1 -1
- package/schematics/apigen/angular/module.js.map +1 -1
- package/schematics/apigen/angular/service.js +3 -2
- package/schematics/apigen/angular/service.js.map +1 -1
- package/schematics/apigen/files/api-config/__fileName__.ts +8 -6
- package/schematics/apigen/files/entity/__fileName__.ts +2 -2
- package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +1 -1
- package/schematics/apigen/files/entityset-service/__fileName__.ts +1 -1
- package/schematics/apigen/files/enum/__fileName__.ts +1 -1
- package/schematics/apigen/files/metadata/metadata.json +1 -0
- package/schematics/apigen/files/singleton-service/__fileName__.ts +1 -1
- package/schematics/apigen/index.js +56 -12
- package/schematics/apigen/index.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +56 -23
- package/schematics/apigen/metadata/csdl/csdl-annotation.js +143 -13
- package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-container.js +19 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-set.js +11 -0
- package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +6 -0
- package/schematics/apigen/metadata/csdl/csdl-enum-type.js +17 -0
- package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +37 -0
- package/schematics/apigen/metadata/csdl/csdl-function-action.js +52 -0
- package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +4 -0
- package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +6 -0
- package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +15 -3
- package/schematics/apigen/metadata/csdl/csdl-reference.js +26 -2
- package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-schema.js +37 -0
- package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-singleton.js +8 -0
- package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +16 -0
- package/schematics/apigen/metadata/csdl/csdl-structural-property.js +53 -0
- package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +22 -3
- package/schematics/apigen/metadata/csdl/csdl-structured-type.js +47 -2
- package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -1
- package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +3 -0
- package/schematics/apigen/metadata/csdl/csdl-type-definition.js +19 -0
- package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -1
- package/schematics/apigen/metadata/metadata.d.ts +10 -0
- package/schematics/apigen/metadata/metadata.js +12 -6
- package/schematics/apigen/metadata/metadata.js.map +1 -1
- package/schematics/apigen/metadata/parser.js.map +1 -1
- package/schematics/apigen/schema.d.ts +2 -1
- package/schematics/apigen/schema.json +15 -14
- package/schematics/apigen/utils.d.ts +1 -0
- package/schematics/apigen/utils.js +25 -1
- package/schematics/apigen/utils.js.map +1 -1
- package/schematics/ng-add/index.js +1 -2
- package/schematics/ng-add/index.js.map +1 -1
- package/esm2022/angular-odata.mjs +0 -5
- package/esm2022/lib/annotations.mjs +0 -140
- package/esm2022/lib/api.mjs +0 -419
- package/esm2022/lib/cache/cache.mjs +0 -175
- package/esm2022/lib/cache/index.mjs +0 -4
- package/esm2022/lib/cache/memory.mjs +0 -30
- package/esm2022/lib/cache/storage.mjs +0 -55
- package/esm2022/lib/client.mjs +0 -212
- package/esm2022/lib/constants.mjs +0 -95
- package/esm2022/lib/helper.mjs +0 -280
- package/esm2022/lib/index.mjs +0 -21
- package/esm2022/lib/loaders.mjs +0 -39
- package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +0 -95
- package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +0 -27
- package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +0 -24
- package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +0 -37
- package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +0 -94
- package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +0 -7
- package/esm2022/lib/metadata/csdl/csdl-reference.mjs +0 -23
- package/esm2022/lib/metadata/csdl/csdl-schema.mjs +0 -39
- package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +0 -15
- package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +0 -70
- package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +0 -92
- package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +0 -15
- package/esm2022/lib/metadata/index.mjs +0 -3
- package/esm2022/lib/metadata/metadata.mjs +0 -14
- package/esm2022/lib/metadata/parser.mjs +0 -563
- package/esm2022/lib/models/collection.mjs +0 -814
- package/esm2022/lib/models/index.mjs +0 -4
- package/esm2022/lib/models/model.mjs +0 -553
- package/esm2022/lib/models/options.mjs +0 -1179
- package/esm2022/lib/module.mjs +0 -55
- package/esm2022/lib/options.mjs +0 -36
- package/esm2022/lib/resources/index.mjs +0 -7
- package/esm2022/lib/resources/options.mjs +0 -56
- package/esm2022/lib/resources/path/handlers.mjs +0 -79
- package/esm2022/lib/resources/path/index.mjs +0 -3
- package/esm2022/lib/resources/path/segments.mjs +0 -148
- package/esm2022/lib/resources/query/builder.mjs +0 -636
- package/esm2022/lib/resources/query/expressions/apply.mjs +0 -236
- package/esm2022/lib/resources/query/expressions/base.mjs +0 -25
- package/esm2022/lib/resources/query/expressions/compute.mjs +0 -54
- package/esm2022/lib/resources/query/expressions/count.mjs +0 -116
- package/esm2022/lib/resources/query/expressions/expand.mjs +0 -147
- package/esm2022/lib/resources/query/expressions/filter.mjs +0 -178
- package/esm2022/lib/resources/query/expressions/index.mjs +0 -10
- package/esm2022/lib/resources/query/expressions/orderby.mjs +0 -79
- package/esm2022/lib/resources/query/expressions/search.mjs +0 -141
- package/esm2022/lib/resources/query/expressions/select.mjs +0 -47
- package/esm2022/lib/resources/query/expressions/syntax.mjs +0 -751
- package/esm2022/lib/resources/query/handlers.mjs +0 -420
- package/esm2022/lib/resources/query/index.mjs +0 -5
- package/esm2022/lib/resources/query/options.mjs +0 -139
- package/esm2022/lib/resources/request.mjs +0 -196
- package/esm2022/lib/resources/resource.mjs +0 -311
- package/esm2022/lib/resources/response.mjs +0 -174
- package/esm2022/lib/resources/types/action.mjs +0 -116
- package/esm2022/lib/resources/types/batch.mjs +0 -428
- package/esm2022/lib/resources/types/count.mjs +0 -33
- package/esm2022/lib/resources/types/entity-set.mjs +0 -131
- package/esm2022/lib/resources/types/entity.mjs +0 -112
- package/esm2022/lib/resources/types/function.mjs +0 -146
- package/esm2022/lib/resources/types/index.mjs +0 -15
- package/esm2022/lib/resources/types/media.mjs +0 -44
- package/esm2022/lib/resources/types/metadata.mjs +0 -35
- package/esm2022/lib/resources/types/navigation-property.mjs +0 -256
- package/esm2022/lib/resources/types/options.mjs +0 -2
- package/esm2022/lib/resources/types/property.mjs +0 -197
- package/esm2022/lib/resources/types/reference.mjs +0 -87
- package/esm2022/lib/resources/types/singleton.mjs +0 -130
- package/esm2022/lib/resources/types/value.mjs +0 -48
- package/esm2022/lib/schema/annotation.mjs +0 -37
- package/esm2022/lib/schema/callable.mjs +0 -66
- package/esm2022/lib/schema/element.mjs +0 -67
- package/esm2022/lib/schema/entity-container.mjs +0 -11
- package/esm2022/lib/schema/entity-set.mjs +0 -9
- package/esm2022/lib/schema/enum-type.mjs +0 -68
- package/esm2022/lib/schema/index.mjs +0 -9
- package/esm2022/lib/schema/parsers/callable.mjs +0 -110
- package/esm2022/lib/schema/parsers/edm.mjs +0 -101
- package/esm2022/lib/schema/parsers/enum-type.mjs +0 -130
- package/esm2022/lib/schema/parsers/index.mjs +0 -5
- package/esm2022/lib/schema/parsers/structured-type.mjs +0 -514
- package/esm2022/lib/schema/schema.mjs +0 -45
- package/esm2022/lib/schema/singleton.mjs +0 -9
- package/esm2022/lib/schema/structured-type.mjs +0 -213
- package/esm2022/lib/services/base.mjs +0 -29
- package/esm2022/lib/services/entity-set.mjs +0 -155
- package/esm2022/lib/services/entity.mjs +0 -12
- package/esm2022/lib/services/factory.mjs +0 -44
- package/esm2022/lib/services/index.mjs +0 -5
- package/esm2022/lib/services/singleton.mjs +0 -54
- package/esm2022/lib/settings.mjs +0 -112
- package/esm2022/lib/types.mjs +0 -118
- package/esm2022/lib/utils/arraybuffers.mjs +0 -46
- package/esm2022/lib/utils/arrays.mjs +0 -10
- package/esm2022/lib/utils/dates.mjs +0 -18
- package/esm2022/lib/utils/durations.mjs +0 -40
- package/esm2022/lib/utils/enums.mjs +0 -61
- package/esm2022/lib/utils/http.mjs +0 -95
- package/esm2022/lib/utils/index.mjs +0 -10
- package/esm2022/lib/utils/objects.mjs +0 -204
- package/esm2022/lib/utils/odata.mjs +0 -22
- package/esm2022/lib/utils/strings.mjs +0 -20
- package/esm2022/lib/utils/types.mjs +0 -136
- package/esm2022/lib/utils/urls.mjs +0 -24
- package/esm2022/public-api.mjs +0 -5
|
@@ -1,311 +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
|
-
constructor(api, { segments, query, } = {}) {
|
|
10
|
-
this.api = api;
|
|
11
|
-
this.pathSegments = segments ?? new ODataPathSegments();
|
|
12
|
-
this.queryOptions = query ?? new ODataQueryOptions();
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* @returns string The outgoing type of the resource
|
|
16
|
-
*/
|
|
17
|
-
outgoingType() {
|
|
18
|
-
return this.pathSegments.last()?.outgoingType();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* @returns string The incoming type of the resource
|
|
22
|
-
*/
|
|
23
|
-
incomingType() {
|
|
24
|
-
return this.pathSegments.last()?.incomingType();
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* @returns string The binding type of the resource
|
|
28
|
-
*/
|
|
29
|
-
bindingType() {
|
|
30
|
-
return this.pathSegments.last()?.bindingType();
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* @returns string All covered types of the resource
|
|
34
|
-
*/
|
|
35
|
-
types() {
|
|
36
|
-
return this.pathSegments.types();
|
|
37
|
-
}
|
|
38
|
-
callable() {
|
|
39
|
-
const type = this.outgoingType() ?? this.incomingType();
|
|
40
|
-
return type !== undefined ? this.api.callable(type) : undefined;
|
|
41
|
-
}
|
|
42
|
-
enumType() {
|
|
43
|
-
const type = this.outgoingType() ?? this.incomingType();
|
|
44
|
-
return type !== undefined ? this.api.enumType(type) : undefined;
|
|
45
|
-
}
|
|
46
|
-
structuredType() {
|
|
47
|
-
const type = this.outgoingType() ?? this.incomingType();
|
|
48
|
-
return type !== undefined ? this.api.structuredType(type) : undefined;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* @returns boolean The resource has key ?
|
|
52
|
-
*/
|
|
53
|
-
hasKey() {
|
|
54
|
-
return Boolean(this.pathSegments.last({ key: true })?.hasKey());
|
|
55
|
-
}
|
|
56
|
-
hasEntityKey() {
|
|
57
|
-
return Boolean(this.pathSegments.get(PathSegment.entitySet)?.hasKey());
|
|
58
|
-
}
|
|
59
|
-
clearKey() {
|
|
60
|
-
return this.pathSegments.last({ key: true })?.clearKey();
|
|
61
|
-
}
|
|
62
|
-
//#region Models
|
|
63
|
-
asModel(entity, { annots, ModelType, } = {}) {
|
|
64
|
-
const reset = annots !== undefined;
|
|
65
|
-
let resource = this;
|
|
66
|
-
const type = annots?.type ?? this.incomingType();
|
|
67
|
-
if (type === undefined)
|
|
68
|
-
throw Error(`No type for model`);
|
|
69
|
-
if (ModelType === undefined)
|
|
70
|
-
ModelType = this.api.modelForType(type);
|
|
71
|
-
let entitySet = annots?.entitySet;
|
|
72
|
-
if (entitySet !== undefined) {
|
|
73
|
-
resource = this.api.entitySet(entitySet).entity(entity);
|
|
74
|
-
resource.query((q) => q.restore(this.queryOptions.toQueryArguments()));
|
|
75
|
-
}
|
|
76
|
-
return new ModelType(entity, { resource, annots, reset });
|
|
77
|
-
}
|
|
78
|
-
asCollection(entities, { annots, CollectionType, } = {}) {
|
|
79
|
-
const reset = annots !== undefined;
|
|
80
|
-
let resource = this;
|
|
81
|
-
const type = annots?.type ?? this.incomingType();
|
|
82
|
-
if (type === undefined)
|
|
83
|
-
throw Error(`No type for collection`);
|
|
84
|
-
if (CollectionType === undefined)
|
|
85
|
-
CollectionType = this.api.collectionForType(type);
|
|
86
|
-
let entitySet = annots?.entitySet;
|
|
87
|
-
if (entitySet !== undefined) {
|
|
88
|
-
resource = this.api.entitySet(entitySet);
|
|
89
|
-
resource.query((q) => q.restore(this.queryOptions.toQueryArguments()));
|
|
90
|
-
}
|
|
91
|
-
return new CollectionType(entities, { resource, annots, reset });
|
|
92
|
-
}
|
|
93
|
-
//#endregion
|
|
94
|
-
isTypeOf(other) {
|
|
95
|
-
const thisStructured = this.structuredType();
|
|
96
|
-
const otherStructured = other.structuredType();
|
|
97
|
-
return (thisStructured !== undefined &&
|
|
98
|
-
otherStructured !== undefined &&
|
|
99
|
-
thisStructured.isTypeOf(otherStructured));
|
|
100
|
-
}
|
|
101
|
-
isSubtypeOf(other) {
|
|
102
|
-
const thisStructured = this.structuredType();
|
|
103
|
-
const otherStructured = other.structuredType();
|
|
104
|
-
return (thisStructured !== undefined &&
|
|
105
|
-
otherStructured !== undefined &&
|
|
106
|
-
thisStructured.isSubtypeOf(otherStructured));
|
|
107
|
-
}
|
|
108
|
-
isSupertypeOf(other) {
|
|
109
|
-
const thisStructured = this.structuredType();
|
|
110
|
-
const otherStructured = other.structuredType();
|
|
111
|
-
return (thisStructured !== undefined &&
|
|
112
|
-
otherStructured !== undefined &&
|
|
113
|
-
thisStructured.isSupertypeOf(otherStructured));
|
|
114
|
-
}
|
|
115
|
-
isEqualTo(other, test) {
|
|
116
|
-
const [selfPath, selfParams] = this.pathAndParams();
|
|
117
|
-
const [otherPath, otherParams] = other.pathAndParams();
|
|
118
|
-
return test === 'path'
|
|
119
|
-
? otherPath === selfPath
|
|
120
|
-
: test === 'params'
|
|
121
|
-
? Types.isEqual(selfParams, otherParams)
|
|
122
|
-
: otherPath === selfPath && Types.isEqual(selfParams, otherParams);
|
|
123
|
-
}
|
|
124
|
-
pathAndParams({ escape, ...options } = {
|
|
125
|
-
escape: false,
|
|
126
|
-
}) {
|
|
127
|
-
const type = this.outgoingType();
|
|
128
|
-
const parser = type !== undefined ? this.api.parserForType(type) : undefined;
|
|
129
|
-
const [spath, sparams] = this.pathSegments.pathAndParams({
|
|
130
|
-
escape,
|
|
131
|
-
parser,
|
|
132
|
-
options,
|
|
133
|
-
});
|
|
134
|
-
const [, qparams] = this.queryOptions.pathAndParams({
|
|
135
|
-
escape,
|
|
136
|
-
parser,
|
|
137
|
-
options,
|
|
138
|
-
});
|
|
139
|
-
return [spath, { ...sparams, ...qparams }];
|
|
140
|
-
}
|
|
141
|
-
endpointUrl({ escape = false, params = true, ...options } = {}) {
|
|
142
|
-
let [path, qparams] = this.pathAndParams({ escape, ...options });
|
|
143
|
-
if (params && !Types.isEmpty(qparams)) {
|
|
144
|
-
path = `${path}${QUERY_SEPARATOR}${Object.entries(qparams)
|
|
145
|
-
.map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)
|
|
146
|
-
.join(PARAM_SEPARATOR)}`;
|
|
147
|
-
}
|
|
148
|
-
return `${this.api.serviceRootUrl}${path}`;
|
|
149
|
-
}
|
|
150
|
-
toString({ escape, ...options } = {
|
|
151
|
-
escape: false,
|
|
152
|
-
}) {
|
|
153
|
-
let [path, params] = this.pathAndParams({ escape, ...options });
|
|
154
|
-
let queryString = Object.entries(params)
|
|
155
|
-
.map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)
|
|
156
|
-
.join(PARAM_SEPARATOR);
|
|
157
|
-
return queryString ? `${path}${QUERY_SEPARATOR}${queryString}` : path;
|
|
158
|
-
}
|
|
159
|
-
clone() {
|
|
160
|
-
const Ctor = this.constructor;
|
|
161
|
-
return new Ctor(this.api, {
|
|
162
|
-
segments: this.cloneSegments(),
|
|
163
|
-
query: this.cloneQuery(),
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
__parser(value, options, resourceType, bindingType) {
|
|
167
|
-
const dataType = options !== undefined && Types.isPlainObject(value)
|
|
168
|
-
? ODataHelper[options.version ?? DEFAULT_VERSION].type(value)
|
|
169
|
-
: undefined;
|
|
170
|
-
if (dataType !== undefined) {
|
|
171
|
-
// Parser from data type
|
|
172
|
-
return this.api.parserForType(dataType);
|
|
173
|
-
}
|
|
174
|
-
else if (resourceType !== undefined) {
|
|
175
|
-
// Parser from resource type
|
|
176
|
-
return this.api.parserForType(resourceType, bindingType);
|
|
177
|
-
}
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
|
-
deserialize(value, options) {
|
|
181
|
-
const resourceType = this.incomingType();
|
|
182
|
-
const _d = (value, options) => {
|
|
183
|
-
const parser = this.__parser(value, options, resourceType);
|
|
184
|
-
return parser !== undefined ? parser.deserialize(value, options) : value;
|
|
185
|
-
};
|
|
186
|
-
return Array.isArray(value)
|
|
187
|
-
? value.map((v) => _d(v, options))
|
|
188
|
-
: _d(value, options);
|
|
189
|
-
}
|
|
190
|
-
serialize(value, options) {
|
|
191
|
-
const resourceType = this.outgoingType();
|
|
192
|
-
const bindingType = this.bindingType();
|
|
193
|
-
const _s = (value, options) => {
|
|
194
|
-
const parser = this.__parser(value, options, resourceType, bindingType);
|
|
195
|
-
return parser !== undefined ? parser.serialize(value, options) : value;
|
|
196
|
-
};
|
|
197
|
-
return Array.isArray(value)
|
|
198
|
-
? value.map((v) => _s(v, options))
|
|
199
|
-
: _s(value, options);
|
|
200
|
-
}
|
|
201
|
-
encode(value, options) {
|
|
202
|
-
const resourceType = this.outgoingType();
|
|
203
|
-
const _e = (value, options) => {
|
|
204
|
-
const parser = this.__parser(value, options, resourceType);
|
|
205
|
-
return parser !== undefined ? parser.encode(value, options) : value;
|
|
206
|
-
};
|
|
207
|
-
return Array.isArray(value)
|
|
208
|
-
? value.map((v) => _e(v, options))
|
|
209
|
-
: _e(value, options);
|
|
210
|
-
}
|
|
211
|
-
toJson() {
|
|
212
|
-
return {
|
|
213
|
-
segments: this.pathSegments.toJson(),
|
|
214
|
-
options: this.queryOptions.toJson(),
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
cloneSegments() {
|
|
218
|
-
return this.pathSegments.clone();
|
|
219
|
-
}
|
|
220
|
-
//#region Query Options
|
|
221
|
-
clearQuery() {
|
|
222
|
-
this.queryOptions.clear();
|
|
223
|
-
return this;
|
|
224
|
-
}
|
|
225
|
-
cloneQuery() {
|
|
226
|
-
return this.queryOptions.clone();
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Handle the path segments of the resource
|
|
230
|
-
* Create an object handler for mutate the path segments of the resource
|
|
231
|
-
* @param f Function context for handle the segments
|
|
232
|
-
* @returns ODataActionResource
|
|
233
|
-
*/
|
|
234
|
-
segment(f) {
|
|
235
|
-
const type = this.outgoingType();
|
|
236
|
-
f(new ODataPathSegmentsHandler(this.pathSegments), type !== undefined ? this.api.structuredType(type) : undefined);
|
|
237
|
-
return this;
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Handle the query options of the resource
|
|
241
|
-
* Create an object handler for mutate the query options of the resource
|
|
242
|
-
* @param f Function context for handle the query options
|
|
243
|
-
*/
|
|
244
|
-
query(f) {
|
|
245
|
-
const type = this.outgoingType();
|
|
246
|
-
f(new ODataQueryOptionsHandler(this.queryOptions), type !== undefined ? this.api.structuredType(type) : undefined);
|
|
247
|
-
return this;
|
|
248
|
-
}
|
|
249
|
-
transform(opts, { type, fields, } = {}) {
|
|
250
|
-
if (type === undefined) {
|
|
251
|
-
type = Strings.uniqueId({ prefix: 'Transformation', suffix: 'Type' });
|
|
252
|
-
}
|
|
253
|
-
// Resolve Structured Type
|
|
254
|
-
let structuredType = this.api.findStructuredType(type);
|
|
255
|
-
if (structuredType === undefined) {
|
|
256
|
-
// Resolve Schema
|
|
257
|
-
let schema = this.api.findSchema(type);
|
|
258
|
-
if (schema === undefined) {
|
|
259
|
-
const namespace = type.substring(0, type.lastIndexOf('.')) ?? this.api.name;
|
|
260
|
-
schema = this.api.createSchema({ namespace });
|
|
261
|
-
}
|
|
262
|
-
const name = type.substring(type.lastIndexOf('.'));
|
|
263
|
-
structuredType = schema.createStructuredType({ name, fields });
|
|
264
|
-
}
|
|
265
|
-
// Segments
|
|
266
|
-
const segments = this.cloneSegments();
|
|
267
|
-
segments.last()?.incomingType(structuredType.type());
|
|
268
|
-
// Query
|
|
269
|
-
const query = this.cloneQuery();
|
|
270
|
-
const handler = new ODataQueryOptionsHandler(query);
|
|
271
|
-
handler.apply(opts);
|
|
272
|
-
const Ctor = this.constructor;
|
|
273
|
-
return new Ctor(this.api, {
|
|
274
|
-
segments,
|
|
275
|
-
query,
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
static resolveKey(value, schema) {
|
|
279
|
-
if (isQueryCustomType(value)) {
|
|
280
|
-
return value;
|
|
281
|
-
}
|
|
282
|
-
else if (Types.isPlainObject(value)) {
|
|
283
|
-
return schema instanceof ODataStructuredType
|
|
284
|
-
? schema.resolveKey(value)
|
|
285
|
-
: Objects.resolveKey(value);
|
|
286
|
-
}
|
|
287
|
-
return value;
|
|
288
|
-
}
|
|
289
|
-
resolveKey(value) {
|
|
290
|
-
const type = this.outgoingType();
|
|
291
|
-
const structured = type !== undefined ? this.api.structuredType(type) : undefined;
|
|
292
|
-
return ODataResource.resolveKey(value, structured);
|
|
293
|
-
}
|
|
294
|
-
//#endregion
|
|
295
|
-
get(options = {}) {
|
|
296
|
-
return this.api.request('GET', this, options);
|
|
297
|
-
}
|
|
298
|
-
post(body, options = {}) {
|
|
299
|
-
return this.api.request('POST', this, { body, ...options });
|
|
300
|
-
}
|
|
301
|
-
put(body, options = {}) {
|
|
302
|
-
return this.api.request('PUT', this, { body, ...options });
|
|
303
|
-
}
|
|
304
|
-
patch(body, options = {}) {
|
|
305
|
-
return this.api.request('PATCH', this, { body, ...options });
|
|
306
|
-
}
|
|
307
|
-
delete(options = {}) {
|
|
308
|
-
return this.api.request('DELETE', this, options);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFJTCxXQUFXLEdBRVosTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQix3QkFBd0IsR0FDekIsTUFBTSxTQUFTLENBQUM7QUFvQmpCLE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQ0UsR0FBYSxFQUNiLEVBQ0UsUUFBUSxFQUNSLEtBQUssTUFJSCxFQUFFO1FBRU4sSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxD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QU8sQ0FBSSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7XG4gIERFRkFVTFRfVkVSU0lPTixcbiAgUEFSQU1fU0VQQVJBVE9SLFxuICBRVUVSWV9TRVBBUkFUT1IsXG4gIFZBTFVFX1NFUEFSQVRPUixcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhSGVscGVyIH0gZnJvbSAnLi4vaGVscGVyJztcbmltcG9ydCB7IE9EYXRhQ29sbGVjdGlvbiwgT0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBPRGF0YVN0cnVjdHVyZWRUeXBlIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7XG4gIFBhcnNlck9wdGlvbnMsXG4gIFBhcnNlcixcbiAgUXVlcnlPcHRpb24sXG4gIFBhdGhTZWdtZW50LFxuICBTdHJ1Y3R1cmVkVHlwZUZpZWxkQ29uZmlnLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBTdHJpbmdzLCBUeXBlcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzLCBPRGF0YVBhdGhTZWdtZW50c0hhbmRsZXIgfSBmcm9tICcuL3BhdGgnO1xuaW1wb3J0IHtcbiAgaXNRdWVyeUN1c3RvbVR5cGUsXG4gIE9EYXRhUXVlcnlPcHRpb25zLFxuICBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXIsXG59IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHtcbiAgQXBwbHlFeHByZXNzaW9uLFxuICBBcHBseUV4cHJlc3Npb25CdWlsZGVyLFxuICBRdWVyeUN1c3RvbVR5cGUsXG59IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgT0RhdGFPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5QW5ub3RhdGlvbnMsXG59IGZyb20gJy4uL2Fubm90YXRpb25zJztcblxuZXhwb3J0IHR5cGUgRW50aXR5S2V5PFQ+ID1cbiAgfCB7XG4gICAgICByZWFkb25seSBbUCBpbiBrZXlvZiBUXT86IFRbUF07XG4gICAgfVxuICB8IFF1ZXJ5Q3VzdG9tVHlwZVxuICB8IHN0cmluZ1xuICB8IG51bWJlcjtcblxuZXhwb3J0IGNsYXNzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyBWQVJJQUJMRVNcbiAgcHVibGljIGFwaTogT0RhdGFBcGk7XG4gIHByb3RlY3RlZCBwYXRoU2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzO1xuICBwcm90ZWN0ZWQgcXVlcnlPcHRpb25zOiBPRGF0YVF1ZXJ5T3B0aW9uczxUPjtcbiAgY29uc3RydWN0b3IoXG4gICAgYXBpOiBPRGF0YUFwaSxcbiAgICB7XG4gICAgICBzZWdtZW50cyxcbiAgICAgIHF1ZXJ5LFxuICAgIH06IHtcbiAgICAgIHNlZ21lbnRzPzogT0RhdGFQYXRoU2VnbWVudHM7XG4gICAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFQ+O1xuICAgIH0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5wYXRoU2VnbWVudHMgPSBzZWdtZW50cyA/PyBuZXcgT0RhdGFQYXRoU2VnbWVudHMoKTtcbiAgICB0aGlzLnF1ZXJ5T3B0aW9ucyA9IHF1ZXJ5ID8/IG5ldyBPRGF0YVF1ZXJ5T3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHN0cmluZyBUaGUgb3V0Z29pbmcgdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIG91dGdvaW5nVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoU2VnbWVudHMubGFzdCgpPy5vdXRnb2luZ1R5cGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBzdHJpbmcgVGhlIGluY29taW5nIHR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICBpbmNvbWluZ1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFNlZ21lbnRzLmxhc3QoKT8uaW5jb21pbmdUeXBlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgc3RyaW5nIFRoZSBiaW5kaW5nIHR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICBiaW5kaW5nVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoU2VnbWVudHMubGFzdCgpPy5iaW5kaW5nVHlwZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHN0cmluZyBBbGwgY292ZXJlZCB0eXBlcyBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoU2VnbWVudHMudHlwZXMoKTtcbiAgfVxuXG4gIGNhbGxhYmxlKCkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpID8/IHRoaXMuaW5jb21pbmdUeXBlKCk7XG4gICAgcmV0dXJuIHR5cGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuYXBpLmNhbGxhYmxlPFQ+KHR5cGUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZW51bVR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMub3V0Z29pbmdUeXBlKCkgPz8gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICByZXR1cm4gdHlwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5hcGkuZW51bVR5cGU8VD4odHlwZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdHJ1Y3R1cmVkVHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vdXRnb2luZ1R5cGUoKSA/PyB0aGlzLmluY29taW5nVHlwZSgpO1xuICAgIHJldHVybiB0eXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmFwaS5zdHJ1Y3R1cmVkVHlwZTxUPih0eXBlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBib29sZWFuIFRoZSByZXNvdXJjZSBoYXMga2V5ID9cbiAgICovXG4gIGhhc0tleSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhdGhTZWdtZW50cy5sYXN0KHsga2V5OiB0cnVlIH0pPy5oYXNLZXkoKSk7XG4gIH1cblxuICBoYXNFbnRpdHlLZXkoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5wYXRoU2VnbWVudHMuZ2V0KFBhdGhTZWdtZW50LmVudGl0eVNldCk/Lmhhc0tleSgpKTtcbiAgfVxuXG4gIGNsZWFyS2V5KCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhTZWdtZW50cy5sYXN0KHsga2V5OiB0cnVlIH0pPy5jbGVhcktleSgpO1xuICB9XG5cbiAgLy8jcmVnaW9uIE1vZGVsc1xuICBhc01vZGVsPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PihcbiAgICBlbnRpdHk/OiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAge1xuICAgICAgYW5ub3RzLFxuICAgICAgTW9kZWxUeXBlLFxuICAgIH06IHtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD47XG4gICAgICBNb2RlbFR5cGU/OiB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICB9ID0ge30sXG4gICk6IE0ge1xuICAgIGNvbnN0IHJlc2V0ID0gYW5ub3RzICE9PSB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+ID0gdGhpcyBhcyBPRGF0YVJlc291cmNlPFQ+O1xuICAgIGNvbnN0IHR5cGUgPSBhbm5vdHM/LnR5cGUgPz8gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gdHlwZSBmb3IgbW9kZWxgKTtcbiAgICBpZiAoTW9kZWxUeXBlID09PSB1bmRlZmluZWQpIE1vZGVsVHlwZSA9IHRoaXMuYXBpLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICBsZXQgZW50aXR5U2V0ID0gYW5ub3RzPy5lbnRpdHlTZXQ7XG4gICAgaWYgKGVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvdXJjZSA9IHRoaXMuYXBpLmVudGl0eVNldDxUPihlbnRpdHlTZXQpLmVudGl0eShlbnRpdHkgYXMgUGFydGlhbDxUPik7XG4gICAgICByZXNvdXJjZS5xdWVyeSgocSkgPT4gcS5yZXN0b3JlKHRoaXMucXVlcnlPcHRpb25zLnRvUXVlcnlBcmd1bWVudHMoKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsVHlwZShlbnRpdHksIHsgcmVzb3VyY2UsIGFubm90cywgcmVzZXQgfSkgYXMgTTtcbiAgfVxuXG4gIGFzQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxULCBNPj4oXG4gICAgZW50aXRpZXM/OiBQYXJ0aWFsPFQ+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICAgIHtcbiAgICAgIGFubm90cyxcbiAgICAgIENvbGxlY3Rpb25UeXBlLFxuICAgIH06IHtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPjtcbiAgICAgIENvbGxlY3Rpb25UeXBlPzogdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICB9ID0ge30sXG4gICk6IEMge1xuICAgIGNvbnN0IHJlc2V0ID0gYW5ub3RzICE9PSB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+ID0gdGhpcyBhcyBPRGF0YVJlc291cmNlPFQ+O1xuICAgIGNvbnN0IHR5cGUgPSBhbm5vdHM/LnR5cGUgPz8gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gdHlwZSBmb3IgY29sbGVjdGlvbmApO1xuICAgIGlmIChDb2xsZWN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgQ29sbGVjdGlvblR5cGUgPSB0aGlzLmFwaS5jb2xsZWN0aW9uRm9yVHlwZSh0eXBlKTtcbiAgICBsZXQgZW50aXR5U2V0ID0gYW5ub3RzPy5lbnRpdHlTZXQ7XG4gICAgaWYgKGVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvdXJjZSA9IHRoaXMuYXBpLmVudGl0eVNldDxUPihlbnRpdHlTZXQpO1xuICAgICAgcmVzb3VyY2UucXVlcnkoKHEpID0+IHEucmVzdG9yZSh0aGlzLnF1ZXJ5T3B0aW9ucy50b1F1ZXJ5QXJndW1lbnRzKCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uVHlwZShlbnRpdGllcywgeyByZXNvdXJjZSwgYW5ub3RzLCByZXNldCB9KSBhcyBDO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGlzVHlwZU9mKG90aGVyOiBPRGF0YVJlc291cmNlPGFueT4pIHtcbiAgICBjb25zdCB0aGlzU3RydWN0dXJlZCA9IHRoaXMuc3RydWN0dXJlZFR5cGUoKTtcbiAgICBjb25zdCBvdGhlclN0cnVjdHVyZWQgPSBvdGhlci5zdHJ1Y3R1cmVkVHlwZSgpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzU3RydWN0dXJlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvdGhlclN0cnVjdHVyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpc1N0cnVjdHVyZWQuaXNUeXBlT2Yob3RoZXJTdHJ1Y3R1cmVkKVxuICAgICk7XG4gIH1cblxuICBpc1N1YnR5cGVPZihvdGhlcjogT0RhdGFSZXNvdXJjZTxhbnk+KSB7XG4gICAgY29uc3QgdGhpc1N0cnVjdHVyZWQgPSB0aGlzLnN0cnVjdHVyZWRUeXBlKCk7XG4gICAgY29uc3Qgb3RoZXJTdHJ1Y3R1cmVkID0gb3RoZXIuc3RydWN0dXJlZFR5cGUoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpc1N0cnVjdHVyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3RoZXJTdHJ1Y3R1cmVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXNTdHJ1Y3R1cmVkLmlzU3VidHlwZU9mKG90aGVyU3RydWN0dXJlZClcbiAgICApO1xuICB9XG5cbiAgaXNTdXBlcnR5cGVPZihvdGhlcjogT0RhdGFSZXNvdXJjZTxhbnk+KSB7XG4gICAgY29uc3QgdGhpc1N0cnVjdHVyZWQgPSB0aGlzLnN0cnVjdHVyZWRUeXBlKCk7XG4gICAgY29uc3Qgb3RoZXJTdHJ1Y3R1cmVkID0gb3RoZXIuc3RydWN0dXJlZFR5cGUoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpc1N0cnVjdHVyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3RoZXJTdHJ1Y3R1cmVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXNTdHJ1Y3R1cmVkLmlzU3VwZXJ0eXBlT2Yob3RoZXJTdHJ1Y3R1cmVkKVxuICAgICk7XG4gIH1cblxuICBpc0VxdWFsVG8ob3RoZXI6IE9EYXRhUmVzb3VyY2U8YW55PiwgdGVzdD86ICdwYXRoJyB8ICdwYXJhbXMnKSB7XG4gICAgY29uc3QgW3NlbGZQYXRoLCBzZWxmUGFyYW1zXSA9IHRoaXMucGF0aEFuZFBhcmFtcygpO1xuICAgIGNvbnN0IFtvdGhlclBhdGgsIG90aGVyUGFyYW1zXSA9IG90aGVyLnBhdGhBbmRQYXJhbXMoKTtcbiAgICByZXR1cm4gdGVzdCA9PT0gJ3BhdGgnXG4gICAgICA/IG90aGVyUGF0aCA9PT0gc2VsZlBhdGhcbiAgICAgIDogdGVzdCA9PT0gJ3BhcmFtcydcbiAgICAgICAgPyBUeXBlcy5pc0VxdWFsKHNlbGZQYXJhbXMsIG90aGVyUGFyYW1zKVxuICAgICAgICA6IG90aGVyUGF0aCA9PT0gc2VsZlBhdGggJiYgVHlwZXMuaXNFcXVhbChzZWxmUGFyYW1zLCBvdGhlclBhcmFtcyk7XG4gIH1cblxuICBwYXRoQW5kUGFyYW1zKFxuICAgIHsgZXNjYXBlLCAuLi5vcHRpb25zIH06IFBhcnNlck9wdGlvbnMgJiB7IGVzY2FwZT86IGJvb2xlYW4gfSA9IHtcbiAgICAgIGVzY2FwZTogZmFsc2UsXG4gICAgfSxcbiAgKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vdXRnb2luZ1R5cGUoKTtcbiAgICBjb25zdCBwYXJzZXIgPVxuICAgICAgdHlwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5hcGkucGFyc2VyRm9yVHlwZTxUPih0eXBlKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBbc3BhdGgsIHNwYXJhbXNdID0gdGhpcy5wYXRoU2VnbWVudHMucGF0aEFuZFBhcmFtcyh7XG4gICAgICBlc2NhcGUsXG4gICAgICBwYXJzZXIsXG4gICAgICBvcHRpb25zLFxuICAgIH0pO1xuICAgIGNvbnN0IFssIHFwYXJhbXNdID0gdGhpcy5xdWVyeU9wdGlvbnMucGF0aEFuZFBhcmFtcyh7XG4gICAgICBlc2NhcGUsXG4gICAgICBwYXJzZXIsXG4gICAgICBvcHRpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtzcGF0aCwgeyAuLi5zcGFyYW1zLCAuLi5xcGFyYW1zIH1dO1xuICB9XG5cbiAgZW5kcG9pbnRVcmwoe1xuICAgIGVzY2FwZSA9IGZhbHNlLFxuICAgIHBhcmFtcyA9IHRydWUsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBQYXJzZXJPcHRpb25zICYgeyBlc2NhcGU/OiBib29sZWFuOyBwYXJhbXM/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgbGV0IFtwYXRoLCBxcGFyYW1zXSA9IHRoaXMucGF0aEFuZFBhcmFtcyh7IGVzY2FwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICBpZiAocGFyYW1zICYmICFUeXBlcy5pc0VtcHR5KHFwYXJhbXMpKSB7XG4gICAgICBwYXRoID0gYCR7cGF0aH0ke1FVRVJZX1NFUEFSQVRPUn0ke09iamVjdC5lbnRyaWVzKHFwYXJhbXMpXG4gICAgICAgIC5tYXAoKGUpID0+IGAke2VbMF19JHtWQUxVRV9TRVBBUkFUT1J9JHtlWzFdfWApXG4gICAgICAgIC5qb2luKFBBUkFNX1NFUEFSQVRPUil9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuYXBpLnNlcnZpY2VSb290VXJsfSR7cGF0aH1gO1xuICB9XG5cbiAgdG9TdHJpbmcoXG4gICAgeyBlc2NhcGUsIC4uLm9wdGlvbnMgfTogUGFyc2VyT3B0aW9ucyAmIHsgZXNjYXBlPzogYm9vbGVhbiB9ID0ge1xuICAgICAgZXNjYXBlOiBmYWxzZSxcbiAgICB9LFxuICApOiBzdHJpbmcge1xuICAgIGxldCBbcGF0aCwgcGFyYW1zXSA9IHRoaXMucGF0aEFuZFBhcmFtcyh7IGVzY2FwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpXG4gICAgICAubWFwKChlKSA9PiBgJHtlWzBdfSR7VkFMVUVfU0VQQVJBVE9SfSR7ZVsxXX1gKVxuICAgICAgLmpvaW4oUEFSQU1fU0VQQVJBVE9SKTtcbiAgICByZXR1cm4gcXVlcnlTdHJpbmcgPyBgJHtwYXRofSR7UVVFUllfU0VQQVJBVE9SfSR7cXVlcnlTdHJpbmd9YCA6IHBhdGg7XG4gIH1cblxuICBjbG9uZSgpOiBPRGF0YVJlc291cmNlPFQ+IHtcbiAgICBjb25zdCBDdG9yID0gdGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgT0RhdGFSZXNvdXJjZTtcbiAgICByZXR1cm4gbmV3IEN0b3IodGhpcy5hcGksIHtcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmNsb25lUXVlcnk8VD4oKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX19wYXJzZXIoXG4gICAgdmFsdWU6IGFueSxcbiAgICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucyxcbiAgICByZXNvdXJjZVR5cGU/OiBzdHJpbmcsXG4gICAgYmluZGluZ1R5cGU/OiBzdHJpbmcsXG4gICk6IFBhcnNlcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGF0YVR5cGUgPVxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIFR5cGVzLmlzUGxhaW5PYmplY3QodmFsdWUpXG4gICAgICAgID8gT0RhdGFIZWxwZXJbb3B0aW9ucy52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTl0udHlwZSh2YWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGRhdGFUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFBhcnNlciBmcm9tIGRhdGEgdHlwZVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnBhcnNlckZvclR5cGU8VD4oZGF0YVR5cGUpO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFBhcnNlciBmcm9tIHJlc291cmNlIHR5cGVcbiAgICAgIHJldHVybiB0aGlzLmFwaS5wYXJzZXJGb3JUeXBlPFQ+KHJlc291cmNlVHlwZSwgYmluZGluZ1R5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZGVzZXJpYWxpemUodmFsdWU6IGFueSwgb3B0aW9ucz86IFBhcnNlck9wdGlvbnMpOiBhbnkge1xuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHRoaXMuaW5jb21pbmdUeXBlKCk7XG4gICAgY29uc3QgX2QgPSAodmFsdWU6IGFueSwgb3B0aW9ucz86IFBhcnNlck9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlciA9IHRoaXMuX19wYXJzZXIodmFsdWUsIG9wdGlvbnMsIHJlc291cmNlVHlwZSk7XG4gICAgICByZXR1cm4gcGFyc2VyICE9PSB1bmRlZmluZWQgPyBwYXJzZXIuZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbnMpIDogdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gdmFsdWUubWFwKCh2KSA9PiBfZCh2LCBvcHRpb25zKSlcbiAgICAgIDogX2QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2VyaWFsaXplKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gdGhpcy5iaW5kaW5nVHlwZSgpO1xuICAgIGNvbnN0IF9zID0gKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZXIgPSB0aGlzLl9fcGFyc2VyKHZhbHVlLCBvcHRpb25zLCByZXNvdXJjZVR5cGUsIGJpbmRpbmdUeXBlKTtcbiAgICAgIHJldHVybiBwYXJzZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlci5zZXJpYWxpemUodmFsdWUsIG9wdGlvbnMpIDogdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gdmFsdWUubWFwKCh2KSA9PiBfcyh2LCBvcHRpb25zKSlcbiAgICAgIDogX3ModmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5jb2RlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IF9lID0gKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZXIgPSB0aGlzLl9fcGFyc2VyKHZhbHVlLCBvcHRpb25zLCByZXNvdXJjZVR5cGUpO1xuICAgICAgcmV0dXJuIHBhcnNlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VyLmVuY29kZSh2YWx1ZSwgb3B0aW9ucykgOiB2YWx1ZTtcbiAgICB9O1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgPyB2YWx1ZS5tYXAoKHYpID0+IF9lKHYsIG9wdGlvbnMpKVxuICAgICAgOiBfZSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlZ21lbnRzOiB0aGlzLnBhdGhTZWdtZW50cy50b0pzb24oKSxcbiAgICAgIG9wdGlvbnM6IHRoaXMucXVlcnlPcHRpb25zLnRvSnNvbigpLFxuICAgIH07XG4gIH1cblxuICBjbG9uZVNlZ21lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhTZWdtZW50cy5jbG9uZSgpO1xuICB9XG5cbiAgLy8jcmVnaW9uIFF1ZXJ5IE9wdGlvbnNcbiAgY2xlYXJRdWVyeSgpIHtcbiAgICB0aGlzLnF1ZXJ5T3B0aW9ucy5jbGVhcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY2xvbmVRdWVyeTxQPigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeU9wdGlvbnMuY2xvbmU8UD4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIHBhdGggc2VnbWVudHMgb2YgdGhlIHJlc291cmNlXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgaGFuZGxlciBmb3IgbXV0YXRlIHRoZSBwYXRoIHNlZ21lbnRzIG9mIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0gZiBGdW5jdGlvbiBjb250ZXh0IGZvciBoYW5kbGUgdGhlIHNlZ21lbnRzXG4gICAqIEByZXR1cm5zIE9EYXRhQWN0aW9uUmVzb3VyY2VcbiAgICovXG4gIHNlZ21lbnQoXG4gICAgZjogKHE6IE9EYXRhUGF0aFNlZ21lbnRzSGFuZGxlcjxUPiwgcz86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4pID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGYoXG4gICAgICBuZXcgT0RhdGFQYXRoU2VnbWVudHNIYW5kbGVyPFQ+KHRoaXMucGF0aFNlZ21lbnRzKSxcbiAgICAgIHR5cGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuYXBpLnN0cnVjdHVyZWRUeXBlPFQ+KHR5cGUpIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSBxdWVyeSBvcHRpb25zIG9mIHRoZSByZXNvdXJjZVxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IGhhbmRsZXIgZm9yIG11dGF0ZSB0aGUgcXVlcnkgb3B0aW9ucyBvZiB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIGYgRnVuY3Rpb24gY29udGV4dCBmb3IgaGFuZGxlIHRoZSBxdWVyeSBvcHRpb25zXG4gICAqL1xuICBxdWVyeShcbiAgICBmOiAocTogT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyPFQ+LCBzPzogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPikgPT4gdm9pZCxcbiAgKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMub3V0Z29pbmdUeXBlKCk7XG4gICAgZihcbiAgICAgIG5ldyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4odGhpcy5xdWVyeU9wdGlvbnMpLFxuICAgICAgdHlwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5hcGkuc3RydWN0dXJlZFR5cGU8VD4odHlwZSkgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRyYW5zZm9ybTxSPihcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiBBcHBseUV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IEFwcGx5RXhwcmVzc2lvbjxUPixcbiAgICApID0+IEFwcGx5RXhwcmVzc2lvbjxUPixcbiAgICB7XG4gICAgICB0eXBlLFxuICAgICAgZmllbGRzLFxuICAgIH06IHtcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgICBmaWVsZHM/OiB7IFtQIGluIGtleW9mIFJdPzogU3RydWN0dXJlZFR5cGVGaWVsZENvbmZpZyB9O1xuICAgIH0gPSB7fSxcbiAgKTogT0RhdGFSZXNvdXJjZTxSPiB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IFN0cmluZ3MudW5pcXVlSWQoeyBwcmVmaXg6ICdUcmFuc2Zvcm1hdGlvbicsIHN1ZmZpeDogJ1R5cGUnIH0pO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgU3RydWN0dXJlZCBUeXBlXG4gICAgbGV0IHN0cnVjdHVyZWRUeXBlID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlPFI+KHR5cGUpO1xuICAgIGlmIChzdHJ1Y3R1cmVkVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBSZXNvbHZlIFNjaGVtYVxuICAgICAgbGV0IHNjaGVtYSA9IHRoaXMuYXBpLmZpbmRTY2hlbWEodHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlID1cbiAgICAgICAgICB0eXBlLnN1YnN0cmluZygwLCB0eXBlLmxhc3RJbmRleE9mKCcuJykpID8/IHRoaXMuYXBpLm5hbWUhO1xuICAgICAgICBzY2hlbWEgPSB0aGlzLmFwaS5jcmVhdGVTY2hlbWEoeyBuYW1lc3BhY2UgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lID0gdHlwZS5zdWJzdHJpbmcodHlwZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgIHN0cnVjdHVyZWRUeXBlID0gc2NoZW1hLmNyZWF0ZVN0cnVjdHVyZWRUeXBlKHsgbmFtZSwgZmllbGRzIH0pO1xuICAgIH1cblxuICAgIC8vIFNlZ21lbnRzXG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmNsb25lU2VnbWVudHMoKTtcbiAgICBzZWdtZW50cy5sYXN0KCk/LmluY29taW5nVHlwZShzdHJ1Y3R1cmVkVHlwZS50eXBlKCkpO1xuXG4gICAgLy8gUXVlcnlcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuY2xvbmVRdWVyeTxhbnk+KCk7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4ocXVlcnkpO1xuICAgIGhhbmRsZXIuYXBwbHkob3B0cyk7XG5cbiAgICBjb25zdCBDdG9yID0gdGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgT0RhdGFSZXNvdXJjZTtcbiAgICByZXR1cm4gbmV3IEN0b3IodGhpcy5hcGksIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZUtleTxUPihcbiAgICB2YWx1ZTogYW55LFxuICAgIHNjaGVtYT86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4sXG4gICk6IEVudGl0eUtleTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGlzUXVlcnlDdXN0b21UeXBlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoVHlwZXMuaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBzY2hlbWEgaW5zdGFuY2VvZiBPRGF0YVN0cnVjdHVyZWRUeXBlXG4gICAgICAgID8gc2NoZW1hLnJlc29sdmVLZXkodmFsdWUpXG4gICAgICAgIDogT2JqZWN0cy5yZXNvbHZlS2V5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlIGFzIEVudGl0eUtleTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlS2V5KHZhbHVlOiBhbnkpOiBFbnRpdHlLZXk8VD4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm91dGdvaW5nVHlwZSgpO1xuICAgIGNvbnN0IHN0cnVjdHVyZWQgPVxuICAgICAgdHlwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5hcGkuc3RydWN0dXJlZFR5cGU8VD4odHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9EYXRhUmVzb3VyY2UucmVzb2x2ZUtleTxUPih2YWx1ZSwgc3RydWN0dXJlZCk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIGdldChcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgcmVzcG9uc2VUeXBlPzpcbiAgICAgICAgfCAnYXJyYXlidWZmZXInXG4gICAgICAgIHwgJ2Jsb2InXG4gICAgICAgIHwgJ2pzb24nXG4gICAgICAgIHwgJ3RleHQnXG4gICAgICAgIHwgJ3ZhbHVlJ1xuICAgICAgICB8ICdwcm9wZXJ0eSdcbiAgICAgICAgfCAnZW50aXR5J1xuICAgICAgICB8ICdlbnRpdGllcyc7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5yZXF1ZXN0PFQ+KCdHRVQnLCB0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0KFxuICAgIGJvZHk6IGFueSxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICByZXNwb25zZVR5cGU/OlxuICAgICAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgfCAnYmxvYidcbiAgICAgICAgfCAnanNvbidcbiAgICAgICAgfCAndGV4dCdcbiAgICAgICAgfCAndmFsdWUnXG4gICAgICAgIHwgJ3Byb3BlcnR5J1xuICAgICAgICB8ICdlbnRpdHknXG4gICAgICAgIHwgJ2VudGl0aWVzJztcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5yZXF1ZXN0PFQ+KCdQT1NUJywgdGhpcywgeyBib2R5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1dChcbiAgICBib2R5OiBhbnksXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICAgIHwgJ2FycmF5YnVmZmVyJ1xuICAgICAgICB8ICdibG9iJ1xuICAgICAgICB8ICdqc29uJ1xuICAgICAgICB8ICd0ZXh0J1xuICAgICAgICB8ICd2YWx1ZSdcbiAgICAgICAgfCAncHJvcGVydHknXG4gICAgICAgIHwgJ2VudGl0eSdcbiAgICAgICAgfCAnZW50aXRpZXMnO1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLnJlcXVlc3Q8VD4oJ1BVVCcsIHRoaXMsIHsgYm9keSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXRjaChcbiAgICBib2R5OiBhbnksXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICAgIHwgJ2FycmF5YnVmZmVyJ1xuICAgICAgICB8ICdibG9iJ1xuICAgICAgICB8ICdqc29uJ1xuICAgICAgICB8ICd0ZXh0J1xuICAgICAgICB8ICd2YWx1ZSdcbiAgICAgICAgfCAncHJvcGVydHknXG4gICAgICAgIHwgJ2VudGl0eSdcbiAgICAgICAgfCAnZW50aXRpZXMnO1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLnJlcXVlc3Q8VD4oJ1BBVENIJywgdGhpcywgeyBib2R5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZShcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgcmVzcG9uc2VUeXBlPzpcbiAgICAgICAgfCAnYXJyYXlidWZmZXInXG4gICAgICAgIHwgJ2Jsb2InXG4gICAgICAgIHwgJ2pzb24nXG4gICAgICAgIHwgJ3RleHQnXG4gICAgICAgIHwgJ3ZhbHVlJ1xuICAgICAgICB8ICdwcm9wZXJ0eSdcbiAgICAgICAgfCAnZW50aXR5J1xuICAgICAgICB8ICdlbnRpdGllcyc7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5hcGkucmVxdWVzdDxUPignREVMRVRFJywgdGhpcywgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,174 +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
|
-
constructor(init) {
|
|
12
|
-
super(init);
|
|
13
|
-
this.api = init.api;
|
|
14
|
-
this.resource = init.resource;
|
|
15
|
-
}
|
|
16
|
-
static fromHttpResponse(req, res) {
|
|
17
|
-
return new ODataResponse({
|
|
18
|
-
api: req.api,
|
|
19
|
-
resource: req.resource,
|
|
20
|
-
body: res.body,
|
|
21
|
-
headers: res.headers,
|
|
22
|
-
status: res.status,
|
|
23
|
-
statusText: res.statusText,
|
|
24
|
-
url: res.url || undefined,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
static fromJson(req, json) {
|
|
28
|
-
return new ODataResponse({
|
|
29
|
-
api: req.api,
|
|
30
|
-
resource: req.resource,
|
|
31
|
-
body: json.body,
|
|
32
|
-
headers: new HttpHeaders(json.headers),
|
|
33
|
-
status: json.status,
|
|
34
|
-
statusText: json.statusText,
|
|
35
|
-
url: json.url || undefined,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
toJson() {
|
|
39
|
-
return {
|
|
40
|
-
body: this.body,
|
|
41
|
-
headers: this.headers
|
|
42
|
-
.keys()
|
|
43
|
-
.map((name) => ({ [name]: this.headers.getAll(name) || [] }))
|
|
44
|
-
.reduce((acc, header) => Object.assign(acc, header), {}),
|
|
45
|
-
status: this.status,
|
|
46
|
-
statusText: this.statusText,
|
|
47
|
-
url: this.url,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
get options() {
|
|
51
|
-
if (this._options === undefined) {
|
|
52
|
-
this._options = new ODataResponseOptions(this.api.options.parserOptions);
|
|
53
|
-
const contentType = this.headers.get(CONTENT_TYPE);
|
|
54
|
-
if (contentType && contentType.includes(APPLICATION_JSON)) {
|
|
55
|
-
const features = contentType
|
|
56
|
-
.split(',')
|
|
57
|
-
.find((p) => p.startsWith(APPLICATION_JSON));
|
|
58
|
-
this._options.setFeatures(features);
|
|
59
|
-
}
|
|
60
|
-
const headerKey = Http.resolveHeaderKey(this.headers, ODATA_VERSION_HEADERS);
|
|
61
|
-
if (headerKey) {
|
|
62
|
-
const version = (this.headers.get(headerKey) || '').replace(/\;/g, '');
|
|
63
|
-
this._options.setVersion(version);
|
|
64
|
-
}
|
|
65
|
-
const preferenceApplied = this.headers.get(PREFERENCE_APPLIED);
|
|
66
|
-
if (preferenceApplied) {
|
|
67
|
-
this._options.setPreferenceApplied(preferenceApplied);
|
|
68
|
-
}
|
|
69
|
-
const location = this.headers.get(LOCATION_HEADER);
|
|
70
|
-
if (location) {
|
|
71
|
-
this._options.setLocation(location);
|
|
72
|
-
}
|
|
73
|
-
const cacheControl = this.headers.get(CACHE_CONTROL);
|
|
74
|
-
if (cacheControl) {
|
|
75
|
-
this._options.setCache(cacheControl);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return this._options;
|
|
79
|
-
}
|
|
80
|
-
get payload() {
|
|
81
|
-
if (this._payload === undefined) {
|
|
82
|
-
this._payload =
|
|
83
|
-
this.body && this.options.version === '2.0'
|
|
84
|
-
? this.body['d']
|
|
85
|
-
: this.body;
|
|
86
|
-
}
|
|
87
|
-
return this._payload;
|
|
88
|
-
}
|
|
89
|
-
get context() {
|
|
90
|
-
if (this._context === undefined) {
|
|
91
|
-
this._context = this.options.helper.context(Types.isPlainObject(this.payload) ? this.payload : {});
|
|
92
|
-
}
|
|
93
|
-
return this._context;
|
|
94
|
-
}
|
|
95
|
-
get annotations() {
|
|
96
|
-
if (this._annotations === undefined) {
|
|
97
|
-
const options = this.options;
|
|
98
|
-
this._annotations = options.helper.annotations(this.payload || {});
|
|
99
|
-
let key = Http.resolveHeaderKey(this.headers, ETAG_HEADERS);
|
|
100
|
-
if (key) {
|
|
101
|
-
const etag = this.headers.get(key);
|
|
102
|
-
if (etag)
|
|
103
|
-
this._annotations.set(options.helper.ODATA_ETAG, etag);
|
|
104
|
-
}
|
|
105
|
-
key = Http.resolveHeaderKey(this.headers, ODATA_ENTITYID_HEADERS);
|
|
106
|
-
if (key) {
|
|
107
|
-
const entityId = this.headers.get(key);
|
|
108
|
-
if (entityId)
|
|
109
|
-
this._annotations.set(options.helper.ODATA_ID, entityId);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return this._annotations;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Handle the response body as an entity
|
|
116
|
-
* @returns
|
|
117
|
-
*/
|
|
118
|
-
entity() {
|
|
119
|
-
const options = this.options;
|
|
120
|
-
const payload = this.payload;
|
|
121
|
-
const annots = new ODataEntityAnnotations(options.helper, this.annotations, this.context);
|
|
122
|
-
const data = payload ? annots.data(payload) : null;
|
|
123
|
-
let entity = (data !== null && Types.isPlainObject(data)
|
|
124
|
-
? options.helper.attributes(data, this.api.options.stripMetadata)
|
|
125
|
-
: data);
|
|
126
|
-
if (entity !== null)
|
|
127
|
-
entity = this.resource.deserialize(entity, options);
|
|
128
|
-
return { entity, annots };
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Handle the response body as entities
|
|
132
|
-
* @returns
|
|
133
|
-
*/
|
|
134
|
-
entities() {
|
|
135
|
-
const options = this.options;
|
|
136
|
-
const payload = this.payload;
|
|
137
|
-
const annots = new ODataEntitiesAnnotations(options.helper, this.annotations, this.context);
|
|
138
|
-
let entities = payload ? annots.data(payload) : null;
|
|
139
|
-
if (entities !== null)
|
|
140
|
-
entities = this.resource.deserialize(entities, options);
|
|
141
|
-
return { entities, annots };
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Handle the response body as a property
|
|
145
|
-
* @returns
|
|
146
|
-
*/
|
|
147
|
-
property() {
|
|
148
|
-
const options = this.options;
|
|
149
|
-
const payload = this.payload;
|
|
150
|
-
const annots = new ODataPropertyAnnotations(options.helper, this.annotations, this.context);
|
|
151
|
-
const data = payload ? annots.data(payload) : null;
|
|
152
|
-
let property = (data !== null && Types.isPlainObject(data)
|
|
153
|
-
? options.helper.attributes(data, this.api.options.stripMetadata)
|
|
154
|
-
: data);
|
|
155
|
-
if (property !== null)
|
|
156
|
-
property = this.resource.deserialize(property, options);
|
|
157
|
-
return { property, annots };
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Handle the response body as a value
|
|
161
|
-
* @returns
|
|
162
|
-
*/
|
|
163
|
-
value() {
|
|
164
|
-
const options = this.options;
|
|
165
|
-
const payload = this.payload;
|
|
166
|
-
let value = (payload !== null && Types.isPlainObject(payload)
|
|
167
|
-
? options.helper.attributes(payload, this.api.options.stripMetadata)
|
|
168
|
-
: payload);
|
|
169
|
-
if (value !== null)
|
|
170
|
-
value = this.resource.deserialize(value, options);
|
|
171
|
-
return value;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsa0JBQWtCLEdBQ25CLE1BQU0sY0FBYyxDQUFDO0FBR3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBaUJqRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFpQixTQUFRLFlBQWU7SUFJbkQsWUFBWSxJQVFYO1FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFJLEdBQW9CLEVBQUUsR0FBb0I7UUFDbkUsT0FBTyxJQUFJLGFBQWEsQ0FBSTtZQUMxQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7WUFDWixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1lBQ2QsT0FBTyxFQUFFLEdB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T0FBTyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxPQUFPLENBQ0EsQ0FBQztRQUVkLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBTSxDQUFDO1FBQzNFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXR5QW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyxcbiAgT0RhdGFQcm9wZXJ0eUFubm90YXRpb25zLFxufSBmcm9tICcuLi9hbm5vdGF0aW9ucyc7XG5pbXBvcnQgeyBUeXBlcyB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlJztcbmltcG9ydCB7XG4gIEFQUExJQ0FUSU9OX0pTT04sXG4gIE9EQVRBX1ZFUlNJT05fSEVBREVSUyxcbiAgQ09OVEVOVF9UWVBFLFxuICBDQUNIRV9DT05UUk9MLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIEVUQUdfSEVBREVSUyxcbiAgT0RBVEFfRU5USVRZSURfSEVBREVSUyxcbiAgUFJFRkVSRU5DRV9BUFBMSUVELFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgT0RhdGFSZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IEh0dHAgfSBmcm9tICcuLi91dGlscy9odHRwJztcbmltcG9ydCB7IE9EYXRhQ29udGV4dCB9IGZyb20gJy4uL2hlbHBlcic7XG5pbXBvcnQgeyBPRGF0YVJlc3BvbnNlT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIE9EYXRhRW50aXR5PFQ+ID0ge1xuICBlbnRpdHk6IFQgfCBudWxsO1xuICBhbm5vdHM6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD47XG59O1xuXG5leHBvcnQgdHlwZSBPRGF0YUVudGl0aWVzPFQ+ID0ge1xuICBlbnRpdGllczogVFtdIHwgbnVsbDtcbiAgYW5ub3RzOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8VD47XG59O1xuXG5leHBvcnQgdHlwZSBPRGF0YVByb3BlcnR5PFQ+ID0ge1xuICBwcm9wZXJ0eTogVCB8IG51bGw7XG4gIGFubm90czogT0RhdGFQcm9wZXJ0eUFubm90YXRpb25zPFQ+O1xufTtcblxuLyoqXG4gKiBPRGF0YSBSZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFSZXNwb25zZTxUPiBleHRlbmRzIEh0dHBSZXNwb25zZTxUPiB7XG4gIHJlYWRvbmx5IGFwaTogT0RhdGFBcGk7XG4gIHJlYWRvbmx5IHJlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKGluaXQ6IHtcbiAgICBhcGk6IE9EYXRhQXBpO1xuICAgIHJlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+O1xuICAgIGJvZHk6IFQgfCBudWxsO1xuICAgIGhlYWRlcnM6IEh0dHBIZWFkZXJzO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIHN0YXR1c1RleHQ6IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICBzdXBlcihpbml0KTtcbiAgICB0aGlzLmFwaSA9IGluaXQuYXBpO1xuICAgIHRoaXMucmVzb3VyY2UgPSBpbml0LnJlc291cmNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21IdHRwUmVzcG9uc2U8VD4ocmVxOiBPRGF0YVJlcXVlc3Q8VD4sIHJlczogSHR0cFJlc3BvbnNlPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVJlc3BvbnNlPFQ+KHtcbiAgICAgIGFwaTogcmVxLmFwaSxcbiAgICAgIHJlc291cmNlOiByZXEucmVzb3VyY2UsXG4gICAgICBib2R5OiByZXMuYm9keSxcbiAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgc3RhdHVzOiByZXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogcmVzLnN0YXR1c1RleHQsXG4gICAgICB1cmw6IHJlcy51cmwgfHwgdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uPFQ+KFxuICAgIHJlcTogT0RhdGFSZXF1ZXN0PFQ+LFxuICAgIGpzb246IHtcbiAgICAgIGJvZHk6IFQgfCBudWxsO1xuICAgICAgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgICAgIHN0YXR1czogbnVtYmVyO1xuICAgICAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICAgICAgdXJsOiBzdHJpbmcgfCBudWxsO1xuICAgIH0sXG4gICkge1xuICAgIHJldHVybiBuZXcgT0RhdGFSZXNwb25zZTxUPih7XG4gICAgICBhcGk6IHJlcS5hcGksXG4gICAgICByZXNvdXJjZTogcmVxLnJlc291cmNlLFxuICAgICAgYm9keToganNvbi5ib2R5LFxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKGpzb24uaGVhZGVycyksXG4gICAgICBzdGF0dXM6IGpzb24uc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDoganNvbi5zdGF0dXNUZXh0LFxuICAgICAgdXJsOiBqc29uLnVybCB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvZHk6IHRoaXMuYm9keSxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyc1xuICAgICAgICAua2V5cygpXG4gICAgICAgIC5tYXAoKG5hbWUpID0+ICh7IFtuYW1lXTogdGhpcy5oZWFkZXJzLmdldEFsbChuYW1lKSB8fCBbXSB9KSlcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBoZWFkZXIpID0+IE9iamVjdC5hc3NpZ24oYWNjLCBoZWFkZXIpLCB7fSksXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfb3B0aW9ucz86IE9EYXRhUmVzcG9uc2VPcHRpb25zO1xuICBnZXQgb3B0aW9ucygpOiBPRGF0YVJlc3BvbnNlT3B0aW9ucyB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IG5ldyBPRGF0YVJlc3BvbnNlT3B0aW9ucyh0aGlzLmFwaS5vcHRpb25zLnBhcnNlck9wdGlvbnMpO1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLmhlYWRlcnMuZ2V0KENPTlRFTlRfVFlQRSk7XG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoQVBQTElDQVRJT05fSlNPTikpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBjb250ZW50VHlwZVxuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLmZpbmQoKHApID0+IHAuc3RhcnRzV2l0aChBUFBMSUNBVElPTl9KU09OKSkgYXMgc3RyaW5nO1xuICAgICAgICB0aGlzLl9vcHRpb25zLnNldEZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlYWRlcktleSA9IEh0dHAucmVzb2x2ZUhlYWRlcktleShcbiAgICAgICAgdGhpcy5oZWFkZXJzLFxuICAgICAgICBPREFUQV9WRVJTSU9OX0hFQURFUlMsXG4gICAgICApO1xuICAgICAgaWYgKGhlYWRlcktleSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gKHRoaXMuaGVhZGVycy5nZXQoaGVhZGVyS2V5KSB8fCAnJykucmVwbGFjZShcbiAgICAgICAgICAvXFw7L2csXG4gICAgICAgICAgJycsXG4gICAgICAgICkgYXMgJzIuMCcgfCAnMy4wJyB8ICc0LjAnO1xuICAgICAgICB0aGlzLl9vcHRpb25zLnNldFZlcnNpb24odmVyc2lvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZWZlcmVuY2VBcHBsaWVkID0gdGhpcy5oZWFkZXJzLmdldChQUkVGRVJFTkNFX0FQUExJRUQpO1xuICAgICAgaWYgKHByZWZlcmVuY2VBcHBsaWVkKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMuc2V0UHJlZmVyZW5jZUFwcGxpZWQocHJlZmVyZW5jZUFwcGxpZWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuaGVhZGVycy5nZXQoTE9DQVRJT05fSEVBREVSKTtcbiAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICB0aGlzLl9vcHRpb25zLnNldExvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FjaGVDb250cm9sID0gdGhpcy5oZWFkZXJzLmdldChDQUNIRV9DT05UUk9MKTtcbiAgICAgIGlmIChjYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5zZXRDYWNoZShjYWNoZUNvbnRyb2wpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgX3BheWxvYWQ/OiBhbnk7XG4gIGdldCBwYXlsb2FkKCkge1xuICAgIGlmICh0aGlzLl9wYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3BheWxvYWQgPVxuICAgICAgICB0aGlzLmJvZHkgJiYgdGhpcy5vcHRpb25zLnZlcnNpb24gPT09ICcyLjAnXG4gICAgICAgICAgPyAoPGFueT50aGlzLmJvZHkpWydkJ11cbiAgICAgICAgICA6IHRoaXMuYm9keTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3BheWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIF9jb250ZXh0PzogYW55O1xuICBnZXQgY29udGV4dCgpOiBPRGF0YUNvbnRleHQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQgPSB0aGlzLm9wdGlvbnMuaGVscGVyLmNvbnRleHQoXG4gICAgICAgIFR5cGVzLmlzUGxhaW5PYmplY3QodGhpcy5wYXlsb2FkKSA/IHRoaXMucGF5bG9hZCA6IHt9LFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIF9hbm5vdGF0aW9ucz86IE1hcDxzdHJpbmcsIGFueT47XG4gIGdldCBhbm5vdGF0aW9ucygpOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgICBpZiAodGhpcy5fYW5ub3RhdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHRoaXMuX2Fubm90YXRpb25zID0gb3B0aW9ucy5oZWxwZXIuYW5ub3RhdGlvbnModGhpcy5wYXlsb2FkIHx8IHt9KTtcbiAgICAgIGxldCBrZXkgPSBIdHRwLnJlc29sdmVIZWFkZXJLZXkodGhpcy5oZWFkZXJzLCBFVEFHX0hFQURFUlMpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBldGFnID0gdGhpcy5oZWFkZXJzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXRhZykgdGhpcy5fYW5ub3RhdGlvbnMuc2V0KG9wdGlvbnMuaGVscGVyLk9EQVRBX0VUQUcsIGV0YWcpO1xuICAgICAgfVxuICAgICAga2V5ID0gSHR0cC5yZXNvbHZlSGVhZGVyS2V5KHRoaXMuaGVhZGVycywgT0RBVEFfRU5USVRZSURfSEVBREVSUyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkID0gdGhpcy5oZWFkZXJzLmdldChrZXkpO1xuICAgICAgICBpZiAoZW50aXR5SWQpIHRoaXMuX2Fubm90YXRpb25zLnNldChvcHRpb25zLmhlbHBlci5PREFUQV9JRCwgZW50aXR5SWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSByZXNwb25zZSBib2R5IGFzIGFuIGVudGl0eVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZW50aXR5KCk6IE9EYXRhRW50aXR5PFQ+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQ7XG4gICAgY29uc3QgYW5ub3RzID0gbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD4oXG4gICAgICBvcHRpb25zLmhlbHBlcixcbiAgICAgIHRoaXMuYW5ub3RhdGlvbnMsXG4gICAgICB0aGlzLmNvbnRleHQsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhID0gcGF5bG9hZCA/IGFubm90cy5kYXRhKHBheWxvYWQpIDogbnVsbDtcbiAgICBsZXQgZW50aXR5ID0gKFxuICAgICAgZGF0YSAhPT0gbnVsbCAmJiBUeXBlcy5pc1BsYWluT2JqZWN0KGRhdGEpXG4gICAgICAgID8gb3B0aW9ucy5oZWxwZXIuYXR0cmlidXRlcyhkYXRhLCB0aGlzLmFwaS5vcHRpb25zLnN0cmlwTWV0YWRhdGEpXG4gICAgICAgIDogZGF0YVxuICAgICkgYXMgVCB8IG51bGw7XG5cbiAgICBpZiAoZW50aXR5ICE9PSBudWxsKVxuICAgICAgZW50aXR5ID0gdGhpcy5yZXNvdXJjZS5kZXNlcmlhbGl6ZShlbnRpdHksIG9wdGlvbnMpIGFzIFQ7XG4gICAgcmV0dXJuIHsgZW50aXR5LCBhbm5vdHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIHJlc3BvbnNlIGJvZHkgYXMgZW50aXRpZXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0aWVzKCk6IE9EYXRhRW50aXRpZXM8VD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICBjb25zdCBhbm5vdHMgPSBuZXcgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+KFxuICAgICAgb3B0aW9ucy5oZWxwZXIsXG4gICAgICB0aGlzLmFubm90YXRpb25zLFxuICAgICAgdGhpcy5jb250ZXh0LFxuICAgICk7XG4gICAgbGV0IGVudGl0aWVzID0gcGF5bG9hZCA/IGFubm90cy5kYXRhKHBheWxvYWQpIDogbnVsbDtcbiAgICBpZiAoZW50aXRpZXMgIT09IG51bGwpXG4gICAgICBlbnRpdGllcyA9IHRoaXMucmVzb3VyY2UuZGVzZXJpYWxpemUoZW50aXRpZXMsIG9wdGlvbnMpIGFzIFRbXTtcbiAgICByZXR1cm4geyBlbnRpdGllcywgYW5ub3RzIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSByZXNwb25zZSBib2R5IGFzIGEgcHJvcGVydHlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByb3BlcnR5KCk6IE9EYXRhUHJvcGVydHk8VD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICBjb25zdCBhbm5vdHMgPSBuZXcgT0RhdGFQcm9wZXJ0eUFubm90YXRpb25zPFQ+KFxuICAgICAgb3B0aW9ucy5oZWxwZXIsXG4gICAgICB0aGlzLmFubm90YXRpb25zLFxuICAgICAgdGhpcy5jb250ZXh0LFxuICAgICk7XG4gICAgY29uc3QgZGF0YSA9IHBheWxvYWQgPyAoYW5ub3RzLmRhdGEocGF5bG9hZCkgYXMgVCkgOiBudWxsO1xuICAgIGxldCBwcm9wZXJ0eSA9IChcbiAgICAgIGRhdGEgIT09IG51bGwgJiYgVHlwZXMuaXNQbGFpbk9iamVjdChkYXRhKVxuICAgICAgICA/IG9wdGlvbnMuaGVscGVyLmF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBkYXRhIGFzIHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgICAgICAgICAgdGhpcy5hcGkub3B0aW9ucy5zdHJpcE1ldGFkYXRhLFxuICAgICAgICAgIClcbiAgICAgICAgOiBkYXRhXG4gICAgKSBhcyBUIHwgbnVsbDtcblxuICAgIGlmIChwcm9wZXJ0eSAhPT0gbnVsbClcbiAgICAgIHByb3BlcnR5ID0gdGhpcy5yZXNvdXJjZS5kZXNlcmlhbGl6ZShwcm9wZXJ0eSwgb3B0aW9ucykgYXMgVDtcbiAgICByZXR1cm4geyBwcm9wZXJ0eSwgYW5ub3RzIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSByZXNwb25zZSBib2R5IGFzIGEgdmFsdWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHZhbHVlKCk6IFQgfCBudWxsIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQ7XG4gICAgbGV0IHZhbHVlID0gKFxuICAgICAgcGF5bG9hZCAhPT0gbnVsbCAmJiBUeXBlcy5pc1BsYWluT2JqZWN0KHBheWxvYWQpXG4gICAgICAgID8gb3B0aW9ucy5oZWxwZXIuYXR0cmlidXRlcyhwYXlsb2FkLCB0aGlzLmFwaS5vcHRpb25zLnN0cmlwTWV0YWRhdGEpXG4gICAgICAgIDogcGF5bG9hZFxuICAgICkgYXMgVCB8IG51bGw7XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHZhbHVlID0gdGhpcy5yZXNvdXJjZS5kZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9ucykgYXMgVDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==
|