angular-odata 0.122.0 → 0.124.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/esm2022/lib/api.mjs +373 -0
- package/esm2022/lib/cache/cache.mjs +175 -0
- package/{esm2020 → esm2022}/lib/cache/storage.mjs +1 -1
- package/esm2022/lib/client.mjs +252 -0
- package/{esm2020 → esm2022}/lib/helper.mjs +1 -1
- package/{esm2020 → esm2022}/lib/loaders.mjs +1 -1
- package/esm2022/lib/models/collection.mjs +865 -0
- package/esm2022/lib/models/model.mjs +535 -0
- package/esm2022/lib/models/options.mjs +1117 -0
- package/{esm2020 → esm2022}/lib/module.mjs +5 -5
- package/esm2022/lib/resources/path/segments.mjs +124 -0
- package/esm2022/lib/resources/query/builder.mjs +624 -0
- package/esm2022/lib/resources/query/expressions/base.mjs +20 -0
- package/esm2022/lib/resources/query/expressions/compute.mjs +39 -0
- package/esm2022/lib/resources/query/expressions/count.mjs +99 -0
- package/esm2022/lib/resources/query/expressions/expand.mjs +125 -0
- package/esm2022/lib/resources/query/expressions/filter.mjs +161 -0
- package/esm2022/lib/resources/query/expressions/orderby.mjs +56 -0
- package/esm2022/lib/resources/query/expressions/search.mjs +122 -0
- package/esm2022/lib/resources/query/expressions/select.mjs +31 -0
- package/esm2022/lib/resources/query/expressions/syntax.mjs +444 -0
- package/{esm2020 → esm2022}/lib/resources/query/handlers.mjs +1 -1
- package/esm2022/lib/resources/query/options.mjs +115 -0
- package/{esm2020 → esm2022}/lib/resources/request.mjs +1 -1
- package/esm2022/lib/resources/resource.mjs +257 -0
- package/{esm2020 → esm2022}/lib/resources/responses/annotations.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +33 -0
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-container.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-enum-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-function-action.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-reference.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-schema.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structural-property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structured-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-type-definition.mjs +1 -1
- package/esm2022/lib/resources/responses/metadata.mjs +547 -0
- package/{esm2020 → esm2022}/lib/resources/responses/response.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/action.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/batch.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/count.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/entity.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/function.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/media.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/navigation-property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/reference.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/value.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/annotation.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/callable.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/element.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/entity-container.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/enum-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/parsers/callable.mjs +1 -1
- package/esm2022/lib/schema/parsers/edm.mjs +99 -0
- package/{esm2020 → esm2022}/lib/schema/parsers/enum-type.mjs +2 -2
- package/esm2022/lib/schema/parsers/structured-type.mjs +502 -0
- package/{esm2020 → esm2022}/lib/schema/schema.mjs +1 -1
- package/esm2022/lib/schema/structured-type.mjs +207 -0
- package/esm2022/lib/services/base.mjs +29 -0
- package/{esm2020 → esm2022}/lib/services/entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/services/factory.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/types.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/arrays.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/durations.mjs +1 -1
- package/esm2022/lib/utils/enums.mjs +61 -0
- package/{esm2020 → esm2022}/lib/utils/http.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/objects.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/odata.mjs +1 -1
- package/esm2022/lib/utils/types.mjs +136 -0
- package/{fesm2020 → fesm2022}/angular-odata.mjs +544 -373
- package/fesm2022/angular-odata.mjs.map +1 -0
- package/lib/helper.d.ts +1 -1
- package/lib/models/model.d.ts +4 -2
- package/lib/models/options.d.ts +7 -8
- package/lib/resources/path/segments.d.ts +15 -6
- package/lib/resources/query/builder.d.ts +21 -20
- package/lib/resources/query/expressions/base.d.ts +6 -4
- package/lib/resources/query/expressions/compute.d.ts +10 -8
- package/lib/resources/query/expressions/count.d.ts +14 -11
- package/lib/resources/query/expressions/expand.d.ts +23 -19
- package/lib/resources/query/expressions/filter.d.ts +22 -20
- package/lib/resources/query/expressions/orderby.d.ts +12 -9
- package/lib/resources/query/expressions/search.d.ts +12 -9
- package/lib/resources/query/expressions/select.d.ts +9 -7
- package/lib/resources/query/expressions/syntax.d.ts +75 -71
- package/lib/resources/query/handlers.d.ts +2 -2
- package/lib/resources/query/options.d.ts +15 -6
- package/lib/resources/resource.d.ts +2 -2
- package/lib/resources/responses/types.d.ts +3 -3
- package/lib/resources/types/options.d.ts +7 -7
- package/lib/schema/parsers/structured-type.d.ts +8 -5
- package/lib/schema/structured-type.d.ts +2 -1
- package/lib/types.d.ts +15 -15
- package/lib/utils/durations.d.ts +1 -1
- package/lib/utils/enums.d.ts +3 -0
- package/lib/utils/types.d.ts +1 -0
- package/package.json +9 -15
- package/esm2020/lib/api.mjs +0 -373
- package/esm2020/lib/cache/cache.mjs +0 -173
- package/esm2020/lib/client.mjs +0 -252
- package/esm2020/lib/models/collection.mjs +0 -861
- package/esm2020/lib/models/model.mjs +0 -507
- package/esm2020/lib/models/options.mjs +0 -1110
- package/esm2020/lib/resources/path/segments.mjs +0 -124
- package/esm2020/lib/resources/query/builder.mjs +0 -588
- package/esm2020/lib/resources/query/expressions/base.mjs +0 -20
- package/esm2020/lib/resources/query/expressions/compute.mjs +0 -39
- package/esm2020/lib/resources/query/expressions/count.mjs +0 -89
- package/esm2020/lib/resources/query/expressions/expand.mjs +0 -115
- package/esm2020/lib/resources/query/expressions/filter.mjs +0 -161
- package/esm2020/lib/resources/query/expressions/orderby.mjs +0 -56
- package/esm2020/lib/resources/query/expressions/search.mjs +0 -122
- package/esm2020/lib/resources/query/expressions/select.mjs +0 -31
- package/esm2020/lib/resources/query/expressions/syntax.mjs +0 -409
- package/esm2020/lib/resources/query/options.mjs +0 -115
- package/esm2020/lib/resources/resource.mjs +0 -251
- package/esm2020/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
- package/esm2020/lib/resources/responses/metadata.mjs +0 -547
- package/esm2020/lib/schema/parsers/edm.mjs +0 -104
- package/esm2020/lib/schema/parsers/structured-type.mjs +0 -490
- package/esm2020/lib/schema/structured-type.mjs +0 -202
- package/esm2020/lib/services/base.mjs +0 -29
- package/esm2020/lib/utils/enums.mjs +0 -45
- package/esm2020/lib/utils/types.mjs +0 -133
- package/fesm2015/angular-odata.mjs +0 -11811
- package/fesm2015/angular-odata.mjs.map +0 -1
- package/fesm2020/angular-odata.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-odata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/memory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/handlers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/expressions/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/parsers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/entity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/arraybuffers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/dates.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/strings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/urls.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { PATH_SEPARATOR } from '../../constants';
|
|
2
|
-
import { PathSegment } from '../../types';
|
|
3
|
-
import { Objects } from '../../utils';
|
|
4
|
-
import { buildPathAndQuery, raw } from '../query';
|
|
5
|
-
import { SegmentHandler } from './handlers';
|
|
6
|
-
function pathSegmentsBuilder(segment, escape = false) {
|
|
7
|
-
if (segment.name === PathSegment.function) {
|
|
8
|
-
let [path, params] = segment.parameters
|
|
9
|
-
? buildPathAndQuery({
|
|
10
|
-
func: { [segment.path]: segment.parameters },
|
|
11
|
-
escape,
|
|
12
|
-
})
|
|
13
|
-
: buildPathAndQuery({ func: segment.path, escape });
|
|
14
|
-
if (path.startsWith(PATH_SEPARATOR)) {
|
|
15
|
-
path = path.slice(1);
|
|
16
|
-
}
|
|
17
|
-
return [path, params];
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
let key = segment.key;
|
|
21
|
-
// HACK: Check guid string
|
|
22
|
-
if (typeof key === 'string' &&
|
|
23
|
-
/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(key)) {
|
|
24
|
-
key = raw(key);
|
|
25
|
-
}
|
|
26
|
-
let [path, params] = key ? buildPathAndQuery({ key, escape }) : ['', {}];
|
|
27
|
-
return [segment.path + path, params];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export class ODataPathSegments {
|
|
31
|
-
constructor(segments) {
|
|
32
|
-
this._segments = segments || [];
|
|
33
|
-
}
|
|
34
|
-
pathAndParams(escape = false) {
|
|
35
|
-
const result = this._segments.reduce((acc, segment) => {
|
|
36
|
-
const [path, params] = pathSegmentsBuilder(segment, escape);
|
|
37
|
-
acc.paths.push(path);
|
|
38
|
-
acc.params = Object.assign(acc.params, params);
|
|
39
|
-
return acc;
|
|
40
|
-
}, { paths: [], params: {} });
|
|
41
|
-
return [result.paths.join(PATH_SEPARATOR), result.params];
|
|
42
|
-
}
|
|
43
|
-
types({ key = false } = {}) {
|
|
44
|
-
return this.segments({ key })
|
|
45
|
-
.map((s) => s.type())
|
|
46
|
-
.filter((t) => t !== undefined);
|
|
47
|
-
}
|
|
48
|
-
keys(values) {
|
|
49
|
-
const segments = this.segments({ key: true });
|
|
50
|
-
if (values !== undefined) {
|
|
51
|
-
segments.forEach((segment, index) => {
|
|
52
|
-
const key = values[index];
|
|
53
|
-
if (key === undefined) {
|
|
54
|
-
segment.clearKey();
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
segment.key(key);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
return segments.map((s) => s.key());
|
|
62
|
-
}
|
|
63
|
-
toString() {
|
|
64
|
-
const [path, params] = this.pathAndParams();
|
|
65
|
-
return (path +
|
|
66
|
-
Object.entries(params)
|
|
67
|
-
.filter(([, value]) => value)
|
|
68
|
-
.map(([key, value]) => `${key}=${value}`)
|
|
69
|
-
.join('&'));
|
|
70
|
-
}
|
|
71
|
-
toJSON() {
|
|
72
|
-
return this._segments.map((s) => {
|
|
73
|
-
let json = {
|
|
74
|
-
name: s.name,
|
|
75
|
-
path: s.path,
|
|
76
|
-
};
|
|
77
|
-
if (s.type !== undefined)
|
|
78
|
-
json.type = s.type;
|
|
79
|
-
if (s.key !== undefined)
|
|
80
|
-
json.key = s.key;
|
|
81
|
-
if (s.parameters !== undefined)
|
|
82
|
-
json.parameters = s.parameters;
|
|
83
|
-
return json;
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
clone() {
|
|
87
|
-
const segments = Objects.clone(this._segments);
|
|
88
|
-
return new ODataPathSegments(segments);
|
|
89
|
-
}
|
|
90
|
-
find(predicate) {
|
|
91
|
-
//Backward Find
|
|
92
|
-
return [...this._segments].reverse().find(predicate);
|
|
93
|
-
}
|
|
94
|
-
segments({ key = false } = {}) {
|
|
95
|
-
let segments = [...this._segments];
|
|
96
|
-
if (key)
|
|
97
|
-
segments = segments.filter((s) => [
|
|
98
|
-
PathSegment.entitySet,
|
|
99
|
-
PathSegment.navigationProperty,
|
|
100
|
-
PathSegment.property,
|
|
101
|
-
].indexOf(s.name) !== -1);
|
|
102
|
-
return segments.map((s) => new SegmentHandler(s));
|
|
103
|
-
}
|
|
104
|
-
first({ key = false } = {}) {
|
|
105
|
-
const segments = this.segments({ key });
|
|
106
|
-
return segments.length > 0 ? segments[0] : undefined;
|
|
107
|
-
}
|
|
108
|
-
last({ key = false } = {}) {
|
|
109
|
-
const segments = this.segments({ key });
|
|
110
|
-
return segments.length > 0 ? segments[segments.length - 1] : undefined;
|
|
111
|
-
}
|
|
112
|
-
add(name, path) {
|
|
113
|
-
const segment = { name, path };
|
|
114
|
-
this._segments.push(segment);
|
|
115
|
-
return new SegmentHandler(segment);
|
|
116
|
-
}
|
|
117
|
-
get(name) {
|
|
118
|
-
let segment = this.find((s) => s.name === name);
|
|
119
|
-
if (segment === undefined)
|
|
120
|
-
throw Error(`No Segment for name ${name} was found`);
|
|
121
|
-
return new SegmentHandler(segment);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3BhdGgvc2VnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFVNUMsU0FBUyxtQkFBbUIsQ0FDMUIsT0FBcUIsRUFDckIsU0FBa0IsS0FBSztJQUV2QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFBRTtRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVO1lBQ3JDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDNUMsTUFBTTthQUNQLENBQUM7WUFDSixDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdkI7U0FBTTtRQUNMLElB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LENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZO1FBQzVCLE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBa0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWTtRQUNkLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxPQUFPLEtBQUssU0FBUztZQUN2QixNQUFNLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxZQUFZLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBBVEhfU0VQQVJBVE9SIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGJ1aWxkUGF0aEFuZFF1ZXJ5LCByYXcgfSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBTZWdtZW50SGFuZGxlciB9IGZyb20gJy4vaGFuZGxlcnMnO1xuXG5leHBvcnQgdHlwZSBPRGF0YVNlZ21lbnQgPSB7XG4gIG5hbWU6IFBhdGhTZWdtZW50O1xuICBwYXRoOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGtleT86IGFueTtcbiAgcGFyYW1ldGVycz86IGFueTtcbn07XG5cbmZ1bmN0aW9uIHBhdGhTZWdtZW50c0J1aWxkZXIoXG4gIHNlZ21lbnQ6IE9EYXRhU2VnbWVudCxcbiAgZXNjYXBlOiBib29sZWFuID0gZmFsc2Vcbik6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gIGlmIChzZWdtZW50Lm5hbWUgPT09IFBhdGhTZWdtZW50LmZ1bmN0aW9uKSB7XG4gICAgbGV0IFtwYXRoLCBwYXJhbXNdID0gc2VnbWVudC5wYXJhbWV0ZXJzXG4gICAgICA/IGJ1aWxkUGF0aEFuZFF1ZXJ5KHtcbiAgICAgICAgICBmdW5jOiB7IFtzZWdtZW50LnBhdGhdOiBzZWdtZW50LnBhcmFtZXRlcnMgfSxcbiAgICAgICAgICBlc2NhcGUsXG4gICAgICAgIH0pXG4gICAgICA6IGJ1aWxkUGF0aEFuZFF1ZXJ5KHsgZnVuYzogc2VnbWVudC5wYXRoLCBlc2NhcGUgfSk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChQQVRIX1NFUEFSQVRPUikpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gW3BhdGgsIHBhcmFtc107XG4gIH0gZWxzZSB7XG4gICAgbGV0IGtleSA9IHNlZ21lbnQua2V5O1xuICAgIC8vIEhBQ0s6IENoZWNrIGd1aWQgc3RyaW5nXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgIC9eWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JC8udGVzdChcbiAgICAgICAga2V5XG4gICAgICApXG4gICAgKSB7XG4gICAgICBrZXkgPSByYXcoa2V5KTtcbiAgICB9XG4gICAgbGV0IFtwYXRoLCBwYXJhbXNdID0ga2V5ID8gYnVpbGRQYXRoQW5kUXVlcnkoeyBrZXksIGVzY2FwZSB9KSA6IFsnJywge31dO1xuICAgIHJldHVybiBbc2VnbWVudC5wYXRoICsgcGF0aCwgcGFyYW1zXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFQYXRoU2VnbWVudHMge1xuICBwcml2YXRlIF9zZWdtZW50czogT0RhdGFTZWdtZW50W107XG5cbiAgY29uc3RydWN0b3Ioc2VnbWVudHM/OiBPRGF0YVNlZ21lbnRbXSkge1xuICAgIHRoaXMuX3NlZ21lbnRzID0gc2VnbWVudHMgfHwgW107XG4gIH1cblxuICBwYXRoQW5kUGFyYW1zKGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9zZWdtZW50cy5yZWR1Y2UoXG4gICAgICAoYWNjLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IFtwYXRoLCBwYXJhbXNdID0gcGF0aFNlZ21lbnRzQnVpbGRlcihzZWdtZW50LCBlc2NhcGUpO1xuICAgICAgICBhY2MucGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgYWNjLnBhcmFtcyA9IE9iamVjdC5hc3NpZ24oYWNjLnBhcmFtcywgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7IHBhdGhzOiBbXSBhcyBzdHJpbmdbXSwgcGFyYW1zOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB9XG4gICAgKTtcbiAgICByZXR1cm4gW3Jlc3VsdC5wYXRocy5qb2luKFBBVEhfU0VQQVJBVE9SKSwgcmVzdWx0LnBhcmFtc107XG4gIH1cblxuICB0eXBlcyh7IGtleSA9IGZhbHNlIH06IHsga2V5PzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudHMoeyBrZXkgfSlcbiAgICAgIC5tYXAoKHMpID0+IHMudHlwZSgpKVxuICAgICAgLmZpbHRlcigodCkgPT4gdCAhPT0gdW5kZWZpbmVkKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGtleXModmFsdWVzPzogKEVudGl0eUtleTxhbnk+IHwgdW5kZWZpbmVkKVtdKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNlZ21lbnRzKHsga2V5OiB0cnVlIH0pO1xuICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gdmFsdWVzW2luZGV4XTtcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2VnbWVudC5jbGVhcktleSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQua2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHMubWFwKChzKSA9PiBzLmtleSgpIGFzIEVudGl0eUtleTxhbnk+IHwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgW3BhdGgsIHBhcmFtc10gPSB0aGlzLnBhdGhBbmRQYXJhbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgcGF0aCArXG4gICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMpXG4gICAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcmJylcbiAgICApO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWdtZW50cy5tYXAoKHMpID0+IHtcbiAgICAgIGxldCBqc29uID0ge1xuICAgICAgICBuYW1lOiBzLm5hbWUgYXMgc3RyaW5nLFxuICAgICAgICBwYXRoOiBzLnBhdGgsXG4gICAgICB9IGFzIGFueTtcbiAgICAgIGlmIChzLnR5cGUgIT09IHVuZGVmaW5lZCkganNvbi50eXBlID0gcy50eXBlO1xuICAgICAgaWYgKHMua2V5ICE9PSB1bmRlZmluZWQpIGpzb24ua2V5ID0gcy5rZXk7XG4gICAgICBpZiAocy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIGpzb24ucGFyYW1ldGVycyA9IHMucGFyYW1ldGVycztcbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBPYmplY3RzLmNsb25lKHRoaXMuX3NlZ21lbnRzKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKHNlZ21lbnRzKTtcbiAgfVxuXG4gIGZpbmQocHJlZGljYXRlOiAoc2VnbWVudDogT0RhdGFTZWdtZW50KSA9PiBib29sZWFuKSB7XG4gICAgLy9CYWNrd2FyZCBGaW5kXG4gICAgcmV0dXJuIFsuLi50aGlzLl9zZWdtZW50c10ucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuXG4gIHNlZ21lbnRzKHsga2V5ID0gZmFsc2UgfTogeyBrZXk/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGxldCBzZWdtZW50cyA9IFsuLi50aGlzLl9zZWdtZW50c107XG4gICAgaWYgKGtleSlcbiAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKFxuICAgICAgICAocykgPT5cbiAgICAgICAgICBbXG4gICAgICAgICAgICBQYXRoU2VnbWVudC5lbnRpdHlTZXQsXG4gICAgICAgICAgICBQYXRoU2VnbWVudC5uYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICAgICAgICBQYXRoU2VnbWVudC5wcm9wZXJ0eSxcbiAgICAgICAgICBdLmluZGV4T2Yocy5uYW1lKSAhPT0gLTFcbiAgICAgICk7XG4gICAgcmV0dXJuIHNlZ21lbnRzLm1hcCgocykgPT4gbmV3IFNlZ21lbnRIYW5kbGVyKHMpKTtcbiAgfVxuXG4gIGZpcnN0KHsga2V5ID0gZmFsc2UgfTogeyBrZXk/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cyh7IGtleSB9KTtcbiAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbGFzdCh7IGtleSA9IGZhbHNlIH06IHsga2V5PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHMoeyBrZXkgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDAgPyBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFkZChuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHNlZ21lbnQgPSB7IG5hbWUsIHBhdGggfSBhcyBPRGF0YVNlZ21lbnQ7XG4gICAgdGhpcy5fc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICByZXR1cm4gbmV3IFNlZ21lbnRIYW5kbGVyKHNlZ21lbnQpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZykge1xuICAgIGxldCBzZWdtZW50ID0gdGhpcy5maW5kKChzKSA9PiBzLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmIChzZWdtZW50ID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBFcnJvcihgTm8gU2VnbWVudCBmb3IgbmFtZSAke25hbWV9IHdhcyBmb3VuZGApO1xuICAgIHJldHVybiBuZXcgU2VnbWVudEhhbmRsZXIoc2VnbWVudCk7XG4gIH1cbn1cbiJdfQ==
|