@lenne.tech/ng-base 13.17.0 → 13.20.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.module.d.ts +6 -6
- package/base-cms/interfaces/base-cms-module-config.interface.d.ts +6 -6
- package/base-cms/pages/base-cms/base-cms.component.d.ts +0 -7
- package/base-components/base-components.module.d.ts +6 -3
- package/base-components/components/model-form/model-form.component.d.ts +13 -2
- package/base-components/components/model-form-sub/model-form-sub.component.d.ts +26 -0
- package/base-components/components/model-table/model-table.component.d.ts +4 -3
- package/base-components/components/refence-input/refence-input.component.d.ts +23 -0
- package/base-components/components/upload-image/upload-image.component.d.ts +70 -0
- package/base-components/public-api.d.ts +3 -0
- package/base-prototype/base-prototype.module.d.ts +7 -6
- package/base-prototype/pages/profile/profile.component.d.ts +34 -0
- package/base-prototype/public-api.d.ts +1 -0
- package/esm2020/base-cms/base-cms.module.mjs +3 -4
- package/esm2020/base-cms/interfaces/base-cms-module-config.interface.mjs +1 -1
- package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +10 -24
- package/esm2020/base-components/base-components.module.mjs +15 -3
- package/esm2020/base-components/components/model-form/model-form.component.mjs +47 -12
- package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +48 -0
- package/esm2020/base-components/components/model-table/model-table.component.mjs +14 -10
- package/esm2020/base-components/components/refence-input/refence-input.component.mjs +61 -0
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +138 -0
- package/esm2020/base-components/public-api.mjs +4 -1
- package/esm2020/base-prototype/base-prototype.module.mjs +8 -4
- package/esm2020/base-prototype/pages/profile/profile.component.mjs +45 -0
- package/esm2020/base-prototype/public-api.mjs +2 -1
- package/esm2020/shared/classes/graphql-meta.class.mjs +14 -2
- package/esm2020/shared/classes/sort.class.mjs +47 -0
- package/esm2020/shared/directives/sort.directive.mjs +54 -0
- package/esm2020/shared/public-api.mjs +4 -1
- package/esm2020/shared/services/graphql.service.mjs +2 -2
- package/esm2020/shared/services/user.service.mjs +2 -1
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs +16 -30
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +304 -21
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +49 -5
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +118 -4
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-cms.mjs +11 -26
- package/fesm2020/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +298 -18
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs +49 -5
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +115 -4
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/package.json +1 -1
- package/shared/classes/sort.class.d.ts +19 -0
- package/shared/directives/sort.directive.d.ts +14 -0
- package/shared/public-api.d.ts +2 -0
|
@@ -6,12 +6,12 @@ import * as i3 from "@angular/forms";
|
|
|
6
6
|
import * as i4 from "./base-cms-routing.module";
|
|
7
7
|
import * as i5 from "@lenne.tech/ng-base/base-components";
|
|
8
8
|
export declare function CMSConfigFactory(): {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
9
|
+
modelConfig: {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
};
|
|
12
|
+
fieldConfig: {
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
};
|
|
15
15
|
logging: boolean;
|
|
16
16
|
branding: boolean;
|
|
17
17
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
export interface BaseCMSModuleConfig {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
3
|
+
modelConfig?: {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
};
|
|
6
|
+
fieldConfig?: {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
};
|
|
9
9
|
logging?: boolean;
|
|
10
10
|
branding?: boolean;
|
|
11
11
|
}
|
|
@@ -21,13 +21,6 @@ export declare class BaseCmsComponent implements OnInit {
|
|
|
21
21
|
* @returns The types that are available to the user.
|
|
22
22
|
*/
|
|
23
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
24
|
/**
|
|
32
25
|
* If the model name is set and the types are set, then return the type that matches the model name
|
|
33
26
|
*
|
|
@@ -10,10 +10,13 @@ import * as i8 from "./components/skeleton-loader/skeleton-loader.component";
|
|
|
10
10
|
import * as i9 from "./components/breadcrumb/breadcrumb.component";
|
|
11
11
|
import * as i10 from "./components/model-form/model-form.component";
|
|
12
12
|
import * as i11 from "./components/model-table/model-table.component";
|
|
13
|
-
import * as i12 from "
|
|
14
|
-
import * as i13 from "
|
|
13
|
+
import * as i12 from "./components/model-form-sub/model-form-sub.component";
|
|
14
|
+
import * as i13 from "./components/upload-image/upload-image.component";
|
|
15
|
+
import * as i14 from "./components/refence-input/refence-input.component";
|
|
16
|
+
import * as i15 from "@angular/forms";
|
|
17
|
+
import * as i16 from "@angular/common";
|
|
15
18
|
export declare class BaseComponentsModule {
|
|
16
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseComponentsModule, never>;
|
|
17
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<BaseComponentsModule, [typeof i1.InputComponent, typeof i2.SelectComponent, typeof i3.CheckboxComponent, typeof i4.TextareaComponent, typeof i5.ToastComponent, typeof i6.TagsComponent, typeof i7.LoadingBarComponent, typeof i8.SkeletonLoaderComponent, typeof i9.BreadcrumbComponent, typeof i10.ModelFormComponent, typeof i11.ModelTableComponent], [typeof
|
|
20
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BaseComponentsModule, [typeof i1.InputComponent, typeof i2.SelectComponent, typeof i3.CheckboxComponent, typeof i4.TextareaComponent, typeof i5.ToastComponent, typeof i6.TagsComponent, typeof i7.LoadingBarComponent, typeof i8.SkeletonLoaderComponent, typeof i9.BreadcrumbComponent, typeof i10.ModelFormComponent, typeof i11.ModelTableComponent, typeof i12.ModelFormSubComponent, typeof i13.UploadImageComponent, typeof i14.RefenceInputComponent], [typeof i15.FormsModule, typeof i15.ReactiveFormsModule, typeof i16.CommonModule], [typeof i1.InputComponent, typeof i2.SelectComponent, typeof i3.CheckboxComponent, typeof i4.TextareaComponent, typeof i5.ToastComponent, typeof i6.TagsComponent, typeof i7.LoadingBarComponent, typeof i8.SkeletonLoaderComponent, typeof i9.BreadcrumbComponent, typeof i10.ModelFormComponent, typeof i11.ModelTableComponent, typeof i12.ModelFormSubComponent, typeof i13.UploadImageComponent, typeof i14.RefenceInputComponent]>;
|
|
18
21
|
static ɵinj: i0.ɵɵInjectorDeclaration<BaseComponentsModule>;
|
|
19
22
|
}
|
|
@@ -8,9 +8,11 @@ export declare class ModelFormComponent implements OnInit, OnChanges {
|
|
|
8
8
|
private graphQLService;
|
|
9
9
|
private formsService;
|
|
10
10
|
modelName: string;
|
|
11
|
+
label: string;
|
|
11
12
|
id: string | null;
|
|
12
13
|
delete: boolean;
|
|
13
14
|
logging: boolean;
|
|
15
|
+
config: any;
|
|
14
16
|
finished: EventEmitter<any>;
|
|
15
17
|
meta: GraphQLMeta;
|
|
16
18
|
form: FormGroup;
|
|
@@ -26,18 +28,27 @@ export declare class ModelFormComponent implements OnInit, OnChanges {
|
|
|
26
28
|
* data, create the form, and if the value is present, patch the form with the value
|
|
27
29
|
*/
|
|
28
30
|
init(): void;
|
|
31
|
+
getKeysFromSubObject(key: string): string[];
|
|
29
32
|
/**
|
|
30
33
|
* It takes an id, and then calls the graphQLService to get the object from the database
|
|
31
34
|
*
|
|
32
35
|
* @param id - The id of the object to be loaded
|
|
33
36
|
*/
|
|
34
37
|
getObjectById(id: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* It takes a GraphQL type collection and returns an array of strings and objects
|
|
40
|
+
*
|
|
41
|
+
* @param fields - IGraphQLTypeCollection - This is the object that is returned from the
|
|
42
|
+
* introspection query.
|
|
43
|
+
* @returns An array of strings and objects.
|
|
44
|
+
*/
|
|
45
|
+
createRequestObject(fields: IGraphQLTypeCollection): any;
|
|
35
46
|
/**
|
|
36
47
|
* It takes a collection of GraphQL types and creates a form group with a form control for each type
|
|
37
48
|
*
|
|
38
49
|
* @param fields - IGraphQLTypeCollection
|
|
39
50
|
*/
|
|
40
|
-
createForm(fields: IGraphQLTypeCollection):
|
|
51
|
+
createForm(fields: IGraphQLTypeCollection): FormGroup;
|
|
41
52
|
/**
|
|
42
53
|
* It calls the graphQLService to delete the object with the id of the object that is currently being edited
|
|
43
54
|
*/
|
|
@@ -63,5 +74,5 @@ export declare class ModelFormComponent implements OnInit, OnChanges {
|
|
|
63
74
|
*/
|
|
64
75
|
submit(): void;
|
|
65
76
|
static ɵfac: i0.ɵɵFactoryDeclaration<ModelFormComponent, never>;
|
|
66
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ModelFormComponent, "base-model-form", never, { "modelName": "modelName"; "id": "id"; "delete": "delete"; "logging": "logging"; }, { "finished": "finished"; }, never, never>;
|
|
77
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModelFormComponent, "base-model-form", never, { "modelName": "modelName"; "label": "label"; "id": "id"; "delete": "delete"; "logging": "logging"; "config": "config"; }, { "finished": "finished"; }, never, never>;
|
|
67
78
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { AbstractControl, FormControl } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ModelFormSubComponent implements OnInit {
|
|
5
|
+
fields: any;
|
|
6
|
+
form: any;
|
|
7
|
+
config: any;
|
|
8
|
+
keys: string[];
|
|
9
|
+
ngOnInit(): void;
|
|
10
|
+
/**
|
|
11
|
+
* It takes a string, capitalizes the first letter, and returns the new string
|
|
12
|
+
*
|
|
13
|
+
* @param value - The string that you want to capitalize the first letter of.
|
|
14
|
+
* @returns The first letter of the string is being capitalized and the rest of the string is being returned.
|
|
15
|
+
*/
|
|
16
|
+
capitalizeFirstLetter(value: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* It takes an AbstractControl and returns a FormControl
|
|
19
|
+
*
|
|
20
|
+
* @param control - AbstractControl | null | undefined
|
|
21
|
+
* @returns A FormControl
|
|
22
|
+
*/
|
|
23
|
+
transformToControl(control: AbstractControl | null | undefined): FormControl;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModelFormSubComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModelFormSubComponent, "base-model-form-sub", never, { "fields": "fields"; "form": "form"; "config": "config"; }, {}, never, never>;
|
|
26
|
+
}
|
|
@@ -10,10 +10,11 @@ export declare class ModelTableComponent implements OnInit, OnChanges {
|
|
|
10
10
|
create: boolean;
|
|
11
11
|
update: boolean;
|
|
12
12
|
delete: boolean;
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
config: any;
|
|
14
|
+
fieldConfig: any;
|
|
15
15
|
idSelected: EventEmitter<string>;
|
|
16
16
|
createModeChanged: EventEmitter<boolean>;
|
|
17
|
+
tableFields: string[];
|
|
17
18
|
meta: GraphQLMeta;
|
|
18
19
|
objects: any[];
|
|
19
20
|
availableFields: string[];
|
|
@@ -52,5 +53,5 @@ export declare class ModelTableComponent implements OnInit, OnChanges {
|
|
|
52
53
|
*/
|
|
53
54
|
capitalizeFirstLetter(value: string): string;
|
|
54
55
|
static ɵfac: i0.ɵɵFactoryDeclaration<ModelTableComponent, never>;
|
|
55
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ModelTableComponent, "base-model-table", never, { "modelName": "modelName"; "objectId": "objectId"; "createMode": "createMode"; "create": "create"; "update": "update"; "delete": "delete"; "
|
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModelTableComponent, "base-model-table", never, { "modelName": "modelName"; "objectId": "objectId"; "createMode": "createMode"; "create": "create"; "update": "update"; "delete": "delete"; "config": "config"; "fieldConfig": "fieldConfig"; }, { "idSelected": "idSelected"; "createModeChanged": "createModeChanged"; }, never, never>;
|
|
56
57
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { GraphQLService } from '@lenne.tech/ng-base/shared';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class RefenceInputComponent implements OnInit {
|
|
5
|
+
private graphQLService;
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
autocomplete?: string;
|
|
11
|
+
tabIndex?: number;
|
|
12
|
+
control: any;
|
|
13
|
+
required: boolean;
|
|
14
|
+
method: string;
|
|
15
|
+
fields: string[];
|
|
16
|
+
valueField: string;
|
|
17
|
+
nameField: string;
|
|
18
|
+
objects: any[];
|
|
19
|
+
constructor(graphQLService: GraphQLService);
|
|
20
|
+
ngOnInit(): void;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RefenceInputComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RefenceInputComponent, "base-refence-input", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "required": "required"; "method": "method"; "fields": "fields"; "valueField": "valueField"; "nameField": "nameField"; }, {}, never, never>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class UploadImageComponent {
|
|
4
|
+
private httpClient;
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
supportText: string;
|
|
9
|
+
required: boolean;
|
|
10
|
+
dragText: string;
|
|
11
|
+
validExtensions: string[];
|
|
12
|
+
control: any;
|
|
13
|
+
url: string;
|
|
14
|
+
uploadPath: string;
|
|
15
|
+
deletePath: string;
|
|
16
|
+
path: string;
|
|
17
|
+
dragActive: boolean;
|
|
18
|
+
selectedFile: File;
|
|
19
|
+
fileUrl: string;
|
|
20
|
+
constructor(httpClient: HttpClient);
|
|
21
|
+
/**
|
|
22
|
+
* The dragOver function is called when the user drags a file over the dropzone. It prevents the default action of the
|
|
23
|
+
* event, and sets the dragText to 'Release to Upload' and the dragActive to true
|
|
24
|
+
*
|
|
25
|
+
* @param event - any - This is the event that is triggered when the user drags a file over the dropzone.
|
|
26
|
+
*/
|
|
27
|
+
dragOver(event: any): void;
|
|
28
|
+
/**
|
|
29
|
+
* When the user drags a file over the drop zone, the dragActive variable is set to true, which will change the color of
|
|
30
|
+
* the drop zone to green
|
|
31
|
+
*
|
|
32
|
+
* @param event - The event object that is passed to the dragLeave event.
|
|
33
|
+
*/
|
|
34
|
+
dragLeave(event: any): void;
|
|
35
|
+
/**
|
|
36
|
+
* The function takes an event as a parameter, prevents the default action of the event, sets the URL of the image to the
|
|
37
|
+
* file that was dragged and dropped, sets the text of the drag and drop area to the default text, and sets the
|
|
38
|
+
* dragActive variable to false
|
|
39
|
+
*
|
|
40
|
+
* @param event - any - This is the event that is triggered when the user drags and drops a file.
|
|
41
|
+
*/
|
|
42
|
+
drop(event: any): void;
|
|
43
|
+
/**
|
|
44
|
+
* It takes a file as an argument, checks if the file type is valid, and if it is, it creates a new FileReader object,
|
|
45
|
+
* sets the onload function to set the fileUrl to the result of the fileReader, sets the selectedFile to the file, and
|
|
46
|
+
* calls the upload function
|
|
47
|
+
*
|
|
48
|
+
* @param file - any - this is the file that is selected by the user.
|
|
49
|
+
*/
|
|
50
|
+
setUrl(file: any): void;
|
|
51
|
+
/**
|
|
52
|
+
* The function takes an event as an argument, and then sets the url of the file to the first file in the event's
|
|
53
|
+
* target's files array
|
|
54
|
+
*
|
|
55
|
+
* @param event - any - The event that is triggered when the user selects a file.
|
|
56
|
+
*/
|
|
57
|
+
selectFile(event: any): void;
|
|
58
|
+
/**
|
|
59
|
+
* We create a new FormData object, append the selected file to it, and then send it to the server
|
|
60
|
+
*/
|
|
61
|
+
upload(): void;
|
|
62
|
+
/**
|
|
63
|
+
* It deletes the file from the server and sets the selectedFile and fileUrl to null
|
|
64
|
+
*
|
|
65
|
+
* @param [id] - The id of the file to delete.
|
|
66
|
+
*/
|
|
67
|
+
deleteFile(id?: string): void;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UploadImageComponent, never>;
|
|
69
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UploadImageComponent, "base-upload-image", never, { "id": "id"; "name": "name"; "label": "label"; "supportText": "supportText"; "required": "required"; "dragText": "dragText"; "validExtensions": "validExtensions"; "control": "control"; "url": "url"; "uploadPath": "uploadPath"; "deletePath": "deletePath"; "path": "path"; }, {}, never, never>;
|
|
70
|
+
}
|
|
@@ -13,3 +13,6 @@ export * from './components/skeleton-loader/skeleton-loader.component';
|
|
|
13
13
|
export * from './components/breadcrumb/breadcrumb.component';
|
|
14
14
|
export * from './components/model-form/model-form.component';
|
|
15
15
|
export * from './components/model-table/model-table.component';
|
|
16
|
+
export * from './components/model-form-sub/model-form-sub.component';
|
|
17
|
+
export * from './components/upload-image/upload-image.component';
|
|
18
|
+
export * from './components/refence-input/refence-input.component';
|
|
@@ -2,13 +2,14 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./pages/login/login.component";
|
|
3
3
|
import * as i2 from "./pages/register/register.component";
|
|
4
4
|
import * as i3 from "./pages/forgot-password/forgot-password.component";
|
|
5
|
-
import * as i4 from "
|
|
6
|
-
import * as i5 from "@
|
|
7
|
-
import * as i6 from "@angular/
|
|
8
|
-
import * as i7 from "@angular/
|
|
9
|
-
import * as i8 from "@
|
|
5
|
+
import * as i4 from "./pages/profile/profile.component";
|
|
6
|
+
import * as i5 from "@lenne.tech/ng-base";
|
|
7
|
+
import * as i6 from "@angular/forms";
|
|
8
|
+
import * as i7 from "@angular/router";
|
|
9
|
+
import * as i8 from "@angular/common";
|
|
10
|
+
import * as i9 from "@lenne.tech/ng-base/base-components";
|
|
10
11
|
export declare class BasePrototypeModule {
|
|
11
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<BasePrototypeModule, never>;
|
|
12
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<BasePrototypeModule, [typeof i1.LoginComponent, typeof i2.RegisterComponent, typeof i3.ForgotPasswordComponent], [typeof
|
|
13
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BasePrototypeModule, [typeof i1.LoginComponent, typeof i2.RegisterComponent, typeof i3.ForgotPasswordComponent, typeof i4.ProfileComponent], [typeof i5.BaseModule, typeof i6.FormsModule, typeof i7.RouterModule, typeof i6.ReactiveFormsModule, typeof i8.CommonModule, typeof i9.BaseComponentsModule], [typeof i1.LoginComponent, typeof i2.RegisterComponent, typeof i3.ForgotPasswordComponent, typeof i4.ProfileComponent]>;
|
|
13
14
|
static ɵinj: i0.ɵɵInjectorDeclaration<BasePrototypeModule>;
|
|
14
15
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AuthService, BasicUser } from '@lenne.tech/ng-base/shared';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ProfileComponent {
|
|
4
|
+
private authService;
|
|
5
|
+
config: any;
|
|
6
|
+
profileConfig: {
|
|
7
|
+
email: {
|
|
8
|
+
label: string;
|
|
9
|
+
placeholder: string;
|
|
10
|
+
};
|
|
11
|
+
firstName: {
|
|
12
|
+
label: string;
|
|
13
|
+
placeholder: string;
|
|
14
|
+
};
|
|
15
|
+
lastName: {
|
|
16
|
+
label: string;
|
|
17
|
+
placeholder: string;
|
|
18
|
+
};
|
|
19
|
+
roles: {
|
|
20
|
+
exclude: boolean;
|
|
21
|
+
};
|
|
22
|
+
username: {
|
|
23
|
+
label: string;
|
|
24
|
+
placeholder: string;
|
|
25
|
+
};
|
|
26
|
+
password: {
|
|
27
|
+
exclude: boolean;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
currentUser: BasicUser;
|
|
31
|
+
constructor(authService: AuthService);
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ProfileComponent, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ProfileComponent, "base-profile", never, { "config": "config"; }, {}, never, never>;
|
|
34
|
+
}
|
|
@@ -8,9 +8,8 @@ import { BASE_CMS_MODULE_CONFIG } from './interfaces/base-cms-module-config.inte
|
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export function CMSConfigFactory() {
|
|
10
10
|
return {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
restrictedModels: [],
|
|
11
|
+
modelConfig: {},
|
|
12
|
+
fieldConfig: {},
|
|
14
13
|
branding: true,
|
|
15
14
|
logging: false,
|
|
16
15
|
...BaseCMSModule.config,
|
|
@@ -57,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
57
56
|
],
|
|
58
57
|
}]
|
|
59
58
|
}] });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9iYXNlLWNtcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLCtDQUErQyxDQUFDOztBQUU1RyxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxXQUFXLEVBQUUsRUFBRTtRQUNmLFdBQVcsRUFBRSxFQUFFO1FBQ2YsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsS0FBSztRQUNkLEdBQUcsYUFBYSxDQUFDLE1BQU07S0FDeEIsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYSxpQkFUVCxnQkFBZ0I7UUFON0IsVUFBVTtRQUNWLFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsb0JBQW9CO1FBQ3BCLG9CQUFvQjsyR0FXWCxhQUFhLGFBUGI7UUFDVDtZQUNFLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsVUFBVSxFQUFFLGdCQUFnQjtTQUM3QjtLQUNGLFlBZFE7WUFDUCxVQUFVO1lBQ1YsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsb0JBQW9CO1NBQ3JCOzJGQVVVLGFBQWE7a0JBakJ6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjtxQkFDckI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxFQUFFO29CQUNYLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsc0JBQXNCOzRCQUMvQixVQUFVLEVBQUUsZ0JBQWdCO3lCQUM3QjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDbXNDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlQ01TUm91dGluZ01vZHVsZSB9IGZyb20gJy4vYmFzZS1jbXMtcm91dGluZy5tb2R1bGUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCQVNFX0NNU19NT0RVTEVfQ09ORklHLCBCYXNlQ01TTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Jhc2UtY21zLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIENNU0NvbmZpZ0ZhY3RvcnkoKSB7XG4gIHJldHVybiB7XG4gICAgbW9kZWxDb25maWc6IHt9LFxuICAgIGZpZWxkQ29uZmlnOiB7fSxcbiAgICBicmFuZGluZzogdHJ1ZSxcbiAgICBsb2dnaW5nOiBmYWxzZSxcbiAgICAuLi5CYXNlQ01TTW9kdWxlLmNvbmZpZyxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIC8vIE1vZHVsZXNcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBCYXNlQ01TUm91dGluZ01vZHVsZSxcbiAgICBCYXNlQ29tcG9uZW50c01vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbQmFzZUNtc0NvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBCQVNFX0NNU19NT0RVTEVfQ09ORklHLFxuICAgICAgdXNlRmFjdG9yeTogQ01TQ29uZmlnRmFjdG9yeSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlQ01TTW9kdWxlIHtcbiAgc3RhdGljIGNvbmZpZzogQmFzZUNNU01vZHVsZUNvbmZpZztcbn1cbiJdfQ==
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
export const BASE_CMS_MODULE_CONFIG = new InjectionToken('BASE_CMS_MODULE_CONFIG');
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMvQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ01TTW9kdWxlQ29uZmlnIHtcbiAgbW9kZWxDb25maWc/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBmaWVsZENvbmZpZz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIGxvZ2dpbmc/OiBib29sZWFuO1xuICBicmFuZGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBCQVNFX0NNU19NT0RVTEVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdCQVNFX0NNU19NT0RVTEVfQ09ORklHJyk7XG4iXX0=
|
|
@@ -16,7 +16,9 @@ export class BaseCmsComponent {
|
|
|
16
16
|
this.types = [];
|
|
17
17
|
this.route.params.subscribe((value) => {
|
|
18
18
|
if (value['modelName']) {
|
|
19
|
-
|
|
19
|
+
const restricted = this.moduleConfig.modelConfig[value['modelName']]?.restricted;
|
|
20
|
+
const excluded = this.moduleConfig.modelConfig[value['modelName']]?.excluded;
|
|
21
|
+
if ((restricted !== null && !restricted) || (excluded !== null && !excluded)) {
|
|
20
22
|
this.modelName = value['modelName'];
|
|
21
23
|
}
|
|
22
24
|
else {
|
|
@@ -48,20 +50,18 @@ export class BaseCmsComponent {
|
|
|
48
50
|
if (this.route.snapshot?.params?.['id']) {
|
|
49
51
|
this.id = this.route.snapshot?.params?.['id'];
|
|
50
52
|
}
|
|
51
|
-
const excludedModels = this.moduleConfig.excludedModels?.map((e) => e.toLowerCase());
|
|
52
53
|
const types = meta.getTypes();
|
|
53
54
|
// Check for excluded types
|
|
54
|
-
const filteredTypes = types.filter((e) => !
|
|
55
|
+
const filteredTypes = types.filter((e) => !this.moduleConfig?.modelConfig[e.name.toLowerCase()]?.excluded);
|
|
55
56
|
// Check for restricted types
|
|
56
57
|
this.types = filteredTypes.filter((e) => {
|
|
57
|
-
|
|
58
|
-
if (foundRestrict) {
|
|
58
|
+
if (this.moduleConfig?.modelConfig[e.name.toLowerCase()]?.restricted) {
|
|
59
59
|
if (!this.authService?.currentUser) {
|
|
60
60
|
return false;
|
|
61
61
|
}
|
|
62
62
|
const user = this.authService?.currentUser;
|
|
63
63
|
const mappedUser = BasicUser.map(user);
|
|
64
|
-
return mappedUser?.hasAllRoles(
|
|
64
|
+
return mappedUser?.hasAllRoles(this.moduleConfig?.modelConfig[e.name.toLowerCase()]?.roles);
|
|
65
65
|
}
|
|
66
66
|
else {
|
|
67
67
|
return true;
|
|
@@ -77,20 +77,6 @@ export class BaseCmsComponent {
|
|
|
77
77
|
});
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
-
/**
|
|
81
|
-
* It checks if the model is excluded or restricted
|
|
82
|
-
*
|
|
83
|
-
* @param model - The name of the model you want to check.
|
|
84
|
-
* @returns A boolean value.
|
|
85
|
-
*/
|
|
86
|
-
checkModelIsExcludedOrRestrcited(model) {
|
|
87
|
-
if (!model) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
const excludedModels = this.moduleConfig.excludedModels?.map((e) => e.toLowerCase());
|
|
91
|
-
return !!(excludedModels?.includes(model?.toLowerCase()) ||
|
|
92
|
-
this.moduleConfig.restrictedModels?.find((e) => e.model.toLowerCase() === model.toLowerCase()));
|
|
93
|
-
}
|
|
94
80
|
/**
|
|
95
81
|
* If the model name is set and the types are set, then return the type that matches the model name
|
|
96
82
|
*
|
|
@@ -112,7 +98,7 @@ export class BaseCmsComponent {
|
|
|
112
98
|
*/
|
|
113
99
|
onCreateModeChanged(createMode) {
|
|
114
100
|
if (createMode) {
|
|
115
|
-
this.router.navigate(['./' + '
|
|
101
|
+
this.router.navigate(['./' + 'neu'], { relativeTo: this.route });
|
|
116
102
|
}
|
|
117
103
|
}
|
|
118
104
|
/**
|
|
@@ -157,12 +143,12 @@ export class BaseCmsComponent {
|
|
|
157
143
|
}
|
|
158
144
|
}
|
|
159
145
|
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 });
|
|
160
|
-
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'
|
|
146
|
+
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 {{\n moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.plural\n ? moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.plural\n : moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.label\n ? moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.label\n : type.name + 's'\n }}\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 [config]=\"moduleConfig?.modelConfig[modelName?.toLowerCase()]\"\n [fieldConfig]=\"moduleConfig?.fieldConfig[modelName?.toLowerCase()] || {}\"\n [modelName]=\"modelName\"\n [objectId]=\"id !== 'neu' ? id : ''\"\n [createMode]=\"id === 'neu'\"\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", "config", "fieldConfig"], 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"] }] });
|
|
161
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCmsComponent, decorators: [{
|
|
162
148
|
type: Component,
|
|
163
|
-
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'
|
|
149
|
+
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 {{\n moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.plural\n ? moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.plural\n : moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.label\n ? moduleConfig?.modelConfig[type?.name?.toLowerCase()]?.label\n : type.name + 's'\n }}\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 [config]=\"moduleConfig?.modelConfig[modelName?.toLowerCase()]\"\n [fieldConfig]=\"moduleConfig?.fieldConfig[modelName?.toLowerCase()] || {}\"\n [modelName]=\"modelName\"\n [objectId]=\"id !== 'neu' ? id : ''\"\n [createMode]=\"id === 'neu'\"\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"] }]
|
|
164
150
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
165
151
|
type: Inject,
|
|
166
152
|
args: [BASE_CMS_MODULE_CONFIG]
|
|
167
153
|
}] }, { type: i1.GraphQLMetaService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i1.AuthService }]; } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9wYWdlcy9iYXNlLWNtcy9iYXNlLWNtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBZSxTQUFTLEVBQW9ELE1BQU0sNEJBQTRCLENBQUM7QUFFdEgsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7QUFPaEgsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUN5QyxZQUFpQyxFQUNoRSxrQkFBc0MsRUFDdEMsS0FBcUIsRUFDckIsTUFBYyxFQUNkLFdBQXdCO1FBSk8saUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2hFLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUGxDLFVBQUssR0FBc0IsRUFBRSxDQUFDO1FBUzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO29CQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDckM7cUJBQU07b0JB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QUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsRUFBVTtRQUNuQixJQUFJLEVBQUUsRUFBRTtZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQy9EO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQzs7NkdBN0tVLGdCQUFnQixrQkFPakIsc0JBQXNCO2lHQVByQixnQkFBZ0Isb0RDVjdCLHVsREEwQ0E7MkZEaENhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzswQkFXckIsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQmFzaWNVc2VyLCBHcmFwaHFsQ3J1ZFR5cGUsIEdyYXBoUUxNZXRhLCBHcmFwaFFMTWV0YVNlcnZpY2UgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJBU0VfQ01TX01PRFVMRV9DT05GSUcsIEJhc2VDTVNNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Jhc2UtY21zLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJhc2UtY21zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFzZS1jbXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG1ldGE6IEdyYXBoUUxNZXRhO1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZXM6IEdyYXBocWxDcnVkVHlwZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChCQVNFX0NNU19NT0RVTEVfQ09ORklHKSBwdWJsaWMgbW9kdWxlQ29uZmlnOiBCYXNlQ01TTW9kdWxlQ29uZmlnLFxuICAgIHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWVbJ21vZGVsTmFtZSddKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja01vZGVsSXNFeGNsdWRlZE9yUmVzdHJjaXRlZCh2YWx1ZVsnbW9kZWxOYW1lJ10pKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbE5hbWUgPSB2YWx1ZVsnbW9kZWxOYW1lJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbml0KCkudGhlbigodHlwZXM6IEdyYXBocWxDcnVkVHlwZVtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycgKyB0eXBlc1swXS5uYW1lLnRvTG93ZXJDYXNlKCldLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlWydpZCddKSB7XG4gICAgICAgIHRoaXMuaWQgPSB2YWx1ZVsnaWQnXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgR3JhcGhxbENydWRUeXBlIG9iamVjdHNcbiAgICpcbiAgICogQHJldHVybnMgVGhlIHR5cGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXQoKTogUHJvbWlzZTxHcmFwaHFsQ3J1ZFR5cGVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydtb2RlbE5hbWUnXSkge1xuICAgICAgICAgIHRoaXMubW9kZWxOYW1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ21vZGVsTmFtZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydpZCddKSB7XG4gICAgICAgICAgdGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydpZCddO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhjbHVkZWRNb2RlbHMgPSB0aGlzLm1vZHVsZUNvbmZpZy5leGNsdWRlZE1vZGVscz8ubWFwKChlKSA9PiBlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCB0eXBlcyA9IG1ldGEuZ2V0VHlwZXMoKTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgZXhjbHVkZWQgdHlwZXNcbiAgICAgICAgY29uc3QgZmlsdGVyZWRUeXBlcyA9IHR5cGVzLmZpbHRlcigoZSkgPT4gIWV4Y2x1ZGVkTW9kZWxzPy5pbmNsdWRlcyhlLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciByZXN0cmljdGVkIHR5cGVzXG4gICAgICAgIHRoaXMudHlwZXMgPSBmaWx0ZXJlZFR5cGVzLmZpbHRlcigoZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kUmVzdHJpY3QgPSB0aGlzLm1vZHVsZUNvbmZpZy5yZXN0cmljdGVkTW9kZWxzPy5maW5kKFxuICAgICAgICAgICAgKHYpID0+IHYubW9kZWwudG9Mb3dlckNhc2UoKSA9PT0gZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGZvdW5kUmVzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZT8uY3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2U/LmN1cnJlbnRVc2VyO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkVXNlciA9IEJhc2ljVXNlci5tYXAodXNlcik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXBwZWRVc2VyPy5oYXNBbGxSb2xlcyhmb3VuZFJlc3RyaWN0LnJvbGVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVDb25maWc/LmxvZ2dpbmcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQmFzZUNtc0NvbXBvbmVudDo6aW5pdC0+dHlwZXMnLCB0aGlzLnR5cGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUodGhpcy50eXBlcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycgKyB0aGlzLnR5cGVzWzBdLm5hbWUudG9Mb3dlckNhc2UoKV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgY2hlY2tzIGlmIHRoZSBtb2RlbCBpcyBleGNsdWRlZCBvciByZXN0cmljdGVkXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbCAtIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCB5b3Ugd2FudCB0byBjaGVjay5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgY2hlY2tNb2RlbElzRXhjbHVkZWRPclJlc3RyY2l0ZWQobW9kZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRNb2RlbHMgPSB0aGlzLm1vZHVsZUNvbmZpZy5leGNsdWRlZE1vZGVscz8ubWFwKChlKSA9PiBlLnRvTG93ZXJDYXNlKCkpO1xuICAgIHJldHVybiAhIShcbiAgICAgIGV4Y2x1ZGVkTW9kZWxzPy5pbmNsdWRlcyhtb2RlbD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHRoaXMubW9kdWxlQ29uZmlnLnJlc3RyaWN0ZWRNb2RlbHM/LmZpbmQoKGUpID0+IGUubW9kZWwudG9Mb3dlckNhc2UoKSA9PT0gbW9kZWwudG9Mb3dlckNhc2UoKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtb2RlbCBuYW1lIGlzIHNldCBhbmQgdGhlIHR5cGVzIGFyZSBzZXQsIHRoZW4gcmV0dXJuIHRoZSB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgbW9kZWwgbmFtZVxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHlwZSBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBtb2RlbCBuYW1lLlxuICAgKi9cbiAgZ2V0VHlwZUJ5TW9kZWxOYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLnR5cGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlcy5maW5kKChlKSA9PiBlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5tb2RlbE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBjcmVhdGVNb2RlQ2hhbmdlZCBldmVudCBpcyBlbWl0dGVkLCBpZiB0aGUgY3JlYXRlTW9kZSBpcyB0cnVlLCBuYXZpZ2F0ZSB0byB0aGUgbmV3IHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBjcmVhdGVNb2RlIC0gYm9vbGVhbiAtIFRoaXMgaXMgYSBib29sZWFuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgaW4gY3JlYXRlIG1vZGUgb3JcbiAgICogbm90LlxuICAgKi9cbiAgb25DcmVhdGVNb2RlQ2hhbmdlZChjcmVhdGVNb2RlOiBib29sZWFuKSB7XG4gICAgaWYgKGNyZWF0ZU1vZGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nICsgJ25ldyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0eXBlIGV4aXN0cywgcmV0dXJuIHRoZSBjcmVhdGUgcHJvcGVydHkgb2YgdGhlIHR5cGUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzQ3JlYXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLmNyZWF0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtb2RlbCBuYW1lIGlzIGZvdW5kIGluIHRoZSB0eXBlIG1hcCwgcmV0dXJuIHRoZSB1cGRhdGUgcHJvcGVydHkgb2YgdGhlIHR5cGUgb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzVXBkYXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLnVwZGF0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0eXBlIGlzIGRlZmluZWQsIHJldHVybiB0aGUgZGVsZXRlIHByb3BlcnR5IG9mIHRoZSB0eXBlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlXG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzRGVsZXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLmRlbGV0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpZCBpcyB0cnV0aHksIG5hdmlnYXRlIHRvIHRoZSBpZCwgb3RoZXJ3aXNlIG5hdmlnYXRlIHRvIHRoZSBwYXJlbnQgcm91dGVcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBzZWxlY3RlZCBpdGVtLlxuICAgKi9cbiAgaWRTZWxlY3RlZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJyArIGlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtYWluXCI+XG4gIDxkaXYgY2xhc3M9XCJzaWRlYmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNocmluay0wIHAtMyBoLTEwMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZHVsZUNvbmZpZy5icmFuZGluZ1wiPlxuICAgICAgICA8YSBocmVmPVwiL1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IG1iLTMgbXQtMyBtZS1tZC1hdXRvIGxpbmstZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBmcy00XCI+PGIgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj5CYXNlPC9iPkNNUzwvc3Bhbj5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmdy1saWdodGVyXCI+VGhlIGF1dG8gZ2VuZXJhdGVkIEdyYXBoUUwgQ01TPC9zbWFsbD5cbiAgICAgICAgPC9hPlxuICAgICAgICA8aHIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1waWxscyBmbGV4LWNvbHVtbiBtYi1hdXRvXCIgKm5nSWY9XCJ0eXBlc1wiPlxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHR5cGVzXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgICAgYXJpYS1jdXJyZW50PVwicGFnZVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIoaWQgPyAnLi4vLi4vJyA6ICcuLi8nKSArIHR5cGU/Lm5hbWU/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHR5cGU/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMubW9kZWxOYW1lPy50b0xvd2VyQ2FzZSgpIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHR5cGUubmFtZSArICdzJyB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC01XCI+XG4gICAgICA8YmFzZS1tb2RlbC10YWJsZVxuICAgICAgICBbdGFibGVGaWVsZHNdPVwibW9kdWxlQ29uZmlnPy50YWJsZUZpZWxkcyA/PyBbJ25hbWUnXVwiXG4gICAgICAgIFttb2RlbE5hbWVdPVwibW9kZWxOYW1lXCJcbiAgICAgICAgW2xvZ2dpbmddPVwibW9kdWxlQ29uZmlnPy5sb2dnaW5nXCJcbiAgICAgICAgW29iamVjdElkXT1cImlkICE9PSAnbmV3JyA/IGlkIDogJydcIlxuICAgICAgICBbY3JlYXRlTW9kZV09XCJpZCA9PT0gJ25ldydcIlxuICAgICAgICAoY3JlYXRlTW9kZUNoYW5nZWQpPVwib25DcmVhdGVNb2RlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKGlkU2VsZWN0ZWQpPVwiaWRTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgW2NyZWF0ZV09XCJpc0NyZWF0ZVBvc3NpYmxlKClcIlxuICAgICAgICBbdXBkYXRlXT1cImlzVXBkYXRlUG9zc2libGUoKVwiXG4gICAgICAgIFtkZWxldGVdPVwiaXNEZWxldGVQb3NzaWJsZSgpXCJcbiAgICAgID48L2Jhc2UtbW9kZWwtdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9wYWdlcy9iYXNlLWNtcy9iYXNlLWNtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBZSxTQUFTLEVBQW9ELE1BQU0sNEJBQTRCLENBQUM7QUFFdEgsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7QUFPaEgsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUN5QyxZQUFpQyxFQUNoRSxrQkFBc0MsRUFDdEMsS0FBcUIsRUFDckIsTUFBYyxFQUNkLFdBQXdCO1FBSk8saUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2hFLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUGxDLFVBQUssR0FBc0IsRUFBRSxDQUFDO1FBUzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUM7Z0JBQ2pGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FB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REFnREE7MkZEdENhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzswQkFXckIsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQmFzaWNVc2VyLCBHcmFwaHFsQ3J1ZFR5cGUsIEdyYXBoUUxNZXRhLCBHcmFwaFFMTWV0YVNlcnZpY2UgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJBU0VfQ01TX01PRFVMRV9DT05GSUcsIEJhc2VDTVNNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Jhc2UtY21zLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJhc2UtY21zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFzZS1jbXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG1ldGE6IEdyYXBoUUxNZXRhO1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZXM6IEdyYXBocWxDcnVkVHlwZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChCQVNFX0NNU19NT0RVTEVfQ09ORklHKSBwdWJsaWMgbW9kdWxlQ29uZmlnOiBCYXNlQ01TTW9kdWxlQ29uZmlnLFxuICAgIHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWVbJ21vZGVsTmFtZSddKSB7XG4gICAgICAgIGNvbnN0IHJlc3RyaWN0ZWQgPSB0aGlzLm1vZHVsZUNvbmZpZy5tb2RlbENvbmZpZ1t2YWx1ZVsnbW9kZWxOYW1lJ11dPy5yZXN0cmljdGVkO1xuICAgICAgICBjb25zdCBleGNsdWRlZCA9IHRoaXMubW9kdWxlQ29uZmlnLm1vZGVsQ29uZmlnW3ZhbHVlWydtb2RlbE5hbWUnXV0/LmV4Y2x1ZGVkO1xuICAgICAgICBpZiAoKHJlc3RyaWN0ZWQgIT09IG51bGwgJiYgIXJlc3RyaWN0ZWQpIHx8IChleGNsdWRlZCAhPT0gbnVsbCAmJiAhZXhjbHVkZWQpKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbE5hbWUgPSB2YWx1ZVsnbW9kZWxOYW1lJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbml0KCkudGhlbigodHlwZXM6IEdyYXBocWxDcnVkVHlwZVtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycgKyB0eXBlc1swXS5uYW1lLnRvTG93ZXJDYXNlKCldLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlWydpZCddKSB7XG4gICAgICAgIHRoaXMuaWQgPSB2YWx1ZVsnaWQnXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgR3JhcGhxbENydWRUeXBlIG9iamVjdHNcbiAgICpcbiAgICogQHJldHVybnMgVGhlIHR5cGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXQoKTogUHJvbWlzZTxHcmFwaHFsQ3J1ZFR5cGVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydtb2RlbE5hbWUnXSkge1xuICAgICAgICAgIHRoaXMubW9kZWxOYW1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ21vZGVsTmFtZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydpZCddKSB7XG4gICAgICAgICAgdGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydpZCddO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZXMgPSBtZXRhLmdldFR5cGVzKCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGV4Y2x1ZGVkIHR5cGVzXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkVHlwZXMgPSB0eXBlcy5maWx0ZXIoKGUpID0+ICF0aGlzLm1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbZS5uYW1lLnRvTG93ZXJDYXNlKCldPy5leGNsdWRlZCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJlc3RyaWN0ZWQgdHlwZXNcbiAgICAgICAgdGhpcy50eXBlcyA9IGZpbHRlcmVkVHlwZXMuZmlsdGVyKChlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tlLm5hbWUudG9Mb3dlckNhc2UoKV0/LnJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZT8uY3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2U/LmN1cnJlbnRVc2VyO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkVXNlciA9IEJhc2ljVXNlci5tYXAodXNlcik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXBwZWRVc2VyPy5oYXNBbGxSb2xlcyh0aGlzLm1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbZS5uYW1lLnRvTG93ZXJDYXNlKCldPy5yb2xlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5sb2dnaW5nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Jhc2VDbXNDb21wb25lbnQ6OmluaXQtPnR5cGVzJywgdGhpcy50eXBlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHRoaXMudHlwZXMpO1xuXG4gICAgICAgIGlmICghdGhpcy5tb2RlbE5hbWUgJiYgdGhpcy50eXBlcykge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nICsgdGhpcy50eXBlc1swXS5uYW1lLnRvTG93ZXJDYXNlKCldLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtb2RlbCBuYW1lIGlzIHNldCBhbmQgdGhlIHR5cGVzIGFyZSBzZXQsIHRoZW4gcmV0dXJuIHRoZSB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgbW9kZWwgbmFtZVxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHlwZSBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBtb2RlbCBuYW1lLlxuICAgKi9cbiAgZ2V0VHlwZUJ5TW9kZWxOYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLnR5cGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlcy5maW5kKChlKSA9PiBlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5tb2RlbE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBjcmVhdGVNb2RlQ2hhbmdlZCBldmVudCBpcyBlbWl0dGVkLCBpZiB0aGUgY3JlYXRlTW9kZSBpcyB0cnVlLCBuYXZpZ2F0ZSB0byB0aGUgbmV3IHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBjcmVhdGVNb2RlIC0gYm9vbGVhbiAtIFRoaXMgaXMgYSBib29sZWFuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgaW4gY3JlYXRlIG1vZGUgb3JcbiAgICogbm90LlxuICAgKi9cbiAgb25DcmVhdGVNb2RlQ2hhbmdlZChjcmVhdGVNb2RlOiBib29sZWFuKSB7XG4gICAgaWYgKGNyZWF0ZU1vZGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nICsgJ25ldSddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0eXBlIGV4aXN0cywgcmV0dXJuIHRoZSBjcmVhdGUgcHJvcGVydHkgb2YgdGhlIHR5cGUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzQ3JlYXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLmNyZWF0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtb2RlbCBuYW1lIGlzIGZvdW5kIGluIHRoZSB0eXBlIG1hcCwgcmV0dXJuIHRoZSB1cGRhdGUgcHJvcGVydHkgb2YgdGhlIHR5cGUgb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzVXBkYXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLnVwZGF0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0eXBlIGlzIGRlZmluZWQsIHJldHVybiB0aGUgZGVsZXRlIHByb3BlcnR5IG9mIHRoZSB0eXBlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlXG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzRGVsZXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLmRlbGV0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpZCBpcyB0cnV0aHksIG5hdmlnYXRlIHRvIHRoZSBpZCwgb3RoZXJ3aXNlIG5hdmlnYXRlIHRvIHRoZSBwYXJlbnQgcm91dGVcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBzZWxlY3RlZCBpdGVtLlxuICAgKi9cbiAgaWRTZWxlY3RlZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJyArIGlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtYWluXCI+XG4gIDxkaXYgY2xhc3M9XCJzaWRlYmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNocmluay0wIHAtMyBoLTEwMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZHVsZUNvbmZpZy5icmFuZGluZ1wiPlxuICAgICAgICA8YSBocmVmPVwiL1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IG1iLTMgbXQtMyBtZS1tZC1hdXRvIGxpbmstZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBmcy00XCI+PGIgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj5CYXNlPC9iPkNNUzwvc3Bhbj5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmdy1saWdodGVyXCI+VGhlIGF1dG8gZ2VuZXJhdGVkIEdyYXBoUUwgQ01TPC9zbWFsbD5cbiAgICAgICAgPC9hPlxuICAgICAgICA8aHIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1waWxscyBmbGV4LWNvbHVtbiBtYi1hdXRvXCIgKm5nSWY9XCJ0eXBlc1wiPlxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHR5cGVzXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgICAgYXJpYS1jdXJyZW50PVwicGFnZVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIoaWQgPyAnLi4vLi4vJyA6ICcuLi8nKSArIHR5cGU/Lm5hbWU/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHR5cGU/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMubW9kZWxOYW1lPy50b0xvd2VyQ2FzZSgpIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIG1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbdHlwZT8ubmFtZT8udG9Mb3dlckNhc2UoKV0/LnBsdXJhbFxuICAgICAgICAgICAgICAgID8gbW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1t0eXBlPy5uYW1lPy50b0xvd2VyQ2FzZSgpXT8ucGx1cmFsXG4gICAgICAgICAgICAgICAgOiBtb2R1bGVDb25maWc/Lm1vZGVsQ29uZmlnW3R5cGU/Lm5hbWU/LnRvTG93ZXJDYXNlKCldPy5sYWJlbFxuICAgICAgICAgICAgICAgID8gbW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1t0eXBlPy5uYW1lPy50b0xvd2VyQ2FzZSgpXT8ubGFiZWxcbiAgICAgICAgICAgICAgICA6IHR5cGUubmFtZSArICdzJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwic2lkZWJhci1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInAtNVwiPlxuICAgICAgPGJhc2UtbW9kZWwtdGFibGVcbiAgICAgICAgW2NvbmZpZ109XCJtb2R1bGVDb25maWc/Lm1vZGVsQ29uZmlnW21vZGVsTmFtZT8udG9Mb3dlckNhc2UoKV1cIlxuICAgICAgICBbZmllbGRDb25maWddPVwibW9kdWxlQ29uZmlnPy5maWVsZENvbmZpZ1ttb2RlbE5hbWU/LnRvTG93ZXJDYXNlKCldIHx8IHt9XCJcbiAgICAgICAgW21vZGVsTmFtZV09XCJtb2RlbE5hbWVcIlxuICAgICAgICBbb2JqZWN0SWRdPVwiaWQgIT09ICduZXUnID8gaWQgOiAnJ1wiXG4gICAgICAgIFtjcmVhdGVNb2RlXT1cImlkID09PSAnbmV1J1wiXG4gICAgICAgIChjcmVhdGVNb2RlQ2hhbmdlZCk9XCJvbkNyZWF0ZU1vZGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoaWRTZWxlY3RlZCk9XCJpZFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICBbY3JlYXRlXT1cImlzQ3JlYXRlUG9zc2libGUoKVwiXG4gICAgICAgIFt1cGRhdGVdPVwiaXNVcGRhdGVQb3NzaWJsZSgpXCJcbiAgICAgICAgW2RlbGV0ZV09XCJpc0RlbGV0ZVBvc3NpYmxlKClcIlxuICAgICAgPjwvYmFzZS1tb2RlbC10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|