@rxap/config 16.0.0-dev.2 → 16.0.0-dev.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +371 -0
- package/LICENSE +621 -21
- package/LICENSE.md +621 -0
- package/README.md +8 -63
- package/esm2022/index.mjs +6 -2
- package/esm2022/lib/config-loader.service.mjs +9 -9
- package/esm2022/lib/config-testing-service.mjs +33 -0
- package/esm2022/lib/config.service.mjs +114 -76
- package/esm2022/lib/tokens.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/rxap-config.mjs +1 -1
- package/fesm2022/rxap-config.mjs +174 -101
- package/fesm2022/rxap-config.mjs.map +1 -1
- package/index.d.ts +3 -1
- package/lib/config-testing-service.d.ts +12 -0
- package/lib/config.service.d.ts +19 -8
- package/package.json +47 -41
- package/theme.css +1 -0
- package/collection.json +0 -15
- package/migration.json +0 -4
- package/src/schematics/ng-add/index.d.ts +0 -3
- package/src/schematics/ng-add/index.js +0 -59
- package/src/schematics/ng-add/index.js.map +0 -1
- package/src/schematics/ng-add/schema.json +0 -15
- package/src/schematics/side-load/index.d.ts +0 -3
- package/src/schematics/side-load/index.js +0 -27
- package/src/schematics/side-load/index.js.map +0 -1
- package/src/schematics/side-load/schema.json +0 -29
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
@rxap/config
|
|
2
|
-
|
|
1
|
+
# @rxap/config
|
|
2
|
+
> Simple config file manager for angular applications.
|
|
3
3
|
|
|
4
4
|
[](https://www.npmjs.com/package/@rxap/config)
|
|
5
5
|
[](https://commitizen.github.io/cz-cli/)
|
|
@@ -8,70 +8,15 @@
|
|
|
8
8
|

|
|
9
9
|

|
|
10
10
|
|
|
11
|
-
> Simple config file manager for angular applications.
|
|
12
|
-
|
|
13
11
|
- [Installation](#installation)
|
|
14
|
-
- [Get started](#get-started)
|
|
15
|
-
- [Schematics](#schematics)
|
|
16
12
|
|
|
17
13
|
# Installation
|
|
18
14
|
|
|
15
|
+
**Add the package to your workspace:**
|
|
16
|
+
```bash
|
|
17
|
+
yarn add @rxap/config
|
|
19
18
|
```
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
*Setup the package @rxap/config for the workspace.*
|
|
24
|
-
|
|
25
|
-
# Get started
|
|
26
|
-
|
|
27
|
-
Update the angular application `main.ts` to support @rxap/config.
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
// (optional) Defines a list of configuration urls.
|
|
32
|
-
ConfigService.Urls = ['/config/config.json'];
|
|
33
|
-
|
|
34
|
-
// Ensures that the configuration is loaded before the angular application is started
|
|
35
|
-
Promise.all([ConfigService.Load()]).then(() =>
|
|
36
|
-
platformBrowserDynamic()
|
|
37
|
-
.bootstrapModule(AppModule)
|
|
38
|
-
.catch((err) => console.error(err))
|
|
39
|
-
);
|
|
40
|
-
|
|
19
|
+
**Install peer dependencies:**
|
|
20
|
+
```bash
|
|
21
|
+
yarn add @angular/common@^16.1.4 @angular/core@^16.1.4 @rxap/environment@^16.0.0-dev.18 @rxap/utilities@^16.0.0-dev.23 rxjs@^7.8.0 tslib@2.6.2
|
|
41
22
|
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# Schematics
|
|
45
|
-
|
|
46
|
-
## ng-add
|
|
47
|
-
> Setup the package @rxap/config for the workspace.
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
ng g @rxap/config:ng-add
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
Option | Type | Default | Description
|
|
54
|
-
--- | --- | --- | ---
|
|
55
|
-
project | string | | The project where the environment feature should be added
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
## side-load
|
|
59
|
-
> Add a side load config to the project main file.
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
ng g @rxap/config:side-load
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Option | Type | Default | Description
|
|
66
|
-
--- | --- | --- | ---
|
|
67
|
-
project | string | | The project name
|
|
68
|
-
url | string | | Url for the config that should be side loaded
|
|
69
|
-
propertyPath | string | | Property path where the config should be added
|
|
70
|
-
required | boolean | false |
|
|
71
|
-
|
|
72
|
-
| Required |
|
|
73
|
-
| --- |
|
|
74
|
-
| project |
|
|
75
|
-
| url |
|
|
76
|
-
| propertyPath |
|
|
77
|
-
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
// region
|
|
2
|
+
export * from './lib/config-loader.service';
|
|
3
|
+
export * from './lib/config-testing-service';
|
|
1
4
|
export * from './lib/config.service';
|
|
2
5
|
export * from './lib/tokens';
|
|
3
|
-
export * from './lib/
|
|
4
|
-
|
|
6
|
+
export * from './lib/types';
|
|
7
|
+
// endregion
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZWdpb24gXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWctbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uZmlnLXRlc3Rpbmctc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2tlbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMnO1xuLy8gZW5kcmVnaW9uXG4iXX0=
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Injectable,
|
|
1
|
+
import { Inject, Injectable, } from '@angular/core';
|
|
2
|
+
import { firstValueFrom, } from 'rxjs';
|
|
2
3
|
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { finalize, share } from 'rxjs/operators';
|
|
4
|
+
import { finalize, share, } from 'rxjs/operators';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/common/http";
|
|
6
|
-
class ConfigLoaderService {
|
|
7
|
+
export class ConfigLoaderService {
|
|
7
8
|
constructor(http) {
|
|
8
9
|
this.http = http;
|
|
9
10
|
this.configs = new Map();
|
|
@@ -18,17 +19,16 @@ class ConfigLoaderService {
|
|
|
18
19
|
}
|
|
19
20
|
const loading$ = this.http.get(url).pipe(finalize(() => this.configLoading.delete(url)), share());
|
|
20
21
|
this.configLoading.set(url, loading$);
|
|
21
|
-
return loading
|
|
22
|
+
return firstValueFrom(loading$);
|
|
22
23
|
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.
|
|
24
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigLoaderService, deps: [{ token: HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigLoaderService, providedIn: 'root' }); }
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigLoaderService, decorators: [{
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigLoaderService, decorators: [{
|
|
28
28
|
type: Injectable,
|
|
29
29
|
args: [{ providedIn: 'root' }]
|
|
30
30
|
}], ctorParameters: function () { return [{ type: i1.HttpClient, decorators: [{
|
|
31
31
|
type: Inject,
|
|
32
32
|
args: [HttpClient]
|
|
33
33
|
}] }]; } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9jb25maWcvc3JjL2xpYi9jb25maWctbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGNBQWMsR0FFZixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLEtBQUssR0FDTixNQUFNLGdCQUFnQixDQUFDOzs7QUFHeEIsTUFBTSxPQUFPLG1CQUFtQjtJQUs5QixZQUVrQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBTmxCLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBRWpDLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7SUFNbkUsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQVUsR0FBVztRQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakQ7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3pDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM5QyxLQUFLLEVBQUUsQ0FDUixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXRDLE9BQU8sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBNUJVLG1CQUFtQixrQkFNcEIsVUFBVTtrSEFOVCxtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTzdCLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBmaXJzdFZhbHVlRnJvbSxcbiAgT2JzZXJ2YWJsZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgZmluYWxpemUsXG4gIHNoYXJlLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29uZmlnTG9hZGVyU2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWdzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnTG9hZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPGFueT4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChIdHRwQ2xpZW50KVxuICAgIHB1YmxpYyByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkJDxUID0gYW55Pih1cmw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ3MuaGFzKHVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3MuZ2V0KHVybCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnTG9hZGluZy5oYXModXJsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnTG9hZGluZy5nZXQodXJsKSEudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGluZyQgPSB0aGlzLmh0dHAuZ2V0PFQ+KHVybCkucGlwZShcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuY29uZmlnTG9hZGluZy5kZWxldGUodXJsKSksXG4gICAgICBzaGFyZSgpLFxuICAgICk7XG5cbiAgICB0aGlzLmNvbmZpZ0xvYWRpbmcuc2V0KHVybCwgbG9hZGluZyQpO1xuXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKGxvYWRpbmckKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { getFromObject, SetToObject, } from '@rxap/utilities';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ConfigTestingService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.config = {};
|
|
7
|
+
}
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
9
|
+
clearLocalConfig() {
|
|
10
|
+
}
|
|
11
|
+
set(propertyPath, value) {
|
|
12
|
+
SetToObject(this.config, propertyPath, value);
|
|
13
|
+
}
|
|
14
|
+
get(propertyPath, defaultValue) {
|
|
15
|
+
return getFromObject(this.config, propertyPath, defaultValue);
|
|
16
|
+
}
|
|
17
|
+
getOrThrow(propertyPath) {
|
|
18
|
+
const value = this.get(propertyPath);
|
|
19
|
+
if (value === undefined) {
|
|
20
|
+
throw new Error(`Could not find config in path '${propertyPath}'`);
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
25
|
+
setLocalConfig(config) {
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigTestingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigTestingService }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigTestingService, decorators: [{
|
|
31
|
+
type: Injectable
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXRlc3Rpbmctc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvY29uZmlnL3NyYy9saWIvY29uZmlnLXRlc3Rpbmctc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsV0FBVyxHQUNaLE1BQU0saUJBQWlCLENBQUM7O0FBSXpCLE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFVyxXQUFNLEdBQXdCLEVBQUUsQ0FBQztLQXlCM0M7SUF2QkMsZ0VBQWdFO0lBQ2hFLGdCQUFnQjtJQUNoQixDQUFDO0lBRUQsR0FBRyxDQUFJLFlBQW9CLEVBQUUsS0FBUTtRQUNuQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELEdBQUcsQ0FBSSxZQUFvQixFQUFFLFlBQWdCO1FBQzNDLE9BQU8sYUFBYSxDQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxVQUFVLENBQUksWUFBb0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBSSxZQUFZLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBbUMsWUFBYSxHQUFHLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxjQUFjLENBQUMsTUFBMkI7SUFDMUMsQ0FBQzs4R0F6QlUsb0JBQW9CO2tIQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBnZXRGcm9tT2JqZWN0LFxuICBTZXRUb09iamVjdCxcbn0gZnJvbSAnQHJ4YXAvdXRpbGl0aWVzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ1Rlc3RpbmdTZXJ2aWNlIGltcGxlbWVudHMgQ29uZmlnU2VydmljZSB7XG4gIHJlYWRvbmx5IGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgY2xlYXJMb2NhbENvbmZpZygpOiB2b2lkIHtcbiAgfVxuXG4gIHNldDxUPihwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICBTZXRUb09iamVjdCh0aGlzLmNvbmZpZywgcHJvcGVydHlQYXRoLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQ8VD4ocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZ2V0RnJvbU9iamVjdDxULCBUPih0aGlzLmNvbmZpZywgcHJvcGVydHlQYXRoLCBkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0T3JUaHJvdzxUPihwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQ8VD4ocHJvcGVydHlQYXRoKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBjb25maWcgaW4gcGF0aCAnJHsgcHJvcGVydHlQYXRoIH0nYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgc2V0TG9jYWxDb25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Injectable, Optional,
|
|
2
|
-
import { deepMerge, SetObjectValue } from '@rxap/utilities';
|
|
1
|
+
import { Inject, Injectable, Optional, } from '@angular/core';
|
|
2
|
+
import { coerceArray, 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.
|
|
@@ -16,7 +16,60 @@ class ConfigService {
|
|
|
16
16
|
*/
|
|
17
17
|
static { this.Overwrites = {}; }
|
|
18
18
|
static { this.LocalStorageKey = 'rxap/config/local-config'; }
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated instead use the url property of the ConfigLoadOptions
|
|
21
|
+
*/
|
|
22
|
+
static { this.Urls = []; }
|
|
23
|
+
constructor(config = null) {
|
|
24
|
+
this.config = ConfigService.Config;
|
|
25
|
+
if (config) {
|
|
26
|
+
this.config = deepMerge(this.config ?? {}, config);
|
|
27
|
+
}
|
|
28
|
+
if (!this.config) {
|
|
29
|
+
throw new Error('config not available');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Used to load the app config from a remote resource.
|
|
34
|
+
*
|
|
35
|
+
* Promise.all([ ConfigService.Load() ])
|
|
36
|
+
* .then(() => platformBrowserDynamic().bootstrapModule(AppModule))
|
|
37
|
+
* .catch(err => console.error(err))
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
static async Load(options, environment) {
|
|
41
|
+
let config = deepMerge(this.Defaults, options?.static ?? {});
|
|
42
|
+
const urls = (options?.url ? coerceArray(options.url) : ConfigService.Urls).map(url => {
|
|
43
|
+
if (typeof url === 'function') {
|
|
44
|
+
if (!environment) {
|
|
45
|
+
throw new Error('environment is required when url is a function');
|
|
46
|
+
}
|
|
47
|
+
return coerceArray(url(environment));
|
|
48
|
+
}
|
|
49
|
+
return coerceArray(url);
|
|
50
|
+
}).flat();
|
|
51
|
+
for (const url of urls) {
|
|
52
|
+
config = deepMerge(config, await this.loadConfig(url, true, options?.schema));
|
|
53
|
+
}
|
|
54
|
+
config = deepMerge(config, this.Overwrites);
|
|
55
|
+
if (options?.fromLocalStorage !== false) {
|
|
56
|
+
const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);
|
|
57
|
+
if (localConfig) {
|
|
58
|
+
try {
|
|
59
|
+
config = deepMerge(config, JSON.parse(localConfig));
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
console.error('local config could not be parsed');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (options?.fromUrlParam) {
|
|
67
|
+
const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';
|
|
68
|
+
config = deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));
|
|
69
|
+
}
|
|
70
|
+
console.debug('app config', config);
|
|
71
|
+
this.Config = config;
|
|
72
|
+
}
|
|
20
73
|
static async loadConfig(url, required, schema) {
|
|
21
74
|
let config;
|
|
22
75
|
let response;
|
|
@@ -34,6 +87,25 @@ class ConfigService {
|
|
|
34
87
|
return null;
|
|
35
88
|
}
|
|
36
89
|
}
|
|
90
|
+
if (!response.ok) {
|
|
91
|
+
let message = `Config request results in non ok response for '${url}': (${response.status}) ${response.statusText}`;
|
|
92
|
+
switch (response.status) {
|
|
93
|
+
case 404:
|
|
94
|
+
message = `Config not found at '${url}'`;
|
|
95
|
+
break;
|
|
96
|
+
case 405:
|
|
97
|
+
message = `Config service is not started yet. Wait 30s and try again.`;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
if (required) {
|
|
101
|
+
this.showError(message);
|
|
102
|
+
throw new Error(message);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
console.warn(message);
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
37
109
|
try {
|
|
38
110
|
config = await response.json();
|
|
39
111
|
}
|
|
@@ -66,64 +138,6 @@ class ConfigService {
|
|
|
66
138
|
}
|
|
67
139
|
return config;
|
|
68
140
|
}
|
|
69
|
-
static showError(message) {
|
|
70
|
-
const hasUl = document.getElementById('rxap-config-error') !== null;
|
|
71
|
-
const ul = document.getElementById('rxap-config-error') ?? document.createElement('ul');
|
|
72
|
-
ul.id = 'rxap-config-error';
|
|
73
|
-
ul.style.position = 'fixed';
|
|
74
|
-
ul.style.bottom = '16px';
|
|
75
|
-
ul.style.right = '16px';
|
|
76
|
-
ul.style.backgroundColor = 'white';
|
|
77
|
-
ul.style.padding = '32px';
|
|
78
|
-
ul.style.zIndex = '99999999';
|
|
79
|
-
ul.style.color = 'black';
|
|
80
|
-
const li = document.createElement('li');
|
|
81
|
-
li.innerText = message;
|
|
82
|
-
ul.appendChild(li);
|
|
83
|
-
if (!hasUl) {
|
|
84
|
-
document.body.appendChild(ul);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
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
141
|
static LoadConfigDefaultFromUrlParam(param = 'config') {
|
|
128
142
|
const queryString = window.location.search;
|
|
129
143
|
const urlParams = new URLSearchParams(queryString);
|
|
@@ -143,6 +157,14 @@ class ConfigService {
|
|
|
143
157
|
}
|
|
144
158
|
return configFromParams;
|
|
145
159
|
}
|
|
160
|
+
static async SideLoad(url, propertyPath, required, schema) {
|
|
161
|
+
if (!this.Config) {
|
|
162
|
+
throw new Error('Config side load is only possible after the initial config load.');
|
|
163
|
+
}
|
|
164
|
+
const config = await this.loadConfig(url, required, schema);
|
|
165
|
+
SetObjectValue(this.Config, propertyPath, config);
|
|
166
|
+
console.debug(`Side loaded config for '${propertyPath}' successful`, this.Config);
|
|
167
|
+
}
|
|
146
168
|
static Get(path, defaultValue, config = this.Config) {
|
|
147
169
|
if (!config) {
|
|
148
170
|
throw new Error('config not loaded');
|
|
@@ -152,7 +174,8 @@ class ConfigService {
|
|
|
152
174
|
throw new Error('The config property path is not a string');
|
|
153
175
|
}
|
|
154
176
|
for (const fragment of path.split('.')) {
|
|
155
|
-
|
|
177
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
178
|
+
if (configValue.hasOwnProperty(fragment)) {
|
|
156
179
|
configValue = configValue[fragment];
|
|
157
180
|
}
|
|
158
181
|
else {
|
|
@@ -165,14 +188,30 @@ class ConfigService {
|
|
|
165
188
|
}
|
|
166
189
|
return configValue;
|
|
167
190
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
191
|
+
static showError(message) {
|
|
192
|
+
const hasUl = document.getElementById('rxap-config-error') !== null;
|
|
193
|
+
const ul = document.getElementById('rxap-config-error') ?? document.createElement('ul');
|
|
194
|
+
ul.id = 'rxap-config-error';
|
|
195
|
+
ul.style.position = 'fixed';
|
|
196
|
+
ul.style.bottom = '16px';
|
|
197
|
+
ul.style.right = '16px';
|
|
198
|
+
ul.style.backgroundColor = 'white';
|
|
199
|
+
ul.style.padding = '32px';
|
|
200
|
+
ul.style.zIndex = '99999999';
|
|
201
|
+
ul.style.color = 'black';
|
|
202
|
+
const messageLi = document.createElement('li');
|
|
203
|
+
messageLi.innerText = message;
|
|
204
|
+
ul.appendChild(messageLi);
|
|
205
|
+
const refreshHintLi = document.createElement('li');
|
|
206
|
+
refreshHintLi.innerText = 'Please refresh the page to try again.';
|
|
207
|
+
ul.appendChild(refreshHintLi);
|
|
208
|
+
const autoRefreshHintLi = document.createElement('li');
|
|
209
|
+
autoRefreshHintLi.innerText = 'The page will refresh automatically in 30 seconds.';
|
|
210
|
+
ul.appendChild(autoRefreshHintLi);
|
|
211
|
+
if (!hasUl) {
|
|
212
|
+
document.body.appendChild(ul);
|
|
175
213
|
}
|
|
214
|
+
setTimeout(() => location.reload(), 30000);
|
|
176
215
|
}
|
|
177
216
|
setLocalConfig(config) {
|
|
178
217
|
localStorage.setItem(ConfigService.LocalStorageKey, JSON.stringify(config));
|
|
@@ -190,14 +229,13 @@ class ConfigService {
|
|
|
190
229
|
}
|
|
191
230
|
return value;
|
|
192
231
|
}
|
|
193
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.
|
|
194
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.
|
|
232
|
+
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 }); }
|
|
233
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, providedIn: 'root' }); }
|
|
195
234
|
}
|
|
196
|
-
|
|
197
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ConfigService, decorators: [{
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ConfigService, decorators: [{
|
|
198
236
|
type: Injectable,
|
|
199
237
|
args: [{
|
|
200
|
-
providedIn: 'root'
|
|
238
|
+
providedIn: 'root',
|
|
201
239
|
}]
|
|
202
240
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
203
241
|
type: Optional
|
|
@@ -205,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
|
|
|
205
243
|
type: Inject,
|
|
206
244
|
args: [RXAP_CONFIG]
|
|
207
245
|
}] }]; } });
|
|
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=
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvbGliL2NvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxjQUFjLEdBQ2YsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQW1CdkMsTUFBTSxPQUFPLGFBQWE7YUFFVixXQUFNLEdBQVEsSUFBSSxBQUFaLENBQWE7SUFFakM7Ozs7T0FJRzthQUNXLGFBQVEsR0FBUSxFQUFFLEFBQVYsQ0FBVztJQUVqQzs7O09BR0c7YUFDVyxlQUFVLEdBQVEsRUFBRSxBQUFWLENBQVc7YUFFckIsb0JBQWUsR0FBRywwQkFBMEIsQUFBN0IsQ0FBOEI7SUFFM0Q7O09BRUc7YUFDVyxTQUFJLEdBQUcsRUFBRSxBQUFMLENBQU07SUFHeEIsWUFBNkMsU0FBcUIsSUFBSTtRQUNwRSxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBMkIsRUFBRSxXQUF5QjtRQUM3RSxJQUFJLE1BQU0sR0FB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LGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkEwQmMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0ByeGFwL2Vudmlyb25tZW50JztcbmltcG9ydCB7XG4gIGNvZXJjZUFycmF5LFxuICBkZWVwTWVyZ2UsXG4gIFNldE9iamVjdFZhbHVlLFxufSBmcm9tICdAcnhhcC91dGlsaXRpZXMnO1xuaW1wb3J0IHsgUlhBUF9DT05GSUcgfSBmcm9tICcuL3Rva2Vucyc7XG5pbXBvcnQgeyBOb0luZmVyVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBBbnlTY2hlbWEgPSB7IHZhbGlkYXRlQXN5bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55IH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZE9wdGlvbnMge1xuICBmcm9tVXJsUGFyYW0/OiBzdHJpbmcgfCBib29sZWFuO1xuICBmcm9tTG9jYWxTdG9yYWdlPzogYm9vbGVhbjtcbiAgc2NoZW1hPzogQW55U2NoZW1hO1xuICB1cmw/OiBzdHJpbmcgfCBzdHJpbmdbXSB8ICgoZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KSA9PiBzdHJpbmcgfCBzdHJpbmdbXSk7XG4gIC8qKlxuICAgKiBzdGF0aWMgY29uZmlnIHZhbHVlc1xuICAgKi9cbiAgc3RhdGljPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpZ1NlcnZpY2U8Q29uZmlnIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcblxuICBwdWJsaWMgc3RhdGljIENvbmZpZzogYW55ID0gbnVsbDtcblxuICAvKipcbiAgICogU3RhdGljIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY29uZmlnIG9iamVjdC5cbiAgICogV2lsbCBiZSBvdmVyd3JpdHRlbiBieSBhbiBkeW5hbWljIGNvbmZpZyBmaWxlIHNwZWNpZmllZCBpblxuICAgKiB0aGUgVXJscyBhcnJheS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRGVmYXVsdHM6IGFueSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBbnkgdmFsdWUgZGVmaW5pdGlvbiBpbiB0aGUgT3ZlcndyaXRlcyBvYmplY3Qgd2lsbCBvdmVyd3JpdGUgYW55XG4gICAqIHZhbHVlIGZvcm0gdGhlIERlZmF1bHRzIHZhbHVlcyBvciBkeW5hbWljIGNvbmZpZyBmaWxlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBPdmVyd3JpdGVzOiBhbnkgPSB7fTtcblxuICBwdWJsaWMgc3RhdGljIExvY2FsU3RvcmFnZUtleSA9ICdyeGFwL2NvbmZpZy9sb2NhbC1jb25maWcnO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBpbnN0ZWFkIHVzZSB0aGUgdXJsIHByb3BlcnR5IG9mIHRoZSBDb25maWdMb2FkT3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBVcmxzID0gW107XG4gIHB1YmxpYyByZWFkb25seSBjb25maWchOiBDb25maWc7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChSWEFQX0NPTkZJRykgY29uZmlnOiBhbnkgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuY29uZmlnID0gQ29uZmlnU2VydmljZS5Db25maWc7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcgPSBkZWVwTWVyZ2UodGhpcy5jb25maWcgPz8ge30sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29uZmlnIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBsb2FkIHRoZSBhcHAgY29uZmlnIGZyb20gYSByZW1vdGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIFByb21pc2UuYWxsKFsgQ29uZmlnU2VydmljZS5Mb2FkKCkgXSlcbiAgICogLnRoZW4oKCkgPT4gcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpKVxuICAgKiAuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKSlcbiAgICpcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgTG9hZChvcHRpb25zPzogQ29uZmlnTG9hZE9wdGlvbnMsIGVudmlyb25tZW50PzogRW52aXJvbm1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29uZmlnID0gZGVlcE1lcmdlKHRoaXMuRGVmYXVsdHMsIG9wdGlvbnM/LnN0YXRpYyA/PyB7fSk7XG5cbiAgICBjb25zdCB1cmxzID0gKG9wdGlvbnM/LnVybCA/IGNvZXJjZUFycmF5KG9wdGlvbnMudXJsKSA6IENvbmZpZ1NlcnZpY2UuVXJscykubWFwKHVybCA9PiB7XG4gICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoIWVudmlyb25tZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbnZpcm9ubWVudCBpcyByZXF1aXJlZCB3aGVuIHVybCBpcyBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZXJjZUFycmF5KHVybChlbnZpcm9ubWVudCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvZXJjZUFycmF5KHVybCk7XG4gICAgfSkuZmxhdCgpO1xuXG4gICAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgICAgY29uZmlnID0gZGVlcE1lcmdlKGNvbmZpZywgYXdhaXQgdGhpcy5sb2FkQ29uZmlnKHVybCwgdHJ1ZSwgb3B0aW9ucz8uc2NoZW1hKSk7XG4gICAgfVxuXG4gICAgY29uZmlnID0gZGVlcE1lcmdlKGNvbmZpZywgdGhpcy5PdmVyd3JpdGVzKTtcblxuICAgIGlmIChvcHRpb25zPy5mcm9tTG9jYWxTdG9yYWdlICE9PSBmYWxzZSkge1xuXG4gICAgICBjb25zdCBsb2NhbENvbmZpZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbmZpZ1NlcnZpY2UuTG9jYWxTdG9yYWdlS2V5KTtcblxuICAgICAgaWYgKGxvY2FsQ29uZmlnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uZmlnID0gZGVlcE1lcmdlKGNvbmZpZywgSlNPTi5wYXJzZShsb2NhbENvbmZpZykpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdsb2NhbCBjb25maWcgY291bGQgbm90IGJlIHBhcnNlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uZnJvbVVybFBhcmFtKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHR5cGVvZiBvcHRpb25zLmZyb21VcmxQYXJhbSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmZyb21VcmxQYXJhbSA6ICdjb25maWcnO1xuICAgICAgY29uZmlnID0gZGVlcE1lcmdlKGNvbmZpZywgdGhpcy5Mb2FkQ29uZmlnRGVmYXVsdEZyb21VcmxQYXJhbShwYXJhbSkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZGVidWcoJ2FwcCBjb25maWcnLCBjb25maWcpO1xuXG4gICAgdGhpcy5Db25maWcgPSBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBsb2FkQ29uZmlnPFQgPSBhbnk+KHVybDogc3RyaW5nLCByZXF1aXJlZD86IGJvb2xlYW4sIHNjaGVtYT86IEFueVNjaGVtYSk6IFByb21pc2U8VCB8IG51bGw+IHtcblxuICAgIGxldCBjb25maWc6IGFueTtcbiAgICBsZXQgcmVzcG9uc2U6IGFueTtcblxuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBDb3VsZCBub3QgZmV0Y2ggY29uZmlnIGZyb20gJyR7IHVybCB9JzogJHsgZXJyb3IubWVzc2FnZSB9YDtcbiAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICB0aGlzLnNob3dFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IGBDb25maWcgcmVxdWVzdCByZXN1bHRzIGluIG5vbiBvayByZXNwb25zZSBmb3IgJyR7IHVybCB9JzogKCR7IHJlc3BvbnNlLnN0YXR1cyB9KSAkeyByZXNwb25zZS5zdGF0dXNUZXh0IH1gO1xuICAgICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgbWVzc2FnZSA9IGBDb25maWcgbm90IGZvdW5kIGF0ICckeyB1cmwgfSdgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwNTpcbiAgICAgICAgICBtZXNzYWdlID0gYENvbmZpZyBzZXJ2aWNlIGlzIG5vdCBzdGFydGVkIHlldC4gV2FpdCAzMHMgYW5kIHRyeSBhZ2Fpbi5gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25maWcgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBDb3VsZCBub3QgcGFyc2UgY29uZmlnIGZyb20gJyR7IHVybCB9JyB0byBhIGpzb24gb2JqZWN0OiAkeyBlcnJvci5tZXNzYWdlIH1gO1xuICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IHNjaGVtYS52YWxpZGF0ZUFzeW5jKGNvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ29uZmlnIGZyb20gJyR7IHVybCB9JyBpcyBub3QgdmFsaWQ6ICR7IGVycm9yLm1lc3NhZ2UgfWA7XG4gICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnO1xuXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBMb2FkQ29uZmlnRGVmYXVsdEZyb21VcmxQYXJhbShwYXJhbSA9ICdjb25maWcnKSB7XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeVN0cmluZyk7XG5cbiAgICBjb25zdCBjb25maWdGcm9tUGFyYW1zID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZpZ1BhcmFtIG9mIHVybFBhcmFtcy5nZXRBbGwoJ2NvbmZpZycpKSB7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gY29uZmlnUGFyYW0uc3BsaXQoJzsnKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGtleVBhdGggPSBzcGxpdFswXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNwbGl0WzFdO1xuICAgICAgICAgIFNldE9iamVjdFZhbHVlKGNvbmZpZ0Zyb21QYXJhbXMsIGtleVBhdGgsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgUGFyc2luZyBvZiB1cmwgY29uZmlnIHBhcmFtIGZhaWxlZCBmb3IgJyR7IGNvbmZpZ1BhcmFtIH0nOiAkeyBlLm1lc3NhZ2UgfWApO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ0Zyb21QYXJhbXM7XG5cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgU2lkZUxvYWQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcHJvcGVydHlQYXRoOiBzdHJpbmcsXG4gICAgcmVxdWlyZWQ/OiBib29sZWFuLFxuICAgIHNjaGVtYT86IEFueVNjaGVtYSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBpZiAoIXRoaXMuQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpZyBzaWRlIGxvYWQgaXMgb25seSBwb3NzaWJsZSBhZnRlciB0aGUgaW5pdGlhbCBjb25maWcgbG9hZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcodXJsLCByZXF1aXJlZCwgc2NoZW1hKTtcblxuICAgIFNldE9iamVjdFZhbHVlKHRoaXMuQ29uZmlnLCBwcm9wZXJ0eVBhdGgsIGNvbmZpZyk7XG5cbiAgICBjb25zb2xlLmRlYnVnKGBTaWRlIGxvYWRlZCBjb25maWcgZm9yICckeyBwcm9wZXJ0eVBhdGggfScgc3VjY2Vzc2Z1bGAsIHRoaXMuQ29uZmlnKTtcblxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBHZXQ8VCA9IGFueSwgSyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBUIHwgdW5kZWZpbmVkLFxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogVFxuXG4gIHB1YmxpYyBzdGF0aWMgR2V0PFQgPSBhbnksIEsgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogTm9JbmZlclR5cGU8VD4sXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gdGhpcy5Db25maWcsXG4gICk6IFQge1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbmZpZyBub3QgbG9hZGVkJyk7XG4gICAgfVxuICAgIGxldCBjb25maWdWYWx1ZTogYW55ID0gY29uZmlnO1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNvbmZpZyBwcm9wZXJ0eSBwYXRoIGlzIG5vdCBhIHN0cmluZycpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIChwYXRoIGFzIGFueSkuc3BsaXQoJy4nKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgaWYgKGNvbmZpZ1ZhbHVlLmhhc093blByb3BlcnR5KGZyYWdtZW50KSkge1xuICAgICAgICBjb25maWdWYWx1ZSA9IGNvbmZpZ1ZhbHVlW2ZyYWdtZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS53YXJuKGBDb25maWcgd2l0aCBwYXRoICckeyBwYXRoIH0nIG5vdCBmb3VuZGApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2hvd0Vycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGhhc1VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J4YXAtY29uZmlnLWVycm9yJykgIT09IG51bGw7XG4gICAgY29uc3QgdWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnhhcC1jb25maWctZXJyb3InKSA/PyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgIHVsLmlkID0gJ3J4YXAtY29uZmlnLWVycm9yJztcbiAgICB1bC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgdWwuc3R5bGUuYm90dG9tID0gJzE2cHgnO1xuICAgIHVsLnN0eWxlLnJpZ2h0ID0gJzE2cHgnO1xuICAgIHVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XG4gICAgdWwuc3R5bGUucGFkZGluZyA9ICczMnB4JztcbiAgICB1bC5zdHlsZS56SW5kZXggPSAnOTk5OTk5OTknO1xuICAgIHVsLnN0eWxlLmNvbG9yID0gJ2JsYWNrJztcbiAgICBjb25zdCBtZXNzYWdlTGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIG1lc3NhZ2VMaS5pbm5lclRleHQgPSBtZXNzYWdlO1xuICAgIHVsLmFwcGVuZENoaWxkKG1lc3NhZ2VMaSk7XG4gICAgY29uc3QgcmVmcmVzaEhpbnRMaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgcmVmcmVzaEhpbnRMaS5pbm5lclRleHQgPSAnUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgdG8gdHJ5IGFnYWluLic7XG4gICAgdWwuYXBwZW5kQ2hpbGQocmVmcmVzaEhpbnRMaSk7XG4gICAgY29uc3QgYXV0b1JlZnJlc2hIaW50TGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGF1dG9SZWZyZXNoSGludExpLmlubmVyVGV4dCA9ICdUaGUgcGFnZSB3aWxsIHJlZnJlc2ggYXV0b21hdGljYWxseSBpbiAzMCBzZWNvbmRzLic7XG4gICAgdWwuYXBwZW5kQ2hpbGQoYXV0b1JlZnJlc2hIaW50TGkpO1xuICAgIGlmICghaGFzVWwpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodWwpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IGxvY2F0aW9uLnJlbG9hZCgpLCAzMDAwMCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TG9jYWxDb25maWcoY29uZmlnOiBDb25maWcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb25maWdTZXJ2aWNlLkxvY2FsU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJMb2NhbENvbmZpZygpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShDb25maWdTZXJ2aWNlLkxvY2FsU3RvcmFnZUtleSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0PFQgPSBhbnk+KHByb3BlcnR5UGF0aDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGdldDxUID0gYW55Pihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBOb0luZmVyVHlwZTxUPik6IFQ7XG4gIHB1YmxpYyBnZXQ8VCA9IGFueT4ocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gQ29uZmlnU2VydmljZS5HZXQocHJvcGVydHlQYXRoLCBkZWZhdWx0VmFsdWUsIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPclRocm93PFQgPSBhbnk+KHByb3BlcnR5UGF0aDogc3RyaW5nKTogVDtcbiAgcHVibGljIGdldE9yVGhyb3c8VCA9IGFueT4ocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogTm9JbmZlclR5cGU8VD4pOiBUO1xuICBwdWJsaWMgZ2V0T3JUaHJvdzxUID0gYW55Pihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogVCk6IFQge1xuICAgIGNvbnN0IHZhbHVlID0gQ29uZmlnU2VydmljZS5HZXQocHJvcGVydHlQYXRoLCBkZWZhdWx0VmFsdWUsIHRoaXMuY29uZmlnKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBjb25maWcgaW4gcGF0aCAnJHsgcHJvcGVydHlQYXRoIH0nYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG59XG4iXX0=
|
package/esm2022/lib/tokens.mjs
CHANGED
|
@@ -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,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9jb25maWcvc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgUlhBUF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ3J4YXAvY29uZmlnJyk7XG4iXX0=
|
package/esm2022/lib/types.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVjbGFyZSB0eXBlIE5vSW5mZXJUeXBlPFQ+ID0gWyBUIF1bVCBleHRlbmRzIGFueSA/IDAgOiBuZXZlcl07XG5cbnR5cGUgUHJldiA9IFtcbiAgbmV2ZXIsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLFxuICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgLi4uMFtdXG5dXG5cbmV4cG9ydCB0eXBlIEpvaW48SywgUD4gPSBLIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID9cbiAgUCBleHRlbmRzIHN0cmluZyB8IG51bWJlciA/XG4gICAgYCR7IEsgfSR7ICcnIGV4dGVuZHMgUCA/ICcnIDogJy4nIH0keyBQIH1gXG4gICAgOiBuZXZlciA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBQYXRoczxULCBEIGV4dGVuZHMgbnVtYmVyID0gMTA+ID0gWyBEIF0gZXh0ZW5kcyBbIG5ldmVyIF0gPyBuZXZlciA6IFQgZXh0ZW5kcyBvYmplY3QgP1xuICB7XG4gICAgW0sgaW4ga2V5b2YgVF0tPzogSyBleHRlbmRzIHN0cmluZyB8IG51bWJlciA/XG4gICAgYCR7IEsgfWAgfCBKb2luPEssIFBhdGhzPFRbS10sIFByZXZbRF0+PlxuICAgIDogbmV2ZXJcbiAgfVtrZXlvZiBUXSA6ICcnO1xuXG5leHBvcnQgdHlwZSBMZWF2ZXM8VCwgRCBleHRlbmRzIG51bWJlciA9IDEwPiA9IFsgRCBdIGV4dGVuZHMgWyBuZXZlciBdID8gbmV2ZXIgOiBUIGV4dGVuZHMgb2JqZWN0ID9cbiAgeyBbSyBpbiBrZXlvZiBUXS0/OiBKb2luPEssIExlYXZlczxUW0tdLCBQcmV2W0RdPj4gfVtrZXlvZiBUXSA6ICcnO1xuIl19
|
package/esm2022/rxap-config.mjs
CHANGED
|
@@ -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,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhhcC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2NvbmZpZy9zcmMvcnhhcC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|