@stemy/ngx-utils 12.1.3 → 13.0.2
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/esm2020/ngx-utils/common-types.mjs +116 -0
- package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +407 -0
- package/esm2020/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +191 -0
- package/esm2020/ngx-utils/components/unordered-list/unordered-list.component.mjs +261 -0
- package/esm2020/ngx-utils/directives/async-method.base.mjs +68 -0
- package/esm2020/ngx-utils/directives/async-method.directive.mjs +28 -0
- package/esm2020/ngx-utils/directives/background.directive.mjs +51 -0
- package/esm2020/ngx-utils/directives/dynamic-table-template.directive.mjs +20 -0
- package/esm2020/ngx-utils/directives/global-template.directive.mjs +30 -0
- package/esm2020/ngx-utils/directives/icon.directive.mjs +71 -0
- package/esm2020/ngx-utils/directives/ngx-template-outlet.directive.mjs +90 -0
- package/esm2020/ngx-utils/directives/pagination-item.directive.mjs +33 -0
- package/esm2020/ngx-utils/directives/pagination.directive.mjs +83 -0
- package/esm2020/ngx-utils/directives/resource-if.directive.mjs +50 -0
- package/esm2020/ngx-utils/directives/sticky-class.directive.mjs +34 -0
- package/esm2020/ngx-utils/directives/sticky.directive.mjs +59 -0
- package/esm2020/ngx-utils/directives/unordered-list-item.directive.mjs +77 -0
- package/esm2020/ngx-utils/directives/unordered-list-template.directive.mjs +26 -0
- package/esm2020/ngx-utils/ngx-utils.module.mjs +322 -0
- package/esm2020/ngx-utils/pipes/chunk.pipe.mjs +25 -0
- package/esm2020/ngx-utils/pipes/entries.pipe.mjs +28 -0
- package/esm2020/ngx-utils/pipes/extra-item-properties.pipe.mjs +31 -0
- package/esm2020/ngx-utils/pipes/filter.pipe.mjs +42 -0
- package/esm2020/ngx-utils/pipes/find.pipe.mjs +29 -0
- package/esm2020/ngx-utils/pipes/format-number.pipe.mjs +21 -0
- package/esm2020/ngx-utils/pipes/get-offset.pipe.mjs +17 -0
- package/esm2020/ngx-utils/pipes/get-type.pipe.mjs +16 -0
- package/esm2020/ngx-utils/pipes/global-template.pipe.mjs +41 -0
- package/esm2020/ngx-utils/pipes/group-by.pipe.mjs +27 -0
- package/esm2020/ngx-utils/pipes/is-type.pipe.mjs +16 -0
- package/esm2020/ngx-utils/pipes/join.pipe.mjs +19 -0
- package/esm2020/ngx-utils/pipes/keys.pipe.mjs +22 -0
- package/esm2020/ngx-utils/pipes/map.pipe.mjs +29 -0
- package/esm2020/ngx-utils/pipes/max.pipe.mjs +26 -0
- package/esm2020/ngx-utils/pipes/min.pipe.mjs +26 -0
- package/esm2020/ngx-utils/pipes/reduce.pipe.mjs +30 -0
- package/esm2020/ngx-utils/pipes/remap.pipe.mjs +32 -0
- package/esm2020/ngx-utils/pipes/replace.pipe.mjs +16 -0
- package/esm2020/ngx-utils/pipes/reverse.pipe.mjs +24 -0
- package/esm2020/ngx-utils/pipes/round.pipe.mjs +21 -0
- package/esm2020/ngx-utils/pipes/safe-html.pipe.mjs +34 -0
- package/esm2020/ngx-utils/pipes/translate.pipe.mjs +86 -0
- package/esm2020/ngx-utils/pipes/values.pipe.mjs +22 -0
- package/esm2020/ngx-utils/plugins/resize-event.plugin.mjs +59 -0
- package/esm2020/ngx-utils/plugins/scroll-event.plugin.mjs +39 -0
- package/esm2020/ngx-utils/services/acl.service.mjs +81 -0
- package/esm2020/ngx-utils/services/api.service.mjs +38 -0
- package/esm2020/ngx-utils/services/auth.service.mjs +14 -0
- package/esm2020/ngx-utils/services/base-http.client.mjs +47 -0
- package/esm2020/ngx-utils/services/base-http.service.mjs +298 -0
- package/esm2020/ngx-utils/services/config.service.mjs +129 -0
- package/esm2020/ngx-utils/services/error-handler.service.mjs +49 -0
- package/esm2020/ngx-utils/services/events.service.mjs +26 -0
- package/esm2020/ngx-utils/services/formatter.service.mjs +47 -0
- package/esm2020/ngx-utils/services/global-template.service.mjs +37 -0
- package/esm2020/ngx-utils/services/icon.service.mjs +26 -0
- package/esm2020/ngx-utils/services/language.service.mjs +113 -0
- package/esm2020/ngx-utils/services/open-api.service.mjs +40 -0
- package/esm2020/ngx-utils/services/promise.service.mjs +55 -0
- package/esm2020/ngx-utils/services/state.service.mjs +173 -0
- package/esm2020/ngx-utils/services/static-language.service.mjs +166 -0
- package/esm2020/ngx-utils/services/storage.service.mjs +49 -0
- package/esm2020/ngx-utils/services/toaster.service.mjs +32 -0
- package/esm2020/ngx-utils/services/translated-url.serializer.mjs +73 -0
- package/esm2020/ngx-utils/services/universal.service.mjs +78 -0
- package/esm2020/ngx-utils/utils/ajax-request-handler.mjs +40 -0
- package/esm2020/ngx-utils/utils/array.utils.mjs +100 -0
- package/esm2020/ngx-utils/utils/auth.guard.mjs +181 -0
- package/esm2020/ngx-utils/utils/canvas.utils.mjs +388 -0
- package/esm2020/ngx-utils/utils/date.utils.mjs +28 -0
- package/esm2020/ngx-utils/utils/file.utils.mjs +90 -0
- package/esm2020/ngx-utils/utils/generic-value.mjs +20 -0
- package/esm2020/ngx-utils/utils/geometry.mjs +132 -0
- package/esm2020/ngx-utils/utils/initializer.mjs +20 -0
- package/esm2020/ngx-utils/utils/loader.utils.mjs +55 -0
- package/esm2020/ngx-utils/utils/math.utils.mjs +15 -0
- package/esm2020/ngx-utils/utils/object.utils.mjs +261 -0
- package/esm2020/ngx-utils/utils/observable.utils.mjs +63 -0
- package/esm2020/ngx-utils/utils/reflect.utils.mjs +33 -0
- package/esm2020/ngx-utils/utils/set.utils.mjs +20 -0
- package/esm2020/ngx-utils/utils/string.utils.mjs +28 -0
- package/esm2020/ngx-utils/utils/timer.utils.mjs +52 -0
- package/esm2020/ngx-utils/utils/unique.utils.mjs +24 -0
- package/esm2020/ngx-utils/utils/vector.mjs +77 -0
- package/esm2020/public_api.mjs +85 -0
- package/esm2020/stemy-ngx-utils.mjs +5 -0
- package/fesm2015/stemy-ngx-utils.mjs +5990 -0
- package/fesm2015/stemy-ngx-utils.mjs.map +1 -0
- package/fesm2020/stemy-ngx-utils.mjs +5650 -0
- package/fesm2020/stemy-ngx-utils.mjs.map +1 -0
- package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +3 -0
- package/ngx-utils/components/pagination-menu/pagination-menu.component.d.ts +3 -0
- package/ngx-utils/components/unordered-list/unordered-list.component.d.ts +3 -0
- package/ngx-utils/directives/async-method.base.d.ts +3 -0
- package/ngx-utils/directives/async-method.directive.d.ts +3 -0
- package/ngx-utils/directives/background.directive.d.ts +3 -0
- package/ngx-utils/directives/dynamic-table-template.directive.d.ts +3 -0
- package/ngx-utils/directives/global-template.directive.d.ts +3 -0
- package/ngx-utils/directives/icon.directive.d.ts +3 -0
- package/ngx-utils/directives/ngx-template-outlet.directive.d.ts +3 -0
- package/ngx-utils/directives/pagination-item.directive.d.ts +3 -0
- package/ngx-utils/directives/pagination.directive.d.ts +3 -0
- package/ngx-utils/directives/resource-if.directive.d.ts +3 -0
- package/ngx-utils/directives/sticky-class.directive.d.ts +3 -0
- package/ngx-utils/directives/sticky.directive.d.ts +3 -0
- package/ngx-utils/directives/unordered-list-item.directive.d.ts +3 -0
- package/ngx-utils/directives/unordered-list-template.directive.d.ts +3 -0
- package/ngx-utils/pipes/chunk.pipe.d.ts +3 -0
- package/ngx-utils/pipes/entries.pipe.d.ts +3 -0
- package/ngx-utils/pipes/extra-item-properties.pipe.d.ts +3 -0
- package/ngx-utils/pipes/filter.pipe.d.ts +3 -0
- package/ngx-utils/pipes/find.pipe.d.ts +3 -0
- package/ngx-utils/pipes/format-number.pipe.d.ts +3 -0
- package/ngx-utils/pipes/get-offset.pipe.d.ts +3 -0
- package/ngx-utils/pipes/get-type.pipe.d.ts +3 -0
- package/ngx-utils/pipes/global-template.pipe.d.ts +3 -0
- package/ngx-utils/pipes/group-by.pipe.d.ts +3 -0
- package/ngx-utils/pipes/is-type.pipe.d.ts +3 -0
- package/ngx-utils/pipes/join.pipe.d.ts +3 -0
- package/ngx-utils/pipes/keys.pipe.d.ts +3 -0
- package/ngx-utils/pipes/map.pipe.d.ts +3 -0
- package/ngx-utils/pipes/max.pipe.d.ts +3 -0
- package/ngx-utils/pipes/min.pipe.d.ts +3 -0
- package/ngx-utils/pipes/reduce.pipe.d.ts +3 -0
- package/ngx-utils/pipes/remap.pipe.d.ts +3 -0
- package/ngx-utils/pipes/replace.pipe.d.ts +3 -0
- package/ngx-utils/pipes/reverse.pipe.d.ts +3 -0
- package/ngx-utils/pipes/round.pipe.d.ts +3 -0
- package/ngx-utils/pipes/safe-html.pipe.d.ts +3 -0
- package/ngx-utils/pipes/translate.pipe.d.ts +4 -0
- package/ngx-utils/pipes/values.pipe.d.ts +3 -0
- package/ngx-utils/plugins/resize-event.plugin.d.ts +4 -1
- package/ngx-utils/plugins/scroll-event.plugin.d.ts +4 -1
- package/ngx-utils/services/acl.service.d.ts +3 -0
- package/ngx-utils/services/api.service.d.ts +3 -0
- package/ngx-utils/services/base-http.client.d.ts +3 -0
- package/ngx-utils/services/base-http.service.d.ts +3 -0
- package/ngx-utils/services/config.service.d.ts +3 -0
- package/ngx-utils/services/error-handler.service.d.ts +3 -0
- package/ngx-utils/services/events.service.d.ts +3 -0
- package/ngx-utils/services/formatter.service.d.ts +3 -0
- package/ngx-utils/services/global-template.service.d.ts +3 -0
- package/ngx-utils/services/icon.service.d.ts +3 -0
- package/ngx-utils/services/language.service.d.ts +3 -0
- package/ngx-utils/services/open-api.service.d.ts +3 -0
- package/ngx-utils/services/promise.service.d.ts +3 -0
- package/ngx-utils/services/state.service.d.ts +3 -0
- package/ngx-utils/services/static-language.service.d.ts +3 -0
- package/ngx-utils/services/storage.service.d.ts +3 -0
- package/ngx-utils/services/toaster.service.d.ts +3 -0
- package/ngx-utils/services/translated-url.serializer.d.ts +3 -0
- package/ngx-utils/services/universal.service.d.ts +3 -0
- package/ngx-utils/utils/auth.guard.d.ts +3 -0
- package/package.json +37 -19
- package/public_api.d.ts +1 -0
- package/stemy-ngx-utils.d.ts +1 -2
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from "@angular/core";
|
|
2
|
+
import { HttpEventType } from "@angular/common/http";
|
|
3
|
+
import { CONFIG_SERVICE, EXPRESS_REQUEST, HttpPromise, LANGUAGE_SERVICE, TOASTER_SERVICE } from "../common-types";
|
|
4
|
+
import { ObjectUtils } from "../utils/object.utils";
|
|
5
|
+
import { MathUtils } from "../utils/math.utils";
|
|
6
|
+
import { BaseHttpClient } from "./base-http.client";
|
|
7
|
+
import { StorageService } from "./storage.service";
|
|
8
|
+
import { timeout } from "rxjs/operators";
|
|
9
|
+
import { TimeoutError } from "rxjs";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./base-http.client";
|
|
12
|
+
import * as i2 from "./storage.service";
|
|
13
|
+
export class BaseHttpService {
|
|
14
|
+
constructor(client, storage, language, toaster, configs, request = null) {
|
|
15
|
+
this.client = client;
|
|
16
|
+
this.storage = storage;
|
|
17
|
+
this.language = language;
|
|
18
|
+
this.toaster = toaster;
|
|
19
|
+
this.configs = configs;
|
|
20
|
+
this.request = request;
|
|
21
|
+
this.requestHeaders = {};
|
|
22
|
+
this.requestParams = {};
|
|
23
|
+
this.cache = {};
|
|
24
|
+
}
|
|
25
|
+
get name() {
|
|
26
|
+
return "base";
|
|
27
|
+
}
|
|
28
|
+
get withCredentials() {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
static retryFailedRequests() {
|
|
32
|
+
BaseHttpService.failedRequests.forEach(r => r());
|
|
33
|
+
BaseHttpService.failedRequests = [];
|
|
34
|
+
}
|
|
35
|
+
get universal() {
|
|
36
|
+
return this.storage.universal;
|
|
37
|
+
}
|
|
38
|
+
url(url) {
|
|
39
|
+
return url;
|
|
40
|
+
}
|
|
41
|
+
createUrl(url, params) {
|
|
42
|
+
const httpParams = this.client.makeParams(params);
|
|
43
|
+
const query = httpParams.keys().map(key => {
|
|
44
|
+
return `${key}=${httpParams.get(key)}`;
|
|
45
|
+
}).join("&");
|
|
46
|
+
return `${this.url(url)}?${query}`;
|
|
47
|
+
}
|
|
48
|
+
makeListParams(page, itemsPerPage, orderBy = null, orderDescending = null, filter = null) {
|
|
49
|
+
const params = {
|
|
50
|
+
page: (page - 1),
|
|
51
|
+
limit: itemsPerPage
|
|
52
|
+
};
|
|
53
|
+
if (!ObjectUtils.isNullOrUndefined(orderBy) && !ObjectUtils.isNullOrUndefined(orderDescending)) {
|
|
54
|
+
params.sort = `${orderDescending ? "-" : ""}${orderBy}`;
|
|
55
|
+
}
|
|
56
|
+
if (!ObjectUtils.isNullOrUndefined(filter)) {
|
|
57
|
+
params.filter = filter;
|
|
58
|
+
}
|
|
59
|
+
return params;
|
|
60
|
+
}
|
|
61
|
+
getPromise(url, options, body) {
|
|
62
|
+
options = this.makeOptions(options, "GET", body);
|
|
63
|
+
return this.toPromise(url, options);
|
|
64
|
+
}
|
|
65
|
+
deletePromise(url, options, body) {
|
|
66
|
+
options = this.makeOptions(options, "DELETE", body);
|
|
67
|
+
return this.toPromise(url, options);
|
|
68
|
+
}
|
|
69
|
+
postPromise(url, body, options) {
|
|
70
|
+
options = this.makeOptions(options, "POST", body);
|
|
71
|
+
return this.toPromise(url, options);
|
|
72
|
+
}
|
|
73
|
+
putPromise(url, body, options) {
|
|
74
|
+
options = this.makeOptions(options, "PUT", body);
|
|
75
|
+
return this.toPromise(url, options);
|
|
76
|
+
}
|
|
77
|
+
patchPromise(url, body, options) {
|
|
78
|
+
options = this.makeOptions(options, "PATCH", body);
|
|
79
|
+
return this.toPromise(url, options);
|
|
80
|
+
}
|
|
81
|
+
uploadPromise(url, body, listener, options) {
|
|
82
|
+
const headers = {};
|
|
83
|
+
if (body instanceof Blob) {
|
|
84
|
+
headers["Content-Type"] = "application/octet-stream";
|
|
85
|
+
}
|
|
86
|
+
options = this.makeOptions(Object.assign({
|
|
87
|
+
headers: headers,
|
|
88
|
+
reportProgress: true
|
|
89
|
+
}, options), "POST", body);
|
|
90
|
+
return this.toPromise(url, options, listener);
|
|
91
|
+
}
|
|
92
|
+
listPromise(url, params) {
|
|
93
|
+
return new Promise(resolve => {
|
|
94
|
+
this.getPromise(url, { params: params }).then(data => {
|
|
95
|
+
if (ObjectUtils.isArray(data)) {
|
|
96
|
+
resolve({
|
|
97
|
+
total: data.length,
|
|
98
|
+
items: data,
|
|
99
|
+
meta: {}
|
|
100
|
+
});
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
resolve({
|
|
104
|
+
total: data.meta?.total || data?.total || data.items?.length || 0,
|
|
105
|
+
items: data.items || [],
|
|
106
|
+
meta: data.meta || {}
|
|
107
|
+
});
|
|
108
|
+
}, response => {
|
|
109
|
+
if (response.status == 0 || response.status == 301) {
|
|
110
|
+
resolve({
|
|
111
|
+
total: 1,
|
|
112
|
+
items: [{
|
|
113
|
+
id: null,
|
|
114
|
+
label: "Not implemented."
|
|
115
|
+
}],
|
|
116
|
+
meta: {}
|
|
117
|
+
});
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
resolve({
|
|
121
|
+
total: 0,
|
|
122
|
+
items: [],
|
|
123
|
+
meta: {}
|
|
124
|
+
});
|
|
125
|
+
return false;
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
handleUnauthorizedError(absoluteUrl, options, reject) {
|
|
130
|
+
reject();
|
|
131
|
+
if (BaseHttpService.failedRequests.length > 1) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (this.universal.isServer)
|
|
135
|
+
return;
|
|
136
|
+
console.log("User auth error", absoluteUrl, options);
|
|
137
|
+
}
|
|
138
|
+
toastWarning(message, issueContext, reason, options) {
|
|
139
|
+
this.toaster.warning(message, { issueContext, reason, options });
|
|
140
|
+
}
|
|
141
|
+
toastError(message, issueContext, reason, options) {
|
|
142
|
+
this.toaster.warning(message, { issueContext, reason, options });
|
|
143
|
+
}
|
|
144
|
+
toPromise(url, options, listener) {
|
|
145
|
+
const issueContext = { url: "" };
|
|
146
|
+
return new HttpPromise(response => {
|
|
147
|
+
if (!response) {
|
|
148
|
+
if (this.universal.isServer)
|
|
149
|
+
return;
|
|
150
|
+
console.log("You may not need a reject Handler for this request!", this.name, url, options);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const reason = response.error || {};
|
|
154
|
+
if (response.status == 0 || response.status == 301) {
|
|
155
|
+
this.toastWarning(`${url} endpoint is not implemented! Click here, to quickly create an issue.`, issueContext, reason, options);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const regex = /((E11000 duplicate key error collection: (.)+\.)|(_1 dup key:(.)+))/g;
|
|
159
|
+
if (reason.message && regex.test(reason.message)) {
|
|
160
|
+
this.toastError("message.duplicate-key.error." + reason.message.replace(regex, "").replace(" index: ", "-"), issueContext, reason, options);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.toastWarning(`${url} endpoint error is not handled properly! Click here, to quickly create an issue.`, issueContext, reason, options);
|
|
164
|
+
}, (resolve, reject) => {
|
|
165
|
+
this.absoluteUrl(url, options).then(absoluteUrl => {
|
|
166
|
+
issueContext.url = absoluteUrl;
|
|
167
|
+
const request = this.client.request(options.method, absoluteUrl, options);
|
|
168
|
+
const finalRequest = ObjectUtils.isNumber(options.timeout) && options.timeout > 0
|
|
169
|
+
? request.pipe(timeout(options.timeout)) : request;
|
|
170
|
+
finalRequest.subscribe((event) => {
|
|
171
|
+
if (options.reportProgress && event.type === HttpEventType.UploadProgress) {
|
|
172
|
+
const progress = {
|
|
173
|
+
percentage: MathUtils.round(event.loaded / event.total, 2, 0.01),
|
|
174
|
+
loaded: event.loaded,
|
|
175
|
+
total: event.total
|
|
176
|
+
};
|
|
177
|
+
if (listener) {
|
|
178
|
+
listener(progress);
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
resolve(this.parseResponse(event, url, options));
|
|
183
|
+
const headers = options.headers;
|
|
184
|
+
const authKey = "Authorization";
|
|
185
|
+
// If we use token auth
|
|
186
|
+
if (this.client.renewTokenFunc && headers.has(authKey)) {
|
|
187
|
+
const currentTime = new Date().getTime();
|
|
188
|
+
const userTokenTime = this.storage.get("userTokenTime") || currentTime;
|
|
189
|
+
// And the last request was a long long time ago
|
|
190
|
+
if (currentTime - 600000 > userTokenTime) {
|
|
191
|
+
this.client.renewTokenFunc();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}, (response) => {
|
|
195
|
+
if (response instanceof TimeoutError || response.status == 0 || response.status == 301) {
|
|
196
|
+
reject(response);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const headers = options.headers;
|
|
200
|
+
const authKey = "Authorization";
|
|
201
|
+
// If an authorization header exists and we still have an Unauthorized response prompt the user to log in again
|
|
202
|
+
if (headers.has(authKey) && response.status == 401) {
|
|
203
|
+
const pushed = this.pushFailedRequest(url, options, () => {
|
|
204
|
+
options.headers = this.makeHeaders(options.originalHeaders);
|
|
205
|
+
this.toPromise(url, options, listener).then(resolve, reject);
|
|
206
|
+
});
|
|
207
|
+
if (pushed)
|
|
208
|
+
this.handleUnauthorizedError(absoluteUrl, options, () => reject(response));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
reject(response);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
pushFailedRequest(url, options, req) {
|
|
217
|
+
if (url.indexOf("tokens") >= 0)
|
|
218
|
+
return false;
|
|
219
|
+
BaseHttpService.failedRequests.push(req);
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
checkHeaders(headers) {
|
|
223
|
+
if (!headers || !headers.cookie || !headers.referer || !headers.host) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
return headers.referer.indexOf(headers.host) >= 0;
|
|
227
|
+
}
|
|
228
|
+
makeOptions(options, method = "GET", body) {
|
|
229
|
+
// Set base options
|
|
230
|
+
options = options ? { ...options } : {};
|
|
231
|
+
options.method = method;
|
|
232
|
+
options.observe = options.observe || "body";
|
|
233
|
+
options.originalHeaders = options.originalHeaders || options.headers || {};
|
|
234
|
+
options.withCredentials = ObjectUtils.isBoolean(options.withCredentials) ? options.withCredentials : this.withCredentials;
|
|
235
|
+
options.body = body || {};
|
|
236
|
+
// Set cookies from server side request
|
|
237
|
+
const headers = !this.request ? null : this.request.headers;
|
|
238
|
+
if (this.checkHeaders(headers)) {
|
|
239
|
+
options.headers["Cookie"] = headers.cookie;
|
|
240
|
+
}
|
|
241
|
+
options.headers = this.makeHeaders(options);
|
|
242
|
+
options.params = this.makeParams(options);
|
|
243
|
+
return options;
|
|
244
|
+
}
|
|
245
|
+
makeHeaders(options) {
|
|
246
|
+
return this.client.makeHeaders(Object.assign({}, this.requestHeaders, options?.headers || {}));
|
|
247
|
+
}
|
|
248
|
+
makeParams(options) {
|
|
249
|
+
return this.client.makeParams(Object.assign({}, this.requestParams, options?.params || {}));
|
|
250
|
+
}
|
|
251
|
+
parseResponse(response, url, options) {
|
|
252
|
+
return response;
|
|
253
|
+
}
|
|
254
|
+
parseUrl(url) {
|
|
255
|
+
return this.url(url).replace(/(?:((?!:).\/)\/)/g, "$1");
|
|
256
|
+
}
|
|
257
|
+
async absoluteUrl(url, options) {
|
|
258
|
+
const absoluteUrl = this.parseUrl(url);
|
|
259
|
+
if (url == "api-docs") {
|
|
260
|
+
return absoluteUrl.replace("/api", "");
|
|
261
|
+
}
|
|
262
|
+
return absoluteUrl;
|
|
263
|
+
}
|
|
264
|
+
expressRequestUrl(url) {
|
|
265
|
+
const req = this.request;
|
|
266
|
+
if (!req || !url || url.startsWith("http") || url.startsWith("//"))
|
|
267
|
+
return url;
|
|
268
|
+
const separator = url.startsWith("/") ? "" : "/";
|
|
269
|
+
return `${req.protocol}://${req.get("host")}${separator}${url}`;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
BaseHttpService.failedRequests = [];
|
|
273
|
+
BaseHttpService.ɵfac = function BaseHttpService_Factory(t) { return new (t || BaseHttpService)(i0.ɵɵinject(BaseHttpClient), i0.ɵɵinject(StorageService), i0.ɵɵinject(LANGUAGE_SERVICE), i0.ɵɵinject(TOASTER_SERVICE), i0.ɵɵinject(CONFIG_SERVICE), i0.ɵɵinject(EXPRESS_REQUEST, 8)); };
|
|
274
|
+
BaseHttpService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: BaseHttpService, factory: BaseHttpService.ɵfac });
|
|
275
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseHttpService, [{
|
|
276
|
+
type: Injectable
|
|
277
|
+
}], function () { return [{ type: i1.BaseHttpClient, decorators: [{
|
|
278
|
+
type: Inject,
|
|
279
|
+
args: [BaseHttpClient]
|
|
280
|
+
}] }, { type: i2.StorageService, decorators: [{
|
|
281
|
+
type: Inject,
|
|
282
|
+
args: [StorageService]
|
|
283
|
+
}] }, { type: undefined, decorators: [{
|
|
284
|
+
type: Inject,
|
|
285
|
+
args: [LANGUAGE_SERVICE]
|
|
286
|
+
}] }, { type: undefined, decorators: [{
|
|
287
|
+
type: Inject,
|
|
288
|
+
args: [TOASTER_SERVICE]
|
|
289
|
+
}] }, { type: undefined, decorators: [{
|
|
290
|
+
type: Inject,
|
|
291
|
+
args: [CONFIG_SERVICE]
|
|
292
|
+
}] }, { type: undefined, decorators: [{
|
|
293
|
+
type: Optional
|
|
294
|
+
}, {
|
|
295
|
+
type: Inject,
|
|
296
|
+
args: [EXPRESS_REQUEST]
|
|
297
|
+
}] }]; }, null); })();
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2Jhc2UtaHR0cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQW9CLGFBQWEsRUFBd0MsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RyxPQUFPLEVBQ0gsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBVVgsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7QUFHbEMsTUFBTSxPQUFPLGVBQWU7SUF5QnhCLFlBQTZDLE1BQXNCLEVBQ3RCLE9BQXVCLEVBQ3JCLFFBQTBCLEVBQzNCLE9BQXdCLEVBQ3pCLE9BQXVCLEVBQ1YsVUFBbUIsSUFBSTtRQUxwQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBRTdFLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUEvQkQsSUFBSSxJQUFJO1FBQ0osT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQWMsZUFBZTtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBTVMsTUFBTSxDQUFDLG1CQUFtQjtRQUNoQyxlQUFlLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsZUFBZSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQWNELEdBQUcsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFtQjtRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQW9CLEVBQUUsVUFBa0IsSUFBSSxFQUFFLGtCQUEyQixJQUFJLEVBQUUsU0FBaUIsSUFBSTtRQUM3SCxNQUFNLE1BQU0sR0FBZ0I7WUFDeEIsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNoQixLQUFLLEVBQUUsWUFBWTtTQUN0QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUM1RixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztTQUMzRDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDMUI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxPQUF5QixFQUFFLElBQVU7UUFDbkUsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxhQUFhLENBQUMsR0FBVyxFQUFFLE9BQXlCLEVBQUUsSUFBVTtRQUN0RSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLFdBQVcsQ0FBQyxHQUFXLEVBQUUsSUFBVSxFQUFFLE9BQXlCO1FBQ3BFLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxJQUFVLEVBQUUsT0FBeUI7UUFDbkUsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxZQUFZLENBQUMsR0FBVyxFQUFFLElBQVUsRUFBRSxPQUF5QjtRQUNyRSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBUyxFQUFFLFFBQTJCLEVBQUUsT0FBeUI7UUFDbEcsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxZQUFZLElBQUksRUFBRTtZQUN0QixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsMEJBQTBCLENBQUM7U0FDeEQ7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGNBQWMsRUFBRSxJQUFJO1NBQ3ZCLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFUyxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQW1CO1FBQ2xELE9BQU8sSUFBSSxPQUFPLENBQWtCLE9BQU8sQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQzt3QkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ2xCLEtBQUssRUFBRSxJQUFJO3dCQUNYLElBQUksRUFBRSxFQUFFO3FCQUNYLENBQUMsQ0FBQztvQkFDSCxPQUFPO2lCQUNWO2dCQUNELE9BQU8sQ0FBQztvQkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO29CQUNqRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO2lCQUN4QixDQUFDLENBQUM7WUFDUCxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtvQkFDaEQsT0FBTyxDQUFDO3dCQUNKLEtBQUssRUFBRSxDQUFDO3dCQUNSLEtBQUssRUFBRSxDQUFDO2dDQUNKLEVBQUUsRUFBRSxJQUFJO2dDQUNSLEtBQUssRUFBRSxrQkFBa0I7NkJBQzVCLENBQUM7d0JBQ0YsSUFBSSxFQUFFLEVBQUU7cUJBQ1gsQ0FBQyxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELE9BQU8sQ0FBQztvQkFDSixLQUFLLEVBQUUsQ0FBQztvQkFDUixLQUFLLEVBQUUsRUFBRTtvQkFDVCxJQUFJLEVBQUUsRUFBRTtpQkFDWCxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxXQUFtQixFQUFFLE9BQXdCLEVBQUUsTUFBa0I7UUFDL0YsTUFBTSxFQUFFLENBQUM7UUFDVCxJQUFJLGVBQWUsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVTLFlBQVksQ0FBQyxPQUFlLEVBQUUsWUFBMkIsRUFBRSxNQUFXLEVBQUUsT0FBd0I7UUFDdEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFUyxVQUFVLENBQUMsT0FBZSxFQUFFLFlBQTJCLEVBQUUsTUFBVyxFQUFFLE9BQXdCO1FBQ3BHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRVMsU0FBUyxDQUFDLEdBQVcsRUFBRSxPQUF3QixFQUFFLFFBQTJCO1FBQ2xGLE1BQU0sWUFBWSxHQUFrQixFQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUU5QyxPQUFPLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7b0JBQUUsT0FBTztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDNUYsT0FBTzthQUNWO1lBQ0QsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsdUVBQXVFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDaEksT0FBTzthQUNWO1lBQ0QsTUFBTSxLQUFLLEdBQUcsc0VBQXNFLENBQUM7WUFDckYsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzVJLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLGtGQUFrRixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0ksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDOUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7Z0JBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUM7b0JBQzdFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUN2RCxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQ2xDLElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxjQUFjLEVBQUU7d0JBQ3ZFLE1BQU0sUUFBUSxHQUFHOzRCQUNiLFVBQVUsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDOzRCQUNoRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07NEJBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt5QkFDckIsQ0FBQzt3QkFDRixJQUFJLFFBQVEsRUFBRTs0QkFDVixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ3RCO3dCQUNELE9BQU87cUJBQ1Y7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBc0IsQ0FBQztvQkFDL0MsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDO29CQUNoQyx1QkFBdUI7b0JBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDekMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksV0FBVyxDQUFDO3dCQUN2RSxnREFBZ0Q7d0JBQ2hELElBQUksV0FBVyxHQUFHLE1BQU0sR0FBRyxhQUFhLEVBQUU7NEJBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7eUJBQ2hDO3FCQUNKO2dCQUNMLENBQUMsRUFBRSxDQUFDLFFBQTBDLEVBQUUsRUFBRTtvQkFDOUMsSUFBSSxRQUFRLFlBQVksWUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO3dCQUNwRixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2pCLE9BQU87cUJBQ1Y7b0JBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQXNCLENBQUM7b0JBQy9DLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQztvQkFDaEMsK0dBQStHO29CQUMvRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7d0JBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTs0QkFDckQsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzs0QkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ2pFLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksTUFBTTs0QkFDTixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDL0UsT0FBTztxQkFDVjtvQkFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsT0FBd0IsRUFBRSxHQUFlO1FBQzlFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0MsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVTLFlBQVksQ0FBQyxPQUFZO1FBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDbEUsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVTLFdBQVcsQ0FBQyxPQUF5QixFQUFFLFNBQWlCLEtBQUssRUFBRSxJQUFVO1FBQy9FLG1CQUFtQjtRQUNuQixPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN4QixPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSyxPQUFPLENBQUMsT0FBd0IsSUFBSSxFQUFFLENBQUM7UUFDN0YsT0FBTyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUMxSCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUIsdUNBQXVDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRVMsV0FBVyxDQUFDLE9BQXdCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVTLFVBQVUsQ0FBQyxPQUF3QjtRQUN6QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFUyxhQUFhLENBQUMsUUFBYSxFQUFFLEdBQVcsRUFBRSxPQUF3QjtRQUN4RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRVMsUUFBUSxDQUFDLEdBQVc7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRVMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFXLEVBQUUsT0FBd0I7UUFDN0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDbkIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDcEUsQ0FBQzs7QUE5UmdCLDhCQUFjLEdBQXNCLEVBQUcsQ0FBQTs4RUFGL0MsZUFBZSxjQXlCSixjQUFjLGVBQ2QsY0FBYyxlQUNkLGdCQUFnQixlQUNoQixlQUFlLGVBQ2YsY0FBYyxlQUNGLGVBQWU7cUVBOUJ0QyxlQUFlLFdBQWYsZUFBZTt1RkFBZixlQUFlO2NBRDNCLFVBQVU7O3NCQTBCTSxNQUFNO3VCQUFDLGNBQWM7O3NCQUNyQixNQUFNO3VCQUFDLGNBQWM7O3NCQUNyQixNQUFNO3VCQUFDLGdCQUFnQjs7c0JBQ3ZCLE1BQU07dUJBQUMsZUFBZTs7c0JBQ3RCLE1BQU07dUJBQUMsY0FBYzs7c0JBQ3JCLFFBQVE7O3NCQUFJLE1BQU07dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7UmVxdWVzdH0gZnJvbSBcImV4cHJlc3NcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBDT05GSUdfU0VSVklDRSxcclxuICAgIEVYUFJFU1NfUkVRVUVTVCxcclxuICAgIEh0dHBQcm9taXNlLFxyXG4gICAgSUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBJSHR0cEhlYWRlcnMsXHJcbiAgICBJSHR0cFBhcmFtcyxcclxuICAgIElIdHRwU2VydmljZSxcclxuICAgIElJc3N1ZUNvbnRleHQsXHJcbiAgICBJTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgSVBhZ2luYXRpb25EYXRhLFxyXG4gICAgSVJlcXVlc3RPcHRpb25zLFxyXG4gICAgSVRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgTEFOR1VBR0VfU0VSVklDRSxcclxuICAgIFByb2dyZXNzTGlzdGVuZXIsXHJcbiAgICBUT0FTVEVSX1NFUlZJQ0VcclxufSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0LnV0aWxzXCI7XHJcbmltcG9ydCB7TWF0aFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC51dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtCYXNlSHR0cENsaWVudH0gZnJvbSBcIi4vYmFzZS1odHRwLmNsaWVudFwiO1xyXG5pbXBvcnQge1VuaXZlcnNhbFNlcnZpY2V9IGZyb20gXCIuL3VuaXZlcnNhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RvcmFnZVNlcnZpY2V9IGZyb20gXCIuL3N0b3JhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQge3RpbWVvdXR9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge1RpbWVvdXRFcnJvcn0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VIdHRwU2VydmljZSBpbXBsZW1lbnRzIElIdHRwU2VydmljZSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBmYWlsZWRSZXF1ZXN0czogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcclxuXHJcbiAgICBnZXQgbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImJhc2VcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHdpdGhDcmVkZW50aWFscygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXF1ZXN0SGVhZGVyczogSUh0dHBIZWFkZXJzO1xyXG4gICAgcmVxdWVzdFBhcmFtczogSUh0dHBQYXJhbXM7XHJcbiAgICBjYWNoZTogYW55O1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgcmV0cnlGYWlsZWRSZXF1ZXN0cygpOiB2b2lkIHtcclxuICAgICAgICBCYXNlSHR0cFNlcnZpY2UuZmFpbGVkUmVxdWVzdHMuZm9yRWFjaChyID0+IHIoKSk7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVuaXZlcnNhbCgpOiBVbml2ZXJzYWxTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnVuaXZlcnNhbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEJhc2VIdHRwQ2xpZW50KSByZWFkb25seSBjbGllbnQ6IEJhc2VIdHRwQ2xpZW50LFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChTdG9yYWdlU2VydmljZSkgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KExBTkdVQUdFX1NFUlZJQ0UpIHJlYWRvbmx5IGxhbmd1YWdlOiBJTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChUT0FTVEVSX1NFUlZJQ0UpIHJlYWRvbmx5IHRvYXN0ZXI6IElUb2FzdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoQ09ORklHX1NFUlZJQ0UpIHJlYWRvbmx5IGNvbmZpZ3M6IElDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChFWFBSRVNTX1JFUVVFU1QpIHJlYWRvbmx5IHJlcXVlc3Q6IFJlcXVlc3QgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0UGFyYW1zID0ge307XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVVcmwodXJsOiBzdHJpbmcsIHBhcmFtczogSUh0dHBQYXJhbXMpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGh0dHBQYXJhbXMgPSB0aGlzLmNsaWVudC5tYWtlUGFyYW1zKHBhcmFtcyk7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBodHRwUGFyYW1zLmtleXMoKS5tYXAoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX09JHtodHRwUGFyYW1zLmdldChrZXkpfWA7XHJcbiAgICAgICAgfSkuam9pbihcIiZcIik7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXJsKHVybCl9PyR7cXVlcnl9YDtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGlzdFBhcmFtcyhwYWdlOiBudW1iZXIsIGl0ZW1zUGVyUGFnZTogbnVtYmVyLCBvcmRlckJ5OiBzdHJpbmcgPSBudWxsLCBvcmRlckRlc2NlbmRpbmc6IGJvb2xlYW4gPSBudWxsLCBmaWx0ZXI6IHN0cmluZyA9IG51bGwpOiBJSHR0cFBhcmFtcyB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBJSHR0cFBhcmFtcyA9IHtcclxuICAgICAgICAgICAgcGFnZTogKHBhZ2UgLSAxKSxcclxuICAgICAgICAgICAgbGltaXQ6IGl0ZW1zUGVyUGFnZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZChvcmRlckJ5KSAmJiAhT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQob3JkZXJEZXNjZW5kaW5nKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMuc29ydCA9IGAke29yZGVyRGVzY2VuZGluZyA/IFwiLVwiIDogXCJcIn0ke29yZGVyQnl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZChmaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSBmaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldFByb21pc2UodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMsIGJvZHk/OiBhbnkpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMob3B0aW9ucywgXCJHRVRcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGRlbGV0ZVByb21pc2UodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMsIGJvZHk/OiBhbnkpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMob3B0aW9ucywgXCJERUxFVEVcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBvc3RQcm9taXNlKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiUE9TVFwiLCBib2R5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy50b1Byb21pc2UodXJsLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHV0UHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBVVFwiLCBib2R5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy50b1Byb21pc2UodXJsLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGF0Y2hQcm9taXNlKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiUEFUQ0hcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwbG9hZFByb21pc2UodXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgbGlzdGVuZXI/OiBQcm9ncmVzc0xpc3RlbmVyLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmIChib2R5IGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgICAgICBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlXHJcbiAgICAgICAgfSwgb3B0aW9ucyksIFwiUE9TVFwiLCBib2R5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy50b1Byb21pc2UodXJsLCBvcHRpb25zLCBsaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGxpc3RQcm9taXNlKHVybDogc3RyaW5nLCBwYXJhbXM6IElIdHRwUGFyYW1zKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SVBhZ2luYXRpb25EYXRhPihyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlKHVybCwge3BhcmFtczogcGFyYW1zfSkudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IGRhdGEubWV0YT8udG90YWwgfHwgZGF0YT8udG90YWwgfHwgZGF0YS5pdGVtcz8ubGVuZ3RoIHx8IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGRhdGEuaXRlbXMgfHwgW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YTogZGF0YS5tZXRhIHx8IHt9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSwgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAzMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJOb3QgaW1wbGVtZW50ZWQuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YToge31cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaGFuZGxlVW5hdXRob3JpemVkRXJyb3IoYWJzb2x1dGVVcmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zLCByZWplY3Q6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZWplY3QoKTtcclxuICAgICAgICBpZiAoQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy51bml2ZXJzYWwuaXNTZXJ2ZXIpIHJldHVybjtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlVzZXIgYXV0aCBlcnJvclwiLCBhYnNvbHV0ZVVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRvYXN0V2FybmluZyhtZXNzYWdlOiBzdHJpbmcsIGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCwgcmVhc29uOiBhbnksIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuaW5nKG1lc3NhZ2UsIHtpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b2FzdEVycm9yKG1lc3NhZ2U6IHN0cmluZywgaXNzdWVDb250ZXh0OiBJSXNzdWVDb250ZXh0LCByZWFzb246IGFueSwgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLndhcm5pbmcobWVzc2FnZSwge2lzc3VlQ29udGV4dCwgcmVhc29uLCBvcHRpb25zfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRvUHJvbWlzZSh1cmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zLCBsaXN0ZW5lcj86IFByb2dyZXNzTGlzdGVuZXIpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgY29uc3QgaXNzdWVDb250ZXh0OiBJSXNzdWVDb250ZXh0ID0ge3VybDogXCJcIn07XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgSHR0cFByb21pc2UocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bml2ZXJzYWwuaXNTZXJ2ZXIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiWW91IG1heSBub3QgbmVlZCBhIHJlamVjdCBIYW5kbGVyIGZvciB0aGlzIHJlcXVlc3QhXCIsIHRoaXMubmFtZSwgdXJsLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZWFzb24gPSByZXNwb25zZS5lcnJvciB8fCB7fTtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAzMDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RXYXJuaW5nKGAke3VybH0gZW5kcG9pbnQgaXMgbm90IGltcGxlbWVudGVkISBDbGljayBoZXJlLCB0byBxdWlja2x5IGNyZWF0ZSBhbiBpc3N1ZS5gLCBpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSAvKChFMTEwMDAgZHVwbGljYXRlIGtleSBlcnJvciBjb2xsZWN0aW9uOiAoLikrXFwuKXwoXzEgZHVwIGtleTooLikrKSkvZztcclxuICAgICAgICAgICAgaWYgKHJlYXNvbi5tZXNzYWdlICYmIHJlZ2V4LnRlc3QocmVhc29uLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0RXJyb3IoXCJtZXNzYWdlLmR1cGxpY2F0ZS1rZXkuZXJyb3IuXCIgKyByZWFzb24ubWVzc2FnZS5yZXBsYWNlKHJlZ2V4LCBcIlwiKS5yZXBsYWNlKFwiIGluZGV4OiBcIiwgXCItXCIpLCBpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50b2FzdFdhcm5pbmcoYCR7dXJsfSBlbmRwb2ludCBlcnJvciBpcyBub3QgaGFuZGxlZCBwcm9wZXJseSEgQ2xpY2sgaGVyZSwgdG8gcXVpY2tseSBjcmVhdGUgYW4gaXNzdWUuYCwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgIH0sIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hYnNvbHV0ZVVybCh1cmwsIG9wdGlvbnMpLnRoZW4oYWJzb2x1dGVVcmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXNzdWVDb250ZXh0LnVybCA9IGFic29sdXRlVXJsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuY2xpZW50LnJlcXVlc3Qob3B0aW9ucy5tZXRob2QsIGFic29sdXRlVXJsLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsUmVxdWVzdCA9IE9iamVjdFV0aWxzLmlzTnVtYmVyKG9wdGlvbnMudGltZW91dCkgJiYgb3B0aW9ucy50aW1lb3V0ID4gMFxyXG4gICAgICAgICAgICAgICAgICAgID8gcmVxdWVzdC5waXBlKHRpbWVvdXQob3B0aW9ucy50aW1lb3V0KSkgOiByZXF1ZXN0O1xyXG4gICAgICAgICAgICAgICAgZmluYWxSZXF1ZXN0LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnJlcG9ydFByb2dyZXNzICYmIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlOiBNYXRoVXRpbHMucm91bmQoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwsIDIsIDAuMDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBldmVudC5sb2FkZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZXZlbnQudG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcihwcm9ncmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucGFyc2VSZXNwb25zZShldmVudCwgdXJsLCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyBhcyBIdHRwSGVhZGVycztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRoS2V5ID0gXCJBdXRob3JpemF0aW9uXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgdXNlIHRva2VuIGF1dGhcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGllbnQucmVuZXdUb2tlbkZ1bmMgJiYgaGVhZGVycy5oYXMoYXV0aEtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlclRva2VuVGltZSA9IHRoaXMuc3RvcmFnZS5nZXQoXCJ1c2VyVG9rZW5UaW1lXCIpIHx8IGN1cnJlbnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgdGhlIGxhc3QgcmVxdWVzdCB3YXMgYSBsb25nIGxvbmcgdGltZSBhZ29cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lIC0gNjAwMDAwID4gdXNlclRva2VuVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGllbnQucmVuZXdUb2tlbkZ1bmMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UgfCBUaW1lb3V0RXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzID09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09IDMwMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgYXMgSHR0cEhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0aEtleSA9IFwiQXV0aG9yaXphdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGFuIGF1dGhvcml6YXRpb24gaGVhZGVyIGV4aXN0cyBhbmQgd2Ugc3RpbGwgaGF2ZSBhbiBVbmF1dGhvcml6ZWQgcmVzcG9uc2UgcHJvbXB0IHRoZSB1c2VyIHRvIGxvZyBpbiBhZ2FpblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJzLmhhcyhhdXRoS2V5KSAmJiByZXNwb25zZS5zdGF0dXMgPT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hlZCA9IHRoaXMucHVzaEZhaWxlZFJlcXVlc3QodXJsLCBvcHRpb25zLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzKG9wdGlvbnMub3JpZ2luYWxIZWFkZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucywgbGlzdGVuZXIpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXNoZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVuYXV0aG9yaXplZEVycm9yKGFic29sdXRlVXJsLCBvcHRpb25zLCAoKSA9PiByZWplY3QocmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwdXNoRmFpbGVkUmVxdWVzdCh1cmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zLCByZXE6ICgpID0+IHZvaWQpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YoXCJ0b2tlbnNcIikgPj0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cy5wdXNoKHJlcSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNoZWNrSGVhZGVycyhoZWFkZXJzOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWhlYWRlcnMgfHwgIWhlYWRlcnMuY29va2llIHx8ICFoZWFkZXJzLnJlZmVyZXIgfHwgIWhlYWRlcnMuaG9zdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBoZWFkZXJzLnJlZmVyZXIuaW5kZXhPZihoZWFkZXJzLmhvc3QpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1ha2VPcHRpb25zKG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMsIG1ldGhvZDogc3RyaW5nID0gXCJHRVRcIiwgYm9keT86IGFueSk6IElSZXF1ZXN0T3B0aW9ucyB7XHJcbiAgICAgICAgLy8gU2V0IGJhc2Ugb3B0aW9uc1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gey4uLm9wdGlvbnN9IDoge307XHJcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2Q7XHJcbiAgICAgICAgb3B0aW9ucy5vYnNlcnZlID0gb3B0aW9ucy5vYnNlcnZlIHx8IFwiYm9keVwiO1xyXG4gICAgICAgIG9wdGlvbnMub3JpZ2luYWxIZWFkZXJzID0gb3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMgfHwgKG9wdGlvbnMuaGVhZGVycyBhcyBJSHR0cEhlYWRlcnMpIHx8IHt9O1xyXG4gICAgICAgIG9wdGlvbnMud2l0aENyZWRlbnRpYWxzID0gT2JqZWN0VXRpbHMuaXNCb29sZWFuKG9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSA/IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzIDogdGhpcy53aXRoQ3JlZGVudGlhbHM7XHJcbiAgICAgICAgb3B0aW9ucy5ib2R5ID0gYm9keSB8fCB7fTtcclxuICAgICAgICAvLyBTZXQgY29va2llcyBmcm9tIHNlcnZlciBzaWRlIHJlcXVlc3RcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gIXRoaXMucmVxdWVzdCA/IG51bGwgOiB0aGlzLnJlcXVlc3QuaGVhZGVycztcclxuICAgICAgICBpZiAodGhpcy5jaGVja0hlYWRlcnMoaGVhZGVycykpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ29va2llXCJdID0gaGVhZGVycy5jb29raWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnMob3B0aW9ucyk7XHJcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMgPSB0aGlzLm1ha2VQYXJhbXMob3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1ha2VIZWFkZXJzKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQubWFrZUhlYWRlcnMoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXF1ZXN0SGVhZGVycywgb3B0aW9ucz8uaGVhZGVycyB8fCB7fSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtYWtlUGFyYW1zKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQYXJhbXMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5tYWtlUGFyYW1zKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVxdWVzdFBhcmFtcywgb3B0aW9ucz8ucGFyYW1zIHx8IHt9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhcnNlUmVzcG9uc2UocmVzcG9uc2U6IGFueSwgdXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwYXJzZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsKHVybCkucmVwbGFjZSgvKD86KCg/ITopLlxcLylcXC8pL2csIFwiJDFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGFic29sdXRlVXJsKHVybDogc3RyaW5nLCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gdGhpcy5wYXJzZVVybCh1cmwpO1xyXG4gICAgICAgIGlmICh1cmwgPT0gXCJhcGktZG9jc1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhYnNvbHV0ZVVybC5yZXBsYWNlKFwiL2FwaVwiLCBcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFic29sdXRlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBleHByZXNzUmVxdWVzdFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgcmVxID0gdGhpcy5yZXF1ZXN0O1xyXG4gICAgICAgIGlmICghcmVxIHx8ICF1cmwgfHwgdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpIHx8IHVybC5zdGFydHNXaXRoKFwiLy9cIikpIHJldHVybiB1cmw7XHJcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdXJsLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiO1xyXG4gICAgICAgIHJldHVybiBgJHtyZXEucHJvdG9jb2x9Oi8vJHtyZXEuZ2V0KFwiaG9zdFwiKX0ke3NlcGFyYXRvcn0ke3VybH1gO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional, isDevMode } from "@angular/core";
|
|
2
|
+
import { HttpClient } from "@angular/common/http";
|
|
3
|
+
import { UniversalService } from "./universal.service";
|
|
4
|
+
import { BASE_CONFIG, IConfiguration, ROOT_ELEMENT, SCRIPT_PARAMS } from "../common-types";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
import * as i2 from "./universal.service";
|
|
8
|
+
import * as i3 from "../common-types";
|
|
9
|
+
export class ConfigService {
|
|
10
|
+
constructor(http, universal, rootElement, baseConfig = null, scriptParams = null) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
this.universal = universal;
|
|
13
|
+
this.rootElement = rootElement;
|
|
14
|
+
for (const key in []) {
|
|
15
|
+
Object.defineProperty(Array.prototype, key, {
|
|
16
|
+
enumerable: false
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
let baseUrl = "";
|
|
20
|
+
if (this.universal.isBrowser) {
|
|
21
|
+
const currentScript = document.currentScript;
|
|
22
|
+
if (!!currentScript) {
|
|
23
|
+
const scriptSrc = currentScript.src;
|
|
24
|
+
const srcParts = scriptSrc.split(".js");
|
|
25
|
+
baseUrl = scriptSrc.substr(0, srcParts[0].lastIndexOf("/") + 1);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
this.baseConfig = baseConfig || {};
|
|
29
|
+
this.loadedConfig = Object.assign(!baseUrl ? {} : { baseUrl, baseDomain: this.parseDomain(baseUrl) }, this.baseConfig);
|
|
30
|
+
this.scriptParameters = scriptParams || {};
|
|
31
|
+
this.loaderFunc = () => {
|
|
32
|
+
this.loader = this.loader || new Promise((resolve, reject) => {
|
|
33
|
+
this.loadJson().then(config => {
|
|
34
|
+
this.loadedConfig = config = Object.assign(this.loadedConfig, config);
|
|
35
|
+
this.prepareConfig(config).then(c => {
|
|
36
|
+
this.loadedConfig = c;
|
|
37
|
+
c.baseUrl = c.baseUrl || "/";
|
|
38
|
+
resolve(c);
|
|
39
|
+
});
|
|
40
|
+
}, reject);
|
|
41
|
+
});
|
|
42
|
+
return this.loader;
|
|
43
|
+
};
|
|
44
|
+
this.initService();
|
|
45
|
+
}
|
|
46
|
+
get load() {
|
|
47
|
+
return this.loaderFunc;
|
|
48
|
+
}
|
|
49
|
+
get config() {
|
|
50
|
+
return this.loadedConfig;
|
|
51
|
+
}
|
|
52
|
+
get configUrl() {
|
|
53
|
+
return `${this.loadedConfig.baseUrl}config/config.json`;
|
|
54
|
+
}
|
|
55
|
+
parseDomain(baseUrl) {
|
|
56
|
+
try {
|
|
57
|
+
const url = new URL(baseUrl);
|
|
58
|
+
const port = url.port && url.port !== "443" && url.port !== "80" ? `:${url.port}` : ``;
|
|
59
|
+
return `${url.protocol}//${url.hostname}${port}/`;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return "/";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
initService() {
|
|
66
|
+
}
|
|
67
|
+
async loadJson() {
|
|
68
|
+
if (this.universal.isServer) {
|
|
69
|
+
return Promise.resolve(this.loadedConfig);
|
|
70
|
+
}
|
|
71
|
+
const configUrl = this.configUrl;
|
|
72
|
+
try {
|
|
73
|
+
const config5 = await this.http.get(isDevMode() ? `${configUrl}5` : configUrl, { responseType: "text" }).toPromise();
|
|
74
|
+
return require("json5").parse(config5);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
try {
|
|
78
|
+
const config = await this.http.get(configUrl).toPromise();
|
|
79
|
+
console.log(`Can't parse json5 config: ${e}`);
|
|
80
|
+
return config;
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
throw new Error(`Config file not found at: ${configUrl}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
prepareConfig(config) {
|
|
88
|
+
return Promise.resolve(config);
|
|
89
|
+
}
|
|
90
|
+
prepareUrl(url, ending) {
|
|
91
|
+
const project = !this.loadedConfig ? "" : this.loadedConfig.project;
|
|
92
|
+
const needsProtocol = url?.startsWith("//") ?? false;
|
|
93
|
+
url = !needsProtocol && url?.startsWith("/") ? this.loadedConfig.baseDomain + url.substr(1) : url || "";
|
|
94
|
+
url = `${url.replace(/\/+$/, "")}${ending}`.replace("[project]", project);
|
|
95
|
+
return this.universal.isServer && needsProtocol ? `http:${url}` : url;
|
|
96
|
+
}
|
|
97
|
+
getConfigValue(key) {
|
|
98
|
+
return this.loadedConfig[key];
|
|
99
|
+
}
|
|
100
|
+
getQueryParameter(name, url) {
|
|
101
|
+
url = url || (this.universal.isBrowser ? window.location.href : "");
|
|
102
|
+
name = name.replace(/[\[\]]/g, "\\$&");
|
|
103
|
+
const regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url);
|
|
104
|
+
if (!results)
|
|
105
|
+
return null;
|
|
106
|
+
if (!results[2])
|
|
107
|
+
return "";
|
|
108
|
+
return decodeURIComponent(results[2].replace(/\+/g, " "));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
ConfigService.ɵfac = function ConfigService_Factory(t) { return new (t || ConfigService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.UniversalService), i0.ɵɵinject(ROOT_ELEMENT), i0.ɵɵinject(BASE_CONFIG, 8), i0.ɵɵinject(SCRIPT_PARAMS, 8)); };
|
|
112
|
+
ConfigService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ConfigService, factory: ConfigService.ɵfac });
|
|
113
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfigService, [{
|
|
114
|
+
type: Injectable
|
|
115
|
+
}], function () { return [{ type: i1.HttpClient }, { type: i2.UniversalService }, { type: undefined, decorators: [{
|
|
116
|
+
type: Inject,
|
|
117
|
+
args: [ROOT_ELEMENT]
|
|
118
|
+
}] }, { type: i3.IConfiguration, decorators: [{
|
|
119
|
+
type: Optional
|
|
120
|
+
}, {
|
|
121
|
+
type: Inject,
|
|
122
|
+
args: [BASE_CONFIG]
|
|
123
|
+
}] }, { type: undefined, decorators: [{
|
|
124
|
+
type: Optional
|
|
125
|
+
}, {
|
|
126
|
+
type: Inject,
|
|
127
|
+
args: [SCRIPT_PARAMS]
|
|
128
|
+
}] }]; }, null); })();
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxXQUFXLEVBQWtCLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBR3pHLE1BQU0sT0FBTyxhQUFhO0lBb0J0QixZQUFxQixJQUFnQixFQUNoQixTQUEyQixFQUNMLFdBQWdCLEVBQ2QsYUFBNkIsSUFBSSxFQUMvQixlQUFvQixJQUFJO1FBSmxELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDTCxnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQUd2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUN4QyxVQUFVLEVBQUUsS0FBSzthQUNwQixDQUFDLENBQUM7U0FDTjtRQUNELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1lBQzFCLE1BQU0sYUFBYSxHQUFJLFFBQVEsQ0FBQyxhQUFtQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRTtnQkFDakIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztnQkFDcEMsTUFBTSxRQUFRLEdBQUcs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LEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7MEVBdEhRLGFBQWEsNEVBc0JGLFlBQVksZUFDQSxXQUFXLGtCQUNYLGFBQWE7bUVBeEJwQyxhQUFhLFdBQWIsYUFBYTt1RkFBYixhQUFhO2NBRHpCLFVBQVU7O3NCQXVCTSxNQUFNO3VCQUFDLFlBQVk7O3NCQUNuQixRQUFROztzQkFBSSxNQUFNO3VCQUFDLFdBQVc7O3NCQUM5QixRQUFROztzQkFBSSxNQUFNO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIGlzRGV2TW9kZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0JBU0VfQ09ORklHLCBJQ29uZmlnU2VydmljZSwgSUNvbmZpZ3VyYXRpb24sIFJPT1RfRUxFTUVOVCwgU0NSSVBUX1BBUkFNU30gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ29uZmlnU2VydmljZSBpbXBsZW1lbnRzIElDb25maWdTZXJ2aWNlIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYmFzZUNvbmZpZzogSUNvbmZpZ3VyYXRpb247XHJcbiAgICBwcm90ZWN0ZWQgbG9hZGVkQ29uZmlnOiBJQ29uZmlndXJhdGlvbjtcclxuICAgIHByb3RlY3RlZCBzY3JpcHRQYXJhbWV0ZXJzOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgbG9hZGVyOiBQcm9taXNlPElDb25maWd1cmF0aW9uPjtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2FkZXJGdW5jOiAoKSA9PiBQcm9taXNlPElDb25maWd1cmF0aW9uPjtcclxuXHJcbiAgICBnZXQgbG9hZCgpOiAoKSA9PiBQcm9taXNlPElDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVyRnVuYztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnKCk6IElDb25maWd1cmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbmZpZ1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxvYWRlZENvbmZpZy5iYXNlVXJsfWNvbmZpZy9jb25maWcuanNvbmA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHVuaXZlcnNhbDogVW5pdmVyc2FsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoUk9PVF9FTEVNRU5UKSByZWFkb25seSByb290RWxlbWVudDogYW55LFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChCQVNFX0NPTkZJRykgYmFzZUNvbmZpZzogSUNvbmZpZ3VyYXRpb24gPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChTQ1JJUFRfUEFSQU1TKSBzY3JpcHRQYXJhbXM6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBbXSkge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCBrZXksIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYmFzZVVybCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzQnJvd3Nlcikge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgYXMgSFRNTFNjcmlwdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoISFjdXJyZW50U2NyaXB0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTcmMgPSBjdXJyZW50U2NyaXB0LnNyYztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyY1BhcnRzID0gc2NyaXB0U3JjLnNwbGl0KFwiLmpzXCIpO1xyXG4gICAgICAgICAgICAgICAgYmFzZVVybCA9IHNjcmlwdFNyYy5zdWJzdHIoMCwgc3JjUGFydHNbMF0ubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iYXNlQ29uZmlnID0gYmFzZUNvbmZpZyB8fCB7fTtcclxuICAgICAgICB0aGlzLmxvYWRlZENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgICFiYXNlVXJsID8ge30gOiB7YmFzZVVybCwgYmFzZURvbWFpbjogdGhpcy5wYXJzZURvbWFpbihiYXNlVXJsKX0sXHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRQYXJhbWV0ZXJzID0gc2NyaXB0UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgIHRoaXMubG9hZGVyRnVuYyA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0aGlzLmxvYWRlciB8fCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEpzb24oKS50aGVuKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRDb25maWcgPSBjb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMubG9hZGVkQ29uZmlnLCBjb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUNvbmZpZyhjb25maWcpLnRoZW4oYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkQ29uZmlnID0gYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5iYXNlVXJsID0gYy5iYXNlVXJsIHx8IFwiL1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRlcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaW5pdFNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGFyc2VEb21haW4oYmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGJhc2VVcmwpO1xyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgJiYgdXJsLnBvcnQgIT09IFwiNDQzXCIgJiYgdXJsLnBvcnQgIT09IFwiODBcIiA/IGA6JHt1cmwucG9ydH1gIDogYGA7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX0ke3BvcnR9L2A7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIi9cIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEpzb24oKTogUHJvbWlzZTxJQ29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIGlmICh0aGlzLnVuaXZlcnNhbC5pc1NlcnZlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMubG9hZGVkQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29uZmlnVXJsID0gdGhpcy5jb25maWdVcmw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnNSA9IGF3YWl0IHRoaXMuaHR0cC5nZXQoaXNEZXZNb2RlKCkgPyBgJHtjb25maWdVcmx9NWAgOiBjb25maWdVcmwsIHtyZXNwb25zZVR5cGU6IFwidGV4dFwifSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwianNvbjVcIikucGFyc2UoY29uZmlnNSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5odHRwLmdldChjb25maWdVcmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENhbid0IHBhcnNlIGpzb241IGNvbmZpZzogJHtlfWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25maWcgZmlsZSBub3QgZm91bmQgYXQ6ICR7Y29uZmlnVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwcmVwYXJlQ29uZmlnKGNvbmZpZzogSUNvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXBhcmVVcmwodXJsOiBzdHJpbmcsIGVuZGluZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBwcm9qZWN0ID0gIXRoaXMubG9hZGVkQ29uZmlnID8gXCJcIiA6IHRoaXMubG9hZGVkQ29uZmlnLnByb2plY3Q7XHJcbiAgICAgICAgY29uc3QgbmVlZHNQcm90b2NvbCA9IHVybD8uc3RhcnRzV2l0aChcIi8vXCIpID8/IGZhbHNlO1xyXG4gICAgICAgIHVybCA9ICFuZWVkc1Byb3RvY29sICYmIHVybD8uc3RhcnRzV2l0aChcIi9cIikgPyB0aGlzLmxvYWRlZENvbmZpZy5iYXNlRG9tYWluICsgdXJsLnN1YnN0cigxKSA6IHVybCB8fCBcIlwiO1xyXG4gICAgICAgIHVybCA9IGAke3VybC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfSR7ZW5kaW5nfWAucmVwbGFjZShcIltwcm9qZWN0XVwiLCBwcm9qZWN0KTtcclxuICAgICAgICByZXR1cm4gdGhpcy51bml2ZXJzYWwuaXNTZXJ2ZXIgJiYgbmVlZHNQcm90b2NvbCA/IGBodHRwOiR7dXJsfWAgOiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29uZmlnVmFsdWUoa2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRlZENvbmZpZ1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFF1ZXJ5UGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdXJsPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB1cmwgPSB1cmwgfHwgKHRoaXMudW5pdmVyc2FsLmlzQnJvd3NlciA/IHdpbmRvdy5sb2NhdGlvbi5ocmVmIDogXCJcIik7XHJcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xcW1xcXV0vZywgXCJcXFxcJCZcIik7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiWz8mXVwiICsgbmFtZSArIFwiKD0oW14mI10qKXwmfCN8JClcIiksXHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSByZWdleC5leGVjKHVybCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHRzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAoIXJlc3VsdHNbMl0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1syXS5yZXBsYWNlKC9cXCsvZywgXCIgXCIpKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ErrorHandler, Injectable, Injector } from "@angular/core";
|
|
2
|
+
import { UniversalService } from "./universal.service";
|
|
3
|
+
import { ERROR_HANDLER, TOASTER_SERVICE } from "../common-types";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ErrorHandlerService extends ErrorHandler {
|
|
6
|
+
constructor(injector) {
|
|
7
|
+
super();
|
|
8
|
+
this.injector = injector;
|
|
9
|
+
this.errorMap = {};
|
|
10
|
+
}
|
|
11
|
+
handleError(error) {
|
|
12
|
+
try {
|
|
13
|
+
this.universal = this.universal || this.injector.get(UniversalService);
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const date = new Date();
|
|
19
|
+
try {
|
|
20
|
+
this.errorCb = this.errorCb || this.injector.get(ERROR_HANDLER);
|
|
21
|
+
this.errorCb(`[${date}]: ${error.message}\n${error.stack}`);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
if (this.universal.isServer) {
|
|
25
|
+
console.error(`[${date}]: ${error.message}\n${error.stack}`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (this.universal.isServer)
|
|
30
|
+
return;
|
|
31
|
+
const key = typeof btoa !== "undefined" ? btoa(unescape(encodeURIComponent(`${error.message} ${error.stack}`))) : error.message;
|
|
32
|
+
if (this.errorMap[key] && this.errorMap[key].getTime() > date.getTime() - 5000)
|
|
33
|
+
return;
|
|
34
|
+
this.errorMap[key] = date;
|
|
35
|
+
try {
|
|
36
|
+
this.toaster = this.toaster || this.injector.get(TOASTER_SERVICE);
|
|
37
|
+
this.toaster.error(`[${date}]: ${error.message}\n${error.stack}`);
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
}
|
|
41
|
+
console.error(`[${date}]: ${error.message}\n${error.stack}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
ErrorHandlerService.ɵfac = function ErrorHandlerService_Factory(t) { return new (t || ErrorHandlerService)(i0.ɵɵinject(i0.Injector)); };
|
|
45
|
+
ErrorHandlerService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ErrorHandlerService, factory: ErrorHandlerService.ɵfac });
|
|
46
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorHandlerService, [{
|
|
47
|
+
type: Injectable
|
|
48
|
+
}], function () { return [{ type: i0.Injector }]; }, null); })();
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy9zZXJ2aWNlcy9lcnJvci1oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQXlDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztBQUd0RyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQU9qRCxZQUFxQixRQUFrQjtRQUNuQyxLQUFLLEVBQUUsQ0FBQztRQURTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFFbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3BCLElBQUk7WUFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMxRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTztTQUNWO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJO1lBQ0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMvRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPO2FBQ1Y7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSTtZQUFFLE9BQU87UUFDdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSTtZQUNBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDOztzRkF0Q1EsbUJBQW1CO3lFQUFuQixtQkFBbUIsV0FBbkIsbUJBQW1CO3VGQUFuQixtQkFBbUI7Y0FEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0VSUk9SX0hBTkRMRVIsIEVycm9ySGFuZGxlckNhbGxiYWNrLCBJVG9hc3RlclNlcnZpY2UsIFRPQVNURVJfU0VSVklDRX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRXJyb3JIYW5kbGVyU2VydmljZSBleHRlbmRzIEVycm9ySGFuZGxlciB7XHJcblxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2U7XHJcbiAgICBwcml2YXRlIHVuaXZlcnNhbDogVW5pdmVyc2FsU2VydmljZTtcclxuICAgIHByaXZhdGUgZXJyb3JDYjogRXJyb3JIYW5kbGVyQ2FsbGJhY2s7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTWFwOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmVycm9yTWFwID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy51bml2ZXJzYWwgPSB0aGlzLnVuaXZlcnNhbCB8fCB0aGlzLmluamVjdG9yLmdldChVbml2ZXJzYWxTZXJ2aWNlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckNiID0gdGhpcy5lcnJvckNiIHx8IHRoaXMuaW5qZWN0b3IuZ2V0KEVSUk9SX0hBTkRMRVIpO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ2IoYFske2RhdGV9XTogJHtlcnJvci5tZXNzYWdlfVxcbiR7ZXJyb3Iuc3RhY2t9YCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy51bml2ZXJzYWwuaXNTZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske2RhdGV9XTogJHtlcnJvci5tZXNzYWdlfVxcbiR7ZXJyb3Iuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIgPyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChgJHtlcnJvci5tZXNzYWdlfSAke2Vycm9yLnN0YWNrfWApKSkgOiBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIGlmICh0aGlzLmVycm9yTWFwW2tleV0gJiYgdGhpcy5lcnJvck1hcFtrZXldLmdldFRpbWUoKSA+IGRhdGUuZ2V0VGltZSgpIC0gNTAwMCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZXJyb3JNYXBba2V5XSA9IGRhdGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyID0gdGhpcy50b2FzdGVyIHx8IHRoaXMuaW5qZWN0b3IuZ2V0KFRPQVNURVJfU0VSVklDRSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcihgWyR7ZGF0ZX1dOiAke2Vycm9yLm1lc3NhZ2V9XFxuJHtlcnJvci5zdGFja31gKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFske2RhdGV9XTogJHtlcnJvci5tZXNzYWdlfVxcbiR7ZXJyb3Iuc3RhY2t9YCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EventEmitter, Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class EventsService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.eventForwarded = new EventEmitter();
|
|
6
|
+
this.stickyUpdated = new EventEmitter();
|
|
7
|
+
this.languageChanged = new EventEmitter();
|
|
8
|
+
this.sticky = false;
|
|
9
|
+
}
|
|
10
|
+
get isSticky() {
|
|
11
|
+
return this.sticky;
|
|
12
|
+
}
|
|
13
|
+
event(e) {
|
|
14
|
+
this.eventForwarded.emit(e);
|
|
15
|
+
}
|
|
16
|
+
updateSticky(sticky) {
|
|
17
|
+
this.sticky = sticky;
|
|
18
|
+
this.stickyUpdated.emit(sticky);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
EventsService.ɵfac = function EventsService_Factory(t) { return new (t || EventsService)(); };
|
|
22
|
+
EventsService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventsService, factory: EventsService.ɵfac });
|
|
23
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventsService, [{
|
|
24
|
+
type: Injectable
|
|
25
|
+
}], function () { return []; }, null); })();
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUd2RCxNQUFNLE9BQU8sYUFBYTtJQVl0QjtRQUNJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFURCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQVNELEtBQUssQ0FBQyxDQUFRO1FBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFlO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OzBFQTFCUSxhQUFhO21FQUFiLGFBQWEsV0FBYixhQUFhO3VGQUFiLGFBQWE7Y0FEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRXZlbnRzU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgZXZlbnRGb3J3YXJkZWQ6IEV2ZW50RW1pdHRlcjxFdmVudD47XHJcbiAgICByZWFkb25seSBzdGlja3lVcGRhdGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcbiAgICByZWFkb25seSBsYW5ndWFnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xyXG5cclxuICAgIHByaXZhdGUgc3RpY2t5OiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNTdGlja3koKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RpY2t5O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRGb3J3YXJkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG4gICAgICAgIHRoaXMuc3RpY2t5VXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgICAgIHRoaXMuc3RpY2t5ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQoZTogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV2ZW50Rm9yd2FyZGVkLmVtaXQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU3RpY2t5KHN0aWNreTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RpY2t5ID0gc3RpY2t5O1xyXG4gICAgICAgIHRoaXMuc3RpY2t5VXBkYXRlZC5lbWl0KHN0aWNreSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|