angular-odata 0.78.1 → 0.95.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 +133 -62
- package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
- package/esm2020/lib/api.mjs +303 -0
- package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +12 -5
- package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
- package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +0 -0
- package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +1 -1
- package/esm2020/lib/client.mjs +271 -0
- package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +9 -3
- package/esm2020/lib/helper.mjs +268 -0
- package/esm2020/lib/index.mjs +19 -0
- package/esm2020/lib/models/collection.mjs +741 -0
- package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
- package/esm2020/lib/models/model.mjs +453 -0
- package/esm2020/lib/models/options.mjs +945 -0
- package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +6 -6
- package/esm2020/lib/options.mjs +32 -0
- package/esm2020/lib/resources/index.mjs +7 -0
- package/esm2020/lib/resources/path/handlers.mjs +69 -0
- package/esm2020/lib/resources/path/index.mjs +3 -0
- package/esm2020/lib/resources/path/segments.mjs +124 -0
- package/esm2020/lib/resources/query/builder.mjs +590 -0
- package/esm2020/lib/resources/query/expressions.mjs +207 -0
- package/esm2020/lib/resources/query/handlers.mjs +186 -0
- package/esm2020/lib/resources/query/index.mjs +4 -0
- package/esm2020/lib/resources/query/options.mjs +103 -0
- package/esm2020/lib/resources/query/syntax.mjs +406 -0
- package/esm2020/lib/resources/request.mjs +167 -0
- package/esm2020/lib/resources/resource.mjs +326 -0
- package/esm2020/lib/resources/responses/annotations.mjs +119 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
- package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
- package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
- package/esm2020/lib/resources/responses/metadata.mjs +547 -0
- package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +1 -1
- package/esm2020/lib/resources/responses/response.mjs +170 -0
- package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +1 -1
- package/esm2020/lib/resources/types/action.mjs +101 -0
- package/esm2020/lib/resources/types/batch.mjs +288 -0
- package/esm2020/lib/resources/types/count.mjs +27 -0
- package/esm2020/lib/resources/types/entity-set.mjs +94 -0
- package/esm2020/lib/resources/types/entity.mjs +106 -0
- package/esm2020/lib/resources/types/function.mjs +137 -0
- package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
- package/esm2020/lib/resources/types/media.mjs +41 -0
- package/esm2020/lib/resources/types/metadata.mjs +30 -0
- package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
- package/esm2020/lib/resources/types/options.mjs +2 -0
- package/esm2020/lib/resources/types/property.mjs +183 -0
- package/esm2020/lib/resources/types/reference.mjs +85 -0
- package/esm2020/lib/resources/types/singleton.mjs +126 -0
- package/esm2020/lib/resources/types/value.mjs +41 -0
- package/esm2020/lib/schema/annotation.mjs +37 -0
- package/esm2020/lib/schema/callable.mjs +62 -0
- package/esm2020/lib/schema/element.mjs +51 -0
- package/esm2020/lib/schema/entity-container.mjs +9 -0
- package/esm2020/lib/schema/entity-set.mjs +9 -0
- package/esm2020/lib/schema/enum-type.mjs +71 -0
- package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +2 -1
- package/esm2020/lib/schema/parsers/callable.mjs +113 -0
- package/esm2020/lib/schema/parsers/edm.mjs +95 -0
- package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
- package/esm2020/lib/schema/parsers/index.mjs +5 -0
- package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
- package/esm2020/lib/schema/schema.mjs +61 -0
- package/esm2020/lib/schema/structured-type.mjs +198 -0
- package/esm2020/lib/services/base.mjs +29 -0
- package/esm2020/lib/services/entity-set.mjs +143 -0
- package/esm2020/lib/services/entity.mjs +12 -0
- package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
- package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- package/esm2020/lib/services/singleton.mjs +48 -0
- package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/esm2020/lib/types.mjs +37 -0
- package/esm2020/lib/utils/arraybuffers.mjs +46 -0
- package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
- package/esm2020/lib/utils/durations.mjs +40 -0
- package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
- package/esm2020/lib/utils/http.mjs +93 -0
- package/esm2020/lib/utils/index.mjs +10 -0
- package/esm2020/lib/utils/objects.mjs +195 -0
- package/esm2020/lib/utils/odata.mjs +22 -0
- package/esm2020/lib/utils/strings.mjs +20 -0
- package/esm2020/lib/utils/types.mjs +134 -0
- package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{angular-odata.js → angular-odata.mjs} +5068 -3943
- package/fesm2015/angular-odata.mjs.map +1 -0
- package/fesm2020/angular-odata.mjs +10274 -0
- package/fesm2020/angular-odata.mjs.map +1 -0
- package/lib/api.d.ts +17 -16
- package/lib/cache/cache.d.ts +2 -2
- package/lib/client.d.ts +93 -18
- package/lib/constants.d.ts +6 -2
- package/lib/helper.d.ts +3 -3
- package/lib/index.d.ts +0 -1
- package/lib/models/collection.d.ts +36 -47
- package/lib/models/model.d.ts +47 -40
- package/lib/models/options.d.ts +53 -52
- package/lib/options.d.ts +50 -2
- package/lib/resources/index.d.ts +2 -3
- package/lib/resources/path/handlers.d.ts +27 -0
- package/lib/resources/path/index.d.ts +2 -0
- package/lib/resources/{path-segments.d.ts → path/segments.d.ts} +4 -16
- package/lib/resources/{builder.d.ts → query/builder.d.ts} +12 -7
- package/lib/resources/query/expressions.d.ts +63 -0
- package/lib/resources/query/handlers.d.ts +89 -0
- package/lib/resources/query/index.d.ts +3 -0
- package/lib/resources/query/options.d.ts +38 -0
- package/lib/resources/query/syntax.d.ts +175 -0
- package/lib/resources/request.d.ts +8 -6
- package/lib/resources/resource.d.ts +49 -55
- package/lib/resources/responses/metadata.d.ts +1 -1
- package/lib/resources/responses/types.d.ts +1 -1
- package/lib/resources/types/action.d.ts +55 -69
- package/lib/resources/types/batch.d.ts +13 -8
- package/lib/resources/types/count.d.ts +16 -19
- package/lib/resources/types/entity-set.d.ts +24 -62
- package/lib/resources/types/entity.d.ts +35 -43
- package/lib/resources/types/function.d.ts +63 -71
- package/lib/resources/types/media.d.ts +20 -22
- package/lib/resources/types/metadata.d.ts +5 -7
- package/lib/resources/types/navigation-property.d.ts +100 -85
- package/lib/resources/types/options.d.ts +8 -8
- package/lib/resources/types/property.d.ts +63 -73
- package/lib/resources/types/reference.d.ts +72 -16
- package/lib/resources/types/singleton.d.ts +75 -43
- package/lib/resources/types/value.d.ts +18 -9
- package/lib/schema/annotation.d.ts +18 -0
- package/lib/schema/callable.d.ts +27 -11
- package/lib/schema/element.d.ts +39 -0
- package/lib/schema/entity-container.d.ts +3 -8
- package/lib/schema/entity-set.d.ts +3 -9
- package/lib/schema/enum-type.d.ts +41 -14
- package/lib/schema/index.d.ts +1 -0
- package/lib/{parsers → schema/parsers}/callable.d.ts +2 -2
- package/lib/schema/parsers/edm.d.ts +4 -0
- package/lib/{parsers → schema/parsers}/enum-type.d.ts +13 -7
- package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
- package/lib/{parsers → schema/parsers}/structured-type.d.ts +14 -9
- package/lib/schema/schema.d.ts +6 -8
- package/lib/schema/structured-type.d.ts +97 -18
- package/lib/services/base.d.ts +12 -12
- package/lib/services/entity-set.d.ts +15 -12
- package/lib/services/entity.d.ts +4 -1
- package/lib/services/singleton.d.ts +6 -3
- package/lib/settings.d.ts +4 -4
- package/lib/types.d.ts +7 -3
- package/lib/utils/arraybuffers.d.ts +4 -0
- package/lib/{parsers/edm.d.ts → utils/durations.d.ts} +3 -3
- package/lib/utils/http.d.ts +9 -0
- package/lib/utils/index.d.ts +5 -2
- package/lib/utils/objects.d.ts +1 -1
- package/lib/utils/strings.d.ts +4 -0
- package/lib/utils/types.d.ts +2 -0
- package/package.json +21 -8
- package/bundles/angular-odata.umd.js +0 -10756
- package/bundles/angular-odata.umd.js.map +0 -1
- package/esm2015/lib/api.js +0 -251
- package/esm2015/lib/client.js +0 -197
- package/esm2015/lib/helper.js +0 -269
- package/esm2015/lib/index.js +0 -21
- package/esm2015/lib/models/collection.js +0 -660
- package/esm2015/lib/models/model.js +0 -421
- package/esm2015/lib/models/options.js +0 -889
- package/esm2015/lib/options.js +0 -31
- package/esm2015/lib/parsers/callable.js +0 -110
- package/esm2015/lib/parsers/edm.js +0 -310
- package/esm2015/lib/parsers/enum-type.js +0 -97
- package/esm2015/lib/parsers/index.js +0 -5
- package/esm2015/lib/parsers/structured-type.js +0 -394
- package/esm2015/lib/resources/builder.js +0 -537
- package/esm2015/lib/resources/index.js +0 -8
- package/esm2015/lib/resources/path-segments.js +0 -156
- package/esm2015/lib/resources/query-options.js +0 -157
- package/esm2015/lib/resources/request.js +0 -141
- package/esm2015/lib/resources/resource.js +0 -328
- package/esm2015/lib/resources/responses/annotations.js +0 -121
- package/esm2015/lib/resources/responses/metadata.js +0 -548
- package/esm2015/lib/resources/responses/response.js +0 -170
- package/esm2015/lib/resources/types/action.js +0 -146
- package/esm2015/lib/resources/types/batch.js +0 -330
- package/esm2015/lib/resources/types/count.js +0 -50
- package/esm2015/lib/resources/types/entity-set.js +0 -164
- package/esm2015/lib/resources/types/entity.js +0 -158
- package/esm2015/lib/resources/types/function.js +0 -166
- package/esm2015/lib/resources/types/media.js +0 -46
- package/esm2015/lib/resources/types/metadata.js +0 -36
- package/esm2015/lib/resources/types/navigation-property.js +0 -214
- package/esm2015/lib/resources/types/options.js +0 -2
- package/esm2015/lib/resources/types/property.js +0 -190
- package/esm2015/lib/resources/types/reference.js +0 -50
- package/esm2015/lib/resources/types/singleton.js +0 -147
- package/esm2015/lib/resources/types/value.js +0 -30
- package/esm2015/lib/schema/annotation.js +0 -7
- package/esm2015/lib/schema/callable.js +0 -50
- package/esm2015/lib/schema/entity-container.js +0 -17
- package/esm2015/lib/schema/entity-set.js +0 -23
- package/esm2015/lib/schema/enum-type.js +0 -68
- package/esm2015/lib/schema/schema.js +0 -55
- package/esm2015/lib/schema/structured-type.js +0 -107
- package/esm2015/lib/services/base.js +0 -23
- package/esm2015/lib/services/entity-set.js +0 -143
- package/esm2015/lib/services/entity.js +0 -10
- package/esm2015/lib/services/singleton.js +0 -46
- package/esm2015/lib/types.js +0 -37
- package/esm2015/lib/utils/http.js +0 -59
- package/esm2015/lib/utils/index.js +0 -7
- package/esm2015/lib/utils/objects.js +0 -140
- package/esm2015/lib/utils/odata.js +0 -21
- package/esm2015/lib/utils/types.js +0 -103
- package/fesm2015/angular-odata.js.map +0 -1
- package/lib/resources/query-options.d.ts +0 -57
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { map } from 'rxjs/operators';
|
|
2
|
+
import { ODataCallable } from '../../schema/callable';
|
|
3
|
+
import { PathSegmentNames } from '../../types';
|
|
4
|
+
import { ODataPathSegments } from '../path';
|
|
5
|
+
import { ODataResource } from '../resource';
|
|
6
|
+
export class ODataFunctionResource extends ODataResource {
|
|
7
|
+
//#region Factory
|
|
8
|
+
static factory(api, { path, schema, segments, query, }) {
|
|
9
|
+
segments = segments || new ODataPathSegments();
|
|
10
|
+
path = schema !== undefined ? schema.path() : path;
|
|
11
|
+
if (path === undefined)
|
|
12
|
+
throw new Error(`ODataActionResource: path is required`);
|
|
13
|
+
const segment = segments.add(PathSegmentNames.function, path);
|
|
14
|
+
if (schema !== undefined)
|
|
15
|
+
segment.type(schema.type());
|
|
16
|
+
return new ODataFunctionResource(api, {
|
|
17
|
+
segments,
|
|
18
|
+
query,
|
|
19
|
+
schema,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
static fromResource(resource, path) {
|
|
23
|
+
const baseType = resource.type();
|
|
24
|
+
const schema = resource.api.findCallableForType(path, baseType);
|
|
25
|
+
const bindingType = schema?.binding()?.type;
|
|
26
|
+
const func = ODataFunctionResource.factory(resource.api, {
|
|
27
|
+
path,
|
|
28
|
+
schema,
|
|
29
|
+
segments: resource.cloneSegments(),
|
|
30
|
+
});
|
|
31
|
+
// Switch entitySet to binding type if available
|
|
32
|
+
if (bindingType !== undefined && bindingType !== baseType) {
|
|
33
|
+
let entitySet = resource.api.findEntitySetForType(bindingType);
|
|
34
|
+
if (entitySet !== undefined) {
|
|
35
|
+
func.segment((s) => s.entitySet().path(entitySet.name));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return func;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
returnType() {
|
|
42
|
+
return this.schema instanceof ODataCallable
|
|
43
|
+
? this.schema.parser.return?.type
|
|
44
|
+
: undefined;
|
|
45
|
+
}
|
|
46
|
+
parameters(params, { alias } = {}) {
|
|
47
|
+
let parameters = params !== null ? this.encode(params) : null;
|
|
48
|
+
if (alias && parameters !== null) {
|
|
49
|
+
this.query((q) => {
|
|
50
|
+
parameters = Object.entries(parameters).reduce((acc, [name, param]) => {
|
|
51
|
+
return Object.assign(acc, { [name]: q.alias(param, name) });
|
|
52
|
+
}, {});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return this.clone().segment((s) => s.function().parameters(parameters));
|
|
56
|
+
}
|
|
57
|
+
//#region Requests
|
|
58
|
+
get(options) {
|
|
59
|
+
return super.get(options);
|
|
60
|
+
}
|
|
61
|
+
call(params, { alias, ...options } = {}) {
|
|
62
|
+
return this.parameters(params, { alias }).get(options);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Execute the function with the given parameters and return the result as a property
|
|
66
|
+
* @param params Parameters to be sent to the function
|
|
67
|
+
* @param alias If true, the parameters will be send using aliases
|
|
68
|
+
* @param options Options for the request
|
|
69
|
+
* @returns Observable of the result of the function
|
|
70
|
+
*/
|
|
71
|
+
callProperty(params, { alias, ...options } = {}) {
|
|
72
|
+
return this.call(params, {
|
|
73
|
+
responseType: 'property',
|
|
74
|
+
alias,
|
|
75
|
+
...options,
|
|
76
|
+
}).pipe(map(({ property }) => property));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Execute the function with the given parameters and return the result as a entity
|
|
80
|
+
* @param params Parameters to be sent to the function
|
|
81
|
+
* @param alias If true, the parameters will be send using aliases
|
|
82
|
+
* @param options Options for the request
|
|
83
|
+
* @returns Observable of the result of the function
|
|
84
|
+
*/
|
|
85
|
+
callEntity(params, { alias, ...options } = {}) {
|
|
86
|
+
return this.call(params, {
|
|
87
|
+
responseType: 'entity',
|
|
88
|
+
alias,
|
|
89
|
+
...options,
|
|
90
|
+
}).pipe(map(({ entity }) => entity));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Execute the function with the given parameters and return the result as a model
|
|
94
|
+
* @param params Parameters to be sent to the function
|
|
95
|
+
* @param alias If true, the parameters will be send using aliases
|
|
96
|
+
* @param options Options for the request
|
|
97
|
+
* @returns Observable of the result of the function
|
|
98
|
+
*/
|
|
99
|
+
callModel(params, { alias, ...options } = {}) {
|
|
100
|
+
return this.call(params, {
|
|
101
|
+
responseType: 'entity',
|
|
102
|
+
alias,
|
|
103
|
+
...options,
|
|
104
|
+
}).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Execute the function with the given parameters and return the result as a entities
|
|
108
|
+
* @param params Parameters to be sent to the function
|
|
109
|
+
* @param alias If true, the parameters will be send using aliases
|
|
110
|
+
* @param options Options for the request
|
|
111
|
+
* @returns Observable of the result of the function
|
|
112
|
+
*/
|
|
113
|
+
callEntities(params, { alias, ...options } = {}) {
|
|
114
|
+
return this.call(params, {
|
|
115
|
+
responseType: 'entities',
|
|
116
|
+
alias,
|
|
117
|
+
...options,
|
|
118
|
+
}).pipe(map(({ entities }) => entities));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Execute the function with the given parameters and return the result as a collection
|
|
122
|
+
* @param params Parameters to be sent to the function
|
|
123
|
+
* @param alias If true, the parameters will be send using aliases
|
|
124
|
+
* @param options Options for the request
|
|
125
|
+
* @returns Observable of the result of the function
|
|
126
|
+
*/
|
|
127
|
+
callCollection(params, { alias, ...options } = {}) {
|
|
128
|
+
return this.call(params, {
|
|
129
|
+
responseType: 'entities',
|
|
130
|
+
alias,
|
|
131
|
+
...options,
|
|
132
|
+
}).pipe(map(({ entities, annots }) => entities
|
|
133
|
+
? this.asCollection(entities, { annots, reset: true })
|
|
134
|
+
: null));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL2Z1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBVTVDLE1BQU0sT0FBTyxxQkFBNEIsU0FBUSxhQUFnQjtJQUMvRCxpQkFBaUI7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FDWixHQUFhLEVBQ2IsRUFDRSxJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEdBTU47UUFFRCxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxJQUFJLEtBQUssU0FBUztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFFM0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUQsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLHFCQUFxQixDQUFPLEdB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QUFDLElBQUksQ0FDakUsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFlBQVksQ0FDVixNQUFnQixFQUNoQixFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sS0FBeUMsRUFBRTtRQUU5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLEtBQUs7WUFDTCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGNBQWMsQ0FDWixNQUFnQixFQUNoQixFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sS0FBeUMsRUFBRTtRQUU5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLEtBQUs7WUFDTCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDM0IsUUFBUTtZQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFPLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBPRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZGVsJztcbmltcG9ydCB7IE9EYXRhQ2FsbGFibGUgfSBmcm9tICcuLi8uLi9zY2hlbWEvY2FsbGFibGUnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0aWVzLCBPRGF0YUVudGl0eSwgT0RhdGFQcm9wZXJ0eSB9IGZyb20gJy4uL3Jlc3BvbnNlcyc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0aWVzT3B0aW9ucyxcbiAgT0RhdGFFbnRpdHlPcHRpb25zLFxuICBPRGF0YU5vbmVPcHRpb25zLFxuICBPRGF0YU9wdGlvbnMsXG4gIE9EYXRhUHJvcGVydHlPcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxSPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFAsIFI+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAge1xuICAgICAgcGF0aCxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfToge1xuICAgICAgcGF0aD86IHN0cmluZztcbiAgICAgIHNjaGVtYT86IE9EYXRhQ2FsbGFibGU8Uj47XG4gICAgICBzZWdtZW50cz86IE9EYXRhUGF0aFNlZ21lbnRzO1xuICAgICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxSPjtcbiAgICB9XG4gICkge1xuICAgIHNlZ21lbnRzID0gc2VnbWVudHMgfHwgbmV3IE9EYXRhUGF0aFNlZ21lbnRzKCk7XG4gICAgcGF0aCA9IHNjaGVtYSAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnBhdGgoKSA6IHBhdGg7XG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT0RhdGFBY3Rpb25SZXNvdXJjZTogcGF0aCBpcyByZXF1aXJlZGApO1xuXG4gICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudE5hbWVzLmZ1bmN0aW9uLCBwYXRoKTtcbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHNlZ21lbnQudHlwZShzY2hlbWEudHlwZSgpKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPihhcGksIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgICBzY2hlbWEsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlc291cmNlPFAsIFI+KHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4sIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gcmVzb3VyY2UudHlwZSgpO1xuICAgIGNvbnN0IHNjaGVtYSA9IHJlc291cmNlLmFwaS5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgsIGJhc2VUeXBlKTtcbiAgICBjb25zdCBiaW5kaW5nVHlwZSA9IHNjaGVtYT8uYmluZGluZygpPy50eXBlO1xuXG4gICAgY29uc3QgZnVuYyA9IE9EYXRhRnVuY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHJlc291cmNlLmFwaSwge1xuICAgICAgcGF0aCxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHNlZ21lbnRzOiByZXNvdXJjZS5jbG9uZVNlZ21lbnRzKCksXG4gICAgfSk7XG5cbiAgICAvLyBTd2l0Y2ggZW50aXR5U2V0IHRvIGJpbmRpbmcgdHlwZSBpZiBhdmFpbGFibGVcbiAgICBpZiAoYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCAmJiBiaW5kaW5nVHlwZSAhPT0gYmFzZVR5cGUpIHtcbiAgICAgIGxldCBlbnRpdHlTZXQgPSByZXNvdXJjZS5hcGkuZmluZEVudGl0eVNldEZvclR5cGUoYmluZGluZ1R5cGUpO1xuICAgICAgaWYgKGVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZ1bmMuc2VnbWVudCgocykgPT4gcy5lbnRpdHlTZXQoKS5wYXRoKGVudGl0eVNldCEubmFtZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIG92ZXJyaWRlIHJldHVyblR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hIGluc3RhbmNlb2YgT0RhdGFDYWxsYWJsZVxuICAgICAgPyB0aGlzLnNjaGVtYS5wYXJzZXIucmV0dXJuPy50eXBlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHBhcmFtZXRlcnMocGFyYW1zOiBQIHwgbnVsbCwgeyBhbGlhcyB9OiB7IGFsaWFzPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBsZXQgcGFyYW1ldGVycyA9IHBhcmFtcyAhPT0gbnVsbCA/IHRoaXMuZW5jb2RlKHBhcmFtcykgOiBudWxsO1xuICAgIGlmIChhbGlhcyAmJiBwYXJhbWV0ZXJzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnF1ZXJ5KChxKSA9PiB7XG4gICAgICAgIHBhcmFtZXRlcnMgPSBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKS5yZWR1Y2UoKGFjYywgW25hbWUsIHBhcmFtXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHEuYWxpYXMocGFyYW0sIG5hbWUpIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmU8T0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+PigpLnNlZ21lbnQoKHMpID0+XG4gICAgICBzLmZ1bmN0aW9uKCkucGFyYW1ldGVyczxQPihwYXJhbWV0ZXJzKVxuICAgICk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdHlPcHRpb25zICYgT0RhdGFFbnRpdGllc09wdGlvbnMgJiBPRGF0YVByb3BlcnR5T3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBzdXBlci5nZXQob3B0aW9ucyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0c1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBhbGlhcyBJZiB0cnVlLCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHNlbmQgdXNpbmcgYWxpYXNlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKi9cbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFFbnRpdHlPcHRpb25zXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8Uj4+O1xuICBjYWxsKFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgb3B0aW9ucz86IHsgYWxpYXM/OiBib29sZWFuIH0gJiBPRGF0YUVudGl0aWVzT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8Uj4+O1xuICBjYWxsKFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgb3B0aW9ucz86IHsgYWxpYXM/OiBib29sZWFuIH0gJiBPRGF0YVByb3BlcnR5T3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhUHJvcGVydHk8Uj4+O1xuICBjYWxsKFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgb3B0aW9ucz86IHsgYWxpYXM/OiBib29sZWFuIH0gJiBPRGF0YU5vbmVPcHRpb25zXG4gICk6IE9ic2VydmFibGU8bnVsbD47XG4gIGNhbGwoXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICB7XG4gICAgICBhbGlhcyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFFbnRpdHlPcHRpb25zICZcbiAgICAgIE9EYXRhRW50aXRpZXNPcHRpb25zICZcbiAgICAgIE9EYXRhUHJvcGVydHlPcHRpb25zICZcbiAgICAgIE9EYXRhTm9uZU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnMocGFyYW1zLCB7IGFsaWFzIH0pLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHByb3BlcnR5XG4gICAqIEBwYXJhbSBwYXJhbXMgUGFyYW1ldGVycyB0byBiZSBzZW50IHRvIHRoZSBmdW5jdGlvblxuICAgKiBAcGFyYW0gYWxpYXMgSWYgdHJ1ZSwgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZW5kIHVzaW5nIGFsaWFzZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgY2FsbFByb3BlcnR5KFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgeyBhbGlhcywgLi4ub3B0aW9ucyB9OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGwocGFyYW1zLCB7XG4gICAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScsXG4gICAgICBhbGlhcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSkucGlwZShtYXAoKHsgcHJvcGVydHkgfSkgPT4gcHJvcGVydHkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIGVudGl0eVxuICAgKiBAcGFyYW0gcGFyYW1zIFBhcmFtZXRlcnMgdG8gYmUgc2VudCB0byB0aGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIGFsaWFzIElmIHRydWUsIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2VuZCB1c2luZyBhbGlhc2VzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cbiAgICovXG4gIGNhbGxFbnRpdHkoXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICB7IGFsaWFzLCAuLi5vcHRpb25zIH06IHsgYWxpYXM/OiBib29sZWFuIH0gJiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPFIgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbChwYXJhbXMsIHtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2VudGl0eScsXG4gICAgICBhbGlhcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSkucGlwZShtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbW9kZWxcbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBhbGlhcyBJZiB0cnVlLCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHNlbmQgdXNpbmcgYWxpYXNlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICBjYWxsTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8Uj4+KFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgeyBhbGlhcywgLi4ub3B0aW9ucyB9OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxNIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGwocGFyYW1zLCB7XG4gICAgICByZXNwb25zZVR5cGU6ICdlbnRpdHknLFxuICAgICAgYWxpYXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXR5ID8gdGhpcy5hc01vZGVsPE0+KGVudGl0eSwgeyBhbm5vdHMsIHJlc2V0OiB0cnVlIH0pIDogbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBlbnRpdGllc1xuICAgKiBAcGFyYW0gcGFyYW1zIFBhcmFtZXRlcnMgdG8gYmUgc2VudCB0byB0aGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIGFsaWFzIElmIHRydWUsIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2VuZCB1c2luZyBhbGlhc2VzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cbiAgICovXG4gIGNhbGxFbnRpdGllcyhcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIHsgYWxpYXMsIC4uLm9wdGlvbnMgfTogeyBhbGlhcz86IGJvb2xlYW4gfSAmIE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8UltdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGwocGFyYW1zLCB7XG4gICAgICByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsXG4gICAgICBhbGlhcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSkucGlwZShtYXAoKHsgZW50aXRpZXMgfSkgPT4gZW50aXRpZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBhbGlhcyBJZiB0cnVlLCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHNlbmQgdXNpbmcgYWxpYXNlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICBjYWxsQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxSPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxSLCBNPj4oXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICB7IGFsaWFzLCAuLi5vcHRpb25zIH06IHsgYWxpYXM/OiBib29sZWFuIH0gJiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPEMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbChwYXJhbXMsIHtcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJyxcbiAgICAgIGFsaWFzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXRpZXNcbiAgICAgICAgICA/IHRoaXMuYXNDb2xsZWN0aW9uPE0sIEM+KGVudGl0aWVzLCB7IGFubm90cywgcmVzZXQ6IHRydWUgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuIl19
|
|
File without changes
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { $VALUE } from '../../constants';
|
|
2
|
+
import { PathSegmentNames } from '../../types';
|
|
3
|
+
import { Http } from '../../utils';
|
|
4
|
+
import { ODataResource } from '../resource';
|
|
5
|
+
export class ODataMediaResource extends ODataResource {
|
|
6
|
+
//#region Factory
|
|
7
|
+
static factory(api, { segments, query, }) {
|
|
8
|
+
segments.add(PathSegmentNames.value, $VALUE);
|
|
9
|
+
return new ODataMediaResource(api, { segments, query });
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region Requests
|
|
13
|
+
get(options) {
|
|
14
|
+
return super.get(options);
|
|
15
|
+
}
|
|
16
|
+
put(data, options = {}) {
|
|
17
|
+
return super.put(data, options);
|
|
18
|
+
}
|
|
19
|
+
fetch(options) {
|
|
20
|
+
return this.get(options);
|
|
21
|
+
}
|
|
22
|
+
fetchArraybuffer(options = {}) {
|
|
23
|
+
return this.fetch({ responseType: 'arraybuffer', ...options });
|
|
24
|
+
}
|
|
25
|
+
fetchBlob(options = {}) {
|
|
26
|
+
return this.fetch({ responseType: 'blob', ...options });
|
|
27
|
+
}
|
|
28
|
+
upload(data, options = {}) {
|
|
29
|
+
return this.put(data, options);
|
|
30
|
+
}
|
|
31
|
+
uploadArrayBuffer(data, contentType, options = {}) {
|
|
32
|
+
options.headers = Http.mergeHttpHeaders(options.headers || {}, {
|
|
33
|
+
'Content-Type': contentType,
|
|
34
|
+
});
|
|
35
|
+
return this.upload(data, options);
|
|
36
|
+
}
|
|
37
|
+
uploadBlob(data, options = {}) {
|
|
38
|
+
return this.upload(data, options);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL21lZGlhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUduQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFrQjtJQUN4RCxpQkFBaUI7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FDWixHQUFhLEVBQ2IsRUFDRSxRQUFRLEVBQ1IsS0FBSyxHQUlOO1FBRUQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxZQUFZO0lBRVosa0JBQWtCO0lBQ0MsR0FBRyxDQUNwQixPQUE2QztRQUU3QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVrQixHQUFHLENBQ3BCLElBQXdCLEVBQ3hCLFVBQTRDLEVBQUU7UUFFOUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBUUQsS0FBSyxDQUFDLE9BQTZDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBd0IsRUFBRTtRQUN6QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsU0FBUyxDQUFDLFVBQXdCLEVBQUU7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELE1BQU0sQ0FDSixJQUF3QixFQUN4QixVQUE0QyxFQUFFO1FBRTlDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGlCQUFpQixDQUNmLElBQWlCLEVBQ2pCLFdBQW1CLEVBQ25CLFVBQTRDLEVBQUU7UUFFOUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7WUFDN0QsY0FBYyxFQUFFLFdBQVc7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUNSLElBQVUsRUFDVixVQUE0QyxFQUFFO1FBRTlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgJFZBTFVFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBhdGhTZWdtZW50TmFtZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIdHRwIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgT0RhdGFQYXRoU2VnbWVudHMgfSBmcm9tICcuLi9wYXRoJztcbmltcG9ydCB7IE9EYXRhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgT0RhdGFSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlJztcbmltcG9ydCB7IE9EYXRhT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU1lZGlhUmVzb3VyY2UgZXh0ZW5kcyBPRGF0YVJlc291cmNlPGFueT4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxWPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfToge1xuICAgICAgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzO1xuICAgICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxWPjtcbiAgICB9XG4gICkge1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudE5hbWVzLnZhbHVlLCAkVkFMVUUpO1xuICAgIHJldHVybiBuZXcgT0RhdGFNZWRpYVJlc291cmNlKGFwaSwgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFJlcXVlc3RzXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQoXG4gICAgb3B0aW9uczogeyByZXNwb25zZVR5cGU6IGFueSB9ICYgT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwdXQoXG4gICAgZGF0YTogQXJyYXlCdWZmZXIgfCBCbG9iLFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KGRhdGEsIG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0gJiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxBcnJheUJ1ZmZlcj47XG4gIGZldGNoKG9wdGlvbnM/OiB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0gJiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPEJsb2I+O1xuICBmZXRjaChvcHRpb25zOiB7IHJlc3BvbnNlVHlwZTogYW55IH0gJiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIGZldGNoQXJyYXlidWZmZXIob3B0aW9uczogT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPEFycmF5QnVmZmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBmZXRjaEJsb2Iob3B0aW9uczogT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPEJsb2I+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2Jsb2InLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgdXBsb2FkKFxuICAgIGRhdGE6IEFycmF5QnVmZmVyIHwgQmxvYixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHV0KGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgdXBsb2FkQXJyYXlCdWZmZXIoXG4gICAgZGF0YTogQXJyYXlCdWZmZXIsXG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0gSHR0cC5tZXJnZUh0dHBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyB8fCB7fSwge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnVwbG9hZChkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHVwbG9hZEJsb2IoXG4gICAgZGF0YTogQmxvYixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkKGRhdGEsIG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuIl19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { map } from 'rxjs/operators';
|
|
2
|
+
import { $METADATA } from '../../constants';
|
|
3
|
+
import { PathSegmentNames } from '../../types';
|
|
4
|
+
import { ODataPathSegments } from '../path';
|
|
5
|
+
import { ODataResource } from '../resource';
|
|
6
|
+
import { ODataMetadata } from '../responses';
|
|
7
|
+
export class ODataMetadataResource extends ODataResource {
|
|
8
|
+
constructor(api, segments) {
|
|
9
|
+
super(api, { segments });
|
|
10
|
+
}
|
|
11
|
+
//#region Factory
|
|
12
|
+
static factory(api) {
|
|
13
|
+
let segments = new ODataPathSegments();
|
|
14
|
+
segments.add(PathSegmentNames.metadata, $METADATA);
|
|
15
|
+
return new ODataMetadataResource(api, segments);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region Requests
|
|
19
|
+
get(options) {
|
|
20
|
+
return super
|
|
21
|
+
.get({ responseType: 'text', ...options })
|
|
22
|
+
.pipe(map((body) => new ODataMetadata(body)));
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region Shortcuts
|
|
26
|
+
fetch(options) {
|
|
27
|
+
return this.get(options);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHN0MsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGFBQWtCO0lBQzNELFlBQVksR0FBYSxFQUFFLFFBQTRCO1FBQ3JELEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFhO1FBQzFCLElBQUksUUFBUSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN2QyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUkscUJBQXFCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxZQUFZO0lBRVosa0JBQWtCO0lBQ0MsR0FBRyxDQUFDLE9BQXNCO1FBQzNDLE9BQU8sS0FBSzthQUNULEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQzthQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELFlBQVk7SUFFWixtQkFBbUI7SUFDbkIsS0FBSyxDQUFDLE9BQXNCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyAkTUVUQURBVEEgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgT0RhdGFNZXRhZGF0YSB9IGZyb20gJy4uL3Jlc3BvbnNlcyc7XG5pbXBvcnQgeyBPRGF0YU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFNZXRhZGF0YVJlc291cmNlIGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxhbnk+IHtcbiAgY29uc3RydWN0b3IoYXBpOiBPRGF0YUFwaSwgc2VnbWVudHM/OiBPRGF0YVBhdGhTZWdtZW50cykge1xuICAgIHN1cGVyKGFwaSwgeyBzZWdtZW50cyB9KTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5KGFwaTogT0RhdGFBcGkpIHtcbiAgICBsZXQgc2VnbWVudHMgPSBuZXcgT0RhdGFQYXRoU2VnbWVudHMoKTtcbiAgICBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5tZXRhZGF0YSwgJE1FVEFEQVRBKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhTWV0YWRhdGFSZXNvdXJjZShhcGksIHNlZ21lbnRzKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldChvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxPRGF0YU1ldGFkYXRhPiB7XG4gICAgcmV0dXJuIHN1cGVyXG4gICAgICAuZ2V0KHsgcmVzcG9uc2VUeXBlOiAndGV4dCcsIC4uLm9wdGlvbnMgfSlcbiAgICAgIC5waXBlKG1hcCgoYm9keTogYW55KSA9PiBuZXcgT0RhdGFNZXRhZGF0YShib2R5KSkpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgZmV0Y2gob3B0aW9ucz86IE9EYXRhT3B0aW9ucyk6IE9ic2VydmFibGU8T0RhdGFNZXRhZGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { EMPTY } from 'rxjs';
|
|
2
|
+
import { concatMap, expand, map, toArray } from 'rxjs/operators';
|
|
3
|
+
import { PathSegmentNames, QueryOptionNames } from '../../types';
|
|
4
|
+
import { ODataResource } from '../resource';
|
|
5
|
+
import { ODataCountResource } from './count';
|
|
6
|
+
import { ODataMediaResource } from './media';
|
|
7
|
+
import { ODataPropertyResource } from './property';
|
|
8
|
+
import { ODataReferenceResource } from './reference';
|
|
9
|
+
/**
|
|
10
|
+
* OData Navigation Property Resource
|
|
11
|
+
* https://www.odata.org/getting-started/advanced-tutorial/#containment
|
|
12
|
+
* https://www.odata.org/getting-started/advanced-tutorial/#derived
|
|
13
|
+
*/
|
|
14
|
+
export class ODataNavigationPropertyResource extends ODataResource {
|
|
15
|
+
//#region Factory
|
|
16
|
+
static factory(api, { path, type, schema, segments, query, }) {
|
|
17
|
+
const segment = segments.add(PathSegmentNames.navigationProperty, path);
|
|
18
|
+
if (schema !== undefined)
|
|
19
|
+
segment.type(schema.type());
|
|
20
|
+
else if (type !== undefined)
|
|
21
|
+
segment.type(type);
|
|
22
|
+
query?.keep(QueryOptionNames.format);
|
|
23
|
+
return new ODataNavigationPropertyResource(api, {
|
|
24
|
+
segments,
|
|
25
|
+
query,
|
|
26
|
+
schema,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
static fromResource(resource, path) {
|
|
30
|
+
const baseType = resource.type();
|
|
31
|
+
let baseSchema = resource.schema;
|
|
32
|
+
let fieldType;
|
|
33
|
+
let fieldSchema;
|
|
34
|
+
if (baseSchema !== undefined) {
|
|
35
|
+
const field = baseSchema.findFieldByName(path);
|
|
36
|
+
fieldType = field?.type;
|
|
37
|
+
fieldSchema =
|
|
38
|
+
fieldType !== undefined
|
|
39
|
+
? resource.api.findStructuredTypeForType(fieldType)
|
|
40
|
+
: undefined;
|
|
41
|
+
baseSchema =
|
|
42
|
+
field !== undefined
|
|
43
|
+
? baseSchema.findSchemaForField(field)
|
|
44
|
+
: undefined;
|
|
45
|
+
}
|
|
46
|
+
const navigation = ODataNavigationPropertyResource.factory(resource.api, {
|
|
47
|
+
path,
|
|
48
|
+
type: fieldType,
|
|
49
|
+
schema: fieldSchema,
|
|
50
|
+
segments: resource.cloneSegments(),
|
|
51
|
+
query: resource.cloneQuery(),
|
|
52
|
+
});
|
|
53
|
+
// Switch entitySet to binding type if available
|
|
54
|
+
if (baseSchema !== undefined && baseSchema.type() !== baseType) {
|
|
55
|
+
let entitySet = resource.api.findEntitySetForType(baseSchema.type());
|
|
56
|
+
if (entitySet !== undefined) {
|
|
57
|
+
navigation.segment((s) => s.entitySet().path(entitySet.name));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return navigation;
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
key(value) {
|
|
64
|
+
const navigation = this.clone();
|
|
65
|
+
var key = this.resolveKey(value);
|
|
66
|
+
if (key !== undefined)
|
|
67
|
+
navigation.segment((s) => s.navigationProperty().key(key));
|
|
68
|
+
return navigation;
|
|
69
|
+
}
|
|
70
|
+
keys(values) {
|
|
71
|
+
const navigation = this.clone();
|
|
72
|
+
const types = this.pathSegments.types({ key: true });
|
|
73
|
+
const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredTypeForType(types[index])));
|
|
74
|
+
navigation.segment((s) => s.keys(keys));
|
|
75
|
+
return navigation;
|
|
76
|
+
}
|
|
77
|
+
media() {
|
|
78
|
+
return ODataMediaResource.factory(this.api, {
|
|
79
|
+
segments: this.cloneSegments(),
|
|
80
|
+
query: this.cloneQuery(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
reference() {
|
|
84
|
+
return ODataReferenceResource.factory(this.api, {
|
|
85
|
+
segments: this.cloneSegments(),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
navigationProperty(path) {
|
|
89
|
+
return ODataNavigationPropertyResource.fromResource(this, path);
|
|
90
|
+
}
|
|
91
|
+
property(path) {
|
|
92
|
+
return ODataPropertyResource.fromResource(this, path);
|
|
93
|
+
}
|
|
94
|
+
count() {
|
|
95
|
+
return ODataCountResource.factory(this.api, {
|
|
96
|
+
segments: this.cloneSegments(),
|
|
97
|
+
query: this.cloneQuery(),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
cast(type) {
|
|
101
|
+
const baseSchema = this.schema;
|
|
102
|
+
const castSchema = this.api.findStructuredTypeForType(type);
|
|
103
|
+
if (castSchema !== undefined &&
|
|
104
|
+
baseSchema !== undefined &&
|
|
105
|
+
!castSchema.isSubtypeOf(baseSchema))
|
|
106
|
+
throw new Error(`Cannot cast to ${type}`);
|
|
107
|
+
const segments = this.cloneSegments();
|
|
108
|
+
segments.add(PathSegmentNames.type, type).type(type);
|
|
109
|
+
return new ODataNavigationPropertyResource(this.api, {
|
|
110
|
+
segments,
|
|
111
|
+
schema: castSchema,
|
|
112
|
+
query: this.cloneQuery(),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
//#region Requests
|
|
116
|
+
post(attrs, options = {}) {
|
|
117
|
+
return super.post(attrs, { responseType: 'entity', ...options });
|
|
118
|
+
}
|
|
119
|
+
put(attrs, options = {}) {
|
|
120
|
+
return super.put(attrs, { responseType: 'entity', ...options });
|
|
121
|
+
}
|
|
122
|
+
patch(attrs, options = {}) {
|
|
123
|
+
return super.patch(attrs, { responseType: 'entity', ...options });
|
|
124
|
+
}
|
|
125
|
+
delete(options = {}) {
|
|
126
|
+
return super.delete({ responseType: 'entity', ...options });
|
|
127
|
+
}
|
|
128
|
+
get(options = {}) {
|
|
129
|
+
return super.get(options);
|
|
130
|
+
}
|
|
131
|
+
//#endregion
|
|
132
|
+
//#region Shortcuts
|
|
133
|
+
/**
|
|
134
|
+
* Create a new entity
|
|
135
|
+
* @param attrs The entity attributes
|
|
136
|
+
* @param options Options for the request
|
|
137
|
+
* @returns The created entity with the annotations
|
|
138
|
+
*/
|
|
139
|
+
create(attrs, options) {
|
|
140
|
+
return this.post(attrs, options);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Update an existing entity
|
|
144
|
+
* @param attrs The entity attributes
|
|
145
|
+
* @param options Options for the request
|
|
146
|
+
* @param etag The etag of the entity
|
|
147
|
+
* @returns The updated entity with the annotations
|
|
148
|
+
*/
|
|
149
|
+
update(attrs, options) {
|
|
150
|
+
return this.put(attrs, options);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Modify an existing entity
|
|
154
|
+
* @param attrs The entity attributes
|
|
155
|
+
* @param options Options for the request
|
|
156
|
+
* @param etag The etag of the entity
|
|
157
|
+
* @returns The modified entity with the annotations
|
|
158
|
+
*/
|
|
159
|
+
modify(attrs, options) {
|
|
160
|
+
return this.patch(attrs, options);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Delete an existing entity
|
|
164
|
+
* @param options Options for the request
|
|
165
|
+
* @param etag The etag of the entity
|
|
166
|
+
* @returns An observable of the destroy
|
|
167
|
+
*/
|
|
168
|
+
destroy(options) {
|
|
169
|
+
return this.delete(options);
|
|
170
|
+
}
|
|
171
|
+
fetch(options = {}) {
|
|
172
|
+
return this.get(options);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Fetch the entity
|
|
176
|
+
* @param options Options for the request
|
|
177
|
+
* @returns The entity
|
|
178
|
+
*/
|
|
179
|
+
fetchEntity(options = {}) {
|
|
180
|
+
return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity }) => entity));
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Fetch the entity and return as model
|
|
184
|
+
* @param options Options for the request
|
|
185
|
+
* @returns The model
|
|
186
|
+
*/
|
|
187
|
+
fetchModel(options = {}) {
|
|
188
|
+
return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Fetch entities
|
|
192
|
+
* @param options Options for the request
|
|
193
|
+
* @returns The entities
|
|
194
|
+
*/
|
|
195
|
+
fetchEntities(options = {}) {
|
|
196
|
+
return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities }) => entities));
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Fetch entities and return as collection
|
|
200
|
+
* @param options Options for the request
|
|
201
|
+
* @returns The collection
|
|
202
|
+
*/
|
|
203
|
+
fetchCollection(options = {}) {
|
|
204
|
+
return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => entities
|
|
205
|
+
? this.asCollection(entities, { annots, reset: true })
|
|
206
|
+
: null));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Fetch all entities
|
|
210
|
+
* @param options Options for the request
|
|
211
|
+
* @returns All entities
|
|
212
|
+
*/
|
|
213
|
+
fetchAll(options = {}) {
|
|
214
|
+
let res = this.clone();
|
|
215
|
+
// Clean Paging
|
|
216
|
+
res.query((q) => q.clearPaging());
|
|
217
|
+
let fetch = (opts) => {
|
|
218
|
+
if (opts) {
|
|
219
|
+
res.query((q) => q.paging(opts));
|
|
220
|
+
}
|
|
221
|
+
return res.fetch({ responseType: 'entities', ...options });
|
|
222
|
+
};
|
|
223
|
+
return fetch().pipe(expand(({ annots: meta }) => meta.skip || meta.skiptoken ? fetch(meta) : EMPTY), concatMap(({ entities }) => entities || []), toArray());
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1wcm9wZXJ0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvdHlwZXMvbmF2aWdhdGlvbi1wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBTTdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTywrQkFBbUMsU0FBUSxhQUFnQjtJQUN0RSxpQkFBaUI7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FDWixHQUFhLEVBQ2IsRUFDRSxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxHQU9OO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RSxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNqRCxJQUFJLElBQUksS0FBSyxT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QUksQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FDTixVQUVJLEVBQUU7UUFFTixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFzQyxDQUFDO1FBQzNELGVBQWU7UUFDZixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBSVosRUFBZ0MsRUFBRTtZQUNqQyxJQUFJLElBQUksRUFBRTtnQkFDUixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDbEM7WUFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUM7UUFDRixPQUFPLEtBQUssRUFBRSxDQUFDLElBQUksQ0FDakIsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUMxQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUNsRCxFQUNELFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFDM0MsT0FBTyxFQUFFLENBQ1YsQ0FBQztJQUNKLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIGV4cGFuZCwgbWFwLCB0b0FycmF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uLCBPRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGUgfSBmcm9tICcuLi8uLi9zY2hlbWEnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcywgUXVlcnlPcHRpb25OYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0aWVzLCBPRGF0YUVudGl0eSB9IGZyb20gJy4uL3Jlc3BvbnNlcyc7XG5pbXBvcnQgeyBPRGF0YUNvdW50UmVzb3VyY2UgfSBmcm9tICcuL2NvdW50JztcbmltcG9ydCB7IE9EYXRhTWVkaWFSZXNvdXJjZSB9IGZyb20gJy4vbWVkaWEnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc09wdGlvbnMsXG4gIE9EYXRhRW50aXR5T3B0aW9ucyxcbiAgT0RhdGFPcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgT0RhdGFQcm9wZXJ0eVJlc291cmNlIH0gZnJvbSAnLi9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBPRGF0YVJlZmVyZW5jZVJlc291cmNlIH0gZnJvbSAnLi9yZWZlcmVuY2UnO1xuXG4vKipcbiAqIE9EYXRhIE5hdmlnYXRpb24gUHJvcGVydHkgUmVzb3VyY2VcbiAqIGh0dHBzOi8vd3d3Lm9kYXRhLm9yZy9nZXR0aW5nLXN0YXJ0ZWQvYWR2YW5jZWQtdHV0b3JpYWwvI2NvbnRhaW5tZW50XG4gKiBodHRwczovL3d3dy5vZGF0YS5vcmcvZ2V0dGluZy1zdGFydGVkL2FkdmFuY2VkLXR1dG9yaWFsLyNkZXJpdmVkXG4gKi9cbmV4cG9ydCBjbGFzcyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxUPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PE4+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAge1xuICAgICAgcGF0aCxcbiAgICAgIHR5cGUsXG4gICAgICBzY2hlbWEsXG4gICAgICBzZWdtZW50cyxcbiAgICAgIHF1ZXJ5LFxuICAgIH06IHtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgICBzY2hlbWE/OiBPRGF0YVN0cnVjdHVyZWRUeXBlPE4+O1xuICAgICAgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzO1xuICAgICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxOPjtcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5uYXZpZ2F0aW9uUHJvcGVydHksIHBhdGgpO1xuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkgc2VnbWVudC50eXBlKHNjaGVtYS50eXBlKCkpO1xuICAgIGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkgc2VnbWVudC50eXBlKHR5cGUpO1xuICAgIHF1ZXJ5Py5rZWVwKFF1ZXJ5T3B0aW9uTmFtZXMuZm9ybWF0KTtcbiAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Tj4oYXBpLCB7XG4gICAgICBzZWdtZW50cyxcbiAgICAgIHF1ZXJ5LFxuICAgICAgc2NoZW1hLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21SZXNvdXJjZTxOPihyZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxhbnk+LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IHJlc291cmNlLnR5cGUoKTtcbiAgICBsZXQgYmFzZVNjaGVtYSA9IHJlc291cmNlLnNjaGVtYSBhcyBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBmaWVsZFNjaGVtYTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxOPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoYmFzZVNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGJhc2VTY2hlbWEuZmluZEZpZWxkQnlOYW1lPE4+KHBhdGgpO1xuICAgICAgZmllbGRUeXBlID0gZmllbGQ/LnR5cGU7XG4gICAgICBmaWVsZFNjaGVtYSA9XG4gICAgICAgIGZpZWxkVHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyByZXNvdXJjZS5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZShmaWVsZFR5cGUpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBiYXNlU2NoZW1hID1cbiAgICAgICAgZmllbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYmFzZVNjaGVtYS5maW5kU2NoZW1hRm9yRmllbGQ8Tj4oZmllbGQpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UuZmFjdG9yeTxOPihcbiAgICAgIHJlc291cmNlLmFwaSxcbiAgICAgIHtcbiAgICAgICAgcGF0aCxcbiAgICAgICAgdHlwZTogZmllbGRUeXBlLFxuICAgICAgICBzY2hlbWE6IGZpZWxkU2NoZW1hLFxuICAgICAgICBzZWdtZW50czogcmVzb3VyY2UuY2xvbmVTZWdtZW50cygpLFxuICAgICAgICBxdWVyeTogcmVzb3VyY2UuY2xvbmVRdWVyeTxOPigpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBTd2l0Y2ggZW50aXR5U2V0IHRvIGJpbmRpbmcgdHlwZSBpZiBhdmFpbGFibGVcbiAgICBpZiAoYmFzZVNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIGJhc2VTY2hlbWEudHlwZSgpICE9PSBiYXNlVHlwZSkge1xuICAgICAgbGV0IGVudGl0eVNldCA9IHJlc291cmNlLmFwaS5maW5kRW50aXR5U2V0Rm9yVHlwZShiYXNlU2NoZW1hLnR5cGUoKSk7XG4gICAgICBpZiAoZW50aXR5U2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmF2aWdhdGlvbi5zZWdtZW50KChzKSA9PiBzLmVudGl0eVNldCgpLnBhdGgoZW50aXR5U2V0IS5uYW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRpb247XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAga2V5KHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5jbG9uZTxPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+PigpO1xuICAgIHZhciBrZXkgPSB0aGlzLnJlc29sdmVLZXkodmFsdWUpO1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZClcbiAgICAgIG5hdmlnYXRpb24uc2VnbWVudCgocykgPT4gcy5uYXZpZ2F0aW9uUHJvcGVydHkoKS5rZXkoa2V5KSk7XG4gICAgcmV0dXJuIG5hdmlnYXRpb247XG4gIH1cblxuICBrZXlzKHZhbHVlczogYW55W10pIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5jbG9uZTxPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+PigpO1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wYXRoU2VnbWVudHMudHlwZXMoeyBrZXk6IHRydWUgfSk7XG4gICAgY29uc3Qga2V5cyA9IHZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT5cbiAgICAgIE9EYXRhUmVzb3VyY2UucmVzb2x2ZUtleShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuYXBpLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZXNbaW5kZXhdKVxuICAgICAgKVxuICAgICk7XG4gICAgbmF2aWdhdGlvbi5zZWdtZW50KChzKSA9PiBzLmtleXMoa2V5cykpO1xuICAgIHJldHVybiBuYXZpZ2F0aW9uO1xuICB9XG5cbiAgbWVkaWEoKSB7XG4gICAgcmV0dXJuIE9EYXRhTWVkaWFSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMuYXBpLCB7XG4gICAgICBzZWdtZW50czogdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PFQ+KCksXG4gICAgfSk7XG4gIH1cblxuICByZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIE9EYXRhUmVmZXJlbmNlUmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLmFwaSwge1xuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGlvblByb3BlcnR5PE4+KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLmZyb21SZXNvdXJjZTxOPih0aGlzLCBwYXRoKTtcbiAgfVxuXG4gIHByb3BlcnR5PFA+KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBPRGF0YVByb3BlcnR5UmVzb3VyY2UuZnJvbVJlc291cmNlPFA+KHRoaXMsIHBhdGgpO1xuICB9XG5cbiAgY291bnQoKSB7XG4gICAgcmV0dXJuIE9EYXRhQ291bnRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMuYXBpLCB7XG4gICAgICBzZWdtZW50czogdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PFQ+KCksXG4gICAgfSk7XG4gIH1cblxuICBjYXN0PEM+KHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB0aGlzLnNjaGVtYSBhcyBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+O1xuICAgIGNvbnN0IGNhc3RTY2hlbWEgPSB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPEM+KHR5cGUpO1xuICAgIGlmIChcbiAgICAgIGNhc3RTY2hlbWEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYmFzZVNjaGVtYSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhY2FzdFNjaGVtYS5pc1N1YnR5cGVPZihiYXNlU2NoZW1hKVxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNhc3QgdG8gJHt0eXBlfWApO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5jbG9uZVNlZ21lbnRzKCk7XG4gICAgc2VnbWVudHMuYWRkKFBhdGhTZWdtZW50TmFtZXMudHlwZSwgdHlwZSkudHlwZSh0eXBlKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Qz4odGhpcy5hcGksIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgc2NoZW1hOiBjYXN0U2NoZW1hLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxDPigpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFJlcXVlc3RzXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwb3N0KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gc3VwZXIucG9zdChhdHRycywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHB1dChcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGF0Y2goXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBhdGNoKGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGVsZXRlKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQoXG4gICAgb3B0aW9uczogT0RhdGFFbnRpdHlPcHRpb25zICZcbiAgICAgIE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICAgICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBlbnRpdHlcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBlbnRpdHkgYXR0cmlidXRlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnNcbiAgICovXG4gIGNyZWF0ZShcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KGF0dHJzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgZW50aXR5XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgZW50aXR5IGF0dHJpYnV0ZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHBhcmFtIGV0YWcgVGhlIGV0YWcgb2YgdGhlIGVudGl0eVxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnNcbiAgICovXG4gIHVwZGF0ZShcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH1cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnB1dChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZ5IGFuIGV4aXN0aW5nIGVudGl0eVxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSBldGFnIFRoZSBldGFnIG9mIHRoZSBlbnRpdHlcbiAgICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGVudGl0eSB3aXRoIHRoZSBhbm5vdGF0aW9uc1xuICAgKi9cbiAgbW9kaWZ5KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2goYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBleGlzdGluZyBlbnRpdHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHBhcmFtIGV0YWcgVGhlIGV0YWcgb2YgdGhlIGVudGl0eVxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIG9mIHRoZSBkZXN0cm95XG4gICAqL1xuICBkZXN0cm95KG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGVudGl0eSAvIGVudGl0aWVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm4gQW4gb2JzZXJ2YWJsZSBvZiB0aGUgZW50aXR5IG9yIGVudGl0aWVzIHdpdGggYW5ub3RhdGlvbnNcbiAgICovXG4gIGZldGNoKFxuICAgIG9wdGlvbnM/OiBPRGF0YUVudGl0eU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj47XG4gIGZldGNoKFxuICAgIG9wdGlvbnM6IE9EYXRhRW50aXR5T3B0aW9ucyAmXG4gICAgICBPRGF0YUVudGl0aWVzT3B0aW9ucyAmIHtcbiAgICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZW50aXR5XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBlbnRpdHlcbiAgICovXG4gIGZldGNoRW50aXR5KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHkgYW5kIHJldHVybiBhcyBtb2RlbFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWxcbiAgICovXG4gIGZldGNoTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPE0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXR5ID8gdGhpcy5hc01vZGVsPE0+KGVudGl0eSwgeyBhbm5vdHMsIHJlc2V0OiB0cnVlIH0pIDogbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0aWVzXG4gICAqL1xuICBmZXRjaEVudGl0aWVzKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8VFtdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXRpZXMgfSkgPT4gZW50aXRpZXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdGllcyBhbmQgcmV0dXJuIGFzIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIGZldGNoQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxULCBNPj4oXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8QyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXRpZXNcbiAgICAgICAgICA/IHRoaXMuYXNDb2xsZWN0aW9uPE0sIEM+KGVudGl0aWVzLCB7IGFubm90cywgcmVzZXQ6IHRydWUgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBBbGwgZW50aXRpZXNcbiAgICovXG4gIGZldGNoQWxsKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgbGV0IHJlcyA9IHRoaXMuY2xvbmU8T0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPj4oKTtcbiAgICAvLyBDbGVhbiBQYWdpbmdcbiAgICByZXMucXVlcnkoKHEpID0+IHEuY2xlYXJQYWdpbmcoKSk7XG4gICAgbGV0IGZldGNoID0gKG9wdHM/OiB7XG4gICAgICBza2lwPzogbnVtYmVyO1xuICAgICAgc2tpcHRva2VuPzogc3RyaW5nO1xuICAgICAgdG9wPzogbnVtYmVyO1xuICAgIH0pOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+ID0+IHtcbiAgICAgIGlmIChvcHRzKSB7XG4gICAgICAgIHJlcy5xdWVyeSgocSkgPT4gcS5wYWdpbmcob3B0cykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KTtcbiAgICB9O1xuICAgIHJldHVybiBmZXRjaCgpLnBpcGUoXG4gICAgICBleHBhbmQoKHsgYW5ub3RzOiBtZXRhIH0pID0+XG4gICAgICAgIG1ldGEuc2tpcCB8fCBtZXRhLnNraXB0b2tlbiA/IGZldGNoKG1ldGEpIDogRU1QVFlcbiAgICAgICksXG4gICAgICBjb25jYXRNYXAoKHsgZW50aXRpZXMgfSkgPT4gZW50aXRpZXMgfHwgW10pLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvdHlwZXMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBGZXRjaFBvbGljeSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUXVlcnlBcmd1bWVudHMgfSBmcm9tICcuLi9xdWVyeSc7XG5cbmV4cG9ydCB0eXBlIE9EYXRhT3B0aW9ucyA9IHtcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwgeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwgeyBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbn07XG5cbmV4cG9ydCB0eXBlIE9EYXRhRW50aXR5T3B0aW9ucyA9IE9EYXRhT3B0aW9ucyAmIHsgcmVzcG9uc2VUeXBlPzogJ2VudGl0eScgfTtcbmV4cG9ydCB0eXBlIE9EYXRhRW50aXRpZXNPcHRpb25zID0gT0RhdGFPcHRpb25zICYge1xuICByZXNwb25zZVR5cGU/OiAnZW50aXRpZXMnO1xuICB3aXRoQ291bnQ/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE9EYXRhUHJvcGVydHlPcHRpb25zID0gT0RhdGFPcHRpb25zICYgeyByZXNwb25zZVR5cGU/OiAncHJvcGVydHknIH07XG5leHBvcnQgdHlwZSBPRGF0YU5vbmVPcHRpb25zID0gT0RhdGFPcHRpb25zICYgeyByZXNwb25zZVR5cGU/OiAnbm9uZScgfTtcbmV4cG9ydCB0eXBlIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFQ+ID0gT0RhdGFRdWVyeUFyZ3VtZW50czxUPiAmIHtcbiAgYWxpYXM/OiBib29sZWFuO1xufSAmIE9EYXRhT3B0aW9ucztcbiJdfQ==
|