@rxap/config 16.0.0-dev.2 → 16.0.0-dev.3

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.
@@ -1,8 +1,8 @@
1
- import { Injectable, Optional, Inject } from '@angular/core';
2
- import { deepMerge, SetObjectValue } from '@rxap/utilities';
1
+ import { Inject, Injectable, Optional, } from '@angular/core';
2
+ import { deepMerge, SetObjectValue, } from '@rxap/utilities';
3
3
  import { RXAP_CONFIG } from './tokens';
4
4
  import * as i0 from "@angular/core";
5
- class ConfigService {
5
+ export class ConfigService {
6
6
  static { this.Config = null; }
7
7
  /**
8
8
  * Static default values for the config object.
@@ -17,6 +17,77 @@ class ConfigService {
17
17
  static { this.Overwrites = {}; }
18
18
  static { this.LocalStorageKey = 'rxap/config/local-config'; }
19
19
  static { this.Urls = ['config.json']; }
20
+ constructor(config = null) {
21
+ this.config = ConfigService.Config;
22
+ if (config) {
23
+ this.config = deepMerge(this.config ?? {}, config);
24
+ }
25
+ if (!this.config) {
26
+ throw new Error('config not available');
27
+ }
28
+ }
29
+ static async SideLoad(url, propertyPath, required, schema) {
30
+ if (!this.Config) {
31
+ throw new Error('Config side load is only possible after the initial config load.');
32
+ }
33
+ const config = await this.loadConfig(url, required, schema);
34
+ SetObjectValue(this.Config, propertyPath, config);
35
+ console.debug(`Side loaded config for '${propertyPath}' successful`, this.Config);
36
+ }
37
+ /**
38
+ * Used to load the app config from a remote resource.
39
+ *
40
+ * Promise.all([ ConfigService.Load() ])
41
+ * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))
42
+ * .catch(err => console.error(err))
43
+ *
44
+ */
45
+ static async Load(options) {
46
+ let config = this.Defaults;
47
+ for (const url of ConfigService.Urls) {
48
+ config = await this.loadConfig(url, true, options?.schema);
49
+ }
50
+ config = deepMerge(config, this.Overwrites);
51
+ if (options?.fromLocalStorage !== false) {
52
+ const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);
53
+ if (localConfig) {
54
+ try {
55
+ config = deepMerge(config, JSON.parse(localConfig));
56
+ }
57
+ catch (e) {
58
+ console.error('local config could not be parsed');
59
+ }
60
+ }
61
+ }
62
+ if (options?.fromUrlParam) {
63
+ const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';
64
+ config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));
65
+ }
66
+ console.debug('app config', config);
67
+ this.Config = config;
68
+ }
69
+ static Get(path, defaultValue, config = this.Config) {
70
+ if (!config) {
71
+ throw new Error('config not loaded');
72
+ }
73
+ let configValue = config;
74
+ if (typeof path !== 'string') {
75
+ throw new Error('The config property path is not a string');
76
+ }
77
+ for (const fragment of path.split('.')) {
78
+ if (configValue && configValue[fragment]) {
79
+ configValue = configValue[fragment];
80
+ }
81
+ else {
82
+ if (defaultValue !== undefined) {
83
+ return defaultValue;
84
+ }
85
+ console.warn(`Config with path '${path}' not found`);
86
+ return undefined;
87
+ }
88
+ }
89
+ return configValue;
90
+ }
20
91
  static async loadConfig(url, required, schema) {
21
92
  let config;
22
93
  let response;
@@ -84,46 +155,6 @@ class ConfigService {
84
155
  document.body.appendChild(ul);
85
156
  }
86
157
  }
87
- static async SideLoad(url, propertyPath, required, schema) {
88
- if (!this.Config) {
89
- throw new Error('Config side load is only possible after the initial config load.');
90
- }
91
- const config = await this.loadConfig(url, required, schema);
92
- SetObjectValue(this.Config, propertyPath, config);
93
- console.debug(`Side loaded config for '${propertyPath}' successful`, this.Config);
94
- }
95
- /**
96
- * Used to load the app config from a remote resource.
97
- *
98
- * Promise.all([ ConfigService.Load() ])
99
- * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))
100
- * .catch(err => console.error(err))
101
- *
102
- */
103
- static async Load(options) {
104
- let config = this.Defaults;
105
- for (const url of ConfigService.Urls) {
106
- config = await this.loadConfig(url, true, options?.schema);
107
- }
108
- config = deepMerge(config, this.Overwrites);
109
- if (options?.fromLocalStorage !== false) {
110
- const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);
111
- if (localConfig) {
112
- try {
113
- config = deepMerge(config, JSON.parse(localConfig));
114
- }
115
- catch (e) {
116
- console.error('local config could not be parsed');
117
- }
118
- }
119
- }
120
- if (options?.fromUrlParam) {
121
- const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';
122
- config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));
123
- }
124
- console.debug('app config', config);
125
- this.Config = config;
126
- }
127
158
  static LoadConfigDefaultFromUrlParam(param = 'config') {
128
159
  const queryString = window.location.search;
129
160
  const urlParams = new URLSearchParams(queryString);
@@ -143,37 +174,6 @@ class ConfigService {
143
174
  }
144
175
  return configFromParams;
145
176
  }
146
- static Get(path, defaultValue, config = this.Config) {
147
- if (!config) {
148
- throw new Error('config not loaded');
149
- }
150
- let configValue = config;
151
- if (typeof path !== 'string') {
152
- throw new Error('The config property path is not a string');
153
- }
154
- for (const fragment of path.split('.')) {
155
- if (configValue?.hasOwnProperty(fragment)) {
156
- configValue = configValue[fragment];
157
- }
158
- else {
159
- if (defaultValue !== undefined) {
160
- return defaultValue;
161
- }
162
- console.warn(`Config with path '${path}' not found`);
163
- return undefined;
164
- }
165
- }
166
- return configValue;
167
- }
168
- constructor(config = null) {
169
- this.config = ConfigService.Config;
170
- if (config) {
171
- this.config = deepMerge(this.config ?? {}, config);
172
- }
173
- if (!this.config) {
174
- throw new Error('config not available');
175
- }
176
- }
177
177
  setLocalConfig(config) {
178
178
  localStorage.setItem(ConfigService.LocalStorageKey, JSON.stringify(config));
179
179
  }
@@ -190,14 +190,13 @@ class ConfigService {
190
190
  }
191
191
  return value;
192
192
  }
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, deps: [{ token: RXAP_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
194
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, providedIn: 'root' }); }
193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, deps: [{ token: RXAP_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
194
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, providedIn: 'root' }); }
195
195
  }
196
- export { ConfigService };
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, decorators: [{
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, decorators: [{
198
197
  type: Injectable,
199
198
  args: [{
200
- providedIn: 'root'
199
+ providedIn: 'root',
201
200
  }]
202
201
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
203
202
  type: Optional
@@ -205,4 +204,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
205
204
  type: Inject,
206
205
  args: [RXAP_CONFIG]
207
206
  }] }]; } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbmZpZy9zcmMvbGliL2NvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBVXZDLE1BR2EsYUFBYTthQUVWLFdBQU0sR0FBUSxJQUFJLEFBQVosQ0FBYTtJQUVqQzs7OztPQUlHO2FBQ1csYUFBUSxHQUFRLEVBQUUsQUFBVixDQUFXO0lBRWpDOzs7T0FHRzthQUNXLGVBQVUsR0FBUSxFQUFFLEFBQVYsQ0FBVzthQUVyQixvQkFBZSxHQUFHLDBCQUEwQixBQUE3QixDQUE4QjthQUU3QyxTQUFJLEdBQUcsQ0FBRSxhQUFhLENBQUUsQUFBcEIsQ0FBcUI7SUFFL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQVUsR0FBVyxFQUFFLFFBQWtCLEVBQUUsTUFBa0I7UUFFMUYsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxRQUFhLENBQUM7UUFFbEIsSUFBSTtZQUNGLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUM1QjtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLE1BQU0sT0FBTyxHQUFHLGdDQUFnQyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pFLElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUks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Z0I7UUFDckIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUlNLEdBQUcsQ0FBVSxZQUFvQixFQUFFLFlBQWdCO1FBQ3hELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBSU0sVUFBVSxDQUFVLFlBQW9CLEVBQUUsWUFBZ0I7UUFDL0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsWUFBWSxHQUFHLENBQUMsQ0FBQztTQUNwRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0F2T1UsYUFBYSxrQkF1TVEsV0FBVztrSEF2TWhDLGFBQWEsY0FGWixNQUFNOztTQUVQLGFBQWE7MkZBQWIsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXdNYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBPcHRpb25hbCxcbiAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgZGVlcE1lcmdlLFxuICBTZXRPYmplY3RWYWx1ZVxufSBmcm9tICdAcnhhcC91dGlsaXRpZXMnO1xuaW1wb3J0IHsgUlhBUF9DT05GSUcgfSBmcm9tICcuL3Rva2Vucyc7XG5pbXBvcnQgeyBOb0luZmVyVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQW55U2NoZW1hIH0gZnJvbSAnam9pJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkT3B0aW9ucyB7XG4gIGZyb21VcmxQYXJhbT86IHN0cmluZyB8IGJvb2xlYW47XG4gIGZyb21Mb2NhbFN0b3JhZ2U/OiBib29sZWFuO1xuICBzY2hlbWE/OiBBbnlTY2hlbWE7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpZ1NlcnZpY2U8Q29uZmlnIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcblxuICBwdWJsaWMgc3RhdGljIENvbmZpZzogYW55ID0gbnVsbDtcblxuICAvKipcbiAgICogU3RhdGljIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY29uZmlnIG9iamVjdC5cbiAgICogV2lsbCBiZSBvdmVyd3JpdHRlbiBieSBhbiBkeW5hbWljIGNvbmZpZyBmaWxlIHNwZWNpZmllZCBpblxuICAgKiB0aGUgVXJscyBhcnJheS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRGVmYXVsdHM6IGFueSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBbnkgdmFsdWUgZGVmaW5pdGlvbiBpbiB0aGUgT3ZlcndyaXRlcyBvYmplY3Qgd2lsbCBvdmVyd3JpdGUgYW55XG4gICAqIHZhbHVlIGZvcm0gdGhlIERlZmF1bHRzIHZhbHVlcyBvciBkeW5hbWljIGNvbmZpZyBmaWxlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBPdmVyd3JpdGVzOiBhbnkgPSB7fTtcblxuICBwdWJsaWMgc3RhdGljIExvY2FsU3RvcmFnZUtleSA9ICdyeGFwL2NvbmZpZy9sb2NhbC1jb25maWcnO1xuXG4gIHB1YmxpYyBzdGF0aWMgVXJscyA9IFsgJ2NvbmZpZy5qc29uJyBdO1xuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIGxvYWRDb25maWc8VCA9IGFueT4odXJsOiBzdHJpbmcsIHJlcXVpcmVkPzogYm9vbGVhbiwgc2NoZW1hPzogQW55U2NoZW1hKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuXG4gICAgbGV0IGNvbmZpZzogYW55O1xuICAgIGxldCByZXNwb25zZTogYW55O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ291bGQgbm90IGZldGNoIGNvbmZpZyBmcm9tICcke3VybH0nOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICB0aGlzLnNob3dFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uZmlnID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBDb3VsZCBub3QgcGFyc2UgY29uZmlnIGZyb20gJyR7dXJsfScgdG8gYSBqc29uIG9iamVjdDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uZmlnID0gYXdhaXQgc2NoZW1hLnZhbGlkYXRlQXN5bmMoY29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBDb25maWcgZnJvbSAnJHt1cmx9JyBpcyBub3QgdmFsaWQ6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLnNob3dFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcblxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2hvd0Vycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGhhc1VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J4YXAtY29uZmlnLWVycm9yJykgIT09IG51bGw7XG4gICAgY29uc3QgdWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnhhcC1jb25maWctZXJyb3InKSA/PyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgIHVsLmlkID0gJ3J4YXAtY29uZmlnLWVycm9yJztcbiAgICB1bC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgdWwuc3R5bGUuYm90dG9tID0gJzE2cHgnO1xuICAgIHVsLnN0eWxlLnJpZ2h0ID0gJzE2cHgnO1xuICAgIHVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XG4gICAgdWwuc3R5bGUucGFkZGluZyA9ICczMnB4JztcbiAgICB1bC5zdHlsZS56SW5kZXggPSAnOTk5OTk5OTknO1xuICAgIHVsLnN0eWxlLmNvbG9yID0gJ2JsYWNrJztcbiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgbGkuaW5uZXJUZXh0ID0gbWVzc2FnZTtcbiAgICB1bC5hcHBlbmRDaGlsZChsaSk7XG4gICAgaWYgKCFoYXNVbCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1bCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBTaWRlTG9hZCh1cmw6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcsIHJlcXVpcmVkPzogYm9vbGVhbiwgc2NoZW1hPzogQW55U2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBpZiAoIXRoaXMuQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpZyBzaWRlIGxvYWQgaXMgb25seSBwb3NzaWJsZSBhZnRlciB0aGUgaW5pdGlhbCBjb25maWcgbG9hZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcodXJsLCByZXF1aXJlZCwgc2NoZW1hKTtcblxuICAgIFNldE9iamVjdFZhbHVlKHRoaXMuQ29uZmlnLCBwcm9wZXJ0eVBhdGgsIGNvbmZpZyk7XG5cbiAgICBjb25zb2xlLmRlYnVnKGBTaWRlIGxvYWRlZCBjb25maWcgZm9yICcke3Byb3BlcnR5UGF0aH0nIHN1Y2Nlc3NmdWxgLCB0aGlzLkNvbmZpZyk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGxvYWQgdGhlIGFwcCBjb25maWcgZnJvbSBhIHJlbW90ZSByZXNvdXJjZS5cbiAgICpcbiAgICogUHJvbWlzZS5hbGwoWyBDb25maWdTZXJ2aWNlLkxvYWQoKSBdKVxuICAgKiAudGhlbigoKSA9PiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSkpXG4gICAqIC5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKVxuICAgKlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBMb2FkKG9wdGlvbnM/OiBDb25maWdMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBjb25maWcgPSB0aGlzLkRlZmF1bHRzO1xuICAgIGZvciAoY29uc3QgdXJsIG9mIENvbmZpZ1NlcnZpY2UuVXJscykge1xuICAgICAgY29uZmlnID0gYXdhaXQgdGhpcy5sb2FkQ29uZmlnKHVybCwgdHJ1ZSwgb3B0aW9ucz8uc2NoZW1hKTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBkZWVwTWVyZ2UoY29uZmlnLCB0aGlzLk92ZXJ3cml0ZXMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LmZyb21Mb2NhbFN0b3JhZ2UgIT09IGZhbHNlKSB7XG5cbiAgICAgIGNvbnN0IGxvY2FsQ29uZmlnID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29uZmlnU2VydmljZS5Mb2NhbFN0b3JhZ2VLZXkpO1xuXG4gICAgICBpZiAobG9jYWxDb25maWcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25maWcgPSBkZWVwTWVyZ2UoY29uZmlnLCBKU09OLnBhcnNlKGxvY2FsQ29uZmlnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xvY2FsIGNvbmZpZyBjb3VsZCBub3QgYmUgcGFyc2VkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5mcm9tVXJsUGFyYW0pIHtcbiAgICAgIGNvbnN0IHBhcmFtID0gdHlwZW9mIG9wdGlvbnMuZnJvbVVybFBhcmFtID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuZnJvbVVybFBhcmFtIDogJ2NvbmZpZyc7XG4gICAgICBjb25maWcgICAgICA9IGRlZXBNZXJnZShjb25maWcsIHRoaXMuTG9hZENvbmZpZ0RlZmF1bHRGcm9tVXJsUGFyYW0ocGFyYW0pKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmRlYnVnKCdhcHAgY29uZmlnJywgY29uZmlnKTtcblxuICAgIHRoaXMuQ29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgTG9hZENvbmZpZ0RlZmF1bHRGcm9tVXJsUGFyYW0ocGFyYW06IHN0cmluZyA9ICdjb25maWcnKSB7XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgY29uc3QgdXJsUGFyYW1zICAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcblxuICAgIGNvbnN0IGNvbmZpZ0Zyb21QYXJhbXMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgY29uZmlnUGFyYW0gb2YgdXJsUGFyYW1zLmdldEFsbCgnY29uZmlnJykpIHtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBjb25maWdQYXJhbS5zcGxpdCgnOycpO1xuICAgICAgICBpZiAoc3BsaXQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3Qga2V5UGF0aCA9IHNwbGl0WyAwIF07XG4gICAgICAgICAgY29uc3QgdmFsdWUgICA9IHNwbGl0WyAxIF07XG4gICAgICAgICAgU2V0T2JqZWN0VmFsdWUoY29uZmlnRnJvbVBhcmFtcywga2V5UGF0aCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBQYXJzaW5nIG9mIHVybCBjb25maWcgcGFyYW0gZmFpbGVkIGZvciAnJHtjb25maWdQYXJhbX0nOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBjb25maWdGcm9tUGFyYW1zO1xuXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEdldDxUID0gYW55LCBLIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KHBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUIHwgdW5kZWZpbmVkLCBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBUXG4gIHB1YmxpYyBzdGF0aWMgR2V0PFQgPSBhbnksIEsgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogTm9JbmZlclR5cGU8VD4sXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gdGhpcy5Db25maWdcbiAgKTogVCB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29uZmlnIG5vdCBsb2FkZWQnKTtcbiAgICB9XG4gICAgbGV0IGNvbmZpZ1ZhbHVlOiBhbnkgPSBjb25maWc7XG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29uZmlnIHByb3BlcnR5IHBhdGggaXMgbm90IGEgc3RyaW5nJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZnJhZ21lbnQgb2YgKHBhdGggYXMgYW55KS5zcGxpdCgnLicpKSB7XG4gICAgICBpZiAoY29uZmlnVmFsdWU/Lmhhc093blByb3BlcnR5KGZyYWdtZW50KSkge1xuICAgICAgICBjb25maWdWYWx1ZSA9IGNvbmZpZ1ZhbHVlWyBmcmFnbWVudCBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLndhcm4oYENvbmZpZyB3aXRoIHBhdGggJyR7cGF0aH0nIG5vdCBmb3VuZGApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyE6IENvbmZpZztcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFJYQVBfQ09ORklHKSBjb25maWc6IGFueSB8IG51bGwgPSBudWxsKSB7XG4gICAgdGhpcy5jb25maWcgPSBDb25maWdTZXJ2aWNlLkNvbmZpZztcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IGRlZXBNZXJnZSh0aGlzLmNvbmZpZyA/PyB7fSwgY29uZmlnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25maWcgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRMb2NhbENvbmZpZyhjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbmZpZ1NlcnZpY2UuTG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckxvY2FsQ29uZmlnKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKENvbmZpZ1NlcnZpY2UuTG9jYWxTdG9yYWdlS2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQ8VCA9IGFueT4ocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgZ2V0PFQgPSBhbnk+KHByb3BlcnR5UGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IE5vSW5mZXJUeXBlPFQ+KTogVDtcbiAgcHVibGljIGdldDxUID0gYW55Pihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBDb25maWdTZXJ2aWNlLkdldChwcm9wZXJ0eVBhdGgsIGRlZmF1bHRWYWx1ZSwgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHVibGljIGdldE9yVGhyb3c8VCA9IGFueT4ocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBUO1xuICBwdWJsaWMgZ2V0T3JUaHJvdzxUID0gYW55Pihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBOb0luZmVyVHlwZTxUPik6IFQ7XG4gIHB1YmxpYyBnZXRPclRocm93PFQgPSBhbnk+KHByb3BlcnR5UGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBUKTogVCB7XG4gICAgY29uc3QgdmFsdWUgPSBDb25maWdTZXJ2aWNlLkdldChwcm9wZXJ0eVBhdGgsIGRlZmF1bHRWYWx1ZSwgdGhpcy5jb25maWcpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbmZpZyBpbiBwYXRoICcke3Byb3BlcnR5UGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG59XG4iXX0=
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvbGliL2NvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBYXZDLE1BQU0sT0FBTyxhQUFhO2FBRVYsV0FBTSxHQUFRLElBQUksQUFBWixDQUFhO0lBRWpDOzs7O09BSUc7YUFDVyxhQUFRLEdBQVEsRUFBRSxBQUFWLENBQVc7SUFFakM7OztPQUdHO2FBQ1csZUFBVSxHQUFRLEVBQUUsQUFBVixDQUFXO2FBRXJCLG9CQUFlLEdBQUcsMEJBQTBCLEFBQTdCLENBQThCO2FBRTdDLFNBQUksR0FBRyxDQUFFLGFBQWEsQ0FBRSxBQUFwQixDQUFxQjtJQUd2QyxZQUE2QyxTQUFxQixJQUFJO1FBQ3BFLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMxQixHQUFXLEVBQ1gsWUFBb0IsRUFDcEIsUUFBa0IsRUFDbEIsTUFBa0I7UUFHbEIsSUFBSSxDQUFDLElBQUks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QyxDQUFDO0lBQzlFLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUlNLEdBQUcsQ0FBVSxZQUFvQixFQUFFLFlBQWdCO1FBQ3hELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBSU0sVUFBVSxDQUFVLFlBQW9CLEVBQUUsWUFBZ0I7UUFDL0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBbUMsWUFBYSxHQUFHLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0FoUFUsYUFBYSxrQkFzQlEsV0FBVztrSEF0QmhDLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBdUJjLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgZGVlcE1lcmdlLFxuICBTZXRPYmplY3RWYWx1ZSxcbn0gZnJvbSAnQHJ4YXAvdXRpbGl0aWVzJztcbmltcG9ydCB7IFJYQVBfQ09ORklHIH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgTm9JbmZlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEFueVNjaGVtYSB9IGZyb20gJ2pvaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZE9wdGlvbnMge1xuICBmcm9tVXJsUGFyYW0/OiBzdHJpbmcgfCBib29sZWFuO1xuICBmcm9tTG9jYWxTdG9yYWdlPzogYm9vbGVhbjtcbiAgc2NoZW1hPzogQW55U2NoZW1hO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlnU2VydmljZTxDb25maWcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuXG4gIHB1YmxpYyBzdGF0aWMgQ29uZmlnOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjb25maWcgb2JqZWN0LlxuICAgKiBXaWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFuIGR5bmFtaWMgY29uZmlnIGZpbGUgc3BlY2lmaWVkIGluXG4gICAqIHRoZSBVcmxzIGFycmF5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBEZWZhdWx0czogYW55ID0ge307XG5cbiAgLyoqXG4gICAqIEFueSB2YWx1ZSBkZWZpbml0aW9uIGluIHRoZSBPdmVyd3JpdGVzIG9iamVjdCB3aWxsIG92ZXJ3cml0ZSBhbnlcbiAgICogdmFsdWUgZm9ybSB0aGUgRGVmYXVsdHMgdmFsdWVzIG9yIGR5bmFtaWMgY29uZmlnIGZpbGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIE92ZXJ3cml0ZXM6IGFueSA9IHt9O1xuXG4gIHB1YmxpYyBzdGF0aWMgTG9jYWxTdG9yYWdlS2V5ID0gJ3J4YXAvY29uZmlnL2xvY2FsLWNvbmZpZyc7XG5cbiAgcHVibGljIHN0YXRpYyBVcmxzID0gWyAnY29uZmlnLmpzb24nIF07XG4gIHB1YmxpYyByZWFkb25seSBjb25maWchOiBDb25maWc7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChSWEFQX0NPTkZJRykgY29uZmlnOiBhbnkgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuY29uZmlnID0gQ29uZmlnU2VydmljZS5Db25maWc7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcgPSBkZWVwTWVyZ2UodGhpcy5jb25maWcgPz8ge30sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29uZmlnIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIFNpZGVMb2FkKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHByb3BlcnR5UGF0aDogc3RyaW5nLFxuICAgIHJlcXVpcmVkPzogYm9vbGVhbixcbiAgICBzY2hlbWE/OiBBbnlTY2hlbWEsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgaWYgKCF0aGlzLkNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25maWcgc2lkZSBsb2FkIGlzIG9ubHkgcG9zc2libGUgYWZ0ZXIgdGhlIGluaXRpYWwgY29uZmlnIGxvYWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5sb2FkQ29uZmlnKHVybCwgcmVxdWlyZWQsIHNjaGVtYSk7XG5cbiAgICBTZXRPYmplY3RWYWx1ZSh0aGlzLkNvbmZpZywgcHJvcGVydHlQYXRoLCBjb25maWcpO1xuXG4gICAgY29uc29sZS5kZWJ1ZyhgU2lkZSBsb2FkZWQgY29uZmlnIGZvciAnJHsgcHJvcGVydHlQYXRoIH0nIHN1Y2Nlc3NmdWxgLCB0aGlzLkNvbmZpZyk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGxvYWQgdGhlIGFwcCBjb25maWcgZnJvbSBhIHJlbW90ZSByZXNvdXJjZS5cbiAgICpcbiAgICogUHJvbWlzZS5hbGwoWyBDb25maWdTZXJ2aWNlLkxvYWQoKSBdKVxuICAgKiAudGhlbigoKSA9PiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSkpXG4gICAqIC5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKVxuICAgKlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBMb2FkKG9wdGlvbnM/OiBDb25maWdMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBjb25maWcgPSB0aGlzLkRlZmF1bHRzO1xuICAgIGZvciAoY29uc3QgdXJsIG9mIENvbmZpZ1NlcnZpY2UuVXJscykge1xuICAgICAgY29uZmlnID0gYXdhaXQgdGhpcy5sb2FkQ29uZmlnKHVybCwgdHJ1ZSwgb3B0aW9ucz8uc2NoZW1hKTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBkZWVwTWVyZ2UoY29uZmlnLCB0aGlzLk92ZXJ3cml0ZXMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LmZyb21Mb2NhbFN0b3JhZ2UgIT09IGZhbHNlKSB7XG5cbiAgICAgIGNvbnN0IGxvY2FsQ29uZmlnID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29uZmlnU2VydmljZS5Mb2NhbFN0b3JhZ2VLZXkpO1xuXG4gICAgICBpZiAobG9jYWxDb25maWcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25maWcgPSBkZWVwTWVyZ2UoY29uZmlnLCBKU09OLnBhcnNlKGxvY2FsQ29uZmlnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xvY2FsIGNvbmZpZyBjb3VsZCBub3QgYmUgcGFyc2VkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5mcm9tVXJsUGFyYW0pIHtcbiAgICAgIGNvbnN0IHBhcmFtID0gdHlwZW9mIG9wdGlvbnMuZnJvbVVybFBhcmFtID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuZnJvbVVybFBhcmFtIDogJ2NvbmZpZyc7XG4gICAgICBjb25maWcgPSBkZWVwTWVyZ2UoY29uZmlnLCB0aGlzLkxvYWRDb25maWdEZWZhdWx0RnJvbVVybFBhcmFtKHBhcmFtKSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnYXBwIGNvbmZpZycsIGNvbmZpZyk7XG5cbiAgICB0aGlzLkNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgR2V0PFQgPSBhbnksIEsgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogVCB8IHVuZGVmaW5lZCxcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICk6IFRcblxuICBwdWJsaWMgc3RhdGljIEdldDxUID0gYW55LCBLIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IE5vSW5mZXJUeXBlPFQ+LFxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHRoaXMuQ29uZmlnLFxuICApOiBUIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25maWcgbm90IGxvYWRlZCcpO1xuICAgIH1cbiAgICBsZXQgY29uZmlnVmFsdWU6IGFueSA9IGNvbmZpZztcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb25maWcgcHJvcGVydHkgcGF0aCBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBmcmFnbWVudCBvZiAocGF0aCBhcyBhbnkpLnNwbGl0KCcuJykpIHtcbiAgICAgIGlmIChjb25maWdWYWx1ZSAmJiBjb25maWdWYWx1ZVtmcmFnbWVudF0pIHtcbiAgICAgICAgY29uZmlnVmFsdWUgPSBjb25maWdWYWx1ZVtmcmFnbWVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybihgQ29uZmlnIHdpdGggcGF0aCAnJHsgcGF0aCB9JyBub3QgZm91bmRgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIGxvYWRDb25maWc8VCA9IGFueT4odXJsOiBzdHJpbmcsIHJlcXVpcmVkPzogYm9vbGVhbiwgc2NoZW1hPzogQW55U2NoZW1hKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuXG4gICAgbGV0IGNvbmZpZzogYW55O1xuICAgIGxldCByZXNwb25zZTogYW55O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYENvdWxkIG5vdCBmZXRjaCBjb25maWcgZnJvbSAnJHsgdXJsIH0nOiAkeyBlcnJvci5tZXNzYWdlIH1gO1xuICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25maWcgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBDb3VsZCBub3QgcGFyc2UgY29uZmlnIGZyb20gJyR7IHVybCB9JyB0byBhIGpzb24gb2JqZWN0OiAkeyBlcnJvci5tZXNzYWdlIH1gO1xuICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IHNjaGVtYS52YWxpZGF0ZUFzeW5jKGNvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ29uZmlnIGZyb20gJyR7IHVybCB9JyBpcyBub3QgdmFsaWQ6ICR7IGVycm9yLm1lc3NhZ2UgfWA7XG4gICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnO1xuXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzaG93RXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFzVWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnhhcC1jb25maWctZXJyb3InKSAhPT0gbnVsbDtcbiAgICBjb25zdCB1bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyeGFwLWNvbmZpZy1lcnJvcicpID8/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG4gICAgdWwuaWQgPSAncnhhcC1jb25maWctZXJyb3InO1xuICAgIHVsLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICB1bC5zdHlsZS5ib3R0b20gPSAnMTZweCc7XG4gICAgdWwuc3R5bGUucmlnaHQgPSAnMTZweCc7XG4gICAgdWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcbiAgICB1bC5zdHlsZS5wYWRkaW5nID0gJzMycHgnO1xuICAgIHVsLnN0eWxlLnpJbmRleCA9ICc5OTk5OTk5OSc7XG4gICAgdWwuc3R5bGUuY29sb3IgPSAnYmxhY2snO1xuICAgIGNvbnN0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICBsaS5pbm5lclRleHQgPSBtZXNzYWdlO1xuICAgIHVsLmFwcGVuZENoaWxkKGxpKTtcbiAgICBpZiAoIWhhc1VsKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBMb2FkQ29uZmlnRGVmYXVsdEZyb21VcmxQYXJhbShwYXJhbSA9ICdjb25maWcnKSB7XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeVN0cmluZyk7XG5cbiAgICBjb25zdCBjb25maWdGcm9tUGFyYW1zID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZpZ1BhcmFtIG9mIHVybFBhcmFtcy5nZXRBbGwoJ2NvbmZpZycpKSB7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gY29uZmlnUGFyYW0uc3BsaXQoJzsnKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGtleVBhdGggPSBzcGxpdFswXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNwbGl0WzFdO1xuICAgICAgICAgIFNldE9iamVjdFZhbHVlKGNvbmZpZ0Zyb21QYXJhbXMsIGtleVBhdGgsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgUGFyc2luZyBvZiB1cmwgY29uZmlnIHBhcmFtIGZhaWxlZCBmb3IgJyR7IGNvbmZpZ1BhcmFtIH0nOiAkeyBlLm1lc3NhZ2UgfWApO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ0Zyb21QYXJhbXM7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZXRMb2NhbENvbmZpZyhjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbmZpZ1NlcnZpY2UuTG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckxvY2FsQ29uZmlnKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKENvbmZpZ1NlcnZpY2UuTG9jYWxTdG9yYWdlS2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQ8VCA9IGFueT4ocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgZ2V0PFQgPSBhbnk+KHByb3BlcnR5UGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IE5vSW5mZXJUeXBlPFQ+KTogVDtcbiAgcHVibGljIGdldDxUID0gYW55Pihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBDb25maWdTZXJ2aWNlLkdldChwcm9wZXJ0eVBhdGgsIGRlZmF1bHRWYWx1ZSwgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHVibGljIGdldE9yVGhyb3c8VCA9IGFueT4ocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBUO1xuICBwdWJsaWMgZ2V0T3JUaHJvdzxUID0gYW55Pihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBOb0luZmVyVHlwZTxUPik6IFQ7XG4gIHB1YmxpYyBnZXRPclRocm93PFQgPSBhbnk+KHByb3BlcnR5UGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBUKTogVCB7XG4gICAgY29uc3QgdmFsdWUgPSBDb25maWdTZXJ2aWNlLkdldChwcm9wZXJ0eVBhdGgsIGRlZmF1bHRWYWx1ZSwgdGhpcy5jb25maWcpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbmZpZyBpbiBwYXRoICckeyBwcm9wZXJ0eVBhdGggfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const RXAP_CONFIG = new InjectionToken('rxap/config');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb25maWcvc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgUlhBUF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ3J4YXAvY29uZmlnJyk7XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9jb25maWcvc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgUlhBUF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ3J4YXAvY29uZmlnJyk7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbmZpZy9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVjbGFyZSB0eXBlIE5vSW5mZXJUeXBlPFQ+ID0gWyBUIF1bVCBleHRlbmRzIGFueSA/IDAgOiBuZXZlcl07XG5cbnR5cGUgUHJldiA9IFtcbiAgbmV2ZXIsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLFxuICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgLi4uMFtdXG5dXG5cbmV4cG9ydCB0eXBlIEpvaW48SywgUD4gPSBLIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBQIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBgJHtLfSR7JycgZXh0ZW5kcyBQID8gJycgOiAnLid9JHtQfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV2ZXIgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUGF0aHM8VCwgRCBleHRlbmRzIG51bWJlciA9IDEwPiA9IFsgRCBdIGV4dGVuZHMgWyBuZXZlciBdID8gbmV2ZXIgOiBUIGV4dGVuZHMgb2JqZWN0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtLIGluIGtleW9mIFRdLT86IEsgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke0t9YCB8IEpvaW48SywgUGF0aHM8VFtLXSwgUHJldltEXT4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1ba2V5b2YgVF0gOiAnJztcblxuZXhwb3J0IHR5cGUgTGVhdmVzPFQsIEQgZXh0ZW5kcyBudW1iZXIgPSAxMD4gPSBbIEQgXSBleHRlbmRzIFsgbmV2ZXIgXSA/IG5ldmVyIDogVCBleHRlbmRzIG9iamVjdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFtLIGluIGtleW9mIFRdLT86IEpvaW48SywgTGVhdmVzPFRbS10sIFByZXZbRF0+PiB9W2tleW9mIFRdIDogJyc7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVjbGFyZSB0eXBlIE5vSW5mZXJUeXBlPFQ+ID0gWyBUIF1bVCBleHRlbmRzIGFueSA/IDAgOiBuZXZlcl07XG5cbnR5cGUgUHJldiA9IFtcbiAgbmV2ZXIsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLFxuICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgLi4uMFtdXG5dXG5cbmV4cG9ydCB0eXBlIEpvaW48SywgUD4gPSBLIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID9cbiAgUCBleHRlbmRzIHN0cmluZyB8IG51bWJlciA/XG4gICAgYCR7IEsgfSR7ICcnIGV4dGVuZHMgUCA/ICcnIDogJy4nIH0keyBQIH1gXG4gICAgOiBuZXZlciA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBQYXRoczxULCBEIGV4dGVuZHMgbnVtYmVyID0gMTA+ID0gWyBEIF0gZXh0ZW5kcyBbIG5ldmVyIF0gPyBuZXZlciA6IFQgZXh0ZW5kcyBvYmplY3QgP1xuICB7XG4gICAgW0sgaW4ga2V5b2YgVF0tPzogSyBleHRlbmRzIHN0cmluZyB8IG51bWJlciA/XG4gICAgYCR7IEsgfWAgfCBKb2luPEssIFBhdGhzPFRbS10sIFByZXZbRF0+PlxuICAgIDogbmV2ZXJcbiAgfVtrZXlvZiBUXSA6ICcnO1xuXG5leHBvcnQgdHlwZSBMZWF2ZXM8VCwgRCBleHRlbmRzIG51bWJlciA9IDEwPiA9IFsgRCBdIGV4dGVuZHMgWyBuZXZlciBdID8gbmV2ZXIgOiBUIGV4dGVuZHMgb2JqZWN0ID9cbiAgeyBbSyBpbiBrZXlvZiBUXS0/OiBKb2luPEssIExlYXZlczxUW0tdLCBQcmV2W0RdPj4gfVtrZXlvZiBUXSA6ICcnO1xuIl19
@@ -2,4 +2,4 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhhcC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvbmZpZy9zcmMvcnhhcC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhhcC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvcnhhcC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Optional, Inject } from '@angular/core';
3
- import { SetObjectValue, deepMerge } from '@rxap/utilities';
3
+ import { deepMerge, SetObjectValue } from '@rxap/utilities';
4
+ import { firstValueFrom } from 'rxjs';
4
5
  import * as i1 from '@angular/common/http';
5
6
  import { HttpClient } from '@angular/common/http';
6
7
  import { finalize, share } from 'rxjs/operators';
@@ -22,6 +23,77 @@ class ConfigService {
22
23
  static { this.Overwrites = {}; }
23
24
  static { this.LocalStorageKey = 'rxap/config/local-config'; }
24
25
  static { this.Urls = ['config.json']; }
26
+ constructor(config = null) {
27
+ this.config = ConfigService.Config;
28
+ if (config) {
29
+ this.config = deepMerge(this.config ?? {}, config);
30
+ }
31
+ if (!this.config) {
32
+ throw new Error('config not available');
33
+ }
34
+ }
35
+ static async SideLoad(url, propertyPath, required, schema) {
36
+ if (!this.Config) {
37
+ throw new Error('Config side load is only possible after the initial config load.');
38
+ }
39
+ const config = await this.loadConfig(url, required, schema);
40
+ SetObjectValue(this.Config, propertyPath, config);
41
+ console.debug(`Side loaded config for '${propertyPath}' successful`, this.Config);
42
+ }
43
+ /**
44
+ * Used to load the app config from a remote resource.
45
+ *
46
+ * Promise.all([ ConfigService.Load() ])
47
+ * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))
48
+ * .catch(err => console.error(err))
49
+ *
50
+ */
51
+ static async Load(options) {
52
+ let config = this.Defaults;
53
+ for (const url of ConfigService.Urls) {
54
+ config = await this.loadConfig(url, true, options?.schema);
55
+ }
56
+ config = deepMerge(config, this.Overwrites);
57
+ if (options?.fromLocalStorage !== false) {
58
+ const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);
59
+ if (localConfig) {
60
+ try {
61
+ config = deepMerge(config, JSON.parse(localConfig));
62
+ }
63
+ catch (e) {
64
+ console.error('local config could not be parsed');
65
+ }
66
+ }
67
+ }
68
+ if (options?.fromUrlParam) {
69
+ const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';
70
+ config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));
71
+ }
72
+ console.debug('app config', config);
73
+ this.Config = config;
74
+ }
75
+ static Get(path, defaultValue, config = this.Config) {
76
+ if (!config) {
77
+ throw new Error('config not loaded');
78
+ }
79
+ let configValue = config;
80
+ if (typeof path !== 'string') {
81
+ throw new Error('The config property path is not a string');
82
+ }
83
+ for (const fragment of path.split('.')) {
84
+ if (configValue && configValue[fragment]) {
85
+ configValue = configValue[fragment];
86
+ }
87
+ else {
88
+ if (defaultValue !== undefined) {
89
+ return defaultValue;
90
+ }
91
+ console.warn(`Config with path '${path}' not found`);
92
+ return undefined;
93
+ }
94
+ }
95
+ return configValue;
96
+ }
25
97
  static async loadConfig(url, required, schema) {
26
98
  let config;
27
99
  let response;
@@ -89,46 +161,6 @@ class ConfigService {
89
161
  document.body.appendChild(ul);
90
162
  }
91
163
  }
92
- static async SideLoad(url, propertyPath, required, schema) {
93
- if (!this.Config) {
94
- throw new Error('Config side load is only possible after the initial config load.');
95
- }
96
- const config = await this.loadConfig(url, required, schema);
97
- SetObjectValue(this.Config, propertyPath, config);
98
- console.debug(`Side loaded config for '${propertyPath}' successful`, this.Config);
99
- }
100
- /**
101
- * Used to load the app config from a remote resource.
102
- *
103
- * Promise.all([ ConfigService.Load() ])
104
- * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))
105
- * .catch(err => console.error(err))
106
- *
107
- */
108
- static async Load(options) {
109
- let config = this.Defaults;
110
- for (const url of ConfigService.Urls) {
111
- config = await this.loadConfig(url, true, options?.schema);
112
- }
113
- config = deepMerge(config, this.Overwrites);
114
- if (options?.fromLocalStorage !== false) {
115
- const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);
116
- if (localConfig) {
117
- try {
118
- config = deepMerge(config, JSON.parse(localConfig));
119
- }
120
- catch (e) {
121
- console.error('local config could not be parsed');
122
- }
123
- }
124
- }
125
- if (options?.fromUrlParam) {
126
- const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';
127
- config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));
128
- }
129
- console.debug('app config', config);
130
- this.Config = config;
131
- }
132
164
  static LoadConfigDefaultFromUrlParam(param = 'config') {
133
165
  const queryString = window.location.search;
134
166
  const urlParams = new URLSearchParams(queryString);
@@ -148,37 +180,6 @@ class ConfigService {
148
180
  }
149
181
  return configFromParams;
150
182
  }
151
- static Get(path, defaultValue, config = this.Config) {
152
- if (!config) {
153
- throw new Error('config not loaded');
154
- }
155
- let configValue = config;
156
- if (typeof path !== 'string') {
157
- throw new Error('The config property path is not a string');
158
- }
159
- for (const fragment of path.split('.')) {
160
- if (configValue?.hasOwnProperty(fragment)) {
161
- configValue = configValue[fragment];
162
- }
163
- else {
164
- if (defaultValue !== undefined) {
165
- return defaultValue;
166
- }
167
- console.warn(`Config with path '${path}' not found`);
168
- return undefined;
169
- }
170
- }
171
- return configValue;
172
- }
173
- constructor(config = null) {
174
- this.config = ConfigService.Config;
175
- if (config) {
176
- this.config = deepMerge(this.config ?? {}, config);
177
- }
178
- if (!this.config) {
179
- throw new Error('config not available');
180
- }
181
- }
182
183
  setLocalConfig(config) {
183
184
  localStorage.setItem(ConfigService.LocalStorageKey, JSON.stringify(config));
184
185
  }
@@ -195,13 +196,13 @@ class ConfigService {
195
196
  }
196
197
  return value;
197
198
  }
198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, deps: [{ token: RXAP_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
199
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, providedIn: 'root' }); }
199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, deps: [{ token: RXAP_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
200
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, providedIn: 'root' }); }
200
201
  }
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, decorators: [{
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, decorators: [{
202
203
  type: Injectable,
203
204
  args: [{
204
- providedIn: 'root'
205
+ providedIn: 'root',
205
206
  }]
206
207
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
207
208
  type: Optional
@@ -225,12 +226,12 @@ class ConfigLoaderService {
225
226
  }
226
227
  const loading$ = this.http.get(url).pipe(finalize(() => this.configLoading.delete(url)), share());
227
228
  this.configLoading.set(url, loading$);
228
- return loading$.toPromise();
229
+ return firstValueFrom(loading$);
229
230
  }
230
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigLoaderService, deps: [{ token: HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
231
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigLoaderService, providedIn: 'root' }); }
231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigLoaderService, deps: [{ token: HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
232
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigLoaderService, providedIn: 'root' }); }
232
233
  }
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigLoaderService, decorators: [{
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigLoaderService, decorators: [{
234
235
  type: Injectable,
235
236
  args: [{ providedIn: 'root' }]
236
237
  }], ctorParameters: function () { return [{ type: i1.HttpClient, decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"rxap-config.mjs","sources":["../../../../libs/config/src/lib/tokens.ts","../../../../libs/config/src/lib/config.service.ts","../../../../libs/config/src/lib/config-loader.service.ts","../../../../libs/config/src/rxap-config.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const RXAP_CONFIG = new InjectionToken('rxap/config');\n","import {\n Injectable,\n Optional,\n Inject\n} from '@angular/core';\nimport {\n deepMerge,\n SetObjectValue\n} from '@rxap/utilities';\nimport { RXAP_CONFIG } from './tokens';\nimport { NoInferType } from './types';\nimport { AnySchema } from 'joi';\n\nexport interface ConfigLoadOptions {\n fromUrlParam?: string | boolean;\n fromLocalStorage?: boolean;\n schema?: AnySchema;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService<Config extends Record<string, any> = Record<string, any>> {\n\n public static Config: any = null;\n\n /**\n * Static default values for the config object.\n * Will be overwritten by an dynamic config file specified in\n * the Urls array.\n */\n public static Defaults: any = {};\n\n /**\n * Any value definition in the Overwrites object will overwrite any\n * value form the Defaults values or dynamic config files\n */\n public static Overwrites: any = {};\n\n public static LocalStorageKey = 'rxap/config/local-config';\n\n public static Urls = [ 'config.json' ];\n\n private static async loadConfig<T = any>(url: string, required?: boolean, schema?: AnySchema): Promise<T | null> {\n\n let config: any;\n let response: any;\n\n try {\n response = await fetch(url)\n } catch (error: any) {\n const message = `Could not fetch config from '${url}': ${error.message}`;\n if (required) {\n this.showError(message);\n throw new Error(message);\n } else {\n console.warn(message);\n return null;\n }\n }\n\n try {\n config = await response.json()\n } catch (error: any) {\n const message = `Could not parse config from '${url}' to a json object: ${error.message}`;\n if (required) {\n this.showError(message);\n throw new Error(message);\n } else {\n console.warn(message);\n return null;\n }\n }\n\n if (schema) {\n try {\n config = await schema.validateAsync(config);\n } catch (error: any) {\n const message = `Config from '${url}' is not valid: ${error.message}`;\n if (required) {\n this.showError(message);\n throw new Error(message);\n } else {\n console.warn(message);\n return null;\n }\n }\n }\n\n return config;\n\n }\n\n private static showError(message: string) {\n const hasUl = document.getElementById('rxap-config-error') !== null;\n const ul = document.getElementById('rxap-config-error') ?? document.createElement('ul');\n ul.id = 'rxap-config-error';\n ul.style.position = 'fixed';\n ul.style.bottom = '16px';\n ul.style.right = '16px';\n ul.style.backgroundColor = 'white';\n ul.style.padding = '32px';\n ul.style.zIndex = '99999999';\n ul.style.color = 'black';\n const li = document.createElement('li');\n li.innerText = message;\n ul.appendChild(li);\n if (!hasUl) {\n document.body.appendChild(ul);\n }\n }\n\n public static async SideLoad(url: string, propertyPath: string, required?: boolean, schema?: AnySchema): Promise<void> {\n\n if (!this.Config) {\n throw new Error('Config side load is only possible after the initial config load.');\n }\n\n const config = await this.loadConfig(url, required, schema);\n\n SetObjectValue(this.Config, propertyPath, config);\n\n console.debug(`Side loaded config for '${propertyPath}' successful`, this.Config);\n\n }\n\n /**\n * Used to load the app config from a remote resource.\n *\n * Promise.all([ ConfigService.Load() ])\n * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))\n * .catch(err => console.error(err))\n *\n */\n public static async Load(options?: ConfigLoadOptions): Promise<void> {\n let config = this.Defaults;\n for (const url of ConfigService.Urls) {\n config = await this.loadConfig(url, true, options?.schema);\n }\n\n config = deepMerge(config, this.Overwrites);\n\n if (options?.fromLocalStorage !== false) {\n\n const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);\n\n if (localConfig) {\n try {\n config = deepMerge(config, JSON.parse(localConfig));\n } catch (e: any) {\n console.error('local config could not be parsed');\n }\n }\n\n }\n\n if (options?.fromUrlParam) {\n const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';\n config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));\n }\n\n console.debug('app config', config);\n\n this.Config = config;\n }\n\n private static LoadConfigDefaultFromUrlParam(param: string = 'config') {\n\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n\n const configFromParams = {};\n\n for (const configParam of urlParams.getAll('config')) {\n\n try {\n const split = configParam.split(';');\n if (split.length === 2) {\n const keyPath = split[ 0 ];\n const value = split[ 1 ];\n SetObjectValue(configFromParams, keyPath, value);\n }\n } catch (e: any) {\n console.warn(`Parsing of url config param failed for '${configParam}': ${e.message}`);\n }\n\n }\n\n return configFromParams;\n\n }\n\n public static Get<T = any, K extends Record<string, any> = Record<string, any>>(path: string, defaultValue: T | undefined, config: Record<string, any>): T\n public static Get<T = any, K extends Record<string, any> = Record<string, any>>(\n path: string,\n defaultValue: NoInferType<T>,\n config: Record<string, any> = this.Config\n ): T {\n if (!config) {\n throw new Error('config not loaded');\n }\n let configValue: any = config;\n if (typeof path !== 'string') {\n throw new Error('The config property path is not a string');\n }\n for (const fragment of (path as any).split('.')) {\n if (configValue?.hasOwnProperty(fragment)) {\n configValue = configValue[ fragment ];\n } else {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n console.warn(`Config with path '${path}' not found`);\n return undefined as any;\n }\n }\n return configValue;\n }\n\n public readonly config!: Config;\n\n constructor(@Optional() @Inject(RXAP_CONFIG) config: any | null = null) {\n this.config = ConfigService.Config;\n if (config) {\n this.config = deepMerge(this.config ?? {}, config);\n }\n if (!this.config) {\n throw new Error('config not available');\n }\n }\n\n public setLocalConfig(config: Config): void {\n localStorage.setItem(ConfigService.LocalStorageKey, JSON.stringify(config));\n }\n\n public clearLocalConfig(): void {\n localStorage.removeItem(ConfigService.LocalStorageKey);\n }\n\n public get<T = any>(propertyPath: string): T | undefined;\n public get<T = any>(propertyPath: string, defaultValue: NoInferType<T>): T;\n public get<T = any>(propertyPath: string, defaultValue?: T): T | undefined {\n return ConfigService.Get(propertyPath, defaultValue, this.config);\n }\n\n public getOrThrow<T = any>(propertyPath: string): T;\n public getOrThrow<T = any>(propertyPath: string, defaultValue: NoInferType<T>): T;\n public getOrThrow<T = any>(propertyPath: string, defaultValue?: T): T {\n const value = ConfigService.Get(propertyPath, defaultValue, this.config);\n if (value === undefined) {\n throw new Error(`Could not find config in path '${propertyPath}'`);\n }\n return value;\n }\n\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { finalize, share } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigLoaderService {\n public readonly configs = new Map<string, any>();\n\n public readonly configLoading = new Map<string, Observable<any>>();\n\n constructor(\n @Inject(HttpClient)\n public readonly http: HttpClient\n ) {}\n\n public async load$<T = any>(url: string): Promise<T> {\n if (this.configs.has(url)) {\n return this.configs.get(url);\n }\n\n if (this.configLoading.has(url)) {\n return this.configLoading.get(url)!.toPromise();\n }\n\n const loading$ = this.http.get<T>(url).pipe(\n finalize(() => this.configLoading.delete(url)),\n share()\n );\n\n this.configLoading.set(url, loading$);\n\n return loading$.toPromise();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rxap-config.mjs","sources":["../../../../../packages/angular/config/src/lib/tokens.ts","../../../../../packages/angular/config/src/lib/config.service.ts","../../../../../packages/angular/config/src/lib/config-loader.service.ts","../../../../../packages/angular/config/src/rxap-config.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const RXAP_CONFIG = new InjectionToken('rxap/config');\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n deepMerge,\n SetObjectValue,\n} from '@rxap/utilities';\nimport { RXAP_CONFIG } from './tokens';\nimport { NoInferType } from './types';\nimport { AnySchema } from 'joi';\n\nexport interface ConfigLoadOptions {\n fromUrlParam?: string | boolean;\n fromLocalStorage?: boolean;\n schema?: AnySchema;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigService<Config extends Record<string, any> = Record<string, any>> {\n\n public static Config: any = null;\n\n /**\n * Static default values for the config object.\n * Will be overwritten by an dynamic config file specified in\n * the Urls array.\n */\n public static Defaults: any = {};\n\n /**\n * Any value definition in the Overwrites object will overwrite any\n * value form the Defaults values or dynamic config files\n */\n public static Overwrites: any = {};\n\n public static LocalStorageKey = 'rxap/config/local-config';\n\n public static Urls = [ 'config.json' ];\n public readonly config!: Config;\n\n constructor(@Optional() @Inject(RXAP_CONFIG) config: any | null = null) {\n this.config = ConfigService.Config;\n if (config) {\n this.config = deepMerge(this.config ?? {}, config);\n }\n if (!this.config) {\n throw new Error('config not available');\n }\n }\n\n public static async SideLoad(\n url: string,\n propertyPath: string,\n required?: boolean,\n schema?: AnySchema,\n ): Promise<void> {\n\n if (!this.Config) {\n throw new Error('Config side load is only possible after the initial config load.');\n }\n\n const config = await this.loadConfig(url, required, schema);\n\n SetObjectValue(this.Config, propertyPath, config);\n\n console.debug(`Side loaded config for '${ propertyPath }' successful`, this.Config);\n\n }\n\n /**\n * Used to load the app config from a remote resource.\n *\n * Promise.all([ ConfigService.Load() ])\n * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))\n * .catch(err => console.error(err))\n *\n */\n public static async Load(options?: ConfigLoadOptions): Promise<void> {\n let config = this.Defaults;\n for (const url of ConfigService.Urls) {\n config = await this.loadConfig(url, true, options?.schema);\n }\n\n config = deepMerge(config, this.Overwrites);\n\n if (options?.fromLocalStorage !== false) {\n\n const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);\n\n if (localConfig) {\n try {\n config = deepMerge(config, JSON.parse(localConfig));\n } catch (e: any) {\n console.error('local config could not be parsed');\n }\n }\n\n }\n\n if (options?.fromUrlParam) {\n const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';\n config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));\n }\n\n console.debug('app config', config);\n\n this.Config = config;\n }\n\n public static Get<T = any, K extends Record<string, any> = Record<string, any>>(\n path: string,\n defaultValue: T | undefined,\n config: Record<string, any>,\n ): T\n\n public static Get<T = any, K extends Record<string, any> = Record<string, any>>(\n path: string,\n defaultValue: NoInferType<T>,\n config: Record<string, any> = this.Config,\n ): T {\n if (!config) {\n throw new Error('config not loaded');\n }\n let configValue: any = config;\n if (typeof path !== 'string') {\n throw new Error('The config property path is not a string');\n }\n for (const fragment of (path as any).split('.')) {\n if (configValue && configValue[fragment]) {\n configValue = configValue[fragment];\n } else {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n console.warn(`Config with path '${ path }' not found`);\n return undefined as any;\n }\n }\n return configValue;\n }\n\n private static async loadConfig<T = any>(url: string, required?: boolean, schema?: AnySchema): Promise<T | null> {\n\n let config: any;\n let response: any;\n\n try {\n response = await fetch(url);\n } catch (error: any) {\n const message = `Could not fetch config from '${ url }': ${ error.message }`;\n if (required) {\n this.showError(message);\n throw new Error(message);\n } else {\n console.warn(message);\n return null;\n }\n }\n\n try {\n config = await response.json();\n } catch (error: any) {\n const message = `Could not parse config from '${ url }' to a json object: ${ error.message }`;\n if (required) {\n this.showError(message);\n throw new Error(message);\n } else {\n console.warn(message);\n return null;\n }\n }\n\n if (schema) {\n try {\n config = await schema.validateAsync(config);\n } catch (error: any) {\n const message = `Config from '${ url }' is not valid: ${ error.message }`;\n if (required) {\n this.showError(message);\n throw new Error(message);\n } else {\n console.warn(message);\n return null;\n }\n }\n }\n\n return config;\n\n }\n\n private static showError(message: string) {\n const hasUl = document.getElementById('rxap-config-error') !== null;\n const ul = document.getElementById('rxap-config-error') ?? document.createElement('ul');\n ul.id = 'rxap-config-error';\n ul.style.position = 'fixed';\n ul.style.bottom = '16px';\n ul.style.right = '16px';\n ul.style.backgroundColor = 'white';\n ul.style.padding = '32px';\n ul.style.zIndex = '99999999';\n ul.style.color = 'black';\n const li = document.createElement('li');\n li.innerText = message;\n ul.appendChild(li);\n if (!hasUl) {\n document.body.appendChild(ul);\n }\n }\n\n private static LoadConfigDefaultFromUrlParam(param = 'config') {\n\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n\n const configFromParams = {};\n\n for (const configParam of urlParams.getAll('config')) {\n\n try {\n const split = configParam.split(';');\n if (split.length === 2) {\n const keyPath = split[0];\n const value = split[1];\n SetObjectValue(configFromParams, keyPath, value);\n }\n } catch (e: any) {\n console.warn(`Parsing of url config param failed for '${ configParam }': ${ e.message }`);\n }\n\n }\n\n return configFromParams;\n\n }\n\n public setLocalConfig(config: Config): void {\n localStorage.setItem(ConfigService.LocalStorageKey, JSON.stringify(config));\n }\n\n public clearLocalConfig(): void {\n localStorage.removeItem(ConfigService.LocalStorageKey);\n }\n\n public get<T = any>(propertyPath: string): T | undefined;\n public get<T = any>(propertyPath: string, defaultValue: NoInferType<T>): T;\n public get<T = any>(propertyPath: string, defaultValue?: T): T | undefined {\n return ConfigService.Get(propertyPath, defaultValue, this.config);\n }\n\n public getOrThrow<T = any>(propertyPath: string): T;\n public getOrThrow<T = any>(propertyPath: string, defaultValue: NoInferType<T>): T;\n public getOrThrow<T = any>(propertyPath: string, defaultValue?: T): T {\n const value = ConfigService.Get(propertyPath, defaultValue, this.config);\n if (value === undefined) {\n throw new Error(`Could not find config in path '${ propertyPath }'`);\n }\n return value;\n }\n\n}\n","import {\n Inject,\n Injectable,\n} from '@angular/core';\nimport {\n firstValueFrom,\n Observable,\n} from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport {\n finalize,\n share,\n} from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigLoaderService {\n public readonly configs = new Map<string, any>();\n\n public readonly configLoading = new Map<string, Observable<any>>();\n\n constructor(\n @Inject(HttpClient)\n public readonly http: HttpClient,\n ) {\n }\n\n public async load$<T = any>(url: string): Promise<T> {\n if (this.configs.has(url)) {\n return this.configs.get(url);\n }\n\n if (this.configLoading.has(url)) {\n return this.configLoading.get(url)!.toPromise();\n }\n\n const loading$ = this.http.get<T>(url).pipe(\n finalize(() => this.configLoading.delete(url)),\n share(),\n );\n\n this.configLoading.set(url, loading$);\n\n return firstValueFrom(loading$);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -21,8 +21,8 @@ export declare class ConfigService<Config extends Record<string, any> = Record<s
21
21
  static Overwrites: any;
22
22
  static LocalStorageKey: string;
23
23
  static Urls: string[];
24
- private static loadConfig;
25
- private static showError;
24
+ readonly config: Config;
25
+ constructor(config?: any | null);
26
26
  static SideLoad(url: string, propertyPath: string, required?: boolean, schema?: AnySchema): Promise<void>;
27
27
  /**
28
28
  * Used to load the app config from a remote resource.
@@ -33,10 +33,10 @@ export declare class ConfigService<Config extends Record<string, any> = Record<s
33
33
  *
34
34
  */
35
35
  static Load(options?: ConfigLoadOptions): Promise<void>;
36
- private static LoadConfigDefaultFromUrlParam;
37
36
  static Get<T = any, K extends Record<string, any> = Record<string, any>>(path: string, defaultValue: T | undefined, config: Record<string, any>): T;
38
- readonly config: Config;
39
- constructor(config?: any | null);
37
+ private static loadConfig;
38
+ private static showError;
39
+ private static LoadConfigDefaultFromUrlParam;
40
40
  setLocalConfig(config: Config): void;
41
41
  clearLocalConfig(): void;
42
42
  get<T = any>(propertyPath: string): T | undefined;