@stemy/ngx-utils 12.1.1 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/bundles/stemy-ngx-utils.umd.js +27 -30
  2. package/bundles/stemy-ngx-utils.umd.js.map +1 -1
  3. package/esm2015/ngx-utils/services/config.service.js +4 -4
  4. package/esm2015/ngx-utils/services/error-handler.service.js +2 -2
  5. package/esm2015/ngx-utils/services/static-language.service.js +17 -17
  6. package/esm2015/ngx-utils/services/storage.service.js +4 -4
  7. package/esm2020/ngx-utils/common-types.mjs +116 -0
  8. package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +178 -0
  9. package/esm2020/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +101 -0
  10. package/esm2020/ngx-utils/components/unordered-list/unordered-list.component.mjs +65 -0
  11. package/esm2020/ngx-utils/directives/async-method.base.mjs +68 -0
  12. package/esm2020/ngx-utils/directives/async-method.directive.mjs +28 -0
  13. package/esm2020/ngx-utils/directives/background.directive.mjs +51 -0
  14. package/esm2020/ngx-utils/directives/dynamic-table-template.directive.mjs +20 -0
  15. package/esm2020/ngx-utils/directives/global-template.directive.mjs +30 -0
  16. package/esm2020/ngx-utils/directives/icon.directive.mjs +67 -0
  17. package/esm2020/ngx-utils/directives/ngx-template-outlet.directive.mjs +90 -0
  18. package/esm2020/ngx-utils/directives/pagination-item.directive.mjs +33 -0
  19. package/esm2020/ngx-utils/directives/pagination.directive.mjs +83 -0
  20. package/esm2020/ngx-utils/directives/resource-if.directive.mjs +50 -0
  21. package/esm2020/ngx-utils/directives/sticky-class.directive.mjs +34 -0
  22. package/esm2020/ngx-utils/directives/sticky.directive.mjs +55 -0
  23. package/esm2020/ngx-utils/directives/unordered-list-item.directive.mjs +77 -0
  24. package/esm2020/ngx-utils/directives/unordered-list-template.directive.mjs +26 -0
  25. package/esm2020/ngx-utils/ngx-utils.module.mjs +321 -0
  26. package/esm2020/ngx-utils/pipes/chunk.pipe.mjs +25 -0
  27. package/esm2020/ngx-utils/pipes/entries.pipe.mjs +28 -0
  28. package/esm2020/ngx-utils/pipes/extra-item-properties.pipe.mjs +31 -0
  29. package/esm2020/ngx-utils/pipes/filter.pipe.mjs +42 -0
  30. package/esm2020/ngx-utils/pipes/find.pipe.mjs +29 -0
  31. package/esm2020/ngx-utils/pipes/format-number.pipe.mjs +21 -0
  32. package/esm2020/ngx-utils/pipes/get-offset.pipe.mjs +17 -0
  33. package/esm2020/ngx-utils/pipes/get-type.pipe.mjs +16 -0
  34. package/esm2020/ngx-utils/pipes/global-template.pipe.mjs +41 -0
  35. package/esm2020/ngx-utils/pipes/group-by.pipe.mjs +27 -0
  36. package/esm2020/ngx-utils/pipes/is-type.pipe.mjs +16 -0
  37. package/esm2020/ngx-utils/pipes/join.pipe.mjs +19 -0
  38. package/esm2020/ngx-utils/pipes/keys.pipe.mjs +22 -0
  39. package/esm2020/ngx-utils/pipes/map.pipe.mjs +29 -0
  40. package/esm2020/ngx-utils/pipes/max.pipe.mjs +26 -0
  41. package/esm2020/ngx-utils/pipes/min.pipe.mjs +26 -0
  42. package/esm2020/ngx-utils/pipes/reduce.pipe.mjs +30 -0
  43. package/esm2020/ngx-utils/pipes/remap.pipe.mjs +32 -0
  44. package/esm2020/ngx-utils/pipes/replace.pipe.mjs +16 -0
  45. package/esm2020/ngx-utils/pipes/reverse.pipe.mjs +24 -0
  46. package/esm2020/ngx-utils/pipes/round.pipe.mjs +21 -0
  47. package/esm2020/ngx-utils/pipes/safe-html.pipe.mjs +34 -0
  48. package/esm2020/ngx-utils/pipes/translate.pipe.mjs +86 -0
  49. package/esm2020/ngx-utils/pipes/values.pipe.mjs +22 -0
  50. package/esm2020/ngx-utils/plugins/resize-event.plugin.mjs +59 -0
  51. package/esm2020/ngx-utils/plugins/scroll-event.plugin.mjs +39 -0
  52. package/esm2020/ngx-utils/services/acl.service.mjs +81 -0
  53. package/esm2020/ngx-utils/services/api.service.mjs +38 -0
  54. package/esm2020/ngx-utils/services/auth.service.mjs +14 -0
  55. package/esm2020/ngx-utils/services/base-http.client.mjs +47 -0
  56. package/esm2020/ngx-utils/services/base-http.service.mjs +298 -0
  57. package/esm2020/ngx-utils/services/config.service.mjs +130 -0
  58. package/esm2020/ngx-utils/services/error-handler.service.mjs +49 -0
  59. package/esm2020/ngx-utils/services/events.service.mjs +26 -0
  60. package/esm2020/ngx-utils/services/formatter.service.mjs +47 -0
  61. package/esm2020/ngx-utils/services/global-template.service.mjs +37 -0
  62. package/esm2020/ngx-utils/services/icon.service.mjs +26 -0
  63. package/esm2020/ngx-utils/services/language.service.mjs +113 -0
  64. package/esm2020/ngx-utils/services/open-api.service.mjs +40 -0
  65. package/esm2020/ngx-utils/services/promise.service.mjs +55 -0
  66. package/esm2020/ngx-utils/services/state.service.mjs +173 -0
  67. package/esm2020/ngx-utils/services/static-language.service.mjs +166 -0
  68. package/esm2020/ngx-utils/services/storage.service.mjs +49 -0
  69. package/esm2020/ngx-utils/services/toaster.service.mjs +32 -0
  70. package/esm2020/ngx-utils/services/translated-url.serializer.mjs +73 -0
  71. package/esm2020/ngx-utils/services/universal.service.mjs +78 -0
  72. package/esm2020/ngx-utils/utils/ajax-request-handler.mjs +40 -0
  73. package/esm2020/ngx-utils/utils/array.utils.mjs +100 -0
  74. package/esm2020/ngx-utils/utils/auth.guard.mjs +181 -0
  75. package/esm2020/ngx-utils/utils/canvas.utils.mjs +388 -0
  76. package/esm2020/ngx-utils/utils/date.utils.mjs +28 -0
  77. package/esm2020/ngx-utils/utils/file.utils.mjs +90 -0
  78. package/esm2020/ngx-utils/utils/generic-value.mjs +20 -0
  79. package/esm2020/ngx-utils/utils/geometry.mjs +132 -0
  80. package/esm2020/ngx-utils/utils/initializer.mjs +20 -0
  81. package/esm2020/ngx-utils/utils/loader.utils.mjs +55 -0
  82. package/esm2020/ngx-utils/utils/math.utils.mjs +15 -0
  83. package/esm2020/ngx-utils/utils/object.utils.mjs +261 -0
  84. package/esm2020/ngx-utils/utils/observable.utils.mjs +63 -0
  85. package/esm2020/ngx-utils/utils/reflect.utils.mjs +33 -0
  86. package/esm2020/ngx-utils/utils/set.utils.mjs +20 -0
  87. package/esm2020/ngx-utils/utils/string.utils.mjs +28 -0
  88. package/esm2020/ngx-utils/utils/timer.utils.mjs +52 -0
  89. package/esm2020/ngx-utils/utils/unique.utils.mjs +24 -0
  90. package/esm2020/ngx-utils/utils/vector.mjs +77 -0
  91. package/esm2020/public_api.mjs +85 -0
  92. package/esm2020/stemy-ngx-utils.mjs +5 -0
  93. package/fesm2015/stemy-ngx-utils.js +23 -23
  94. package/fesm2015/stemy-ngx-utils.js.map +1 -1
  95. package/fesm2015/stemy-ngx-utils.mjs +5196 -0
  96. package/fesm2015/stemy-ngx-utils.mjs.map +1 -0
  97. package/fesm2020/stemy-ngx-utils.mjs +5127 -0
  98. package/fesm2020/stemy-ngx-utils.mjs.map +1 -0
  99. package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +3 -0
  100. package/ngx-utils/components/pagination-menu/pagination-menu.component.d.ts +3 -0
  101. package/ngx-utils/components/unordered-list/unordered-list.component.d.ts +3 -0
  102. package/ngx-utils/directives/async-method.base.d.ts +3 -0
  103. package/ngx-utils/directives/async-method.directive.d.ts +3 -0
  104. package/ngx-utils/directives/background.directive.d.ts +3 -0
  105. package/ngx-utils/directives/dynamic-table-template.directive.d.ts +3 -0
  106. package/ngx-utils/directives/global-template.directive.d.ts +3 -0
  107. package/ngx-utils/directives/icon.directive.d.ts +3 -0
  108. package/ngx-utils/directives/ngx-template-outlet.directive.d.ts +3 -0
  109. package/ngx-utils/directives/pagination-item.directive.d.ts +3 -0
  110. package/ngx-utils/directives/pagination.directive.d.ts +3 -0
  111. package/ngx-utils/directives/resource-if.directive.d.ts +3 -0
  112. package/ngx-utils/directives/sticky-class.directive.d.ts +3 -0
  113. package/ngx-utils/directives/sticky.directive.d.ts +3 -0
  114. package/ngx-utils/directives/unordered-list-item.directive.d.ts +3 -0
  115. package/ngx-utils/directives/unordered-list-template.directive.d.ts +3 -0
  116. package/ngx-utils/pipes/chunk.pipe.d.ts +3 -0
  117. package/ngx-utils/pipes/entries.pipe.d.ts +3 -0
  118. package/ngx-utils/pipes/extra-item-properties.pipe.d.ts +3 -0
  119. package/ngx-utils/pipes/filter.pipe.d.ts +3 -0
  120. package/ngx-utils/pipes/find.pipe.d.ts +3 -0
  121. package/ngx-utils/pipes/format-number.pipe.d.ts +3 -0
  122. package/ngx-utils/pipes/get-offset.pipe.d.ts +3 -0
  123. package/ngx-utils/pipes/get-type.pipe.d.ts +3 -0
  124. package/ngx-utils/pipes/global-template.pipe.d.ts +3 -0
  125. package/ngx-utils/pipes/group-by.pipe.d.ts +3 -0
  126. package/ngx-utils/pipes/is-type.pipe.d.ts +3 -0
  127. package/ngx-utils/pipes/join.pipe.d.ts +3 -0
  128. package/ngx-utils/pipes/keys.pipe.d.ts +3 -0
  129. package/ngx-utils/pipes/map.pipe.d.ts +3 -0
  130. package/ngx-utils/pipes/max.pipe.d.ts +3 -0
  131. package/ngx-utils/pipes/min.pipe.d.ts +3 -0
  132. package/ngx-utils/pipes/reduce.pipe.d.ts +3 -0
  133. package/ngx-utils/pipes/remap.pipe.d.ts +3 -0
  134. package/ngx-utils/pipes/replace.pipe.d.ts +3 -0
  135. package/ngx-utils/pipes/reverse.pipe.d.ts +3 -0
  136. package/ngx-utils/pipes/round.pipe.d.ts +3 -0
  137. package/ngx-utils/pipes/safe-html.pipe.d.ts +3 -0
  138. package/ngx-utils/pipes/translate.pipe.d.ts +4 -0
  139. package/ngx-utils/pipes/values.pipe.d.ts +3 -0
  140. package/ngx-utils/plugins/resize-event.plugin.d.ts +4 -1
  141. package/ngx-utils/plugins/scroll-event.plugin.d.ts +4 -1
  142. package/ngx-utils/services/acl.service.d.ts +3 -0
  143. package/ngx-utils/services/api.service.d.ts +3 -0
  144. package/ngx-utils/services/base-http.client.d.ts +3 -0
  145. package/ngx-utils/services/base-http.service.d.ts +3 -0
  146. package/ngx-utils/services/config.service.d.ts +3 -0
  147. package/ngx-utils/services/error-handler.service.d.ts +3 -0
  148. package/ngx-utils/services/events.service.d.ts +3 -0
  149. package/ngx-utils/services/formatter.service.d.ts +3 -0
  150. package/ngx-utils/services/global-template.service.d.ts +3 -0
  151. package/ngx-utils/services/icon.service.d.ts +3 -0
  152. package/ngx-utils/services/language.service.d.ts +3 -0
  153. package/ngx-utils/services/open-api.service.d.ts +3 -0
  154. package/ngx-utils/services/promise.service.d.ts +3 -0
  155. package/ngx-utils/services/state.service.d.ts +3 -0
  156. package/ngx-utils/services/static-language.service.d.ts +4 -1
  157. package/ngx-utils/services/storage.service.d.ts +3 -0
  158. package/ngx-utils/services/toaster.service.d.ts +3 -0
  159. package/ngx-utils/services/translated-url.serializer.d.ts +3 -0
  160. package/ngx-utils/services/universal.service.d.ts +3 -0
  161. package/ngx-utils/utils/auth.guard.d.ts +3 -0
  162. package/package.json +38 -19
  163. package/public_api.d.ts +1 -0
  164. package/stemy-ngx-utils.d.ts +1 -2
  165. package/stemy-ngx-utils.metadata.json +1 -1
@@ -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 = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: BaseHttpService, deps: [{ token: BaseHttpClient }, { token: StorageService }, { token: LANGUAGE_SERVICE }, { token: TOASTER_SERVICE }, { token: CONFIG_SERVICE }, { token: EXPRESS_REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
274
+ BaseHttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: BaseHttpService });
275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: BaseHttpService, decorators: [{
276
+ type: Injectable
277
+ }], ctorParameters: 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
+ }] }]; } });
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2Jhc2UtaHR0cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQW9CLGFBQWEsRUFBd0MsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RyxPQUFPLEVBQ0gsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBVVgsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7QUFHbEMsTUFBTSxPQUFPLGVBQWU7SUF5QnhCLFlBQTZDLE1BQXNCLEVBQ3RCLE9BQXVCLEVBQ3JCLFFBQTBCLEVBQzNCLE9BQXdCLEVBQ3pCLE9BQXVCLEVBQ1YsVUFBbUIsSUFBSTtRQUxwQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBRTdFLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxD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QUNyQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1JlcXVlc3R9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ09ORklHX1NFUlZJQ0UsXHJcbiAgICBFWFBSRVNTX1JFUVVFU1QsXHJcbiAgICBIdHRwUHJvbWlzZSxcclxuICAgIElDb25maWdTZXJ2aWNlLFxyXG4gICAgSUh0dHBIZWFkZXJzLFxyXG4gICAgSUh0dHBQYXJhbXMsXHJcbiAgICBJSHR0cFNlcnZpY2UsXHJcbiAgICBJSXNzdWVDb250ZXh0LFxyXG4gICAgSUxhbmd1YWdlU2VydmljZSxcclxuICAgIElQYWdpbmF0aW9uRGF0YSxcclxuICAgIElSZXF1ZXN0T3B0aW9ucyxcclxuICAgIElUb2FzdGVyU2VydmljZSxcclxuICAgIExBTkdVQUdFX1NFUlZJQ0UsXHJcbiAgICBQcm9ncmVzc0xpc3RlbmVyLFxyXG4gICAgVE9BU1RFUl9TRVJWSUNFXHJcbn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge01hdGhVdGlsc30gZnJvbSBcIi4uL3V0aWxzL21hdGgudXRpbHNcIjtcclxuXHJcbmltcG9ydCB7QmFzZUh0dHBDbGllbnR9IGZyb20gXCIuL2Jhc2UtaHR0cC5jbGllbnRcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHt0aW1lb3V0fSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtUaW1lb3V0RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBCYXNlSHR0cFNlcnZpY2UgaW1wbGVtZW50cyBJSHR0cFNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgZmFpbGVkUmVxdWVzdHM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJiYXNlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCB3aXRoQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVxdWVzdEhlYWRlcnM6IElIdHRwSGVhZGVycztcclxuICAgIHJlcXVlc3RQYXJhbXM6IElIdHRwUGFyYW1zO1xyXG4gICAgY2FjaGU6IGFueTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJldHJ5RmFpbGVkUmVxdWVzdHMoKTogdm9pZCB7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLmZvckVhY2gociA9PiByKCkpO1xyXG4gICAgICAgIEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1bml2ZXJzYWwoKTogVW5pdmVyc2FsU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS51bml2ZXJzYWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChCYXNlSHR0cENsaWVudCkgcmVhZG9ubHkgY2xpZW50OiBCYXNlSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoU3RvcmFnZVNlcnZpY2UpIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChMQU5HVUFHRV9TRVJWSUNFKSByZWFkb25seSBsYW5ndWFnZTogSUxhbmd1YWdlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSByZWFkb25seSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KENPTkZJR19TRVJWSUNFKSByZWFkb25seSBjb25maWdzOiBJQ29uZmlnU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVhQUkVTU19SRVFVRVNUKSByZWFkb25seSByZXF1ZXN0OiBSZXF1ZXN0ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMucmVxdWVzdFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICB1cmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlVXJsKHVybDogc3RyaW5nLCBwYXJhbXM6IElIdHRwUGFyYW1zKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBodHRwUGFyYW1zID0gdGhpcy5jbGllbnQubWFrZVBhcmFtcyhwYXJhbXMpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaHR0cFBhcmFtcy5rZXlzKCkubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7aHR0cFBhcmFtcy5nZXQoa2V5KX1gO1xyXG4gICAgICAgIH0pLmpvaW4oXCImXCIpO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVybCh1cmwpfT8ke3F1ZXJ5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUxpc3RQYXJhbXMocGFnZTogbnVtYmVyLCBpdGVtc1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nID0gbnVsbCwgb3JkZXJEZXNjZW5kaW5nOiBib29sZWFuID0gbnVsbCwgZmlsdGVyOiBzdHJpbmcgPSBudWxsKTogSUh0dHBQYXJhbXMge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogSUh0dHBQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSksXHJcbiAgICAgICAgICAgIGxpbWl0OiBpdGVtc1BlclBhZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQob3JkZXJCeSkgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKG9yZGVyRGVzY2VuZGluZykpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSBgJHtvcmRlckRlc2NlbmRpbmcgPyBcIi1cIiA6IFwiXCJ9JHtvcmRlckJ5fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiR0VUXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkZWxldGVQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiREVMRVRFXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwb3N0UHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1dFByb21pc2UodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMob3B0aW9ucywgXCJQVVRcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoUHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBBVENIXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGxvYWRQcm9taXNlKHVybDogc3RyaW5nLCBib2R5OiBhbnksIGxpc3RlbmVyPzogUHJvZ3Jlc3NMaXN0ZW5lciwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcclxuICAgICAgICAgICAgaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucywgbGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBsaXN0UHJvbWlzZSh1cmw6IHN0cmluZywgcGFyYW1zOiBJSHR0cFBhcmFtcyk6IFByb21pc2U8SVBhZ2luYXRpb25EYXRhPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElQYWdpbmF0aW9uRGF0YT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZSh1cmwsIHtwYXJhbXM6IHBhcmFtc30pLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLm1ldGE/LnRvdGFsIHx8IGRhdGE/LnRvdGFsIHx8IGRhdGEuaXRlbXM/Lmxlbmd0aCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IGRhdGEubWV0YSB8fCB7fVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTm90IGltcGxlbWVudGVkLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHt9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZVVuYXV0aG9yaXplZEVycm9yKGFic29sdXRlVXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVqZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgaWYgKEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVc2VyIGF1dGggZXJyb3JcIiwgYWJzb2x1dGVVcmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b2FzdFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBpc3N1ZUNvbnRleHQ6IElJc3N1ZUNvbnRleHQsIHJlYXNvbjogYW55LCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIud2FybmluZyhtZXNzYWdlLCB7aXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCwgcmVhc29uOiBhbnksIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuaW5nKG1lc3NhZ2UsIHtpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b1Byb21pc2UodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgbGlzdGVuZXI/OiBQcm9ncmVzc0xpc3RlbmVyKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCA9IHt1cmw6IFwiXCJ9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBQcm9taXNlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIllvdSBtYXkgbm90IG5lZWQgYSByZWplY3QgSGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0IVwiLCB0aGlzLm5hbWUsIHVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVhc29uID0gcmVzcG9uc2UuZXJyb3IgfHwge307XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0V2FybmluZyhgJHt1cmx9IGVuZHBvaW50IGlzIG5vdCBpbXBsZW1lbnRlZCEgQ2xpY2sgaGVyZSwgdG8gcXVpY2tseSBjcmVhdGUgYW4gaXNzdWUuYCwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gLygoRTExMDAwIGR1cGxpY2F0ZSBrZXkgZXJyb3IgY29sbGVjdGlvbjogKC4pK1xcLil8KF8xIGR1cCBrZXk6KC4pKykpL2c7XHJcbiAgICAgICAgICAgIGlmIChyZWFzb24ubWVzc2FnZSAmJiByZWdleC50ZXN0KHJlYXNvbi5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdEVycm9yKFwibWVzc2FnZS5kdXBsaWNhdGUta2V5LmVycm9yLlwiICsgcmVhc29uLm1lc3NhZ2UucmVwbGFjZShyZWdleCwgXCJcIikucmVwbGFjZShcIiBpbmRleDogXCIsIFwiLVwiKSwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RXYXJuaW5nKGAke3VybH0gZW5kcG9pbnQgZXJyb3IgaXMgbm90IGhhbmRsZWQgcHJvcGVybHkhIENsaWNrIGhlcmUsIHRvIHF1aWNrbHkgY3JlYXRlIGFuIGlzc3VlLmAsIGlzc3VlQ29udGV4dCwgcmVhc29uLCBvcHRpb25zKTtcclxuICAgICAgICB9LCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVVcmwodXJsLCBvcHRpb25zKS50aGVuKGFic29sdXRlVXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGlzc3VlQ29udGV4dC51cmwgPSBhYnNvbHV0ZVVybDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNsaWVudC5yZXF1ZXN0KG9wdGlvbnMubWV0aG9kLCBhYnNvbHV0ZVVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFJlcXVlc3QgPSBPYmplY3RVdGlscy5pc051bWJlcihvcHRpb25zLnRpbWVvdXQpICYmIG9wdGlvbnMudGltZW91dCA+IDBcclxuICAgICAgICAgICAgICAgICAgICA/IHJlcXVlc3QucGlwZSh0aW1lb3V0KG9wdGlvbnMudGltZW91dCkpIDogcmVxdWVzdDtcclxuICAgICAgICAgICAgICAgIGZpbmFsUmVxdWVzdC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXBvcnRQcm9ncmVzcyAmJiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogTWF0aFV0aWxzLnJvdW5kKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsLCAyLCAwLjAxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2ZW50LnRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIocHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnBhcnNlUmVzcG9uc2UoZXZlbnQsIHVybCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgYXMgSHR0cEhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0aEtleSA9IFwiQXV0aG9yaXphdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHVzZSB0b2tlbiBhdXRoXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jICYmIGhlYWRlcnMuaGFzKGF1dGhLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlblRpbWUgPSB0aGlzLnN0b3JhZ2UuZ2V0KFwidXNlclRva2VuVGltZVwiKSB8fCBjdXJyZW50VGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHRoZSBsYXN0IHJlcXVlc3Qgd2FzIGEgbG9uZyBsb25nIHRpbWUgYWdvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIDYwMDAwMCA+IHVzZXJUb2tlblRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlIHwgVGltZW91dEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgVGltZW91dEVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAzMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhLZXkgPSBcIkF1dGhvcml6YXRpb25cIjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBhdXRob3JpemF0aW9uIGhlYWRlciBleGlzdHMgYW5kIHdlIHN0aWxsIGhhdmUgYW4gVW5hdXRob3JpemVkIHJlc3BvbnNlIHByb21wdCB0aGUgdXNlciB0byBsb2cgaW4gYWdhaW5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVycy5oYXMoYXV0aEtleSkgJiYgcmVzcG9uc2Uuc3RhdHVzID09IDQwMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdXNoZWQgPSB0aGlzLnB1c2hGYWlsZWRSZXF1ZXN0KHVybCwgb3B0aW9ucywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVycyhvcHRpb25zLm9yaWdpbmFsSGVhZGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMsIGxpc3RlbmVyKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVzaGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVVbmF1dGhvcml6ZWRFcnJvcihhYnNvbHV0ZVVybCwgb3B0aW9ucywgKCkgPT4gcmVqZWN0KHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHVzaEZhaWxlZFJlcXVlc3QodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVxOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwidG9rZW5zXCIpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBCYXNlSHR0cFNlcnZpY2UuZmFpbGVkUmVxdWVzdHMucHVzaChyZXEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjaGVja0hlYWRlcnMoaGVhZGVyczogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFoZWFkZXJzIHx8ICFoZWFkZXJzLmNvb2tpZSB8fCAhaGVhZGVycy5yZWZlcmVyIHx8ICFoZWFkZXJzLmhvc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGVhZGVycy5yZWZlcmVyLmluZGV4T2YoaGVhZGVycy5ob3N0KSA+PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtYWtlT3B0aW9ucyhvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBtZXRob2Q6IHN0cmluZyA9IFwiR0VUXCIsIGJvZHk/OiBhbnkpOiBJUmVxdWVzdE9wdGlvbnMge1xyXG4gICAgICAgIC8vIFNldCBiYXNlIG9wdGlvbnNcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IHsuLi5vcHRpb25zfSA6IHt9O1xyXG4gICAgICAgIG9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xyXG4gICAgICAgIG9wdGlvbnMub2JzZXJ2ZSA9IG9wdGlvbnMub2JzZXJ2ZSB8fCBcImJvZHlcIjtcclxuICAgICAgICBvcHRpb25zLm9yaWdpbmFsSGVhZGVycyA9IG9wdGlvbnMub3JpZ2luYWxIZWFkZXJzIHx8IChvcHRpb25zLmhlYWRlcnMgYXMgSUh0dHBIZWFkZXJzKSB8fCB7fTtcclxuICAgICAgICBvcHRpb25zLndpdGhDcmVkZW50aWFscyA9IE9iamVjdFV0aWxzLmlzQm9vbGVhbihvcHRpb25zLndpdGhDcmVkZW50aWFscykgPyBvcHRpb25zLndpdGhDcmVkZW50aWFscyA6IHRoaXMud2l0aENyZWRlbnRpYWxzO1xyXG4gICAgICAgIG9wdGlvbnMuYm9keSA9IGJvZHkgfHwge307XHJcbiAgICAgICAgLy8gU2V0IGNvb2tpZXMgZnJvbSBzZXJ2ZXIgc2lkZSByZXF1ZXN0XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9ICF0aGlzLnJlcXVlc3QgPyBudWxsIDogdGhpcy5yZXF1ZXN0LmhlYWRlcnM7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tIZWFkZXJzKGhlYWRlcnMpKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIkNvb2tpZVwiXSA9IGhlYWRlcnMuY29va2llO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzKG9wdGlvbnMpO1xyXG4gICAgICAgIG9wdGlvbnMucGFyYW1zID0gdGhpcy5tYWtlUGFyYW1zKG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtYWtlSGVhZGVycyhvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBIdHRwSGVhZGVycyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50Lm1ha2VIZWFkZXJzKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVxdWVzdEhlYWRlcnMsIG9wdGlvbnM/LmhlYWRlcnMgfHwge30pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZVBhcmFtcyhvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBIdHRwUGFyYW1zIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQubWFrZVBhcmFtcyhPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcXVlc3RQYXJhbXMsIG9wdGlvbnM/LnBhcmFtcyB8fCB7fSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBhbnksIHVybDogc3RyaW5nLCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGFyc2VVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybCh1cmwpLnJlcGxhY2UoLyg/OigoPyE6KS5cXC8pXFwvKS9nLCBcIiQxXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBhYnNvbHV0ZVVybCh1cmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBhYnNvbHV0ZVVybCA9IHRoaXMucGFyc2VVcmwodXJsKTtcclxuICAgICAgICBpZiAodXJsID09IFwiYXBpLWRvY3NcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVVcmwucmVwbGFjZShcIi9hcGlcIiwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhYnNvbHV0ZVVybDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXhwcmVzc1JlcXVlc3RVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IHRoaXMucmVxdWVzdDtcclxuICAgICAgICBpZiAoIXJlcSB8fCAhdXJsIHx8IHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSB8fCB1cmwuc3RhcnRzV2l0aChcIi8vXCIpKSByZXR1cm4gdXJsO1xyXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHVybC5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIjtcclxuICAgICAgICByZXR1cm4gYCR7cmVxLnByb3RvY29sfTovLyR7cmVxLmdldChcImhvc3RcIil9JHtzZXBhcmF0b3J9JHt1cmx9YDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,130 @@
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
+ const JSON5 = require("json5");
10
+ export class ConfigService {
11
+ constructor(http, universal, rootElement, baseConfig = null, scriptParams = null) {
12
+ this.http = http;
13
+ this.universal = universal;
14
+ this.rootElement = rootElement;
15
+ for (const key in []) {
16
+ Object.defineProperty(Array.prototype, key, {
17
+ enumerable: false
18
+ });
19
+ }
20
+ let baseUrl = "";
21
+ if (this.universal.isBrowser) {
22
+ const currentScript = document.currentScript;
23
+ if (!!currentScript) {
24
+ const scriptSrc = currentScript.src;
25
+ const srcParts = scriptSrc.split(".js");
26
+ baseUrl = scriptSrc.substr(0, srcParts[0].lastIndexOf("/") + 1);
27
+ }
28
+ }
29
+ this.baseConfig = baseConfig || {};
30
+ this.loadedConfig = Object.assign(!baseUrl ? {} : { baseUrl, baseDomain: this.parseDomain(baseUrl) }, this.baseConfig);
31
+ this.scriptParameters = scriptParams || {};
32
+ this.loaderFunc = () => {
33
+ this.loader = this.loader || new Promise((resolve, reject) => {
34
+ this.loadJson().then(config => {
35
+ this.loadedConfig = config = Object.assign(this.loadedConfig, config);
36
+ this.prepareConfig(config).then(c => {
37
+ this.loadedConfig = c;
38
+ c.baseUrl = c.baseUrl || "/";
39
+ resolve(c);
40
+ });
41
+ }, reject);
42
+ });
43
+ return this.loader;
44
+ };
45
+ this.initService();
46
+ }
47
+ get load() {
48
+ return this.loaderFunc;
49
+ }
50
+ get config() {
51
+ return this.loadedConfig;
52
+ }
53
+ get configUrl() {
54
+ return `${this.loadedConfig.baseUrl}config/config.json`;
55
+ }
56
+ parseDomain(baseUrl) {
57
+ try {
58
+ const url = new URL(baseUrl);
59
+ const port = url.port && url.port !== "443" && url.port !== "80" ? `:${url.port}` : ``;
60
+ return `${url.protocol}//${url.hostname}${port}/`;
61
+ }
62
+ catch {
63
+ return "/";
64
+ }
65
+ }
66
+ initService() {
67
+ }
68
+ async loadJson() {
69
+ if (this.universal.isServer) {
70
+ return Promise.resolve(this.loadedConfig);
71
+ }
72
+ const configUrl = this.configUrl;
73
+ try {
74
+ const config5 = await this.http.get(isDevMode() ? `${configUrl}5` : configUrl, { responseType: "text" }).toPromise();
75
+ return JSON5.parse(config5);
76
+ }
77
+ catch (e) {
78
+ try {
79
+ const config = await this.http.get(configUrl).toPromise();
80
+ console.log(`Can't parse json5 config: ${e}`);
81
+ return config;
82
+ }
83
+ catch (e) {
84
+ throw new Error(`Config file not found at: ${configUrl}`);
85
+ }
86
+ }
87
+ }
88
+ prepareConfig(config) {
89
+ return Promise.resolve(config);
90
+ }
91
+ prepareUrl(url, ending) {
92
+ const project = !this.loadedConfig ? "" : this.loadedConfig.project;
93
+ const needsProtocol = url?.startsWith("//") ?? false;
94
+ url = !needsProtocol && url?.startsWith("/") ? this.loadedConfig.baseDomain + url.substr(1) : url || "";
95
+ url = `${url.replace(/\/+$/, "")}${ending}`.replace("[project]", project);
96
+ return this.universal.isServer && needsProtocol ? `http:${url}` : url;
97
+ }
98
+ getConfigValue(key) {
99
+ return this.loadedConfig[key];
100
+ }
101
+ getQueryParameter(name, url) {
102
+ url = url || (this.universal.isBrowser ? window.location.href : "");
103
+ name = name.replace(/[\[\]]/g, "\\$&");
104
+ const regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url);
105
+ if (!results)
106
+ return null;
107
+ if (!results[2])
108
+ return "";
109
+ return decodeURIComponent(results[2].replace(/\+/g, " "));
110
+ }
111
+ }
112
+ ConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConfigService, deps: [{ token: i1.HttpClient }, { token: i2.UniversalService }, { token: ROOT_ELEMENT }, { token: BASE_CONFIG, optional: true }, { token: SCRIPT_PARAMS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
113
+ ConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConfigService });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConfigService, decorators: [{
115
+ type: Injectable
116
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.UniversalService }, { type: undefined, decorators: [{
117
+ type: Inject,
118
+ args: [ROOT_ELEMENT]
119
+ }] }, { type: i3.IConfiguration, decorators: [{
120
+ type: Optional
121
+ }, {
122
+ type: Inject,
123
+ args: [BASE_CONFIG]
124
+ }] }, { type: undefined, decorators: [{
125
+ type: Optional
126
+ }, {
127
+ type: Inject,
128
+ args: [SCRIPT_PARAMS]
129
+ }] }]; } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxXQUFXLEVBQWtCLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRXpHLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUcvQixNQUFNLE9BQU8sYUFBYTtJQW9CdEIsWUFBcUIsSUFBZ0IsRUFDaEIsU0FBMkIsRUFDTCxXQUFnQixFQUNkLGFBQTZCLElBQUksRUFDL0IsZUFBb0IsSUFBSTtRQUpsRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ0wsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFHdkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDeEMsVUFBVSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUMxQixNQUFNLGFBQWEsR0FBSSxRQUFRLENBQUMsYUFBbUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2pCLE1BQU0sU0FBUyxH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QyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7OzBHQXRIUSxhQUFhLDRFQXNCRixZQUFZLGFBQ0EsV0FBVyw2QkFDWCxhQUFhOzhHQXhCcEMsYUFBYTsyRkFBYixhQUFhO2tCQUR6QixVQUFVOzswQkF1Qk0sTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzswQkFDOUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsLCBpc0Rldk1vZGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7VW5pdmVyc2FsU2VydmljZX0gZnJvbSBcIi4vdW5pdmVyc2FsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtCQVNFX0NPTkZJRywgSUNvbmZpZ1NlcnZpY2UsIElDb25maWd1cmF0aW9uLCBST09UX0VMRU1FTlQsIFNDUklQVF9QQVJBTVN9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IEpTT041ID0gcmVxdWlyZShcImpzb241XCIpO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ29uZmlnU2VydmljZSBpbXBsZW1lbnRzIElDb25maWdTZXJ2aWNlIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYmFzZUNvbmZpZzogSUNvbmZpZ3VyYXRpb247XHJcbiAgICBwcm90ZWN0ZWQgbG9hZGVkQ29uZmlnOiBJQ29uZmlndXJhdGlvbjtcclxuICAgIHByb3RlY3RlZCBzY3JpcHRQYXJhbWV0ZXJzOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgbG9hZGVyOiBQcm9taXNlPElDb25maWd1cmF0aW9uPjtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2FkZXJGdW5jOiAoKSA9PiBQcm9taXNlPElDb25maWd1cmF0aW9uPjtcclxuXHJcbiAgICBnZXQgbG9hZCgpOiAoKSA9PiBQcm9taXNlPElDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVyRnVuYztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnKCk6IElDb25maWd1cmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbmZpZ1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxvYWRlZENvbmZpZy5iYXNlVXJsfWNvbmZpZy9jb25maWcuanNvbmA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHVuaXZlcnNhbDogVW5pdmVyc2FsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoUk9PVF9FTEVNRU5UKSByZWFkb25seSByb290RWxlbWVudDogYW55LFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChCQVNFX0NPTkZJRykgYmFzZUNvbmZpZzogSUNvbmZpZ3VyYXRpb24gPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChTQ1JJUFRfUEFSQU1TKSBzY3JpcHRQYXJhbXM6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBbXSkge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCBrZXksIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYmFzZVVybCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzQnJvd3Nlcikge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgYXMgSFRNTFNjcmlwdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoISFjdXJyZW50U2NyaXB0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTcmMgPSBjdXJyZW50U2NyaXB0LnNyYztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyY1BhcnRzID0gc2NyaXB0U3JjLnNwbGl0KFwiLmpzXCIpO1xyXG4gICAgICAgICAgICAgICAgYmFzZVVybCA9IHNjcmlwdFNyYy5zdWJzdHIoMCwgc3JjUGFydHNbMF0ubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iYXNlQ29uZmlnID0gYmFzZUNvbmZpZyB8fCB7fTtcclxuICAgICAgICB0aGlzLmxvYWRlZENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgICFiYXNlVXJsID8ge30gOiB7YmFzZVVybCwgYmFzZURvbWFpbjogdGhpcy5wYXJzZURvbWFpbihiYXNlVXJsKX0sXHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRQYXJhbWV0ZXJzID0gc2NyaXB0UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgIHRoaXMubG9hZGVyRnVuYyA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0aGlzLmxvYWRlciB8fCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEpzb24oKS50aGVuKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRDb25maWcgPSBjb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMubG9hZGVkQ29uZmlnLCBjb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUNvbmZpZyhjb25maWcpLnRoZW4oYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkQ29uZmlnID0gYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5iYXNlVXJsID0gYy5iYXNlVXJsIHx8IFwiL1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRlcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaW5pdFNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGFyc2VEb21haW4oYmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGJhc2VVcmwpO1xyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgJiYgdXJsLnBvcnQgIT09IFwiNDQzXCIgJiYgdXJsLnBvcnQgIT09IFwiODBcIiA/IGA6JHt1cmwucG9ydH1gIDogYGA7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX0ke3BvcnR9L2A7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIi9cIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEpzb24oKTogUHJvbWlzZTxJQ29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIGlmICh0aGlzLnVuaXZlcnNhbC5pc1NlcnZlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMubG9hZGVkQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29uZmlnVXJsID0gdGhpcy5jb25maWdVcmw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnNSA9IGF3YWl0IHRoaXMuaHR0cC5nZXQoaXNEZXZNb2RlKCkgPyBgJHtjb25maWdVcmx9NWAgOiBjb25maWdVcmwsIHtyZXNwb25zZVR5cGU6IFwidGV4dFwifSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09ONS5wYXJzZShjb25maWc1KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmh0dHAuZ2V0KGNvbmZpZ1VybCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ2FuJ3QgcGFyc2UganNvbjUgY29uZmlnOiAke2V9YCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZyBmaWxlIG5vdCBmb3VuZCBhdDogJHtjb25maWdVcmx9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHByZXBhcmVDb25maWcoY29uZmlnOiBJQ29uZmlndXJhdGlvbik6IFByb21pc2U8SUNvbmZpZ3VyYXRpb24+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZVVybCh1cmw6IHN0cmluZywgZW5kaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHByb2plY3QgPSAhdGhpcy5sb2FkZWRDb25maWcgPyBcIlwiIDogdGhpcy5sb2FkZWRDb25maWcucHJvamVjdDtcclxuICAgICAgICBjb25zdCBuZWVkc1Byb3RvY29sID0gdXJsPy5zdGFydHNXaXRoKFwiLy9cIikgPz8gZmFsc2U7XHJcbiAgICAgICAgdXJsID0gIW5lZWRzUHJvdG9jb2wgJiYgdXJsPy5zdGFydHNXaXRoKFwiL1wiKSA/IHRoaXMubG9hZGVkQ29uZmlnLmJhc2VEb21haW4gKyB1cmwuc3Vic3RyKDEpIDogdXJsIHx8IFwiXCI7XHJcbiAgICAgICAgdXJsID0gYCR7dXJsLnJlcGxhY2UoL1xcLyskLywgXCJcIil9JHtlbmRpbmd9YC5yZXBsYWNlKFwiW3Byb2plY3RdXCIsIHByb2plY3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuaXZlcnNhbC5pc1NlcnZlciAmJiBuZWVkc1Byb3RvY29sID8gYGh0dHA6JHt1cmx9YCA6IHVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb25maWdWYWx1ZShrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkQ29uZmlnW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UXVlcnlQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHVybCA9IHVybCB8fCAodGhpcy51bml2ZXJzYWwuaXNCcm93c2VyID8gd2luZG93LmxvY2F0aW9uLmhyZWYgOiBcIlwiKTtcclxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFxbXFxdXS9nLCBcIlxcXFwkJlwiKTtcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCJbPyZdXCIgKyBuYW1lICsgXCIoPShbXiYjXSopfCZ8I3wkKVwiKSxcclxuICAgICAgICAgICAgcmVzdWx0cyA9IHJlZ2V4LmV4ZWModXJsKTtcclxuICAgICAgICBpZiAoIXJlc3VsdHMpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICghcmVzdWx0c1syXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzJdLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -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 = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ErrorHandlerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
45
+ ErrorHandlerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ErrorHandlerService });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ErrorHandlerService, decorators: [{
47
+ type: Injectable
48
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy9zZXJ2aWNlcy9lcnJvci1oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQXlDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztBQUd0RyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQU9qRCxZQUFxQixRQUFrQjtRQUNuQyxLQUFLLEVBQUUsQ0FBQztRQURTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFFbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3BCLElBQUk7WUFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMxRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTztTQUNWO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJO1lBQ0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMvRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPO2FBQ1Y7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSTtZQUFFLE9BQU87UUFDdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSTtZQUNBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDOztnSEF0Q1EsbUJBQW1CO29IQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0VSUk9SX0hBTkRMRVIsIEVycm9ySGFuZGxlckNhbGxiYWNrLCBJVG9hc3RlclNlcnZpY2UsIFRPQVNURVJfU0VSVklDRX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRXJyb3JIYW5kbGVyU2VydmljZSBleHRlbmRzIEVycm9ySGFuZGxlciB7XHJcblxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2U7XHJcbiAgICBwcml2YXRlIHVuaXZlcnNhbDogVW5pdmVyc2FsU2VydmljZTtcclxuICAgIHByaXZhdGUgZXJyb3JDYjogRXJyb3JIYW5kbGVyQ2FsbGJhY2s7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTWFwOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmVycm9yTWFwID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy51bml2ZXJzYWwgPSB0aGlzLnVuaXZlcnNhbCB8fCB0aGlzLmluamVjdG9yLmdldChVbml2ZXJzYWxTZXJ2aWNlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckNiID0gdGhpcy5lcnJvckNiIHx8IHRoaXMuaW5qZWN0b3IuZ2V0KEVSUk9SX0hBTkRMRVIpO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ2IoYFske2RhdGV9XTogJHtlcnJvci5tZXNzYWdlfVxcbiR7ZXJyb3Iuc3RhY2t9YCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy51bml2ZXJzYWwuaXNTZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske2RhdGV9XTogJHtlcnJvci5tZXNzYWdlfVxcbiR7ZXJyb3Iuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIgPyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChgJHtlcnJvci5tZXNzYWdlfSAke2Vycm9yLnN0YWNrfWApKSkgOiBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIGlmICh0aGlzLmVycm9yTWFwW2tleV0gJiYgdGhpcy5lcnJvck1hcFtrZXldLmdldFRpbWUoKSA+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 = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: EventsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
22
+ EventsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: EventsService });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: EventsService, decorators: [{
24
+ type: Injectable
25
+ }], ctorParameters: function () { return []; } });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUd2RCxNQUFNLE9BQU8sYUFBYTtJQVl0QjtRQUNJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFURCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQVNELEtBQUssQ0FBQyxDQUFRO1FBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFlO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OzBHQTFCUSxhQUFhOzhHQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRXZlbnRzU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgZXZlbnRGb3J3YXJkZWQ6IEV2ZW50RW1pdHRlcjxFdmVudD47XHJcbiAgICByZWFkb25seSBzdGlja3lVcGRhdGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcbiAgICByZWFkb25seSBsYW5ndWFnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xyXG5cclxuICAgIHByaXZhdGUgc3RpY2t5OiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNTdGlja3koKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RpY2t5O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRGb3J3YXJkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG4gICAgICAgIHRoaXMuc3RpY2t5VXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgICAgIHRoaXMuc3RpY2t5ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQoZTogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV2ZW50Rm9yd2FyZGVkLmVtaXQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU3RpY2t5KHN0aWNreTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RpY2t5ID0gc3RpY2t5O1xyXG4gICAgICAgIHRoaXMuc3RpY2t5VXBkYXRlZC5lbWl0KHN0aWNreSk7XHJcbiAgICB9XHJcbn1cclxuIl19