@wertzui/ngx-restworld-client 2.0.0 → 3.1.1

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.
Files changed (39) hide show
  1. package/{esm2015/lib/constants/link-names.js → esm2020/lib/constants/link-names.mjs} +0 -0
  2. package/{esm2015/lib/models/api-url.js → esm2020/lib/models/api-url.mjs} +0 -0
  3. package/{esm2015/lib/models/client-settings.js → esm2020/lib/models/client-settings.mjs} +1 -1
  4. package/{esm2015/lib/models/problem-details.js → esm2020/lib/models/problem-details.mjs} +0 -0
  5. package/{esm2015/lib/models/restworld-options.js → esm2020/lib/models/restworld-options.mjs} +0 -0
  6. package/{esm2015/lib/pipes/as.pipe.js → esm2020/lib/pipes/as.pipe.mjs} +4 -4
  7. package/{esm2015/lib/pipes/safe-url.pipe.js → esm2020/lib/pipes/safe-url.pipe.mjs} +4 -4
  8. package/esm2020/lib/restworld-client.module.mjs +200 -0
  9. package/{esm2015/lib/services/avatar-generator.js → esm2020/lib/services/avatar-generator.mjs} +4 -4
  10. package/{esm2015/lib/services/form.service.js → esm2020/lib/services/form.service.mjs} +4 -4
  11. package/esm2020/lib/services/restworld-client-collection.mjs +39 -0
  12. package/esm2020/lib/services/restworld-client.mjs +165 -0
  13. package/esm2020/lib/services/settings.service.mjs +39 -0
  14. package/esm2020/lib/views/restworld-edit-form/restworld-edit-form.component.mjs +230 -0
  15. package/esm2020/lib/views/restworld-edit-view/restworld-edit-view.component.mjs +313 -0
  16. package/esm2020/lib/views/restworld-file-view/restworld-file-view.component.mjs +57 -0
  17. package/esm2020/lib/views/restworld-image-view/restworld-image-view.component.mjs +100 -0
  18. package/esm2020/lib/views/restworld-list-view/restworld-list-view.component.mjs +341 -0
  19. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  20. package/{esm2015/wertzui-ngx-restworld-client.js → esm2020/wertzui-ngx-restworld-client.mjs} +0 -0
  21. package/fesm2015/wertzui-ngx-restworld-client.mjs +1709 -0
  22. package/fesm2015/wertzui-ngx-restworld-client.mjs.map +1 -0
  23. package/fesm2020/wertzui-ngx-restworld-client.mjs +1649 -0
  24. package/fesm2020/wertzui-ngx-restworld-client.mjs.map +1 -0
  25. package/lib/models/client-settings.d.ts +4 -1
  26. package/package.json +42 -31
  27. package/bundles/wertzui-ngx-restworld-client.umd.js +0 -2477
  28. package/bundles/wertzui-ngx-restworld-client.umd.js.map +0 -1
  29. package/esm2015/lib/restworld-client.module.js +0 -201
  30. package/esm2015/lib/services/restworld-client-collection.js +0 -42
  31. package/esm2015/lib/services/restworld-client.js +0 -183
  32. package/esm2015/lib/services/settings.service.js +0 -47
  33. package/esm2015/lib/views/restworld-edit-form/restworld-edit-form.component.js +0 -238
  34. package/esm2015/lib/views/restworld-edit-view/restworld-edit-view.component.js +0 -335
  35. package/esm2015/lib/views/restworld-file-view/restworld-file-view.component.js +0 -63
  36. package/esm2015/lib/views/restworld-image-view/restworld-image-view.component.js +0 -107
  37. package/esm2015/lib/views/restworld-list-view/restworld-list-view.component.js +0 -353
  38. package/fesm2015/wertzui-ngx-restworld-client.js +0 -1728
  39. package/fesm2015/wertzui-ngx-restworld-client.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ import { HttpHeaders } from '@angular/common/http';
2
+ import * as _ from "lodash";
3
+ import { FormsResource, Link, PagedListResource, Resource } from "@wertzui/ngx-hal-client";
4
+ import { LinkNames } from "../constants/link-names";
5
+ import { ProblemDetails } from "../models/problem-details";
6
+ export class RESTworldClient {
7
+ constructor(_halClient, _options) {
8
+ this._halClient = _halClient;
9
+ this._options = _options;
10
+ }
11
+ get halClient() {
12
+ return this._halClient;
13
+ }
14
+ async ensureHomeResourceIsSet() {
15
+ if (!this._homeResource) {
16
+ const response = await this.getHomeForced();
17
+ if (ProblemDetails.isProblemDetails(response.body)) {
18
+ throw new Error(`Cannot get the home resource from ${this._options.BaseUrl} with Version ${this._options.Version}. Response was: ${response}`);
19
+ }
20
+ if (!response.body)
21
+ throw new Error(`Cannot get the home resource from ${this._options.BaseUrl} with Version ${this._options.Version}. Response was empty.`);
22
+ this._homeResource = response.body;
23
+ this.setDefaultCurie();
24
+ }
25
+ }
26
+ async getHomeForced() {
27
+ const header = RESTworldClient.createHeaders('application/hal+json', this._options.Version);
28
+ const response = await this.halClient.get(this._options.BaseUrl, Resource, ProblemDetails, header);
29
+ return response;
30
+ }
31
+ setDefaultCurie() {
32
+ const curies = this._homeResource?._links?.curies;
33
+ if (!curies || curies.length === 0 || !curies[0])
34
+ this._defaultCurie = undefined;
35
+ else
36
+ this._defaultCurie = curies[0].name;
37
+ }
38
+ async getList(rel, parameters, headers, curie) {
39
+ const link = this.getLinkFromHome(rel, LinkNames.getList, curie);
40
+ const uri = link.fillTemplate(parameters);
41
+ const response = await this.halClient.get(uri, PagedListResource, ProblemDetails, headers);
42
+ return response;
43
+ }
44
+ async getListByUri(uri, parameters, headers) {
45
+ const link = new Link();
46
+ link.href = uri;
47
+ const filledUri = link.fillTemplate(parameters);
48
+ const response = await this.halClient.get(filledUri, PagedListResource, ProblemDetails, headers);
49
+ return response;
50
+ }
51
+ async getSingle(relOrUri, id, headers, curie) {
52
+ let uri;
53
+ if (relOrUri.startsWith('http')) {
54
+ if (id !== undefined)
55
+ throw new Error('When supplying a URI, an ID cannot be supplied too.');
56
+ if (curie)
57
+ throw new Error('When supplying a URI, a curie cannot be supplied too.');
58
+ uri = relOrUri;
59
+ }
60
+ else {
61
+ if (!_.isNumber(id))
62
+ throw new Error('When supplying a rel, an ID must be supplied too.');
63
+ const link = this.getLinkFromHome(relOrUri, LinkNames.get, curie);
64
+ uri = link.fillTemplate({ id: id.toString() });
65
+ }
66
+ const response = await this.halClient.get(uri, Resource, ProblemDetails, headers);
67
+ return response;
68
+ }
69
+ async save(resource) {
70
+ const saveLink = resource.findLink('save');
71
+ if (!saveLink)
72
+ throw new Error(`The resource ${resource} does not have a save link.`);
73
+ if (!saveLink.name)
74
+ throw new Error(`The save link ${saveLink} does not have a save name.`);
75
+ const uri = saveLink.href;
76
+ const method = saveLink.name.toLowerCase();
77
+ const header = RESTworldClient.createHeaders('application/hal+json', this._options.Version);
78
+ let response;
79
+ switch (method) {
80
+ case 'put':
81
+ response = await this.halClient.put(uri, resource, Resource, ProblemDetails, header);
82
+ break;
83
+ case 'post':
84
+ response = await this.halClient.post(uri, resource, Resource, ProblemDetails, header);
85
+ break;
86
+ default:
87
+ throw new Error(`'${method}' is not allowed as link name for the save link. Only 'POST' and 'PUT' are allowed.`);
88
+ }
89
+ return response;
90
+ }
91
+ async getAllForms(resource) {
92
+ const urls = resource.getFormLinkHrefs();
93
+ const header = RESTworldClient.createHeaders('application/prs.hal-forms+json', this._options.Version);
94
+ const formsPromises = urls.map(url => this._halClient.get(url, FormsResource, ProblemDetails, header));
95
+ const formsAndProblems = await Promise.all(formsPromises);
96
+ return formsAndProblems;
97
+ }
98
+ async submit(template, formValues) {
99
+ const uri = template.target || '';
100
+ const method = template.method?.toLowerCase();
101
+ const header = RESTworldClient.createHeaders('application/prs.hal-forms+json', this._options.Version);
102
+ let response;
103
+ switch (method) {
104
+ case 'put':
105
+ response = await this.halClient.put(uri, formValues, FormsResource, ProblemDetails, header);
106
+ break;
107
+ case 'post':
108
+ response = await this.halClient.post(uri, formValues, FormsResource, ProblemDetails, header);
109
+ break;
110
+ default:
111
+ response = await this.halClient.get(uri, FormsResource, ProblemDetails, header);
112
+ }
113
+ return response;
114
+ }
115
+ async delete(resource) {
116
+ const deleteLink = resource.findLink('delete');
117
+ if (!deleteLink)
118
+ throw new Error(`The resource ${resource} does not have a delete link.`);
119
+ const uri = deleteLink.href;
120
+ const header = RESTworldClient.createHeaders('application/hal+json', this._options.Version);
121
+ const response = await this.halClient.delete(uri, ProblemDetails, header);
122
+ return response;
123
+ }
124
+ getAllLinksFromHome() {
125
+ if (!this._homeResource)
126
+ throw new Error('Home resource is not set. Call ensureHomeResourceIsSet() first.');
127
+ return this._homeResource._links;
128
+ }
129
+ getLinkFromHome(rel, name, curie) {
130
+ const links = this.getLinksFromHome(rel, curie);
131
+ const link = name ? links.find(l => l.name === name) : links[0];
132
+ if (!link)
133
+ throw new Error(`The home resource does not have a link with the rel '${this.getFullRel(rel, curie)}' and the name '${name}'.`);
134
+ return link;
135
+ }
136
+ getLinksFromHome(rel, curie) {
137
+ if (!this._homeResource)
138
+ throw new Error('Home resource is not set. Call ensureHomeResourceIsSet() first.');
139
+ const fullRel = this.getFullRel(rel, curie);
140
+ const links = this._homeResource._links[fullRel];
141
+ if (!links || links.length === 0)
142
+ throw Error(`The home resource does not have a link with the rel '${fullRel}'.`);
143
+ return links;
144
+ }
145
+ getFullRel(rel, curie) {
146
+ // rel already includes a curie => just return it
147
+ if (rel.includes(':'))
148
+ return rel;
149
+ // No curie given => use default curie.
150
+ if (!curie)
151
+ curie = this._defaultCurie;
152
+ // Combine curie and rel
153
+ const fullRel = `${curie}:${rel}`;
154
+ return fullRel;
155
+ }
156
+ static createHeaders(mediaType, version) {
157
+ if (version)
158
+ return new HttpHeaders({
159
+ 'Accept': `${mediaType || 'application/hal+json'}; v=${version}`,
160
+ 'Content-Type': `${mediaType || 'application/hal+json'}; v=${version}`
161
+ });
162
+ return new HttpHeaders();
163
+ }
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQWEsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBWSxNQUFNLHlCQUF5QixDQUFBO0FBQy9HLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHM0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsWUFDVSxVQUFxQixFQUNyQixRQUEwQjtRQUQxQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQ2hDLENBQUM7SUFQTCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFPTSxLQUFLLENBQUMsdUJBQXVCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGlCQUFpQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDaEo7WUFDRCxJQUFJLENBQUMsUUFBUSxD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USxDQUFDLEdBQUcsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUViLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsS0FBSztZQUNSLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRTdCLHdCQUF3QjtRQUN4QixNQUFNLE9BQU8sR0FBRyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVsQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFxRSxFQUFFLE9BQWdCO1FBQ2xILElBQUksT0FBTztZQUNULE9BQU8sSUFBSSxXQUFXLENBQUM7Z0JBQ3JCLFFBQVEsRUFBRSxHQUFHLFNBQVMsSUFBSSxzQkFBc0IsT0FBTyxPQUFPLEVBQUU7Z0JBQ2hFLGNBQWMsRUFBRSxHQUFHLFNBQVMsSUFBSSxzQkFBc0IsT0FBTyxPQUFPLEVBQUU7YUFDdkUsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBGb3Jtc1Jlc291cmNlLCBIYWxDbGllbnQsIExpbmssIFBhZ2VkTGlzdFJlc291cmNlLCBSZXNvdXJjZSwgVGVtcGxhdGUgfSBmcm9tIFwiQHdlcnR6dWkvbmd4LWhhbC1jbGllbnRcIlxyXG5pbXBvcnQgeyBMaW5rTmFtZXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2xpbmstbmFtZXNcIjtcclxuaW1wb3J0IHsgUHJvYmxlbURldGFpbHMgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2JsZW0tZGV0YWlsc1wiO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRPcHRpb25zIH0gZnJvbSBcIi4uL21vZGVscy9yZXN0d29ybGQtb3B0aW9uc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZENsaWVudCB7XHJcblxyXG4gIHByaXZhdGUgX2hvbWVSZXNvdXJjZT86IFJlc291cmNlO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRDdXJpZT86IHN0cmluZztcclxuICBwdWJsaWMgZ2V0IGhhbENsaWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9oYWxDbGllbnQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2hhbENsaWVudDogSGFsQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfb3B0aW9uczogUkVTVHdvcmxkT3B0aW9uc1xyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbnN1cmVIb21lUmVzb3VyY2VJc1NldCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5faG9tZVJlc291cmNlKSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRIb21lRm9yY2VkKCk7XHJcbiAgICAgIGlmIChQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBob21lIHJlc291cmNlIGZyb20gJHt0aGlzLl9vcHRpb25zLkJhc2VVcmx9IHdpdGggVmVyc2lvbiAke3RoaXMuX29wdGlvbnMuVmVyc2lvbn0uIFJlc3BvbnNlIHdhczogJHtyZXNwb25zZX1gKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXJlc3BvbnNlLmJvZHkpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBob21lIHJlc291cmNlIGZyb20gJHt0aGlzLl9vcHRpb25zLkJhc2VVcmx9IHdpdGggVmVyc2lvbiAke3RoaXMuX29wdGlvbnMuVmVyc2lvbn0uIFJlc3BvbnNlIHdhcyBlbXB0eS5gKVxyXG4gICAgICB0aGlzLl9ob21lUmVzb3VyY2UgPSByZXNwb25zZS5ib2R5O1xyXG4gICAgICB0aGlzLnNldERlZmF1bHRDdXJpZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRIb21lRm9yY2VkKCk6IFByb21pc2U8SHR0cFJlc3BvbnNlPFJlc291cmNlIHwgUHJvYmxlbURldGFpbHM+PiB7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBSRVNUd29ybGRDbGllbnQuY3JlYXRlSGVhZGVycygnYXBwbGljYXRpb24vaGFsK2pzb24nLCB0aGlzLl9vcHRpb25zLlZlcnNpb24pO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5nZXQodGhpcy5fb3B0aW9ucy5CYXNlVXJsLCBSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcik7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERlZmF1bHRDdXJpZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cmllcyA9IHRoaXMuX2hvbWVSZXNvdXJjZT8uX2xpbmtzPy5jdXJpZXM7XHJcbiAgICBpZiAoIWN1cmllcyB8fCBjdXJpZXMubGVuZ3RoID09PSAwIHx8ICFjdXJpZXNbMF0pXHJcbiAgICAgIHRoaXMuX2RlZmF1bHRDdXJpZSA9IHVuZGVmaW5lZDtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fZGVmYXVsdEN1cmllID0gY3VyaWVzWzBdLm5hbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGlzdChyZWw6IHN0cmluZywgcGFyYW1ldGVyczoge30sIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgY3VyaWU/OiBzdHJpbmcpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxQYWdlZExpc3RSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj57XHJcbiAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRMaW5rRnJvbUhvbWUocmVsLCBMaW5rTmFtZXMuZ2V0TGlzdCwgY3VyaWUpO1xyXG4gICAgY29uc3QgdXJpID0gbGluay5maWxsVGVtcGxhdGUocGFyYW1ldGVycyk7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5nZXQodXJpLCBQYWdlZExpc3RSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRMaXN0QnlVcmkodXJpOiBzdHJpbmcsIHBhcmFtZXRlcnM6IHt9LCBoZWFkZXJzPzogSHR0cEhlYWRlcnMpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxQYWdlZExpc3RSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3QgbGluayA9IG5ldyBMaW5rKCk7XHJcbiAgICBsaW5rLmhyZWYgPSB1cmk7XHJcbiAgICBjb25zdCBmaWxsZWRVcmkgPSBsaW5rLmZpbGxUZW1wbGF0ZShwYXJhbWV0ZXJzKTtcclxuXHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LmdldChmaWxsZWRVcmksIFBhZ2VkTGlzdFJlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVycyk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNpbmdsZShyZWxPclVyaTogc3RyaW5nLCBpZD86IG51bWJlciwgaGVhZGVycz86IEh0dHBIZWFkZXJzLCBjdXJpZT86IHN0cmluZyk6IFByb21pc2U8SHR0cFJlc3BvbnNlPFJlc291cmNlIHwgUHJvYmxlbURldGFpbHM+PiB7XHJcbiAgICBsZXQgdXJpO1xyXG4gICAgaWYgKHJlbE9yVXJpLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1doZW4gc3VwcGx5aW5nIGEgVVJJLCBhbiBJRCBjYW5ub3QgYmUgc3VwcGxpZWQgdG9vLicpXHJcbiAgICAgIGlmIChjdXJpZSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1doZW4gc3VwcGx5aW5nIGEgVVJJLCBhIGN1cmllIGNhbm5vdCBiZSBzdXBwbGllZCB0b28uJylcclxuXHJcbiAgICAgIHVyaSA9IHJlbE9yVXJpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghXy5pc051bWJlcihpZCkpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaGVuIHN1cHBseWluZyBhIHJlbCwgYW4gSUQgbXVzdCBiZSBzdXBwbGllZCB0b28uJylcclxuXHJcbiAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldExpbmtGcm9tSG9tZShyZWxPclVyaSwgTGlua05hbWVzLmdldCwgY3VyaWUpO1xyXG4gICAgICB1cmkgPSBsaW5rLmZpbGxUZW1wbGF0ZSh7IGlkOiBpZC50b1N0cmluZygpIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5nZXQodXJpLCBSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8SHR0cFJlc3BvbnNlPFJlc291cmNlIHwgUHJvYmxlbURldGFpbHM+PiB7XHJcbiAgICBjb25zdCBzYXZlTGluayA9IHJlc291cmNlLmZpbmRMaW5rKCdzYXZlJyk7XHJcbiAgICBpZiAoIXNhdmVMaW5rKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByZXNvdXJjZSAke3Jlc291cmNlfSBkb2VzIG5vdCBoYXZlIGEgc2F2ZSBsaW5rLmApO1xyXG4gICAgaWYgKCFzYXZlTGluay5uYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzYXZlIGxpbmsgJHtzYXZlTGlua30gZG9lcyBub3QgaGF2ZSBhIHNhdmUgbmFtZS5gKTtcclxuXHJcbiAgICBjb25zdCB1cmkgPSBzYXZlTGluay5ocmVmO1xyXG4gICAgY29uc3QgbWV0aG9kID0gc2F2ZUxpbmsubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL2hhbCtqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuXHJcbiAgICBsZXQgcmVzcG9uc2U7XHJcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xyXG4gICAgICBjYXNlICdwdXQnOlxyXG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQucHV0KHVyaSwgcmVzb3VyY2UsIFJlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncG9zdCc6XHJcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5wb3N0KHVyaSwgcmVzb3VyY2UsIFJlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhbGxvd2VkIGFzIGxpbmsgbmFtZSBmb3IgdGhlIHNhdmUgbGluay4gT25seSAnUE9TVCcgYW5kICdQVVQnIGFyZSBhbGxvd2VkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtcyhyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxGb3Jtc1Jlc291cmNlIHwgUHJvYmxlbURldGFpbHM+W10+IHtcclxuICAgIGNvbnN0IHVybHMgPSByZXNvdXJjZS5nZXRGb3JtTGlua0hyZWZzKCk7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBSRVNUd29ybGRDbGllbnQuY3JlYXRlSGVhZGVycygnYXBwbGljYXRpb24vcHJzLmhhbC1mb3Jtcytqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuICAgIGNvbnN0IGZvcm1zUHJvbWlzZXMgPSB1cmxzLm1hcCh1cmwgPT4gdGhpcy5faGFsQ2xpZW50LmdldCh1cmwsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpKTtcclxuICAgIGNvbnN0IGZvcm1zQW5kUHJvYmxlbXMgPSBhd2FpdCBQcm9taXNlLmFsbChmb3Jtc1Byb21pc2VzKTtcclxuICAgIHJldHVybiBmb3Jtc0FuZFByb2JsZW1zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN1Ym1pdCh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZvcm1WYWx1ZXM6IHt9KTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8Rm9ybXNSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3QgdXJpID0gdGVtcGxhdGUudGFyZ2V0IHx8ICcnO1xyXG4gICAgY29uc3QgbWV0aG9kID0gdGVtcGxhdGUubWV0aG9kPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL3Bycy5oYWwtZm9ybXMranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcblxyXG4gICAgbGV0IHJlc3BvbnNlO1xyXG4gICAgc3dpdGNoIChtZXRob2QpIHtcclxuICAgICAgY2FzZSAncHV0JzpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LnB1dCh1cmksIGZvcm1WYWx1ZXMsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwb3N0JzpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LnBvc3QodXJpLCBmb3JtVmFsdWVzLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LmdldCh1cmksIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8SHR0cFJlc3BvbnNlPHZvaWQgfCBQcm9ibGVtRGV0YWlscz4+IHtcclxuICAgIGNvbnN0IGRlbGV0ZUxpbmsgPSByZXNvdXJjZS5maW5kTGluaygnZGVsZXRlJyk7XHJcbiAgICBpZiAoIWRlbGV0ZUxpbmspXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJlc291cmNlICR7cmVzb3VyY2V9IGRvZXMgbm90IGhhdmUgYSBkZWxldGUgbGluay5gKTtcclxuICAgIGNvbnN0IHVyaSA9IGRlbGV0ZUxpbmsuaHJlZjtcclxuICAgIGNvbnN0IGhlYWRlciA9IFJFU1R3b3JsZENsaWVudC5jcmVhdGVIZWFkZXJzKCdhcHBsaWNhdGlvbi9oYWwranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5kZWxldGUodXJpLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWxsTGlua3NGcm9tSG9tZSgpOiB7IFtyZWw6IHN0cmluZ106IExpbmtbXSB8IHVuZGVmaW5lZCB9IHtcclxuICAgIGlmICghdGhpcy5faG9tZVJlc291cmNlKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hvbWUgcmVzb3VyY2UgaXMgbm90IHNldC4gQ2FsbCBlbnN1cmVIb21lUmVzb3VyY2VJc1NldCgpIGZpcnN0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9ob21lUmVzb3VyY2UuX2xpbmtzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExpbmtGcm9tSG9tZShyZWw6IHN0cmluZywgbmFtZT86IHN0cmluZywgY3VyaWU/OiBzdHJpbmcpOiBMaW5rIHtcclxuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rc0Zyb21Ib21lKHJlbCwgY3VyaWUpO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBuYW1lID8gbGlua3MuZmluZChsID0+IGwubmFtZSA9PT0gbmFtZSkgOiBsaW5rc1swXTtcclxuXHJcbiAgICBpZiAoIWxpbmspXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGhvbWUgcmVzb3VyY2UgZG9lcyBub3QgaGF2ZSBhIGxpbmsgd2l0aCB0aGUgcmVsICcke3RoaXMuZ2V0RnVsbFJlbChyZWwsIGN1cmllKX0nIGFuZCB0aGUgbmFtZSAnJHtuYW1lfScuYClcclxuXHJcbiAgICByZXR1cm4gbGluaztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMaW5rc0Zyb21Ib21lKHJlbDogc3RyaW5nLCBjdXJpZT86IHN0cmluZyk6IExpbmtbXSB7XHJcbiAgICBpZiAoIXRoaXMuX2hvbWVSZXNvdXJjZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdIb21lIHJlc291cmNlIGlzIG5vdCBzZXQuIENhbGwgZW5zdXJlSG9tZVJlc291cmNlSXNTZXQoKSBmaXJzdC4nKTtcclxuXHJcbiAgICBjb25zdCBmdWxsUmVsID0gdGhpcy5nZXRGdWxsUmVsKHJlbCwgY3VyaWUpO1xyXG4gICAgY29uc3QgbGlua3MgPSB0aGlzLl9ob21lUmVzb3VyY2UuX2xpbmtzW2Z1bGxSZWxdO1xyXG4gICAgaWYgKCFsaW5rcyB8fCBsaW5rcy5sZW5ndGggPT09IDApXHJcbiAgICAgIHRocm93IEVycm9yKGBUaGUgaG9tZSByZXNvdXJjZSBkb2VzIG5vdCBoYXZlIGEgbGluayB3aXRoIHRoZSByZWwgJyR7ZnVsbFJlbH0nLmApO1xyXG5cclxuICAgIHJldHVybiBsaW5rcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVsbFJlbChyZWw6IHN0cmluZywgY3VyaWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gcmVsIGFscmVhZHkgaW5jbHVkZXMgYSBjdXJpZSA9PiBqdXN0IHJldHVybiBpdFxyXG4gICAgaWYgKHJlbC5pbmNsdWRlcygnOicpKVxyXG4gICAgICByZXR1cm4gcmVsO1xyXG5cclxuICAgIC8vIE5vIGN1cmllIGdpdmVuID0+IHVzZSBkZWZhdWx0IGN1cmllLlxyXG4gICAgaWYgKCFjdXJpZSlcclxuICAgICAgY3VyaWUgPSB0aGlzLl9kZWZhdWx0Q3VyaWU7XHJcblxyXG4gICAgLy8gQ29tYmluZSBjdXJpZSBhbmQgcmVsXHJcbiAgICBjb25zdCBmdWxsUmVsID0gYCR7Y3VyaWV9OiR7cmVsfWA7XHJcblxyXG4gICAgcmV0dXJuIGZ1bGxSZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVIZWFkZXJzKG1lZGlhVHlwZT86ICdhcHBsaWNhdGlvbi9oYWwranNvbicgfCAnYXBwbGljYXRpb24vcHJzLmhhbC1mb3Jtcytqc29uJywgdmVyc2lvbj86IG51bWJlcik6IEh0dHBIZWFkZXJzIHtcclxuICAgIGlmICh2ZXJzaW9uKVxyXG4gICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQWNjZXB0JzogYCR7bWVkaWFUeXBlIHx8ICdhcHBsaWNhdGlvbi9oYWwranNvbid9OyB2PSR7dmVyc2lvbn1gLFxyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiBgJHttZWRpYVR5cGUgfHwgJ2FwcGxpY2F0aW9uL2hhbCtqc29uJ307IHY9JHt2ZXJzaW9ufWBcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,39 @@
1
+ import { HttpClient } from "@angular/common/http";
2
+ import { Injectable } from "@angular/core";
3
+ import { RESTworldOptions } from "../models/restworld-options";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ import * as i2 from "./restworld-client-collection";
7
+ export class SettingsService {
8
+ constructor(backend, _clients) {
9
+ this._clients = _clients;
10
+ this._client = new HttpClient(backend);
11
+ }
12
+ get settings() {
13
+ return this._settings;
14
+ }
15
+ async initialize() {
16
+ await this.ensureSettingsAreLoaded();
17
+ await this.populateRESTworldClientCollectionFromSettings();
18
+ }
19
+ async ensureSettingsAreLoaded() {
20
+ this._settings = await this._client
21
+ .get('/settings')
22
+ .toPromise();
23
+ }
24
+ async populateRESTworldClientCollectionFromSettings() {
25
+ if (!this._settings?.apiUrls)
26
+ return;
27
+ await Promise.all(this._settings.apiUrls
28
+ .map(api => this._clients.addOrGetExistingClient(api.name, new RESTworldOptions(api.url, api.version))));
29
+ }
30
+ }
31
+ SettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SettingsService, deps: [{ token: i1.HttpBackend }, { token: i2.RESTworldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
32
+ SettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SettingsService, providedIn: 'root' });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SettingsService, decorators: [{
34
+ type: Injectable,
35
+ args: [{
36
+ providedIn: 'root'
37
+ }]
38
+ }], ctorParameters: function () { return [{ type: i1.HttpBackend }, { type: i2.RESTworldClientCollection }]; } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvc2VydmljZXMvc2V0dGluZ3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQU0vRCxNQUFNLE9BQU8sZUFBZTtJQVExQixZQUFZLE9BQW9CLEVBQVUsUUFBbUM7UUFBbkMsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDM0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBTkQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBTU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTzthQUNoQyxHQUFHLENBQWlCLFdBQVcsQ0FBQzthQUNoQyxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sS0FBSyxDQUFDLDZDQUE2QztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO1lBQzFCLE9BQU87UUFFVCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2FBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7OzRHQTdCVSxlQUFlO2dIQUFmLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEJhY2tlbmQsIEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy9jbGllbnQtc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgUkVTVHdvcmxkT3B0aW9ucyB9IGZyb20gXCIuLi9tb2RlbHMvcmVzdHdvcmxkLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgUkVTVHdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gXCIuL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvblwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IEh0dHBDbGllbnQ7XHJcblxyXG4gIHByaXZhdGUgX3NldHRpbmdzOiBDbGllbnRTZXR0aW5ncyB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IENsaWVudFNldHRpbmdzIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGJhY2tlbmQ6IEh0dHBCYWNrZW5kLCBwcml2YXRlIF9jbGllbnRzOiBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uKSB7XHJcbiAgICB0aGlzLl9jbGllbnQgPSBuZXcgSHR0cENsaWVudChiYWNrZW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVTZXR0aW5nc0FyZUxvYWRlZCgpO1xyXG4gICAgYXdhaXQgdGhpcy5wb3B1bGF0ZVJFU1R3b3JsZENsaWVudENvbGxlY3Rpb25Gcm9tU2V0dGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlU2V0dGluZ3NBcmVMb2FkZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9zZXR0aW5ncyA9IGF3YWl0IHRoaXMuX2NsaWVudFxyXG4gICAgICAuZ2V0PENsaWVudFNldHRpbmdzPignL3NldHRpbmdzJylcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwb3B1bGF0ZVJFU1R3b3JsZENsaWVudENvbGxlY3Rpb25Gcm9tU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuX3NldHRpbmdzPy5hcGlVcmxzKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fc2V0dGluZ3MuYXBpVXJsc1xyXG4gICAgICAubWFwKGFwaSA9PiAgdGhpcy5fY2xpZW50cy5hZGRPckdldEV4aXN0aW5nQ2xpZW50KGFwaS5uYW1lLCBuZXcgUkVTVHdvcmxkT3B0aW9ucyhhcGkudXJsLCBhcGkudmVyc2lvbikpKSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=