angular-odata 0.80.0 → 0.99.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 +69 -34
- package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
- package/esm2020/lib/api.mjs +303 -0
- package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
- package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
- package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
- package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
- package/esm2020/lib/client.mjs +271 -0
- package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +8 -3
- package/esm2020/lib/helper.mjs +268 -0
- package/esm2020/lib/index.mjs +19 -0
- package/esm2020/lib/models/collection.mjs +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} +7 -7
- 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/base.mjs +20 -0
- package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
- package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
- package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
- package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
- package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
- package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
- package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
- package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
- package/esm2020/lib/resources/query/handlers.mjs +188 -0
- package/esm2020/lib/resources/query/index.mjs +4 -0
- package/esm2020/lib/resources/query/options.mjs +103 -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} +0 -0
- package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
- package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
- package/esm2020/lib/resources/types/action.mjs +101 -0
- package/esm2020/lib/resources/types/batch.mjs +309 -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} +4508 -3427
- package/fesm2015/angular-odata.mjs.map +1 -0
- package/fesm2020/angular-odata.mjs +10510 -0
- package/fesm2020/angular-odata.mjs.map +1 -0
- package/lib/api.d.ts +14 -14
- package/lib/cache/cache.d.ts +2 -2
- package/lib/cache/storage.d.ts +1 -1
- package/lib/client.d.ts +60 -9
- package/lib/constants.d.ts +5 -2
- package/lib/index.d.ts +0 -1
- package/lib/models/collection.d.ts +30 -42
- package/lib/models/model.d.ts +37 -30
- package/lib/models/options.d.ts +30 -38
- package/lib/module.d.ts +1 -1
- package/lib/options.d.ts +47 -0
- 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/base.d.ts +19 -0
- package/lib/resources/query/expressions/compute.d.ts +26 -0
- package/lib/resources/query/expressions/expand.d.ts +40 -0
- package/lib/resources/query/expressions/filter.d.ts +58 -0
- package/lib/resources/query/expressions/index.d.ts +6 -0
- package/lib/resources/query/expressions/orderby.d.ts +37 -0
- package/lib/resources/query/expressions/search.d.ts +47 -0
- package/lib/resources/query/expressions/select.d.ts +21 -0
- package/lib/resources/query/expressions/syntax.d.ts +177 -0
- package/lib/resources/query/handlers.d.ts +104 -0
- package/lib/resources/query/index.d.ts +3 -0
- package/lib/resources/query/options.d.ts +38 -0
- package/lib/resources/request.d.ts +4 -3
- package/lib/resources/resource.d.ts +42 -48
- package/lib/resources/types/action.d.ts +14 -61
- package/lib/resources/types/batch.d.ts +16 -3
- package/lib/resources/types/count.d.ts +9 -17
- package/lib/resources/types/entity-set.d.ts +12 -51
- package/lib/resources/types/entity.d.ts +13 -31
- package/lib/resources/types/function.d.ts +13 -60
- package/lib/resources/types/media.d.ts +9 -8
- package/lib/resources/types/metadata.d.ts +3 -5
- package/lib/resources/types/navigation-property.d.ts +74 -65
- package/lib/resources/types/options.d.ts +1 -1
- package/lib/resources/types/property.d.ts +49 -57
- package/lib/resources/types/reference.d.ts +65 -9
- package/lib/resources/types/singleton.d.ts +53 -31
- package/lib/resources/types/value.d.ts +16 -7
- package/lib/schema/annotation.d.ts +18 -0
- package/lib/schema/callable.d.ts +4 -20
- package/lib/schema/element.d.ts +39 -0
- package/lib/schema/entity-container.d.ts +2 -12
- package/lib/schema/entity-set.d.ts +2 -18
- package/lib/schema/enum-type.d.ts +19 -25
- 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 +12 -11
- package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
- package/lib/{parsers → schema/parsers}/structured-type.d.ts +12 -12
- package/lib/schema/schema.d.ts +3 -10
- package/lib/schema/structured-type.d.ts +65 -27
- package/lib/services/base.d.ts +2 -2
- package/lib/services/entity-set.d.ts +5 -2
- package/lib/services/entity.d.ts +4 -1
- package/lib/services/singleton.d.ts +5 -2
- package/lib/settings.d.ts +5 -5
- package/lib/types.d.ts +1 -0
- 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 +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/objects.d.ts +1 -0
- package/lib/utils/strings.d.ts +1 -0
- package/lib/utils/types.d.ts +2 -0
- package/package.json +21 -8
- package/bundles/angular-odata.umd.js +0 -11048
- package/bundles/angular-odata.umd.js.map +0 -1
- package/esm2015/lib/api.js +0 -297
- package/esm2015/lib/client.js +0 -221
- package/esm2015/lib/helper.js +0 -271
- package/esm2015/lib/index.js +0 -21
- package/esm2015/lib/models/collection.js +0 -687
- package/esm2015/lib/models/model.js +0 -423
- package/esm2015/lib/models/options.js +0 -909
- package/esm2015/lib/options.js +0 -31
- package/esm2015/lib/parsers/callable.js +0 -107
- package/esm2015/lib/parsers/edm.js +0 -192
- package/esm2015/lib/parsers/enum-type.js +0 -102
- package/esm2015/lib/parsers/index.js +0 -5
- package/esm2015/lib/parsers/structured-type.js +0 -389
- 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 -149
- package/esm2015/lib/resources/resource.js +0 -337
- package/esm2015/lib/resources/responses/annotations.js +0 -121
- package/esm2015/lib/resources/responses/metadata.js +0 -548
- package/esm2015/lib/resources/types/action.js +0 -180
- package/esm2015/lib/resources/types/batch.js +0 -288
- package/esm2015/lib/resources/types/count.js +0 -55
- package/esm2015/lib/resources/types/entity-set.js +0 -169
- package/esm2015/lib/resources/types/entity.js +0 -170
- package/esm2015/lib/resources/types/function.js +0 -205
- package/esm2015/lib/resources/types/media.js +0 -47
- package/esm2015/lib/resources/types/metadata.js +0 -36
- package/esm2015/lib/resources/types/navigation-property.js +0 -232
- package/esm2015/lib/resources/types/options.js +0 -2
- package/esm2015/lib/resources/types/property.js +0 -195
- package/esm2015/lib/resources/types/reference.js +0 -50
- package/esm2015/lib/resources/types/singleton.js +0 -159
- package/esm2015/lib/resources/types/value.js +0 -30
- package/esm2015/lib/schema/annotation.js +0 -7
- package/esm2015/lib/schema/callable.js +0 -82
- package/esm2015/lib/schema/entity-container.js +0 -22
- package/esm2015/lib/schema/entity-set.js +0 -33
- package/esm2015/lib/schema/enum-type.js +0 -101
- package/esm2015/lib/schema/schema.js +0 -60
- package/esm2015/lib/schema/structured-type.js +0 -148
- 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 -89
- package/esm2015/lib/utils/index.js +0 -9
- package/esm2015/lib/utils/objects.js +0 -139
- package/esm2015/lib/utils/odata.js +0 -21
- package/esm2015/lib/utils/strings.js +0 -13
- 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
package/esm2015/lib/api.js
DELETED
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import { HttpEventType } from '@angular/common/http';
|
|
2
|
-
import { NEVER } from 'rxjs';
|
|
3
|
-
import { catchError, map } from 'rxjs/operators';
|
|
4
|
-
import { NONE_PARSER, PathSegmentNames, } from './types';
|
|
5
|
-
import { EDM_PARSERS } from './parsers/index';
|
|
6
|
-
import { ODataSchema, } from './schema/index';
|
|
7
|
-
import { ODataModel, ODataCollection } from './models/index';
|
|
8
|
-
import { ODataBatchResource, ODataMetadataResource, ODataEntitySetResource, ODataSingletonResource, ODataFunctionResource, ODataActionResource, ODataEntityResource, ODataPathSegments, ODataQueryOptions, ODataResponse, ODataNavigationPropertyResource, } from './resources/index';
|
|
9
|
-
import { ODataInMemoryCache } from './cache/index';
|
|
10
|
-
import { ODataApiOptions } from './options';
|
|
11
|
-
import { DEFAULT_VERSION } from './constants';
|
|
12
|
-
/**
|
|
13
|
-
* Api abstraction for consuming OData services.
|
|
14
|
-
*/
|
|
15
|
-
export class ODataApi {
|
|
16
|
-
constructor(config) {
|
|
17
|
-
//# region Find by Type
|
|
18
|
-
// Memoize
|
|
19
|
-
this.memo = {
|
|
20
|
-
forType: {
|
|
21
|
-
enum: {},
|
|
22
|
-
structured: {},
|
|
23
|
-
callable: {},
|
|
24
|
-
entitySet: {},
|
|
25
|
-
parser: {},
|
|
26
|
-
options: {},
|
|
27
|
-
},
|
|
28
|
-
byName: { enum: {}, structured: {}, callable: {}, entitySet: {} },
|
|
29
|
-
};
|
|
30
|
-
this.serviceRootUrl = config.serviceRootUrl;
|
|
31
|
-
if (this.serviceRootUrl.indexOf('?') != -1)
|
|
32
|
-
throw new Error("The 'serviceRootUrl' should not contain query string. Please use 'params' to add extra parameters");
|
|
33
|
-
if (!this.serviceRootUrl.endsWith('/'))
|
|
34
|
-
this.serviceRootUrl += '/';
|
|
35
|
-
this.metadataUrl = `${this.serviceRootUrl}$metadata`;
|
|
36
|
-
this.name = config.name;
|
|
37
|
-
this.version = config.version || DEFAULT_VERSION;
|
|
38
|
-
this.default = config.default || false;
|
|
39
|
-
this.creation = config.creation || new Date();
|
|
40
|
-
this.options = new ODataApiOptions(Object.assign({ version: this.version }, config.options || {}));
|
|
41
|
-
this.cache = config.cache || new ODataInMemoryCache();
|
|
42
|
-
this.errorHandler = config.errorHandler;
|
|
43
|
-
this.parsers = config.parsers || EDM_PARSERS;
|
|
44
|
-
this.schemas = (config.schemas || []).map((schema) => new ODataSchema(schema, this));
|
|
45
|
-
}
|
|
46
|
-
configure(settings = {}) {
|
|
47
|
-
this.requester = settings.requester;
|
|
48
|
-
this.schemas.forEach((schema) => {
|
|
49
|
-
schema.configure({
|
|
50
|
-
parserForType: (type) => this.parserForType(type),
|
|
51
|
-
findOptionsForType: (type) => this.findOptionsForType(type),
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
fromJSON(json) {
|
|
56
|
-
var _a, _b;
|
|
57
|
-
const segments = new ODataPathSegments(json.segments);
|
|
58
|
-
const query = new ODataQueryOptions(json.options);
|
|
59
|
-
switch ((_a = segments.last()) === null || _a === void 0 ? void 0 : _a.name) {
|
|
60
|
-
case PathSegmentNames.entitySet:
|
|
61
|
-
if ((_b = segments.last()) === null || _b === void 0 ? void 0 : _b.hasKey()) {
|
|
62
|
-
return new ODataEntityResource(this, segments, query);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return new ODataEntitySetResource(this, segments, query);
|
|
66
|
-
}
|
|
67
|
-
case PathSegmentNames.navigationProperty:
|
|
68
|
-
return new ODataNavigationPropertyResource(this, segments, query);
|
|
69
|
-
case PathSegmentNames.singleton:
|
|
70
|
-
return new ODataSingletonResource(this, segments, query);
|
|
71
|
-
case PathSegmentNames.action:
|
|
72
|
-
return new ODataActionResource(this, segments, query);
|
|
73
|
-
case PathSegmentNames.function:
|
|
74
|
-
return new ODataFunctionResource(this, segments, query);
|
|
75
|
-
}
|
|
76
|
-
throw new Error('No Resource for json');
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Build a metadata resource.
|
|
80
|
-
* @returns ODataMetadataResource
|
|
81
|
-
*/
|
|
82
|
-
metadata() {
|
|
83
|
-
return ODataMetadataResource.factory(this);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Build a batch resource.
|
|
87
|
-
* @returns ODataBatchResource
|
|
88
|
-
*/
|
|
89
|
-
batch() {
|
|
90
|
-
return ODataBatchResource.factory(this);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Build a singleton resource.
|
|
94
|
-
* @param name Name of the singleton
|
|
95
|
-
* @returns
|
|
96
|
-
*/
|
|
97
|
-
singleton(name) {
|
|
98
|
-
var _a;
|
|
99
|
-
const type = (_a = this.findEntitySetByName(name)) === null || _a === void 0 ? void 0 : _a.entityType;
|
|
100
|
-
return ODataSingletonResource.factory(this, name, type, new ODataPathSegments(), new ODataQueryOptions());
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Build an entity set resource.
|
|
104
|
-
* @param name Name of the entity set
|
|
105
|
-
* @returns
|
|
106
|
-
*/
|
|
107
|
-
entitySet(name) {
|
|
108
|
-
var _a;
|
|
109
|
-
const type = (_a = this.findEntitySetByName(name)) === null || _a === void 0 ? void 0 : _a.entityType;
|
|
110
|
-
return ODataEntitySetResource.factory(this, name, type, new ODataPathSegments(), new ODataQueryOptions());
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Unbound Action
|
|
114
|
-
* @param {string} name?
|
|
115
|
-
* @returns ODataActionResource
|
|
116
|
-
*/
|
|
117
|
-
action(name) {
|
|
118
|
-
let type;
|
|
119
|
-
const callable = this.findCallableForType(name);
|
|
120
|
-
if (callable !== undefined) {
|
|
121
|
-
name = callable.path();
|
|
122
|
-
type = callable.type();
|
|
123
|
-
}
|
|
124
|
-
return ODataActionResource.factory(this, name, type, new ODataPathSegments(), new ODataQueryOptions());
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Unbound Function
|
|
128
|
-
* @param {string} name?
|
|
129
|
-
* @returns ODataFunctionResource
|
|
130
|
-
*/
|
|
131
|
-
function(name) {
|
|
132
|
-
let type;
|
|
133
|
-
const callable = this.findCallableForType(name);
|
|
134
|
-
if (callable !== undefined) {
|
|
135
|
-
name = callable.path();
|
|
136
|
-
type = callable.type();
|
|
137
|
-
}
|
|
138
|
-
return ODataFunctionResource.factory(this, name, type, new ODataPathSegments(), new ODataQueryOptions());
|
|
139
|
-
}
|
|
140
|
-
request(req) {
|
|
141
|
-
let res$ = this.requester !== undefined ? this.requester(req) : NEVER;
|
|
142
|
-
res$ = res$.pipe(map((res) => res.type === HttpEventType.Response
|
|
143
|
-
? ODataResponse.fromHttpResponse(req, res)
|
|
144
|
-
: res));
|
|
145
|
-
if (this.errorHandler !== undefined)
|
|
146
|
-
res$ = res$.pipe(catchError(this.errorHandler));
|
|
147
|
-
return req.observe === 'response'
|
|
148
|
-
? this.cache.handleRequest(req, res$)
|
|
149
|
-
: res$;
|
|
150
|
-
}
|
|
151
|
-
findSchemaForType(type) {
|
|
152
|
-
const schemas = this.schemas.filter((s) => s.isNamespaceOf(type));
|
|
153
|
-
if (schemas.length > 1)
|
|
154
|
-
return schemas
|
|
155
|
-
.sort((s1, s2) => s1.namespace.length - s2.namespace.length)
|
|
156
|
-
.pop();
|
|
157
|
-
if (schemas.length === 1)
|
|
158
|
-
return schemas[0];
|
|
159
|
-
return undefined;
|
|
160
|
-
}
|
|
161
|
-
findEnumTypeForType(type) {
|
|
162
|
-
var _a;
|
|
163
|
-
if (!(type in this.memo.forType.enum))
|
|
164
|
-
this.memo.forType.enum[type] =
|
|
165
|
-
(_a = this.findSchemaForType(type)) === null || _a === void 0 ? void 0 : _a.findEnumTypeForType(type);
|
|
166
|
-
return this.memo.forType.enum[type];
|
|
167
|
-
}
|
|
168
|
-
findStructuredTypeForType(type) {
|
|
169
|
-
var _a;
|
|
170
|
-
if (!(type in this.memo.forType.structured))
|
|
171
|
-
this.memo.forType.structured[type] =
|
|
172
|
-
(_a = this.findSchemaForType(type)) === null || _a === void 0 ? void 0 : _a.findStructuredTypeForType(type);
|
|
173
|
-
return this.memo.forType.structured[type];
|
|
174
|
-
}
|
|
175
|
-
findCallableForType(type, bindingType) {
|
|
176
|
-
var _a;
|
|
177
|
-
const key = bindingType !== undefined ? `${bindingType}/${type}` : type;
|
|
178
|
-
if (!(key in this.memo.forType.callable))
|
|
179
|
-
this.memo.forType.callable[key] = (_a = this.findSchemaForType(type)) === null || _a === void 0 ? void 0 : _a.findCallableForType(type, bindingType);
|
|
180
|
-
return this.memo.forType.callable[key];
|
|
181
|
-
}
|
|
182
|
-
findEntitySetForType(type) {
|
|
183
|
-
var _a;
|
|
184
|
-
if (!(type in this.memo.forType.entitySet))
|
|
185
|
-
this.memo.forType.entitySet[type] =
|
|
186
|
-
(_a = this.findSchemaForType(type)) === null || _a === void 0 ? void 0 : _a.findEntitySetForType(type);
|
|
187
|
-
return this.memo.forType.entitySet[type];
|
|
188
|
-
}
|
|
189
|
-
findModelForType(type) {
|
|
190
|
-
var _a;
|
|
191
|
-
return (_a = this.findStructuredTypeForType(type)) === null || _a === void 0 ? void 0 : _a.model;
|
|
192
|
-
}
|
|
193
|
-
modelForType(type) {
|
|
194
|
-
return (type && this.findModelForType(type)) || ODataModel;
|
|
195
|
-
}
|
|
196
|
-
findCollectionForType(type) {
|
|
197
|
-
var _a;
|
|
198
|
-
return (_a = this.findStructuredTypeForType(type)) === null || _a === void 0 ? void 0 : _a.collection;
|
|
199
|
-
}
|
|
200
|
-
collectionForType(type) {
|
|
201
|
-
return (type && this.findCollectionForType(type)) || ODataCollection;
|
|
202
|
-
}
|
|
203
|
-
findServiceForType(type) {
|
|
204
|
-
var _a;
|
|
205
|
-
return (_a = this.findEntitySetForType(type)) === null || _a === void 0 ? void 0 : _a.service;
|
|
206
|
-
}
|
|
207
|
-
findEntitySetForEntityType(entityType) {
|
|
208
|
-
if (!(entityType in this.memo.forType.entitySet))
|
|
209
|
-
this.memo.forType.entitySet[entityType] = this.schemas
|
|
210
|
-
.reduce((acc, schema) => [...acc, ...schema.entitySets], [])
|
|
211
|
-
.find((e) => e.entityType === entityType);
|
|
212
|
-
return this.memo.forType.entitySet[entityType];
|
|
213
|
-
}
|
|
214
|
-
findServiceForEntityType(entityType) {
|
|
215
|
-
var _a;
|
|
216
|
-
return (_a = this.findEntitySetForEntityType(entityType)) === null || _a === void 0 ? void 0 : _a.service;
|
|
217
|
-
}
|
|
218
|
-
findEnumTypeByName(name) {
|
|
219
|
-
if (!(name in this.memo.byName.enum))
|
|
220
|
-
this.memo.byName.enum[name] = this.schemas
|
|
221
|
-
.reduce((acc, schema) => [...acc, ...schema.enums], [])
|
|
222
|
-
.find((e) => e.name === name);
|
|
223
|
-
return this.memo.byName.enum[name];
|
|
224
|
-
}
|
|
225
|
-
findStructuredTypeByName(name) {
|
|
226
|
-
if (!(name in this.memo.byName.structured))
|
|
227
|
-
this.memo.byName.structured[name] = this.schemas
|
|
228
|
-
.reduce((acc, schema) => [...acc, ...schema.entities], [])
|
|
229
|
-
.find((e) => e.name === name);
|
|
230
|
-
return this.memo.byName.structured[name];
|
|
231
|
-
}
|
|
232
|
-
findCallableByName(name, bindingType) {
|
|
233
|
-
const key = bindingType !== undefined ? `${bindingType}/${name}` : name;
|
|
234
|
-
if (!(key in this.memo.byName.callable))
|
|
235
|
-
this.memo.byName.callable[key] = this.schemas
|
|
236
|
-
.reduce((acc, schema) => [...acc, ...schema.callables], [])
|
|
237
|
-
.find((c) => {
|
|
238
|
-
var _a;
|
|
239
|
-
return c.name === name &&
|
|
240
|
-
(bindingType === undefined || ((_a = c.binding()) === null || _a === void 0 ? void 0 : _a.type) === bindingType);
|
|
241
|
-
});
|
|
242
|
-
return this.memo.byName.callable[key];
|
|
243
|
-
}
|
|
244
|
-
findEntitySetByName(name) {
|
|
245
|
-
if (!(name in this.memo.byName.entitySet))
|
|
246
|
-
this.memo.byName.entitySet[name] = this.schemas
|
|
247
|
-
.reduce((acc, schema) => [...acc, ...schema.entitySets], [])
|
|
248
|
-
.find((e) => e.name === name);
|
|
249
|
-
return this.memo.byName.entitySet[name];
|
|
250
|
-
}
|
|
251
|
-
findModelByName(name) {
|
|
252
|
-
var _a;
|
|
253
|
-
return (_a = this.findStructuredTypeByName(name)) === null || _a === void 0 ? void 0 : _a.model;
|
|
254
|
-
}
|
|
255
|
-
findCollectionByName(name) {
|
|
256
|
-
var _a;
|
|
257
|
-
return (_a = this.findStructuredTypeByName(name)) === null || _a === void 0 ? void 0 : _a.collection;
|
|
258
|
-
}
|
|
259
|
-
findServiceByName(name) {
|
|
260
|
-
var _a;
|
|
261
|
-
return (_a = this.findEntitySetByName(name)) === null || _a === void 0 ? void 0 : _a.service;
|
|
262
|
-
}
|
|
263
|
-
parserForType(type, bindingType) {
|
|
264
|
-
const key = bindingType !== undefined ? `${bindingType}/${type}` : type;
|
|
265
|
-
if (!(key in this.memo.forType.parser)) {
|
|
266
|
-
if (type in this.parsers) {
|
|
267
|
-
// Edm, Base Parsers
|
|
268
|
-
this.memo.forType.parser[key] = this.parsers[type];
|
|
269
|
-
}
|
|
270
|
-
else if (!type.startsWith('Edm.')) {
|
|
271
|
-
// EnumType, ComplexType and EntityType Parsers
|
|
272
|
-
let value = this.findCallableForType(type, bindingType) ||
|
|
273
|
-
this.findEnumTypeForType(type) ||
|
|
274
|
-
this.findStructuredTypeForType(type);
|
|
275
|
-
this.memo.forType.parser[key] = value === null || value === void 0 ? void 0 : value.parser;
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
// None Parser
|
|
279
|
-
this.memo.forType.parser[key] = NONE_PARSER;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
return this.memo.forType.parser[key];
|
|
283
|
-
}
|
|
284
|
-
findOptionsForType(type) {
|
|
285
|
-
var _a;
|
|
286
|
-
// Strucutred Options
|
|
287
|
-
if (!(type in this.memo.forType.options)) {
|
|
288
|
-
let st = this.findStructuredTypeForType(type);
|
|
289
|
-
this.memo.forType.options[type] =
|
|
290
|
-
st !== undefined && st.model !== undefined && ((_a = st.model) === null || _a === void 0 ? void 0 : _a.meta) !== null
|
|
291
|
-
? st.model.meta
|
|
292
|
-
: undefined;
|
|
293
|
-
}
|
|
294
|
-
return this.memo.forType.options[type];
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFHTCxXQUFXLEVBRVgsZ0JBQWdCLEdBQ2pCLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsV0FBVyxHQUtaLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixpQkFBaUIsRUFFakIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYiwrQkFBK0IsR0FFaEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQWMsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzlDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFtQm5CLFlBQVksTUFBaUI7UUF5TDdCLHVCQUF1QjtRQUN2QixVQUFVO1FBQ0YsU0FBSSxHQWVSO1lBQ0YsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxFQUFFO2dCQUNSLFVBQVUsRUFB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SHR0cEV2ZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE5FVkVSLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEFwaUNvbmZpZyxcbiAgQXBpT3B0aW9ucyxcbiAgTk9ORV9QQVJTRVIsXG4gIFBhcnNlcixcbiAgUGF0aFNlZ21lbnROYW1lcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBFRE1fUEFSU0VSUyB9IGZyb20gJy4vcGFyc2Vycy9pbmRleCc7XG5pbXBvcnQge1xuICBPRGF0YVNjaGVtYSxcbiAgT0RhdGFFbnVtVHlwZSxcbiAgT0RhdGFDYWxsYWJsZSxcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhU3RydWN0dXJlZFR5cGUsXG59IGZyb20gJy4vc2NoZW1hL2luZGV4JztcbmltcG9ydCB7IE9EYXRhTW9kZWwsIE9EYXRhQ29sbGVjdGlvbiwgT0RhdGFNb2RlbE9wdGlvbnMgfSBmcm9tICcuL21vZGVscy9pbmRleCc7XG5pbXBvcnQge1xuICBPRGF0YUJhdGNoUmVzb3VyY2UsXG4gIE9EYXRhTWV0YWRhdGFSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSxcbiAgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSxcbiAgT0RhdGFGdW5jdGlvblJlc291cmNlLFxuICBPRGF0YUFjdGlvblJlc291cmNlLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YVBhdGhTZWdtZW50cyxcbiAgT0RhdGFTZWdtZW50LFxuICBPRGF0YVF1ZXJ5T3B0aW9ucyxcbiAgT0RhdGFSZXNwb25zZSxcbiAgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFSZXF1ZXN0LFxufSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQgeyBPRGF0YUNhY2hlLCBPRGF0YUluTWVtb3J5Q2FjaGUgfSBmcm9tICcuL2NhY2hlL2luZGV4JztcbmltcG9ydCB7IE9EYXRhQXBpT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2VudGl0eSc7XG5cbi8qKlxuICogQXBpIGFic3RyYWN0aW9uIGZvciBjb25zdW1pbmcgT0RhdGEgc2VydmljZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBPRGF0YUFwaSB7XG4gIHJlcXVlc3Rlcj86IChyZXF1ZXN0OiBPRGF0YVJlcXVlc3Q8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICBzZXJ2aWNlUm9vdFVybDogc3RyaW5nO1xuICBtZXRhZGF0YVVybDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRlZmF1bHQ6IGJvb2xlYW47XG4gIGNyZWF0aW9uOiBEYXRlO1xuICAvLyBPcHRpb25zXG4gIG9wdGlvbnM6IE9EYXRhQXBpT3B0aW9ucztcbiAgLy8gQ2FjaGVcbiAgY2FjaGUhOiBPRGF0YUNhY2hlO1xuICAvLyBFcnJvciBIYW5kbGVyXG4gIGVycm9ySGFuZGxlcj86IChlcnJvcjogYW55LCBjYXVnaHQ6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxuZXZlcj47XG4gIC8vIEJhc2UgUGFyc2Vyc1xuICBwYXJzZXJzOiB7IFt0eXBlOiBzdHJpbmddOiBQYXJzZXI8YW55PiB9O1xuICAvLyBTY2hlbWFzXG4gIHNjaGVtYXM6IE9EYXRhU2NoZW1hW107XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBcGlDb25maWcpIHtcbiAgICB0aGlzLnNlcnZpY2VSb290VXJsID0gY29uZmlnLnNlcnZpY2VSb290VXJsO1xuICAgIGlmICh0aGlzLnNlcnZpY2VSb290VXJsLmluZGV4T2YoJz8nKSAhPSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgJ3NlcnZpY2VSb290VXJsJyBzaG91bGQgbm90IGNvbnRhaW4gcXVlcnkgc3RyaW5nLiBQbGVhc2UgdXNlICdwYXJhbXMnIHRvIGFkZCBleHRyYSBwYXJhbWV0ZXJzXCJcbiAgICAgICk7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2VSb290VXJsLmVuZHNXaXRoKCcvJykpIHRoaXMuc2VydmljZVJvb3RVcmwgKz0gJy8nO1xuICAgIHRoaXMubWV0YWRhdGFVcmwgPSBgJHt0aGlzLnNlcnZpY2VSb290VXJsfSRtZXRhZGF0YWA7XG4gICAgdGhpcy5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgdGhpcy52ZXJzaW9uID0gY29uZmlnLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OO1xuICAgIHRoaXMuZGVmYXVsdCA9IGNvbmZpZy5kZWZhdWx0IHx8IGZhbHNlO1xuICAgIHRoaXMuY3JlYXRpb24gPSBjb25maWcuY3JlYXRpb24gfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBuZXcgT0RhdGFBcGlPcHRpb25zKFxuICAgICAgT2JqZWN0LmFzc2lnbig8QXBpT3B0aW9ucz57IHZlcnNpb246IHRoaXMudmVyc2lvbiB9LCBjb25maWcub3B0aW9ucyB8fCB7fSlcbiAgICApO1xuXG4gICAgdGhpcy5jYWNoZSA9IChjb25maWcuY2FjaGUgYXMgT0RhdGFDYWNoZSkgfHwgbmV3IE9EYXRhSW5NZW1vcnlDYWNoZSgpO1xuICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gY29uZmlnLmVycm9ySGFuZGxlcjtcblxuICAgIHRoaXMucGFyc2VycyA9IGNvbmZpZy5wYXJzZXJzIHx8IEVETV9QQVJTRVJTO1xuXG4gICAgdGhpcy5zY2hlbWFzID0gKGNvbmZpZy5zY2hlbWFzIHx8IFtdKS5tYXAoXG4gICAgICAoc2NoZW1hKSA9PiBuZXcgT0RhdGFTY2hlbWEoc2NoZW1hLCB0aGlzKVxuICAgICk7XG4gIH1cblxuICBjb25maWd1cmUoXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHJlcXVlc3Rlcj86IChyZXF1ZXN0OiBPRGF0YVJlcXVlc3Q8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICAgIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLnJlcXVlc3RlciA9IHNldHRpbmdzLnJlcXVlc3RlcjtcbiAgICB0aGlzLnNjaGVtYXMuZm9yRWFjaCgoc2NoZW1hKSA9PiB7XG4gICAgICBzY2hlbWEuY29uZmlndXJlKHtcbiAgICAgICAgcGFyc2VyRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5wYXJzZXJGb3JUeXBlKHR5cGUpLFxuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmcm9tSlNPTjxQLCBSPihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KTogT0RhdGFBY3Rpb25SZXNvdXJjZTxQLCBSPiB8IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPjtcbiAgZnJvbUpTT048RT4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6XG4gICAgfCBPRGF0YUVudGl0eVJlc291cmNlPEU+XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPEU+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPEU+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPEU+O1xuICBmcm9tSlNPTihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBuZXcgT0RhdGFQYXRoU2VnbWVudHMoanNvbi5zZWdtZW50cyk7XG4gICAgY29uc3QgcXVlcnkgPSBuZXcgT0RhdGFRdWVyeU9wdGlvbnMoanNvbi5vcHRpb25zKTtcbiAgICBzd2l0Y2ggKHNlZ21lbnRzLmxhc3QoKT8ubmFtZSBhcyBQYXRoU2VnbWVudE5hbWVzKSB7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZW50aXR5U2V0OlxuICAgICAgICBpZiAoc2VnbWVudHMubGFzdCgpPy5oYXNLZXkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlSZXNvdXJjZSh0aGlzLCBzZWdtZW50cywgcXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSh0aGlzLCBzZWdtZW50cywgcXVlcnkpO1xuICAgICAgICB9XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMubmF2aWdhdGlvblByb3BlcnR5OlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UodGhpcywgc2VnbWVudHMsIHF1ZXJ5KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5zaW5nbGV0b246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSh0aGlzLCBzZWdtZW50cywgcXVlcnkpO1xuICAgICAgY2FzZSBQYXRoU2VnbWVudE5hbWVzLmFjdGlvbjpcbiAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUFjdGlvblJlc291cmNlKHRoaXMsIHNlZ21lbnRzLCBxdWVyeSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFGdW5jdGlvblJlc291cmNlKHRoaXMsIHNlZ21lbnRzLCBxdWVyeSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gUmVzb3VyY2UgZm9yIGpzb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIG1ldGFkYXRhIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YU1ldGFkYXRhUmVzb3VyY2VcbiAgICovXG4gIG1ldGFkYXRhKCk6IE9EYXRhTWV0YWRhdGFSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhTWV0YWRhdGFSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYmF0Y2ggcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIE9EYXRhQmF0Y2hSZXNvdXJjZVxuICAgKi9cbiAgYmF0Y2goKTogT0RhdGFCYXRjaFJlc291cmNlIHtcbiAgICByZXR1cm4gT0RhdGFCYXRjaFJlc291cmNlLmZhY3RvcnkodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBzaW5nbGV0b24gcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHNpbmdsZXRvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc2luZ2xldG9uPFQ+KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUobmFtZSk/LmVudGl0eVR5cGU7XG4gICAgcmV0dXJuIE9EYXRhU2luZ2xldG9uUmVzb3VyY2UuZmFjdG9yeTxUPihcbiAgICAgIHRoaXMsXG4gICAgICBuYW1lLFxuICAgICAgdHlwZSxcbiAgICAgIG5ldyBPRGF0YVBhdGhTZWdtZW50cygpLFxuICAgICAgbmV3IE9EYXRhUXVlcnlPcHRpb25zKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIGVudGl0eSBzZXQgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGVudGl0eSBzZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0eVNldDxUPihuYW1lOiBzdHJpbmcpOiBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+IHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kRW50aXR5U2V0QnlOYW1lKG5hbWUpPy5lbnRpdHlUeXBlO1xuICAgIHJldHVybiBPRGF0YUVudGl0eVNldFJlc291cmNlLmZhY3Rvcnk8VD4oXG4gICAgICB0aGlzLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGUsXG4gICAgICBuZXcgT0RhdGFQYXRoU2VnbWVudHMoKSxcbiAgICAgIG5ldyBPRGF0YVF1ZXJ5T3B0aW9ucygpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJvdW5kIEFjdGlvblxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWU/XG4gICAqIEByZXR1cm5zIE9EYXRhQWN0aW9uUmVzb3VyY2VcbiAgICovXG4gIGFjdGlvbjxQLCBSPihuYW1lOiBzdHJpbmcpOiBPRGF0YUFjdGlvblJlc291cmNlPFAsIFI+IHtcbiAgICBsZXQgdHlwZTtcbiAgICBjb25zdCBjYWxsYWJsZSA9IHRoaXMuZmluZENhbGxhYmxlRm9yVHlwZShuYW1lKTtcbiAgICBpZiAoY2FsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZSA9IGNhbGxhYmxlLnBhdGgoKTtcbiAgICAgIHR5cGUgPSBjYWxsYWJsZS50eXBlKCk7XG4gICAgfVxuICAgIHJldHVybiBPRGF0YUFjdGlvblJlc291cmNlLmZhY3Rvcnk8UCwgUj4oXG4gICAgICB0aGlzLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGUsXG4gICAgICBuZXcgT0RhdGFQYXRoU2VnbWVudHMoKSxcbiAgICAgIG5ldyBPRGF0YVF1ZXJ5T3B0aW9ucygpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJvdW5kIEZ1bmN0aW9uXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZT9cbiAgICogQHJldHVybnMgT0RhdGFGdW5jdGlvblJlc291cmNlXG4gICAqL1xuICBmdW5jdGlvbjxQLCBSPihuYW1lOiBzdHJpbmcpOiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj4ge1xuICAgIGxldCB0eXBlO1xuICAgIGNvbnN0IGNhbGxhYmxlID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlKG5hbWUpO1xuICAgIGlmIChjYWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lID0gY2FsbGFibGUucGF0aCgpO1xuICAgICAgdHlwZSA9IGNhbGxhYmxlLnR5cGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIE9EYXRhRnVuY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KFxuICAgICAgdGhpcyxcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgbmV3IE9EYXRhUGF0aFNlZ21lbnRzKCksXG4gICAgICBuZXcgT0RhdGFRdWVyeU9wdGlvbnMoKVxuICAgICk7XG4gIH1cblxuICByZXF1ZXN0KHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCByZXMkID0gdGhpcy5yZXF1ZXN0ZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMucmVxdWVzdGVyKHJlcSkgOiBORVZFUjtcbiAgICByZXMkID0gcmVzJC5waXBlKFxuICAgICAgbWFwKChyZXM6IEh0dHBFdmVudDxhbnk+KSA9PlxuICAgICAgICByZXMudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZVxuICAgICAgICAgID8gT0RhdGFSZXNwb25zZS5mcm9tSHR0cFJlc3BvbnNlPGFueT4ocmVxLCByZXMpXG4gICAgICAgICAgOiByZXNcbiAgICAgIClcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyICE9PSB1bmRlZmluZWQpXG4gICAgICByZXMkID0gcmVzJC5waXBlKGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXIpKTtcblxuICAgIHJldHVybiByZXEub2JzZXJ2ZSA9PT0gJ3Jlc3BvbnNlJ1xuICAgICAgPyB0aGlzLmNhY2hlLmhhbmRsZVJlcXVlc3QocmVxLCByZXMkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgLy8jIHJlZ2lvbiBGaW5kIGJ5IFR5cGVcbiAgLy8gTWVtb2l6ZVxuICBwcml2YXRlIG1lbW86IHtcbiAgICBmb3JUeXBlOiB7XG4gICAgICBlbnVtOiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIHN0cnVjdHVyZWQ6IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhU3RydWN0dXJlZFR5cGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgY2FsbGFibGU6IHsgW2tleTogc3RyaW5nXTogT0RhdGFDYWxsYWJsZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBlbnRpdHlTZXQ6IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkIH07XG4gICAgICBwYXJzZXI6IHsgW3R5cGU6IHN0cmluZ106IFBhcnNlcjxhbnk+IH07XG4gICAgICBvcHRpb25zOiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgfTtcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgc3RydWN0dXJlZDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBjYWxsYWJsZTogeyBba2V5OiBzdHJpbmddOiBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGVudGl0eVNldDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQgfTtcbiAgICB9O1xuICB9ID0ge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IHt9LFxuICAgICAgc3RydWN0dXJlZDoge30sXG4gICAgICBjYWxsYWJsZToge30sXG4gICAgICBlbnRpdHlTZXQ6IHt9LFxuICAgICAgcGFyc2VyOiB7fSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgIH0sXG4gICAgYnlOYW1lOiB7IGVudW06IHt9LCBzdHJ1Y3R1cmVkOiB7fSwgY2FsbGFibGU6IHt9LCBlbnRpdHlTZXQ6IHt9IH0sXG4gIH07XG5cbiAgcHJpdmF0ZSBmaW5kU2NoZW1hRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzY2hlbWFzID0gdGhpcy5zY2hlbWFzLmZpbHRlcigocykgPT4gcy5pc05hbWVzcGFjZU9mKHR5cGUpKTtcbiAgICBpZiAoc2NoZW1hcy5sZW5ndGggPiAxKVxuICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgLnNvcnQoKHMxLCBzMikgPT4gczEubmFtZXNwYWNlLmxlbmd0aCAtIHMyLm5hbWVzcGFjZS5sZW5ndGgpXG4gICAgICAgIC5wb3AoKTtcbiAgICBpZiAoc2NoZW1hcy5sZW5ndGggPT09IDEpIHJldHVybiBzY2hlbWFzWzBdO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoISh0eXBlIGluIHRoaXMubWVtby5mb3JUeXBlLmVudW0pKVxuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuZW51bVt0eXBlXSA9XG4gICAgICAgIHRoaXMuZmluZFNjaGVtYUZvclR5cGUodHlwZSk/LmZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudW1bdHlwZV0gYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZCkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkW3R5cGVdID1cbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZFt0eXBlXSBhc1xuICAgICAgfCBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5tZW1vLmZvclR5cGUuY2FsbGFibGUpKVxuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuY2FsbGFibGVba2V5XSA9IHRoaXMuZmluZFNjaGVtYUZvclR5cGUoXG4gICAgICAgIHR5cGVcbiAgICAgICk/LmZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZSwgYmluZGluZ1R5cGUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZVtrZXldIGFzIE9EYXRhQ2FsbGFibGU8VD4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCEodHlwZSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQpKVxuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0W3R5cGVdID1cbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudGl0eVNldEZvclR5cGUodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFt0eXBlXSBhcyBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kTW9kZWxGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKT8ubW9kZWwgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhTW9kZWxcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIG1vZGVsRm9yVHlwZSh0eXBlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuICh0eXBlICYmIHRoaXMuZmluZE1vZGVsRm9yVHlwZSh0eXBlKSkgfHwgT0RhdGFNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpPy5jb2xsZWN0aW9uIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUNvbGxlY3Rpb25cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3Rpb25Gb3JUeXBlKHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKHR5cGUgJiYgdGhpcy5maW5kQ29sbGVjdGlvbkZvclR5cGUodHlwZSkpIHx8IE9EYXRhQ29sbGVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU2VydmljZUZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEVudGl0eVNldEZvclR5cGUodHlwZSk/LnNlcnZpY2UgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhRW50aXR5U2VydmljZVxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEZvckVudGl0eVR5cGUoZW50aXR5VHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCEoZW50aXR5VHlwZSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQpKVxuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0W2VudGl0eVR5cGVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgICAgPE9EYXRhRW50aXR5U2V0W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5lbnRpdHlUeXBlID09PSBlbnRpdHlUeXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0W2VudGl0eVR5cGVdIGFzXG4gICAgICB8IE9EYXRhRW50aXR5U2V0XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU2VydmljZUZvckVudGl0eVR5cGUoZW50aXR5VHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEVudGl0eVNldEZvckVudGl0eVR5cGUoZW50aXR5VHlwZSk/LnNlcnZpY2UgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhRW50aXR5U2VydmljZVxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudW1UeXBlQnlOYW1lPFQ+KG5hbWU6IHN0cmluZykge1xuICAgIGlmICghKG5hbWUgaW4gdGhpcy5tZW1vLmJ5TmFtZS5lbnVtKSlcbiAgICAgIHRoaXMubWVtby5ieU5hbWUuZW51bVtuYW1lXSA9IHRoaXMuc2NoZW1hc1xuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudW1zXSxcbiAgICAgICAgICA8T0RhdGFFbnVtVHlwZTxUPltdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuZW51bVtuYW1lXSBhcyBPRGF0YUVudW1UeXBlPFQ+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuc3RydWN0dXJlZCkpXG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWRbbmFtZV0gPSB0aGlzLnNjaGVtYXNcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnRpdGllc10sXG4gICAgICAgICAgPE9EYXRhU3RydWN0dXJlZFR5cGU8VD5bXT5bXVxuICAgICAgICApXG4gICAgICAgIC5maW5kKChlKSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWRbbmFtZV0gYXNcbiAgICAgIHwgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPlxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZENhbGxhYmxlQnlOYW1lPFQ+KG5hbWU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7bmFtZX1gIDogbmFtZTtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZSkpXG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLmNhbGxhYmxlW2tleV0gPSB0aGlzLnNjaGVtYXNcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5jYWxsYWJsZXNdLFxuICAgICAgICAgIDxPRGF0YUNhbGxhYmxlPFQ+W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZChcbiAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgIGMubmFtZSA9PT0gbmFtZSAmJlxuICAgICAgICAgICAgKGJpbmRpbmdUeXBlID09PSB1bmRlZmluZWQgfHwgYy5iaW5kaW5nKCk/LnR5cGUgPT09IGJpbmRpbmdUeXBlKVxuICAgICAgICApO1xuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmNhbGxhYmxlW2tleV0gYXMgT0RhdGFDYWxsYWJsZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0QnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghKG5hbWUgaW4gdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXQpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXRbbmFtZV0gPSB0aGlzLnNjaGVtYXNcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnRpdHlTZXRzXSxcbiAgICAgICAgICA8T0RhdGFFbnRpdHlTZXRbXT5bXVxuICAgICAgICApXG4gICAgICAgIC5maW5kKChlKSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldFtuYW1lXSBhcyBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kTW9kZWxCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlQnlOYW1lPGFueT4obmFtZSk/Lm1vZGVsIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YU1vZGVsXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ29sbGVjdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8YW55PihuYW1lKT8uY29sbGVjdGlvbiBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU2VydmljZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRW50aXR5U2V0QnlOYW1lKG5hbWUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHBhcnNlckZvclR5cGU8VD4odHlwZTogc3RyaW5nLCBiaW5kaW5nVHlwZT86IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgPyBgJHtiaW5kaW5nVHlwZX0vJHt0eXBlfWAgOiB0eXBlO1xuICAgIGlmICghKGtleSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5wYXJzZXIpKSB7XG4gICAgICBpZiAodHlwZSBpbiB0aGlzLnBhcnNlcnMpIHtcbiAgICAgICAgLy8gRWRtLCBCYXNlIFBhcnNlcnNcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyW2tleV0gPSB0aGlzLnBhcnNlcnNbdHlwZV0gYXMgUGFyc2VyPFQ+O1xuICAgICAgfSBlbHNlIGlmICghdHlwZS5zdGFydHNXaXRoKCdFZG0uJykpIHtcbiAgICAgICAgLy8gRW51bVR5cGUsIENvbXBsZXhUeXBlIGFuZCBFbnRpdHlUeXBlIFBhcnNlcnNcbiAgICAgICAgbGV0IHZhbHVlID1cbiAgICAgICAgICB0aGlzLmZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZSwgYmluZGluZ1R5cGUpIHx8XG4gICAgICAgICAgdGhpcy5maW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGUpIHx8XG4gICAgICAgICAgdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgICAgICB0aGlzLm1lbW8uZm9yVHlwZS5wYXJzZXJba2V5XSA9IHZhbHVlPy5wYXJzZXIgYXMgUGFyc2VyPFQ+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm9uZSBQYXJzZXJcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyW2tleV0gPSBOT05FX1BBUlNFUjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldIGFzIFBhcnNlcjxUPjtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kT3B0aW9uc0ZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgLy8gU3RydWN1dHJlZCBPcHRpb25zXG4gICAgaWYgKCEodHlwZSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5vcHRpb25zKSkge1xuICAgICAgbGV0IHN0ID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgICAgdGhpcy5tZW1vLmZvclR5cGUub3B0aW9uc1t0eXBlXSA9XG4gICAgICAgIHN0ICE9PSB1bmRlZmluZWQgJiYgc3QubW9kZWwgIT09IHVuZGVmaW5lZCAmJiBzdC5tb2RlbD8ubWV0YSAhPT0gbnVsbFxuICAgICAgICAgID8gc3QubW9kZWwubWV0YVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUub3B0aW9uc1t0eXBlXSBhcyBPRGF0YU1vZGVsT3B0aW9uczxUPiB8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|