@lenne.tech/ng-base 13.14.0 → 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 +4 -5
- package/esm2020/base-components/components/model-table/model-table.component.mjs +1 -1
- package/esm2020/base-components/components/tags/tags.component.mjs +2 -2
- package/esm2020/shared/classes/graphql-meta.class.mjs +3 -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 +4 -5
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +2 -1
- package/fesm2015/lenne.tech-ng-base-shared.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 +4 -5
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +2 -1
- package/fesm2020/lenne.tech-ng-base-shared.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==
|