@lenne.tech/ng-base 13.14.2 → 13.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base-cms/base-cms-routing.module.d.ts +7 -0
- package/base-cms/base-cms.module.d.ts +23 -0
- package/base-cms/interfaces/base-cms-module-config.interface.d.ts +12 -0
- package/base-cms/lenne.tech-ng-base-base-cms.d.ts +5 -0
- package/base-cms/package.json +10 -0
- package/base-cms/pages/base-cms/base-cms.component.d.ts +70 -0
- package/base-cms/public-api.d.ts +6 -0
- package/esm2020/base-cms/base-cms-routing.module.mjs +32 -0
- package/esm2020/base-cms/base-cms.module.mjs +60 -0
- package/esm2020/base-cms/interfaces/base-cms-module-config.interface.mjs +3 -0
- package/esm2020/base-cms/lenne.tech-ng-base-base-cms.mjs +5 -0
- package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +162 -0
- package/esm2020/base-cms/public-api.mjs +10 -0
- package/esm2020/base-components/components/model-form/model-form.component.mjs +2 -2
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs +259 -0
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +1 -0
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +1 -1
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-cms.mjs +257 -0
- package/fesm2020/lenne.tech-ng-base-base-cms.mjs.map +1 -0
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/router";
|
|
3
|
+
export declare class BaseCMSRoutingModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseCMSRoutingModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BaseCMSRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<BaseCMSRoutingModule>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseCMSModuleConfig } from './interfaces/base-cms-module-config.interface';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./pages/base-cms/base-cms.component";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "./base-cms-routing.module";
|
|
7
|
+
import * as i5 from "@lenne.tech/ng-base/base-components";
|
|
8
|
+
export declare function CMSConfigFactory(): {
|
|
9
|
+
tableFields: string[];
|
|
10
|
+
excludedModels: string[];
|
|
11
|
+
restrictedModels: any[] | [{
|
|
12
|
+
model: string;
|
|
13
|
+
roles: string[];
|
|
14
|
+
}];
|
|
15
|
+
logging: boolean;
|
|
16
|
+
branding: boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare class BaseCMSModule {
|
|
19
|
+
static config: BaseCMSModuleConfig;
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseCMSModule, never>;
|
|
21
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BaseCMSModule, [typeof i1.BaseCmsComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.BaseCMSRoutingModule, typeof i5.BaseComponentsModule], never>;
|
|
22
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<BaseCMSModule>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export interface BaseCMSModuleConfig {
|
|
3
|
+
tableFields?: string[];
|
|
4
|
+
excludedModels?: string[];
|
|
5
|
+
restrictedModels?: [{
|
|
6
|
+
model: string;
|
|
7
|
+
roles: string[];
|
|
8
|
+
}];
|
|
9
|
+
logging?: boolean;
|
|
10
|
+
branding?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const BASE_CMS_MODULE_CONFIG: InjectionToken<unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module": "../fesm2015/lenne.tech-ng-base-base-cms.mjs",
|
|
3
|
+
"es2020": "../fesm2020/lenne.tech-ng-base-base-cms.mjs",
|
|
4
|
+
"esm2020": "../esm2020/base-cms/lenne.tech-ng-base-base-cms.mjs",
|
|
5
|
+
"fesm2020": "../fesm2020/lenne.tech-ng-base-base-cms.mjs",
|
|
6
|
+
"fesm2015": "../fesm2015/lenne.tech-ng-base-base-cms.mjs",
|
|
7
|
+
"typings": "lenne.tech-ng-base-base-cms.d.ts",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"name": "@lenne.tech/ng-base/base-cms"
|
|
10
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { AuthService, GraphqlCrudType, GraphQLMeta, GraphQLMetaService } from '@lenne.tech/ng-base/shared';
|
|
3
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
+
import { BaseCMSModuleConfig } from '../../interfaces/base-cms-module-config.interface';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class BaseCmsComponent implements OnInit {
|
|
7
|
+
moduleConfig: BaseCMSModuleConfig;
|
|
8
|
+
private graphQLMetaService;
|
|
9
|
+
private route;
|
|
10
|
+
private router;
|
|
11
|
+
private authService;
|
|
12
|
+
meta: GraphQLMeta;
|
|
13
|
+
modelName: string;
|
|
14
|
+
id: string;
|
|
15
|
+
types: GraphqlCrudType[];
|
|
16
|
+
constructor(moduleConfig: BaseCMSModuleConfig, graphQLMetaService: GraphQLMetaService, route: ActivatedRoute, router: Router, authService: AuthService);
|
|
17
|
+
ngOnInit(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* It returns a promise that resolves to an array of GraphqlCrudType objects
|
|
20
|
+
*
|
|
21
|
+
* @returns The types that are available to the user.
|
|
22
|
+
*/
|
|
23
|
+
init(): Promise<GraphqlCrudType[]>;
|
|
24
|
+
/**
|
|
25
|
+
* It checks if the model is excluded or restricted
|
|
26
|
+
*
|
|
27
|
+
* @param model - The name of the model you want to check.
|
|
28
|
+
* @returns A boolean value.
|
|
29
|
+
*/
|
|
30
|
+
checkModelIsExcludedOrRestrcited(model: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* If the model name is set and the types are set, then return the type that matches the model name
|
|
33
|
+
*
|
|
34
|
+
* @returns The type object that matches the model name.
|
|
35
|
+
*/
|
|
36
|
+
getTypeByModelName(): GraphqlCrudType;
|
|
37
|
+
/**
|
|
38
|
+
* When the createModeChanged event is emitted, if the createMode is true, navigate to the new route
|
|
39
|
+
*
|
|
40
|
+
* @param createMode - boolean - This is a boolean value that indicates whether the user is in create mode or
|
|
41
|
+
* not.
|
|
42
|
+
*/
|
|
43
|
+
onCreateModeChanged(createMode: boolean): void;
|
|
44
|
+
/**
|
|
45
|
+
* If the type exists, return the create property of the type, otherwise return false.
|
|
46
|
+
*
|
|
47
|
+
* @returns A boolean value.
|
|
48
|
+
*/
|
|
49
|
+
isCreatePossible(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* If the model name is found in the type map, return the update property of the type object
|
|
52
|
+
*
|
|
53
|
+
* @returns A boolean value.
|
|
54
|
+
*/
|
|
55
|
+
isUpdatePossible(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* If the type is defined, return the delete property of the type, otherwise return false
|
|
58
|
+
*
|
|
59
|
+
* @returns A boolean value.
|
|
60
|
+
*/
|
|
61
|
+
isDeletePossible(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* If the id is truthy, navigate to the id, otherwise navigate to the parent route
|
|
64
|
+
*
|
|
65
|
+
* @param id - The id of the selected item.
|
|
66
|
+
*/
|
|
67
|
+
idSelected(id: string): void;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseCmsComponent, never>;
|
|
69
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BaseCmsComponent, "app-base-cms", never, {}, {}, never, never>;
|
|
70
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RouterModule } from '@angular/router';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { BaseCmsComponent } from './pages/base-cms/base-cms.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/router";
|
|
6
|
+
const routes = [
|
|
7
|
+
{
|
|
8
|
+
path: '',
|
|
9
|
+
component: BaseCmsComponent,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
path: ':modelName',
|
|
13
|
+
component: BaseCmsComponent,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
path: ':modelName/:id',
|
|
17
|
+
component: BaseCmsComponent,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
export class BaseCMSRoutingModule {
|
|
21
|
+
}
|
|
22
|
+
BaseCMSRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
23
|
+
BaseCMSRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
|
|
24
|
+
BaseCMSRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, imports: [[RouterModule.forChild(routes)], RouterModule] });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, decorators: [{
|
|
26
|
+
type: NgModule,
|
|
27
|
+
args: [{
|
|
28
|
+
imports: [RouterModule.forChild(routes)],
|
|
29
|
+
exports: [RouterModule],
|
|
30
|
+
}]
|
|
31
|
+
}] });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMtcm91dGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL2Jhc2UtY21zLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFFdkUsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxZQUFZO1FBQ2xCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsU0FBUyxFQUFFLGdCQUFnQjtLQUM1QjtDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0Isd0NBRnJCLFlBQVk7a0hBRVgsb0JBQW9CLFlBSHRCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUM5QixZQUFZOzJGQUVYLG9CQUFvQjtrQkFKaEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VDbXNDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudCc7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY29tcG9uZW50OiBCYXNlQ21zQ29tcG9uZW50LFxuICB9LFxuICB7XG4gICAgcGF0aDogJzptb2RlbE5hbWUnLFxuICAgIGNvbXBvbmVudDogQmFzZUNtc0NvbXBvbmVudCxcbiAgfSxcbiAge1xuICAgIHBhdGg6ICc6bW9kZWxOYW1lLzppZCcsXG4gICAgY29tcG9uZW50OiBCYXNlQ21zQ29tcG9uZW50LFxuICB9LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpXSxcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VDTVNSb3V0aW5nTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { BaseCmsComponent } from './pages/base-cms/base-cms.component';
|
|
5
|
+
import { BaseCMSRoutingModule } from './base-cms-routing.module';
|
|
6
|
+
import { BaseComponentsModule } from '@lenne.tech/ng-base/base-components';
|
|
7
|
+
import { BASE_CMS_MODULE_CONFIG } from './interfaces/base-cms-module-config.interface';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export function CMSConfigFactory() {
|
|
10
|
+
return {
|
|
11
|
+
tableFields: ['id', 'name', 'title', 'description', 'email', 'createdAt', 'updatedAt'],
|
|
12
|
+
excludedModels: [],
|
|
13
|
+
restrictedModels: [],
|
|
14
|
+
branding: true,
|
|
15
|
+
logging: false,
|
|
16
|
+
...BaseCMSModule.config,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export class BaseCMSModule {
|
|
20
|
+
}
|
|
21
|
+
BaseCMSModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
22
|
+
BaseCMSModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, declarations: [BaseCmsComponent], imports: [
|
|
23
|
+
// Modules
|
|
24
|
+
CommonModule,
|
|
25
|
+
ReactiveFormsModule,
|
|
26
|
+
BaseCMSRoutingModule,
|
|
27
|
+
BaseComponentsModule] });
|
|
28
|
+
BaseCMSModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, providers: [
|
|
29
|
+
{
|
|
30
|
+
provide: BASE_CMS_MODULE_CONFIG,
|
|
31
|
+
useFactory: CMSConfigFactory,
|
|
32
|
+
},
|
|
33
|
+
], imports: [[
|
|
34
|
+
// Modules
|
|
35
|
+
CommonModule,
|
|
36
|
+
ReactiveFormsModule,
|
|
37
|
+
BaseCMSRoutingModule,
|
|
38
|
+
BaseComponentsModule,
|
|
39
|
+
]] });
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, decorators: [{
|
|
41
|
+
type: NgModule,
|
|
42
|
+
args: [{
|
|
43
|
+
imports: [
|
|
44
|
+
// Modules
|
|
45
|
+
CommonModule,
|
|
46
|
+
ReactiveFormsModule,
|
|
47
|
+
BaseCMSRoutingModule,
|
|
48
|
+
BaseComponentsModule,
|
|
49
|
+
],
|
|
50
|
+
declarations: [BaseCmsComponent],
|
|
51
|
+
exports: [],
|
|
52
|
+
providers: [
|
|
53
|
+
{
|
|
54
|
+
provide: BASE_CMS_MODULE_CONFIG,
|
|
55
|
+
useFactory: CMSConfigFactory,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
}]
|
|
59
|
+
}] });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9iYXNlLWNtcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLCtDQUErQyxDQUFDOztBQUU1RyxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFDdEYsY0FBYyxFQUFFLEVBQUU7UUFDbEIsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixRQUFRLEVBQUUsSUFBSTtRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsR0FBRyxhQUFhLENBQUMsTUFBTTtLQUN4QixDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLGlCQVRULGdCQUFnQjtRQU43QixVQUFVO1FBQ1YsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsb0JBQW9COzJHQVdYLGFBQWEsYUFQYjtRQUNUO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixVQUFVLEVBQUUsZ0JBQWdCO1NBQzdCO0tBQ0YsWUFkUTtZQUNQLFVBQVU7WUFDVixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixvQkFBb0I7U0FDckI7MkZBVVUsYUFBYTtrQkFqQnpCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3FCQUNyQjtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxzQkFBc0I7NEJBQy9CLFVBQVUsRUFBRSxnQkFBZ0I7eUJBQzdCO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUNtc0NvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvYmFzZS1jbXMvYmFzZS1jbXMuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VDTVNSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9iYXNlLWNtcy1yb3V0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2UvYmFzZS1jb21wb25lbnRzJztcbmltcG9ydCB7IEJBU0VfQ01TX01PRFVMRV9DT05GSUcsIEJhc2VDTVNNb2R1bGVDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ01TQ29uZmlnRmFjdG9yeSgpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWJsZUZpZWxkczogWydpZCcsICduYW1lJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJywgJ2VtYWlsJywgJ2NyZWF0ZWRBdCcsICd1cGRhdGVkQXQnXSxcbiAgICBleGNsdWRlZE1vZGVsczogW10sXG4gICAgcmVzdHJpY3RlZE1vZGVsczogW10sXG4gICAgYnJhbmRpbmc6IHRydWUsXG4gICAgbG9nZ2luZzogZmFsc2UsXG4gICAgLi4uQmFzZUNNU01vZHVsZS5jb25maWcsXG4gIH07XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICAvLyBNb2R1bGVzXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQmFzZUNNU1JvdXRpbmdNb2R1bGUsXG4gICAgQmFzZUNvbXBvbmVudHNNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW0Jhc2VDbXNDb21wb25lbnRdLFxuICBleHBvcnRzOiBbXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQkFTRV9DTVNfTU9EVUxFX0NPTkZJRyxcbiAgICAgIHVzZUZhY3Rvcnk6IENNU0NvbmZpZ0ZhY3RvcnksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNNU01vZHVsZSB7XG4gIHN0YXRpYyBjb25maWc6IEJhc2VDTVNNb2R1bGVDb25maWc7XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const BASE_CMS_MODULE_CONFIG = new InjectionToken('BASE_CMS_MODULE_CONFIG');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVUvQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ01TTW9kdWxlQ29uZmlnIHtcbiAgdGFibGVGaWVsZHM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZWRNb2RlbHM/OiBzdHJpbmdbXTtcbiAgcmVzdHJpY3RlZE1vZGVscz86IFt7IG1vZGVsOiBzdHJpbmc7IHJvbGVzOiBzdHJpbmdbXSB9XTtcbiAgbG9nZ2luZz86IGJvb2xlYW47XG4gIGJyYW5kaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEJBU0VfQ01TX01PRFVMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0JBU0VfQ01TX01PRFVMRV9DT05GSUcnKTtcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVubmUudGVjaC1uZy1iYXNlLWJhc2UtY21zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9sZW5uZS50ZWNoLW5nLWJhc2UtYmFzZS1jbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { BASE_CMS_MODULE_CONFIG } from '../../interfaces/base-cms-module-config.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@lenne.tech/ng-base/shared";
|
|
5
|
+
import * as i2 from "@angular/router";
|
|
6
|
+
import * as i3 from "@lenne.tech/ng-base/base-components";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
export class BaseCmsComponent {
|
|
9
|
+
constructor(moduleConfig, graphQLMetaService, route, router, authService) {
|
|
10
|
+
this.moduleConfig = moduleConfig;
|
|
11
|
+
this.graphQLMetaService = graphQLMetaService;
|
|
12
|
+
this.route = route;
|
|
13
|
+
this.router = router;
|
|
14
|
+
this.authService = authService;
|
|
15
|
+
this.types = [];
|
|
16
|
+
this.route.params.subscribe((value) => {
|
|
17
|
+
if (value['modelName']) {
|
|
18
|
+
if (!this.checkModelIsExcludedOrRestrcited(value['modelName'])) {
|
|
19
|
+
this.modelName = value['modelName'];
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.init().then((types) => {
|
|
23
|
+
this.router.navigate(['../' + types[0].name.toLowerCase()], { relativeTo: this.route });
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (value['id']) {
|
|
28
|
+
this.id = value['id'];
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async ngOnInit() {
|
|
33
|
+
await this.init();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* It returns a promise that resolves to an array of GraphqlCrudType objects
|
|
37
|
+
*
|
|
38
|
+
* @returns The types that are available to the user.
|
|
39
|
+
*/
|
|
40
|
+
init() {
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
this.graphQLMetaService.getMeta().subscribe((meta) => {
|
|
43
|
+
this.meta = meta;
|
|
44
|
+
if (this.route.snapshot?.params?.['modelName']) {
|
|
45
|
+
this.modelName = this.route.snapshot?.params?.['modelName'];
|
|
46
|
+
}
|
|
47
|
+
if (this.route.snapshot?.params?.['id']) {
|
|
48
|
+
this.id = this.route.snapshot?.params?.['id'];
|
|
49
|
+
}
|
|
50
|
+
const excludedModels = this.moduleConfig.excludedModels?.map((e) => e.toLowerCase());
|
|
51
|
+
const types = meta.getTypes();
|
|
52
|
+
// Check for excluded types
|
|
53
|
+
const filteredTypes = types.filter((e) => !excludedModels?.includes(e.name.toLowerCase()));
|
|
54
|
+
// Check for restricted types
|
|
55
|
+
this.types = filteredTypes.filter((e) => {
|
|
56
|
+
const foundRestrict = this.moduleConfig.restrictedModels?.find((v) => v.model.toLowerCase() === e.name.toLowerCase());
|
|
57
|
+
if (foundRestrict) {
|
|
58
|
+
if (!this.authService.currentUser) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return this.authService.currentUser.hasAllRoles(foundRestrict.roles);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
resolve(this.types);
|
|
68
|
+
if (!this.modelName && this.types) {
|
|
69
|
+
this.router.navigate(['./' + this.types[0].name.toLowerCase()], { relativeTo: this.route });
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* It checks if the model is excluded or restricted
|
|
76
|
+
*
|
|
77
|
+
* @param model - The name of the model you want to check.
|
|
78
|
+
* @returns A boolean value.
|
|
79
|
+
*/
|
|
80
|
+
checkModelIsExcludedOrRestrcited(model) {
|
|
81
|
+
if (!model) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const excludedModels = this.moduleConfig.excludedModels?.map((e) => e.toLowerCase());
|
|
85
|
+
return !!(excludedModels?.includes(model?.toLowerCase()) ||
|
|
86
|
+
this.moduleConfig.restrictedModels?.find((e) => e.model.toLowerCase() === model.toLowerCase()));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* If the model name is set and the types are set, then return the type that matches the model name
|
|
90
|
+
*
|
|
91
|
+
* @returns The type object that matches the model name.
|
|
92
|
+
*/
|
|
93
|
+
getTypeByModelName() {
|
|
94
|
+
if (this.modelName && this.types) {
|
|
95
|
+
return this.types.find((e) => e.name.toLowerCase() === this.modelName.toLowerCase());
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* When the createModeChanged event is emitted, if the createMode is true, navigate to the new route
|
|
103
|
+
*
|
|
104
|
+
* @param createMode - boolean - This is a boolean value that indicates whether the user is in create mode or
|
|
105
|
+
* not.
|
|
106
|
+
*/
|
|
107
|
+
onCreateModeChanged(createMode) {
|
|
108
|
+
if (createMode) {
|
|
109
|
+
this.router.navigate(['./' + 'new'], { relativeTo: this.route });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* If the type exists, return the create property of the type, otherwise return false.
|
|
114
|
+
*
|
|
115
|
+
* @returns A boolean value.
|
|
116
|
+
*/
|
|
117
|
+
isCreatePossible() {
|
|
118
|
+
const type = this.getTypeByModelName();
|
|
119
|
+
return type ? type.create : false;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* If the model name is found in the type map, return the update property of the type object
|
|
123
|
+
*
|
|
124
|
+
* @returns A boolean value.
|
|
125
|
+
*/
|
|
126
|
+
isUpdatePossible() {
|
|
127
|
+
const type = this.getTypeByModelName();
|
|
128
|
+
return type ? type.update : false;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* If the type is defined, return the delete property of the type, otherwise return false
|
|
132
|
+
*
|
|
133
|
+
* @returns A boolean value.
|
|
134
|
+
*/
|
|
135
|
+
isDeletePossible() {
|
|
136
|
+
const type = this.getTypeByModelName();
|
|
137
|
+
return type ? type.delete : false;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* If the id is truthy, navigate to the id, otherwise navigate to the parent route
|
|
141
|
+
*
|
|
142
|
+
* @param id - The id of the selected item.
|
|
143
|
+
*/
|
|
144
|
+
idSelected(id) {
|
|
145
|
+
if (id) {
|
|
146
|
+
this.router.navigate(['./' + id], { relativeTo: this.route });
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.router.navigate(['..'], { relativeTo: this.route });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
BaseCmsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCmsComponent, deps: [{ token: BASE_CMS_MODULE_CONFIG }, { token: i1.GraphQLMetaService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
154
|
+
BaseCmsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: BaseCmsComponent, selector: "app-base-cms", ngImport: i0, template: "<div class=\"main\">\n <div class=\"sidebar\">\n <div class=\"d-flex flex-column flex-shrink-0 p-3 h-100\">\n <ng-container *ngIf=\"moduleConfig.branding\">\n <a href=\"/\" class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none\">\n <span class=\"d-block fs-4\"><b class=\"text-primary\">Base</b>CMS</span>\n <small class=\"fw-lighter\">The auto generated GraphQL CMS</small>\n </a>\n <hr />\n </ng-container>\n <ul class=\"nav nav-pills flex-column mb-auto\" *ngIf=\"types\">\n <li class=\"nav-item\" *ngFor=\"let type of types\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + type?.name?.toLowerCase()\"\n [ngClass]=\"{ active: type?.name?.toLowerCase() === this.modelName?.toLowerCase() }\"\n >\n {{ type.name + 's' }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"sidebar-content\">\n <div class=\"p-5\">\n <base-model-table\n [tableFields]=\"moduleConfig?.tableFields ?? ['name']\"\n [modelName]=\"modelName\"\n [objectId]=\"id !== 'new' ? id : ''\"\n [createMode]=\"id === 'new'\"\n (createModeChanged)=\"onCreateModeChanged($event)\"\n (idSelected)=\"idSelected($event)\"\n [create]=\"isCreatePossible()\"\n [update]=\"isUpdatePossible()\"\n [delete]=\"isDeletePossible()\"\n ></base-model-table>\n </div>\n </div>\n</div>\n", styles: [".active{color:var(--bs-primary)!important;background-color:rgba(var(--bs-primary-rgb),.2)!important;font-weight:700}.nav-link{color:var(--bs-body-color)}.sidebar{box-shadow:#7090b014 14px 17px 40px 4px;transition:all .2s linear 0s;z-index:99}.main{display:flex;flex-direction:row;overflow:hidden;height:100%}.main .sidebar{flex:1 0 22%;max-width:300px}.main .sidebar-content{flex-grow:999;overflow-y:auto;background-color:#f5f7fe}.nav-flush .nav-link{border-radius:0}\n"], components: [{ type: i3.ModelTableComponent, selector: "base-model-table", inputs: ["modelName", "objectId", "createMode", "create", "update", "delete", "tableFields"], outputs: ["idSelected", "createModeChanged"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCmsComponent, decorators: [{
|
|
156
|
+
type: Component,
|
|
157
|
+
args: [{ selector: 'app-base-cms', template: "<div class=\"main\">\n <div class=\"sidebar\">\n <div class=\"d-flex flex-column flex-shrink-0 p-3 h-100\">\n <ng-container *ngIf=\"moduleConfig.branding\">\n <a href=\"/\" class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none\">\n <span class=\"d-block fs-4\"><b class=\"text-primary\">Base</b>CMS</span>\n <small class=\"fw-lighter\">The auto generated GraphQL CMS</small>\n </a>\n <hr />\n </ng-container>\n <ul class=\"nav nav-pills flex-column mb-auto\" *ngIf=\"types\">\n <li class=\"nav-item\" *ngFor=\"let type of types\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + type?.name?.toLowerCase()\"\n [ngClass]=\"{ active: type?.name?.toLowerCase() === this.modelName?.toLowerCase() }\"\n >\n {{ type.name + 's' }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"sidebar-content\">\n <div class=\"p-5\">\n <base-model-table\n [tableFields]=\"moduleConfig?.tableFields ?? ['name']\"\n [modelName]=\"modelName\"\n [objectId]=\"id !== 'new' ? id : ''\"\n [createMode]=\"id === 'new'\"\n (createModeChanged)=\"onCreateModeChanged($event)\"\n (idSelected)=\"idSelected($event)\"\n [create]=\"isCreatePossible()\"\n [update]=\"isUpdatePossible()\"\n [delete]=\"isDeletePossible()\"\n ></base-model-table>\n </div>\n </div>\n</div>\n", styles: [".active{color:var(--bs-primary)!important;background-color:rgba(var(--bs-primary-rgb),.2)!important;font-weight:700}.nav-link{color:var(--bs-body-color)}.sidebar{box-shadow:#7090b014 14px 17px 40px 4px;transition:all .2s linear 0s;z-index:99}.main{display:flex;flex-direction:row;overflow:hidden;height:100%}.main .sidebar{flex:1 0 22%;max-width:300px}.main .sidebar-content{flex-grow:999;overflow-y:auto;background-color:#f5f7fe}.nav-flush .nav-link{border-radius:0}\n"] }]
|
|
158
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
159
|
+
type: Inject,
|
|
160
|
+
args: [BASE_CMS_MODULE_CONFIG]
|
|
161
|
+
}] }, { type: i1.GraphQLMetaService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i1.AuthService }]; } });
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9wYWdlcy9iYXNlLWNtcy9iYXNlLWNtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBdUIsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7O0FBT2hILE1BQU0sT0FBTyxnQkFBZ0I7SUFNM0IsWUFDeUMsWUFBaUMsRUFDaEUsa0JBQXNDLEVBQ3RDLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxXQUF3QjtRQUpPLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNoRSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVBsQyxVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQVM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxL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QUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7OzZHQXZLVSxnQkFBZ0Isa0JBT2pCLHNCQUFzQjtpR0FQckIsZ0JBQWdCLG9EQ1Y3QiwwaURBeUNBOzJGRC9CYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsY0FBYzs7MEJBV3JCLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEdyYXBocWxDcnVkVHlwZSwgR3JhcGhRTE1ldGEsIEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQkFTRV9DTVNfTU9EVUxFX0NPTkZJRywgQmFzZUNNU01vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYmFzZS1jbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFzZS1jbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iYXNlLWNtcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlQ21zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlczogR3JhcGhxbENydWRUeXBlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEJBU0VfQ01TX01PRFVMRV9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IEJhc2VDTVNNb2R1bGVDb25maWcsXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZVsnbW9kZWxOYW1lJ10pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrTW9kZWxJc0V4Y2x1ZGVkT3JSZXN0cmNpdGVkKHZhbHVlWydtb2RlbE5hbWUnXSkpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsTmFtZSA9IHZhbHVlWydtb2RlbE5hbWUnXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluaXQoKS50aGVuKCh0eXBlczogR3JhcGhxbENydWRUeXBlW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJyArIHR5cGVzWzBdLm5hbWUudG9Mb3dlckNhc2UoKV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVbJ2lkJ10pIHtcbiAgICAgICAgdGhpcy5pZCA9IHZhbHVlWydpZCddO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBHcmFwaHFsQ3J1ZFR5cGUgb2JqZWN0c1xuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHlwZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5pdCgpOiBQcm9taXNlPEdyYXBocWxDcnVkVHlwZVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcblxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ21vZGVsTmFtZSddKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbE5hbWUgPSB0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXM/LlsnbW9kZWxOYW1lJ107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ2lkJ10pIHtcbiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ2lkJ107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGNsdWRlZE1vZGVscyA9IHRoaXMubW9kdWxlQ29uZmlnLmV4Y2x1ZGVkTW9kZWxzPy5tYXAoKGUpID0+IGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gbWV0YS5nZXRUeXBlcygpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBleGNsdWRlZCB0eXBlc1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFR5cGVzID0gdHlwZXMuZmlsdGVyKChlKSA9PiAhZXhjbHVkZWRNb2RlbHM/LmluY2x1ZGVzKGUubmFtZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJlc3RyaWN0ZWQgdHlwZXNcbiAgICAgICAgdGhpcy50eXBlcyA9IGZpbHRlcmVkVHlwZXMuZmlsdGVyKChlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmRSZXN0cmljdCA9IHRoaXMubW9kdWxlQ29uZmlnLnJlc3RyaWN0ZWRNb2RlbHM/LmZpbmQoXG4gICAgICAgICAgICAodikgPT4gdi5tb2RlbC50b0xvd2VyQ2FzZSgpID09PSBlLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZm91bmRSZXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIuaGFzQWxsUm9sZXMoZm91bmRSZXN0cmljdC5yb2xlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzb2x2ZSh0aGlzLnR5cGVzKTtcblxuICAgICAgICBpZiAoIXRoaXMubW9kZWxOYW1lICYmIHRoaXMudHlwZXMpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJyArIHRoaXMudHlwZXNbMF0ubmFtZS50b0xvd2VyQ2FzZSgpXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBjaGVja3MgaWYgdGhlIG1vZGVsIGlzIGV4Y2x1ZGVkIG9yIHJlc3RyaWN0ZWRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIC0gVGhlIG5hbWUgb2YgdGhlIG1vZGVsIHlvdSB3YW50IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBjaGVja01vZGVsSXNFeGNsdWRlZE9yUmVzdHJjaXRlZChtb2RlbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlZE1vZGVscyA9IHRoaXMubW9kdWxlQ29uZmlnLmV4Y2x1ZGVkTW9kZWxzPy5tYXAoKGUpID0+IGUudG9Mb3dlckNhc2UoKSk7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZXhjbHVkZWRNb2RlbHM/LmluY2x1ZGVzKG1vZGVsPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5tb2R1bGVDb25maWcucmVzdHJpY3RlZE1vZGVscz8uZmluZCgoZSkgPT4gZS5tb2RlbC50b0xvd2VyQ2FzZSgpID09PSBtb2RlbC50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIG1vZGVsIG5hbWUgaXMgc2V0IGFuZCB0aGUgdHlwZXMgYXJlIHNldCwgdGhlbiByZXR1cm4gdGhlIHR5cGUgdGhhdCBtYXRjaGVzIHRoZSBtb2RlbCBuYW1lXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0eXBlIG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIG1vZGVsIG5hbWUuXG4gICAqL1xuICBnZXRUeXBlQnlNb2RlbE5hbWUoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxOYW1lICYmIHRoaXMudHlwZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGVzLmZpbmQoKGUpID0+IGUubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIGNyZWF0ZU1vZGVDaGFuZ2VkIGV2ZW50IGlzIGVtaXR0ZWQsIGlmIHRoZSBjcmVhdGVNb2RlIGlzIHRydWUsIG5hdmlnYXRlIHRvIHRoZSBuZXcgcm91dGVcbiAgICpcbiAgICogQHBhcmFtIGNyZWF0ZU1vZGUgLSBib29sZWFuIC0gVGhpcyBpcyBhIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciBpcyBpbiBjcmVhdGUgbW9kZSBvclxuICAgKiBub3QuXG4gICAqL1xuICBvbkNyZWF0ZU1vZGVDaGFuZ2VkKGNyZWF0ZU1vZGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoY3JlYXRlTW9kZSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycgKyAnbmV3J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgZXhpc3RzLCByZXR1cm4gdGhlIGNyZWF0ZSBwcm9wZXJ0eSBvZiB0aGUgdHlwZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNDcmVhdGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUuY3JlYXRlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIG1vZGVsIG5hbWUgaXMgZm91bmQgaW4gdGhlIHR5cGUgbWFwLCByZXR1cm4gdGhlIHVwZGF0ZSBwcm9wZXJ0eSBvZiB0aGUgdHlwZSBvYmplY3RcbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNVcGRhdGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUudXBkYXRlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgaXMgZGVmaW5lZCwgcmV0dXJuIHRoZSBkZWxldGUgcHJvcGVydHkgb2YgdGhlIHR5cGUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2VcbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNEZWxldGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUuZGVsZXRlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGlkIGlzIHRydXRoeSwgbmF2aWdhdGUgdG8gdGhlIGlkLCBvdGhlcndpc2UgbmF2aWdhdGUgdG8gdGhlIHBhcmVudCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gICAqL1xuICBpZFNlbGVjdGVkKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nICsgaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1haW5cIj5cbiAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtc2hyaW5rLTAgcC0zIGgtMTAwXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kdWxlQ29uZmlnLmJyYW5kaW5nXCI+XG4gICAgICAgIDxhIGhyZWY9XCIvXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnQgbWItMyBtdC0zIG1lLW1kLWF1dG8gbGluay1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWJsb2NrIGZzLTRcIj48YiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPkJhc2U8L2I+Q01TPC9zcGFuPlxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZ3LWxpZ2h0ZXJcIj5UaGUgYXV0byBnZW5lcmF0ZWQgR3JhcGhRTCBDTVM8L3NtYWxsPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxociAvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGZsZXgtY29sdW1uIG1iLWF1dG9cIiAqbmdJZj1cInR5cGVzXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgdHlwZXNcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICBhcmlhLWN1cnJlbnQ9XCJwYWdlXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIihpZCA/ICcuLi8uLi8nIDogJy4uLycpICsgdHlwZT8ubmFtZT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogdHlwZT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5tb2RlbE5hbWU/LnRvTG93ZXJDYXNlKCkgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHlwZS5uYW1lICsgJ3MnIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNpZGViYXItY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cbiAgICAgIDxiYXNlLW1vZGVsLXRhYmxlXG4gICAgICAgIFt0YWJsZUZpZWxkc109XCJtb2R1bGVDb25maWc/LnRhYmxlRmllbGRzID8/IFsnbmFtZSddXCJcbiAgICAgICAgW21vZGVsTmFtZV09XCJtb2RlbE5hbWVcIlxuICAgICAgICBbb2JqZWN0SWRdPVwiaWQgIT09ICduZXcnID8gaWQgOiAnJ1wiXG4gICAgICAgIFtjcmVhdGVNb2RlXT1cImlkID09PSAnbmV3J1wiXG4gICAgICAgIChjcmVhdGVNb2RlQ2hhbmdlZCk9XCJvbkNyZWF0ZU1vZGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoaWRTZWxlY3RlZCk9XCJpZFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICBbY3JlYXRlXT1cImlzQ3JlYXRlUG9zc2libGUoKVwiXG4gICAgICAgIFt1cGRhdGVdPVwiaXNVcGRhdGVQb3NzaWJsZSgpXCJcbiAgICAgICAgW2RlbGV0ZV09XCJpc0RlbGV0ZVBvc3NpYmxlKClcIlxuICAgICAgPjwvYmFzZS1tb2RlbC10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exports for public API
|
|
3
|
+
*/
|
|
4
|
+
// Module
|
|
5
|
+
export * from './base-cms.module';
|
|
6
|
+
// Pages
|
|
7
|
+
export * from './pages/base-cms/base-cms.component';
|
|
8
|
+
// Interface
|
|
9
|
+
export * from './interfaces/base-cms-module-config.interface';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2UvYmFzZS1jbXMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILFNBQVM7QUFDVCxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLFFBQVE7QUFDUixjQUFjLHFDQUFxQyxDQUFDO0FBRXBELFlBQVk7QUFDWixjQUFjLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeHBvcnRzIGZvciBwdWJsaWMgQVBJXG4gKi9cblxuLy8gTW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2Jhc2UtY21zLm1vZHVsZSc7XG5cbi8vIFBhZ2VzXG5leHBvcnQgKiBmcm9tICcuL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudCc7XG5cbi8vIEludGVyZmFjZVxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2Jhc2UtY21zLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbiJdfQ==
|
|
@@ -80,7 +80,7 @@ export class ModelFormComponent {
|
|
|
80
80
|
const group = {};
|
|
81
81
|
for (const [key, value] of Object.entries(fields)) {
|
|
82
82
|
if (fields[key]?.type) {
|
|
83
|
-
group[key] = new FormControl('', Validators.required);
|
|
83
|
+
group[key] = new FormControl('', value.isRequired ? Validators.required : []);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
this.form = new FormGroup(group);
|
|
@@ -173,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
173
173
|
}], finished: [{
|
|
174
174
|
type: Output
|
|
175
175
|
}] } });
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUlMLGtCQUFrQixHQUVuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRckYsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUNVLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixZQUEwQjtRQUYxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWQzQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBRWIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJeEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdoQixTQUFJLEdBQWEsRUFBRSxDQUFDO0lBTWpCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWpCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMzRixJQUFJLEVBQUUsa0JBQWtCLENBQUMsUUFBUTthQUNsQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFRLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDN0I7U0FDRjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEVBQVU7UUFDdEIsSUFBSSxDQUFDLGNBQWM7YUFDaEIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzNELFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7U0FDL0IsQ0FBQzthQUNELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsTUFBOEI7UUFDdkMsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBRXRCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRTtnQkFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkQ7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLElBQUksT0FBTyxDQUFDLDBDQUEwQyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGNBQWM7aUJBQ2hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDOUQsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsUUFBUTthQUNsQyxDQUFDO2lCQUNELFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLE9BQTJDO1FBQzVELE9BQU8sT0FBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsY0FBYzthQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDN0csTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVE7U0FDbEMsQ0FBQzthQUNELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7OytHQTlLVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrS0NoQi9CLDZtRkFvRUE7MkZEcERhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxpQkFBaUI7aUtBS2xCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3Jtc1NlcnZpY2UsXG4gIEdyYXBoUUxNZXRhLFxuICBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gIEdyYXBoUUxSZXF1ZXN0VHlwZSxcbiAgR3JhcGhRTFNlcnZpY2UsXG59IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhc2UtbW9kZWwtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBpZDogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGVsZXRlID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBmaWVsZHM6IGFueTtcbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU2VydmljZTogRm9ybXNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddIHx8IGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA+IElmIHRoZSBtb2RlbCBuYW1lIGFuZCBtZXRhIGRhdGEgYXJlIHByZXNlbnQsIHNldCB0aGUgb3BlcmF0aW9uIHRvIHVwZGF0ZSBvciBjcmVhdGUsIGdldCB0aGUgZmllbGRzIGZyb20gdGhlIG1ldGFcbiAgICogZGF0YSwgY3JlYXRlIHRoZSBmb3JtLCBhbmQgaWYgdGhlIHZhbHVlIGlzIHByZXNlbnQsIHBhdGNoIHRoZSBmb3JtIHdpdGggdGhlIHZhbHVlXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uID0gdGhpcy5pZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMubWV0YS5nZXRBcmdzKHRoaXMub3BlcmF0aW9uICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkc1snaW5wdXQnXSBhcyBhbnk7XG4gICAgICB0aGlzLmtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIHRoaXMuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMuZ2V0T2JqZWN0QnlJZCh0aGlzLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gaWQsIGFuZCB0aGVuIGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBnZXQgdGhlIG9iamVjdCBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIG9iamVjdCB0byBiZSBsb2FkZWRcbiAgICovXG4gIGdldE9iamVjdEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgIC5ncmFwaFFsKCdnZXQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIGFyZ3VtZW50czogeyBpZCB9LFxuICAgICAgICBmaWVsZHM6IHRoaXMua2V5cyxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLlFVRVJZLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnt9LCAuLi52YWx1ZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvbiBsb2FkIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgY29sbGVjdGlvbiBvZiBHcmFwaFFMIHR5cGVzIGFuZCBjcmVhdGVzIGEgZm9ybSBncm91cCB3aXRoIGEgZm9ybSBjb250cm9sIGZvciBlYWNoIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIGZpZWxkcyAtIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICovXG4gIGNyZWF0ZUZvcm0oZmllbGRzOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKSB7XG4gICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgaWYgKGZpZWxkc1trZXldPy50eXBlKSB7XG4gICAgICAgIGdyb3VwW2tleV0gPSBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBkZWxldGUgdGhlIG9iamVjdCB3aXRoIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZFxuICAgKi9cbiAgZGVsZXRlT2JqZWN0KCkge1xuICAgIGlmIChjb25maXJtKCdNw7ZjaHRlc3QgZHUgZGFzIE9iamVrdCB3aXJrbGljaCBsw7ZzY2hlbj8nKSkge1xuICAgICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgICAuZ3JhcGhRbCgnZGVsZXRlJyArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICAgIGFyZ3VtZW50czogeyBpZDogdGhpcy5pZCB9LFxuICAgICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gZGVsZXRlIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUgZm9ybSwgdmFsaWRhdGVzIGl0LCBhbmQgdGhlbiBzZW5kcyBpdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9yIHVwZGF0ZWQgb2JqZWN0LlxuICAgKi9cbiAgc3VibWl0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1zU2VydmljZS52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtIGFzIGFueSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnICYmICF0aGlzLmlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJRCBpcyBtaXNzaW5nIGZvciB1cGRhdGUhJyk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAuZ3JhcGhRbCh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICBhcmd1bWVudHM6IHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyA/IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiB0aGlzLmZvcm0udmFsdWUgfSA6IHsgaW5wdXQ6IHRoaXMuZm9ybS52YWx1ZSB9LFxuICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIG9uICcgKyB0aGlzLm9wZXJhdGlvbiwgZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cImZvcm1cIj5cbiAgPGgxPnt7IGNhcGl0YWxpemVGaXJzdExldHRlcihtb2RlbE5hbWUpIH19IHt7IG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyAnYmVhcmJlaXRlbicgOiAnZXJzdGVsbGVuJyB9fTwvaDE+XG5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkc1trZXldPy50eXBlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTdHJpbmcnXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkc1trZXldPy5pc0xpc3RcIj5cbiAgICAgICAgICAgIDxiYXNlLXRhZ3NcbiAgICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGRzW2tleV0uaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICA+PC9iYXNlLXRhZ3M+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpZWxkc1trZXldPy5pc0xpc3RcIj5cbiAgICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZpZWxkc1trZXldLmlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgPjwvYmFzZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0Jvb2xlYW4nXCI+XG4gICAgICAgICAgPGJhc2UtY2hlY2tib3hcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICA+PC9iYXNlLWNoZWNrYm94PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbdHlwZV09XCInZGF0ZXRpbWUtbG9jYWwnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTRcIiBbbmdDbGFzc109XCJpZCAmJiBkZWxldGUgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nIDogJ2p1c3RpZnktY29udGVudC1lbmQnXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWQgJiYgZGVsZXRlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlT2JqZWN0KClcIj5Mw7ZzY2hlbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzdWJtaXQoKVwiICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBkaXNhYmxlZCAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fS4uLlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUlMLGtCQUFrQixHQUVuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRckYsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUNVLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixZQUEwQjtRQUYxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWQzQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBRWIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJeEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdoQixTQUFJLEdBQWEsRUFBRSxDQUFDO0lBTWpCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWpCLElBQUksSUFBSSxDQUFD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R0FBbEIsa0JBQWtCLCtLQ2hCL0IsNm1GQW9FQTsyRkRwRGEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGlCQUFpQjtpS0FLbEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1zU2VydmljZSxcbiAgR3JhcGhRTE1ldGEsXG4gIEdyYXBoUUxNZXRhU2VydmljZSxcbiAgR3JhcGhRTFJlcXVlc3RUeXBlLFxuICBHcmFwaFFMU2VydmljZSxcbn0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1tb2RlbC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBkZWxldGUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBmaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBtZXRhOiBHcmFwaFFMTWV0YTtcbiAgZm9ybTogRm9ybUdyb3VwO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGZpZWxkczogYW55O1xuICBvcGVyYXRpb246IHN0cmluZztcbiAga2V5czogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JhcGhRTFNlcnZpY2U6IEdyYXBoUUxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybXNTZXJ2aWNlOiBGb3Jtc1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsTmFtZSkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snbW9kZWxOYW1lJ10gfHwgY2hhbmdlc1sndmFsdWUnXSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqID4gSWYgdGhlIG1vZGVsIG5hbWUgYW5kIG1ldGEgZGF0YSBhcmUgcHJlc2VudCwgc2V0IHRoZSBvcGVyYXRpb24gdG8gdXBkYXRlIG9yIGNyZWF0ZSwgZ2V0IHRoZSBmaWVsZHMgZnJvbSB0aGUgbWV0YVxuICAgKiBkYXRhLCBjcmVhdGUgdGhlIGZvcm0sIGFuZCBpZiB0aGUgdmFsdWUgaXMgcHJlc2VudCwgcGF0Y2ggdGhlIGZvcm0gd2l0aCB0aGUgdmFsdWVcbiAgICovXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxOYW1lICYmIHRoaXMubWV0YSkge1xuICAgICAgdGhpcy5vcGVyYXRpb24gPSB0aGlzLmlkID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5tZXRhLmdldEFyZ3ModGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRzWydpbnB1dCddIGFzIGFueTtcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcblxuICAgICAgdGhpcy5jcmVhdGVGb3JtKHRoaXMuZmllbGRzKTtcblxuICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgdGhpcy5nZXRPYmplY3RCeUlkKHRoaXMuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBpZCwgYW5kIHRoZW4gY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIGxvYWRlZFxuICAgKi9cbiAgZ2V0T2JqZWN0QnlJZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwoJ2dldCcgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgYXJndW1lbnRzOiB7IGlkIH0sXG4gICAgICAgIGZpZWxkczogdGhpcy5rZXlzLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgLi4ue30sIC4uLnZhbHVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIGxvYWQgb2JqZWN0JywgZXJyKTtcbiAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBjb2xsZWN0aW9uIG9mIEdyYXBoUUwgdHlwZXMgYW5kIGNyZWF0ZXMgYSBmb3JtIGdyb3VwIHdpdGggYSBmb3JtIGNvbnRyb2wgZm9yIGVhY2ggdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgY3JlYXRlRm9ybShmaWVsZHM6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pIHtcbiAgICBjb25zdCBncm91cDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAoZmllbGRzW2tleV0/LnR5cGUpIHtcbiAgICAgICAgZ3JvdXBba2V5XSA9IG5ldyBGb3JtQ29udHJvbCgnJywgdmFsdWUuaXNSZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBbXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cChncm91cCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGRlbGV0ZSB0aGUgb2JqZWN0IHdpdGggdGhlIGlkIG9mIHRoZSBvYmplY3QgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZWRpdGVkXG4gICAqL1xuICBkZWxldGVPYmplY3QoKSB7XG4gICAgaWYgKGNvbmZpcm0oJ03DtmNodGVzdCBkdSBkYXMgT2JqZWt0IHdpcmtsaWNoIGzDtnNjaGVuPycpKSB7XG4gICAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAgIC5ncmFwaFFsKCdkZWxldGUnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgICAgYXJndW1lbnRzOiB7IGlkOiB0aGlzLmlkIH0sXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvbiBkZWxldGUgb2JqZWN0JywgZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgY2FwaXRhbGl6ZWQgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgcmV0dXJuZWQuXG4gICAqL1xuICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGFuIEFic3RyYWN0Q29udHJvbCBhbmQgcmV0dXJucyBhIEZvcm1Db250cm9sXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sIC0gQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBBIEZvcm1Db250cm9sXG4gICAqL1xuICB0cmFuc2Zvcm1Ub0NvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb250cm9sIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIHRoZSBmb3JtLCB2YWxpZGF0ZXMgaXQsIGFuZCB0aGVuIHNlbmRzIGl0IHRvIHRoZSBHcmFwaFFMIHNlcnZlclxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgb3IgdXBkYXRlZCBvYmplY3QuXG4gICAqL1xuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm0gYXMgYW55KTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiYgIXRoaXMuaWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lEIGlzIG1pc3NpbmcgZm9yIHVwZGF0ZSEnKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgIC5ncmFwaFFsKHRoaXMub3BlcmF0aW9uICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIGFyZ3VtZW50czogdGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnID8geyBpZDogdGhpcy5pZCwgaW5wdXQ6IHRoaXMuZm9ybS52YWx1ZSB9IDogeyBpbnB1dDogdGhpcy5mb3JtLnZhbHVlIH0sXG4gICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgb24gJyArIHRoaXMub3BlcmF0aW9uLCBlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiZm9ybVwiPlxuICA8aDE+e3sgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgfX0ge3sgb3BlcmF0aW9uID09PSAndXBkYXRlJyA/ICdiZWFyYmVpdGVuJyA6ICdlcnN0ZWxsZW4nIH19PC9oMT5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGRzW2tleV0/LnR5cGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1N0cmluZydcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzW2tleV0/LmlzTGlzdFwiPlxuICAgICAgICAgICAgPGJhc2UtdGFnc1xuICAgICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmaWVsZHNba2V5XS5pc1JlcXVpcmVkXCJcbiAgICAgICAgICAgID48L2Jhc2UtdGFncz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGRzW2tleV0/LmlzTGlzdFwiPlxuICAgICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGRzW2tleV0uaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQm9vbGVhbidcIj5cbiAgICAgICAgICA8YmFzZS1jaGVja2JveFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgID48L2Jhc2UtY2hlY2tib3g+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidEYXRlVGltZSdcIj5cbiAgICAgICAgICA8YmFzZS1pbnB1dFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIidkYXRldGltZS1sb2NhbCdcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYmFzZS1pbnB1dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtNFwiIFtuZ0NsYXNzXT1cImlkICYmIGRlbGV0ZSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWVuZCdcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpZCAmJiBkZWxldGVcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVPYmplY3QoKVwiPkzDtnNjaGVuPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19Li4uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19
|