@pobuca/email-builder 1.0.1 → 1.1.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/README.md +1 -1
- package/bundles/pobuca-email-builder.umd.js +4464 -4414
- package/bundles/pobuca-email-builder.umd.js.map +1 -1
- package/bundles/pobuca-email-builder.umd.min.js +1 -1
- package/bundles/pobuca-email-builder.umd.min.js.map +1 -1
- package/esm2015/lib/classes/DefaultEmail.js +54 -53
- package/esm2015/lib/classes/Elements.js +229 -229
- package/esm2015/lib/classes/Structure.js +89 -89
- package/esm2015/lib/components/block/block.component.js +89 -89
- package/esm2015/lib/components/block-settings/block-settings.component.js +53 -53
- package/esm2015/lib/components/builder-container/builder-container.component.js +114 -114
- package/esm2015/lib/components/dialog.component.js +30 -30
- package/esm2015/lib/components/general-settings/general-settings.component.js +25 -25
- package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -62
- package/esm2015/lib/components/preview.component.js +89 -89
- package/esm2015/lib/components/structure/structure.component.js +163 -163
- package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -31
- package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -45
- package/esm2015/lib/directives/dynamic-component.directive.js +46 -46
- package/esm2015/lib/elements/abstract-block.js +23 -23
- package/esm2015/lib/elements/button/button.component.js +29 -29
- package/esm2015/lib/elements/divider/divider.component.js +30 -30
- package/esm2015/lib/elements/image/image.component.js +54 -54
- package/esm2015/lib/elements/social/social.component.js +42 -42
- package/esm2015/lib/elements/spacer/spacer.component.js +30 -30
- package/esm2015/lib/elements/text-element/text-element.component.js +80 -80
- package/esm2015/lib/groups/align.js +79 -79
- package/esm2015/lib/groups/back-repeat.js +55 -55
- package/esm2015/lib/groups/border.js +102 -102
- package/esm2015/lib/groups/color.js +139 -139
- package/esm2015/lib/groups/direction.js +63 -63
- package/esm2015/lib/groups/font-styles.js +127 -112
- package/esm2015/lib/groups/gaps.js +45 -45
- package/esm2015/lib/groups/line-height.js +68 -68
- package/esm2015/lib/groups/link.js +67 -67
- package/esm2015/lib/groups/margin.js +45 -45
- package/esm2015/lib/groups/padding.js +53 -53
- package/esm2015/lib/groups/upload-image.js +112 -112
- package/esm2015/lib/groups/width-height.js +94 -94
- package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -51
- package/esm2015/lib/interfaces/interfaces.js +13 -13
- package/esm2015/lib/pb-email-builder.component.js +258 -246
- package/esm2015/lib/pb-email-builder.module.js +291 -291
- package/esm2015/lib/pb-email-builder.service.js +134 -134
- package/esm2015/lib/pipes/slugify.pipe.js +39 -39
- package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +175 -165
- package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -122
- package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -11
- package/esm2015/lib/services/pb-storage/index.js +7 -7
- package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -79
- package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-image-uploader-service/index.js +8 -8
- package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -30
- package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -112
- package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -91
- package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -31
- package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -12
- package/esm2015/lib/services/user-middleware-service/index.js +8 -8
- package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -195
- package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -16
- package/esm2015/lib/services/user-rest-api-service/index.js +7 -7
- package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -116
- package/esm2015/lib/tokens/private-tokens.js +17 -17
- package/esm2015/lib/tokens/tokens.js +159 -159
- package/esm2015/lib/utils.js +147 -147
- package/esm2015/pobuca-email-builder.js +42 -42
- package/esm2015/public_api.js +26 -26
- package/fesm2015/pobuca-email-builder.js +4206 -4168
- package/fesm2015/pobuca-email-builder.js.map +1 -1
- package/lib/classes/DefaultEmail.d.ts +10 -9
- package/lib/classes/Elements.d.ts +62 -62
- package/lib/classes/Structure.d.ts +11 -11
- package/lib/components/block/block.component.d.ts +25 -25
- package/lib/components/block-settings/block-settings.component.d.ts +18 -18
- package/lib/components/builder-container/builder-container.component.d.ts +36 -36
- package/lib/components/dialog.component.d.ts +10 -10
- package/lib/components/general-settings/general-settings.component.d.ts +6 -6
- package/lib/components/import-dialog/import-dialog.component.d.ts +16 -16
- package/lib/components/preview.component.d.ts +18 -18
- package/lib/components/structure/structure.component.d.ts +43 -43
- package/lib/components/structure-settings/structure-settings.component.d.ts +9 -9
- package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -15
- package/lib/directives/dynamic-component.directive.d.ts +13 -13
- package/lib/elements/abstract-block.d.ts +8 -8
- package/lib/elements/button/button.component.d.ts +18 -18
- package/lib/elements/divider/divider.component.d.ts +10 -10
- package/lib/elements/image/image.component.d.ts +19 -19
- package/lib/elements/social/social.component.d.ts +21 -21
- package/lib/elements/spacer/spacer.component.d.ts +5 -5
- package/lib/elements/text-element/text-element.component.d.ts +52 -52
- package/lib/groups/align.d.ts +17 -17
- package/lib/groups/back-repeat.d.ts +8 -8
- package/lib/groups/border.d.ts +13 -13
- package/lib/groups/color.d.ts +26 -26
- package/lib/groups/direction.d.ts +13 -13
- package/lib/groups/font-styles.d.ts +21 -17
- package/lib/groups/gaps.d.ts +7 -7
- package/lib/groups/line-height.d.ts +12 -12
- package/lib/groups/link.d.ts +11 -11
- package/lib/groups/margin.d.ts +8 -8
- package/lib/groups/padding.d.ts +8 -8
- package/lib/groups/upload-image.d.ts +19 -19
- package/lib/groups/width-height.d.ts +19 -19
- package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -10
- package/lib/interfaces/interfaces.d.ts +430 -422
- package/lib/pb-email-builder.component.d.ts +67 -67
- package/lib/pb-email-builder.module.d.ts +51 -51
- package/lib/pb-email-builder.service.d.ts +83 -83
- package/lib/pipes/slugify.pipe.d.ts +9 -9
- package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -50
- package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -46
- package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -6
- package/lib/services/pb-storage/index.d.ts +2 -2
- package/lib/services/pb-storage/pb-storage.service.d.ts +54 -54
- package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -12
- package/lib/services/user-image-uploader-service/index.d.ts +3 -3
- package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -14
- package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -28
- package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -27
- package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -26
- package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -15
- package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -7
- package/lib/services/user-middleware-service/index.d.ts +3 -3
- package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -190
- package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -10
- package/lib/services/user-rest-api-service/index.d.ts +2 -2
- package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -82
- package/lib/tokens/private-tokens.d.ts +5 -5
- package/lib/tokens/tokens.d.ts +70 -70
- package/lib/utils.d.ts +88 -88
- package/package.json +8 -3
- package/pobuca-email-builder.d.ts +42 -42
- package/pobuca-email-builder.metadata.json +1 -1
- package/public_api.d.ts +16 -16
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Injectable } from '@angular/core';
|
|
6
|
-
/**
|
|
7
|
-
* A service that must be extended in case you want to rewrite the default
|
|
8
|
-
* uploading process. In case you have a Regular License, you'll get a simple upload
|
|
9
|
-
* service, for any other paid Licenses - you get an Image Gallery.
|
|
10
|
-
*
|
|
11
|
-
* It won't work if you have a Regular/Free License - you'll get an error on running the project,
|
|
12
|
-
* you need either an [Extended or Commercial License]{@link https://wlocalhost.org} key for this purpose.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* // Create a custom service
|
|
16
|
-
* class YourOwnUploaderService extends PbUserImageUploaderService {}
|
|
17
|
-
*
|
|
18
|
-
* // Rewrite it into AppModule
|
|
19
|
-
* { provide: PbUserImageUploaderService, useClass: YourOwnUploaderService }
|
|
20
|
-
*/
|
|
21
|
-
export class PbUserImageUploaderService {
|
|
22
|
-
}
|
|
23
|
-
PbUserImageUploaderService.decorators = [
|
|
24
|
-
{ type: Injectable }
|
|
25
|
-
];
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Injectable } from '@angular/core';
|
|
6
|
+
/**
|
|
7
|
+
* A service that must be extended in case you want to rewrite the default
|
|
8
|
+
* uploading process. In case you have a Regular License, you'll get a simple upload
|
|
9
|
+
* service, for any other paid Licenses - you get an Image Gallery.
|
|
10
|
+
*
|
|
11
|
+
* It won't work if you have a Regular/Free License - you'll get an error on running the project,
|
|
12
|
+
* you need either an [Extended or Commercial License]{@link https://wlocalhost.org} key for this purpose.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Create a custom service
|
|
16
|
+
* class YourOwnUploaderService extends PbUserImageUploaderService {}
|
|
17
|
+
*
|
|
18
|
+
* // Rewrite it into AppModule
|
|
19
|
+
* { provide: PbUserImageUploaderService, useClass: YourOwnUploaderService }
|
|
20
|
+
*/
|
|
21
|
+
export class PbUserImageUploaderService {
|
|
22
|
+
}
|
|
23
|
+
PbUserImageUploaderService.decorators = [
|
|
24
|
+
{ type: Injectable }
|
|
25
|
+
];
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbWFnZS11cGxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91c2VyLWltYWdlLXVwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBZ0IsMEJBQTBCOzs7WUFEL0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXHJcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogQSBzZXJ2aWNlIHRoYXQgbXVzdCBiZSBleHRlbmRlZCBpbiBjYXNlIHlvdSB3YW50IHRvIHJld3JpdGUgdGhlIGRlZmF1bHRcclxuICogdXBsb2FkaW5nIHByb2Nlc3MuIEluIGNhc2UgeW91IGhhdmUgYSBSZWd1bGFyIExpY2Vuc2UsIHlvdSdsbCBnZXQgYSBzaW1wbGUgdXBsb2FkXHJcbiAqIHNlcnZpY2UsIGZvciBhbnkgb3RoZXIgcGFpZCBMaWNlbnNlcyAtIHlvdSBnZXQgYW4gSW1hZ2UgR2FsbGVyeS5cclxuICpcclxuICogSXQgd29uJ3Qgd29yayBpZiB5b3UgaGF2ZSBhIFJlZ3VsYXIvRnJlZSBMaWNlbnNlIC0geW91J2xsIGdldCBhbiBlcnJvciBvbiBydW5uaW5nIHRoZSBwcm9qZWN0LFxyXG4gKiB5b3UgbmVlZCBlaXRoZXIgYW4gW0V4dGVuZGVkIG9yIENvbW1lcmNpYWwgTGljZW5zZV17QGxpbmsgaHR0cHM6Ly93bG9jYWxob3N0Lm9yZ30ga2V5IGZvciB0aGlzIHB1cnBvc2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIGN1c3RvbSBzZXJ2aWNlXHJcbiAqIGNsYXNzIFlvdXJPd25VcGxvYWRlclNlcnZpY2UgZXh0ZW5kcyBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSB7fVxyXG4gKlxyXG4gKiAvLyBSZXdyaXRlIGl0IGludG8gQXBwTW9kdWxlXHJcbiAqIHsgcHJvdmlkZTogUGJVc2VySW1hZ2VVcGxvYWRlclNlcnZpY2UsIHVzZUNsYXNzOiBZb3VyT3duVXBsb2FkZXJTZXJ2aWNlIH1cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBiVXNlckltYWdlVXBsb2FkZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBBIG1ldGhvZCBjYWxsZWQgb25jZSBlbmQgdXNlciBpbnRlbmRzIHRvIHVwbG9hZCBhbiBpbWFnZS5cclxuICAgKiBJdCBtdXN0IHJldHVybnMgYWx3YXlzIGFuIGBPYnNlcnZhYmxlPHN0cmluZz5gIC0gd2hlcmUgYHN0cmluZ2AgaXMgdGhlIHVwbG9hZGVkXHJcbiAgICogaW1hZ2UgcGF0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4gVXBsb2FkZWQgaW1hZ2UgcGF0aC5cclxuICAgKi9cclxuICBhYnN0cmFjdCBicm93c2UkKCk6IE9ic2VydmFibGU8c3RyaW5nPjtcclxufVxyXG4iXX0=
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { iif, throwError } from 'rxjs';
|
|
6
|
-
import { PbUserMiddlewaresService } from './pb-middlewares.service';
|
|
7
|
-
import { deferOf } from '../../utils';
|
|
8
|
-
/**
|
|
9
|
-
* @ignore
|
|
10
|
-
*/
|
|
11
|
-
const NOT_ALLOWED = 'This feature is disabled in free version.';
|
|
12
|
-
/**
|
|
13
|
-
* @internal
|
|
14
|
-
*/
|
|
15
|
-
export default class FreeUsersMiddleware extends PbUserMiddlewaresService {
|
|
16
|
-
constructor() {
|
|
17
|
-
super();
|
|
18
|
-
// tslint:disable-next-line: no-console
|
|
19
|
-
console.warn('You use the Regular License of Angular Email Builder, some limitations are applied. More info on https://wlocalhost.org');
|
|
20
|
-
}
|
|
21
|
-
chooseTemplate() {
|
|
22
|
-
throw new Error(NOT_ALLOWED);
|
|
23
|
-
}
|
|
24
|
-
exportFile(type) {
|
|
25
|
-
return iif(() => type === 'json', deferOf(type), throwError(new Error(NOT_ALLOWED)));
|
|
26
|
-
}
|
|
27
|
-
importFile(file) {
|
|
28
|
-
return iif(() => file.type === 'application/json', deferOf(file), throwError(new Error(NOT_ALLOWED)));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { iif, throwError } from 'rxjs';
|
|
6
|
+
import { PbUserMiddlewaresService } from './pb-middlewares.service';
|
|
7
|
+
import { deferOf } from '../../utils';
|
|
8
|
+
/**
|
|
9
|
+
* @ignore
|
|
10
|
+
*/
|
|
11
|
+
const NOT_ALLOWED = 'This feature is disabled in free version.';
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export default class FreeUsersMiddleware extends PbUserMiddlewaresService {
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
// tslint:disable-next-line: no-console
|
|
19
|
+
console.warn('You use the Regular License of Angular Email Builder, some limitations are applied. More info on https://wlocalhost.org');
|
|
20
|
+
}
|
|
21
|
+
chooseTemplate() {
|
|
22
|
+
throw new Error(NOT_ALLOWED);
|
|
23
|
+
}
|
|
24
|
+
exportFile(type) {
|
|
25
|
+
return iif(() => type === 'json', deferOf(type), throwError(new Error(NOT_ALLOWED)));
|
|
26
|
+
}
|
|
27
|
+
importFile(file) {
|
|
28
|
+
return iif(() => file.type === 'application/json', deferOf(file), throwError(new Error(NOT_ALLOWED)));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJlZVVzZXJzTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9GcmVlVXNlcnNNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSx3QkFBd0IsRUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW9CLFNBQVEsd0JBQXdCO0lBQ3ZFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUix1Q0FBdUM7UUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyx5SEFBeUgsQ0FBQyxDQUFDO0lBQzFJLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWlCO1FBQzFCLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBpaWYsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSwgVEV4cG9ydFR5cGUgfSBmcm9tICcuL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZGVmZXJPZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5jb25zdCBOT1RfQUxMT1dFRCA9ICdUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgaW4gZnJlZSB2ZXJzaW9uLic7XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZyZWVVc2Vyc01pZGRsZXdhcmUgZXh0ZW5kcyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgY29uc29sZS53YXJuKCdZb3UgdXNlIHRoZSBSZWd1bGFyIExpY2Vuc2Ugb2YgQW5ndWxhciBFbWFpbCBCdWlsZGVyLCBzb21lIGxpbWl0YXRpb25zIGFyZSBhcHBsaWVkLiBNb3JlIGluZm8gb24gaHR0cHM6Ly93bG9jYWxob3N0Lm9yZycpO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlVGVtcGxhdGUoKTogT2JzZXJ2YWJsZTx7IGNhdGVnb3J5OiBzdHJpbmc7IHRlbXBsYXRlOiBJVXNlclRlbXBsYXRlIH0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihOT1RfQUxMT1dFRCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRGaWxlKHR5cGU6IFRFeHBvcnRUeXBlKTogT2JzZXJ2YWJsZTxURXhwb3J0VHlwZT4ge1xyXG4gICAgcmV0dXJuIGlpZigoKSA9PiB0eXBlID09PSAnanNvbicsIGRlZmVyT2YodHlwZSksIHRocm93RXJyb3IobmV3IEVycm9yKE5PVF9BTExPV0VEKSkpO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0RmlsZShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxGaWxlPiB7XHJcbiAgICByZXR1cm4gaWlmKCgpID0+IGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nLCBkZWZlck9mKGZpbGUpLCB0aHJvd0Vycm9yKG5ldyBFcnJvcihOT1RfQUxMT1dFRCkpKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { PbUserMiddlewaresService } from './pb-middlewares.service';
|
|
6
|
-
/**
|
|
7
|
-
* @internal
|
|
8
|
-
* No limitations are applied for Paid users
|
|
9
|
-
*/
|
|
10
|
-
export default class PaidUsersMiddleware extends PbUserMiddlewaresService {
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { PbUserMiddlewaresService } from './pb-middlewares.service';
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
* No limitations are applied for Paid users
|
|
9
|
+
*/
|
|
10
|
+
export default class PaidUsersMiddleware extends PbUserMiddlewaresService {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFpZFVzZXJzTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9QYWlkVXNlcnNNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW9CLFNBQVEsd0JBQXdCO0NBQUciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4vcGItbWlkZGxld2FyZXMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqIE5vIGxpbWl0YXRpb25zIGFyZSBhcHBsaWVkIGZvciBQYWlkIHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWlkVXNlcnNNaWRkbGV3YXJlIGV4dGVuZHMgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIHt9XHJcbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import FreeUsersMiddleware from './FreeUsersMiddleware';
|
|
6
|
-
import PaidUsersMiddleware from './PaidUsersMiddleware';
|
|
7
|
-
export { FreeUsersMiddleware, PaidUsersMiddleware };
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import FreeUsersMiddleware from './FreeUsersMiddleware';
|
|
6
|
+
import PaidUsersMiddleware from './PaidUsersMiddleware';
|
|
7
|
+
export { FreeUsersMiddleware, PaidUsersMiddleware };
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvdXNlci1taWRkbGV3YXJlLXNlcnZpY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxtQkFBbUIsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLG1CQUFtQixNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgRnJlZVVzZXJzTWlkZGxld2FyZSBmcm9tICcuL0ZyZWVVc2Vyc01pZGRsZXdhcmUnO1xyXG5pbXBvcnQgUGFpZFVzZXJzTWlkZGxld2FyZSBmcm9tICcuL1BhaWRVc2Vyc01pZGRsZXdhcmUnO1xyXG5cclxuZXhwb3J0IHsgRnJlZVVzZXJzTWlkZGxld2FyZSwgUGFpZFVzZXJzTWlkZGxld2FyZSB9O1xyXG4iXX0=
|
|
@@ -1,195 +1,195 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Injectable } from '@angular/core';
|
|
6
|
-
import { deferOf } from '../../utils';
|
|
7
|
-
/**
|
|
8
|
-
* This service allows you to control all your users' abilities within this builder. Lets say you want to implement user Roles or just
|
|
9
|
-
* need to disable some functionality for certain users based on purchase plan or on something else. You can allow or disallow almost
|
|
10
|
-
* everything.
|
|
11
|
-
*
|
|
12
|
-
* All the methods must return an Observable, so, in my opinion, that's the best part of this service, you can either return an
|
|
13
|
-
* [EMPTY Observable]{@link https://rxjs.dev/api/index/const/EMPTY}, a modified object or an (Info Modal).pipe(mapTo(EMPTY)) - I think you
|
|
14
|
-
* got the idea.
|
|
15
|
-
*
|
|
16
|
-
* I recommend always using a Modal or a Toast for forbidden actions.
|
|
17
|
-
*
|
|
18
|
-
* It won't work if you have a Regular/Free License - you'll get an error on running the project,
|
|
19
|
-
* you need either an [Extended or Commercial License]{@link https://wlocalhost.org} key for this purpose.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* // Create a custom service
|
|
23
|
-
* class YourOwnMiddlewareService extends PbUserMiddlewaresService {}
|
|
24
|
-
*
|
|
25
|
-
* // Rewrite it into AppModule
|
|
26
|
-
* { provide: PbUserMiddlewaresService, useClass: YourOwnMiddlewareService }
|
|
27
|
-
*/
|
|
28
|
-
export class PbUserMiddlewaresService {
|
|
29
|
-
/**
|
|
30
|
-
* This method is called before sending the request to MJML Convertor. Use it to add some additional blocks or anything else to
|
|
31
|
-
* the PBEmail object.
|
|
32
|
-
* @param email PBEmail object that's being sent to MJML Convertor.
|
|
33
|
-
*/
|
|
34
|
-
createHTMLTemplate(email) {
|
|
35
|
-
return deferOf(email);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Allow or Disallow preview window.
|
|
39
|
-
* @param state Coming Preview state
|
|
40
|
-
*/
|
|
41
|
-
togglePreview(state) {
|
|
42
|
-
return deferOf(state);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Allow or Disallow preview devices.
|
|
46
|
-
* @param button Device's button that has been clicked
|
|
47
|
-
*/
|
|
48
|
-
togglePreviewDevice(button) {
|
|
49
|
-
return deferOf(button.value);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Allow or disallow users to select certain templates based either on category or template object.
|
|
53
|
-
* @param category Template's category user has selected
|
|
54
|
-
* @param template Template user has selected
|
|
55
|
-
*/
|
|
56
|
-
chooseTemplate(category, template) {
|
|
57
|
-
return deferOf({ category, template });
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Allow, disallow or return the same path for all user's uploaded images.
|
|
61
|
-
* @param path Path of uploaded image
|
|
62
|
-
*
|
|
63
|
-
* @TODO Check if this middleware is being called before image has been uploaded
|
|
64
|
-
*/
|
|
65
|
-
uploadImage(path) {
|
|
66
|
-
return deferOf(path);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Allow or disallow users to add blocks within email structures.
|
|
70
|
-
* @param event Event of dropped block
|
|
71
|
-
* @param column Column that block has been dropped
|
|
72
|
-
*
|
|
73
|
-
* @TODO add parent structure as a parameter
|
|
74
|
-
*/
|
|
75
|
-
addBlock(event, column) {
|
|
76
|
-
return deferOf({ event, column });
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Prevent user to edit blocks within email body.
|
|
80
|
-
* @param block Block that user intends to edit
|
|
81
|
-
*/
|
|
82
|
-
editBlock(block) {
|
|
83
|
-
return deferOf(block);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Prevent user to remove blocks within email body.
|
|
87
|
-
* @param index Block's Index
|
|
88
|
-
* @param column Block's parent column
|
|
89
|
-
* @param block Block that user intends to remove
|
|
90
|
-
*/
|
|
91
|
-
removeBlock(index, column, block) {
|
|
92
|
-
return deferOf({ index, column });
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Prevent user to duplicate blocks within email body.
|
|
96
|
-
* @param index Block's Index
|
|
97
|
-
* @param column Block's parent column
|
|
98
|
-
* @param block Block that user intends to duplicate
|
|
99
|
-
*/
|
|
100
|
-
duplicateBlock(index, column, block) {
|
|
101
|
-
return deferOf({ index, column, block });
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Disable Drag and Drop certain blocks from Blocks list to Email body.
|
|
105
|
-
* Return TRUE to disable all blocks - no matter on block's data.
|
|
106
|
-
* @param block Block to allow or disallow from being dragged
|
|
107
|
-
*/
|
|
108
|
-
disableBlockDragFromList(block) {
|
|
109
|
-
return deferOf(false);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Prevent users to sort blocks within email body.
|
|
113
|
-
* @param block Block that user intends to change the order
|
|
114
|
-
*/
|
|
115
|
-
disableBlockDragWithinEmailBody(block) {
|
|
116
|
-
return deferOf(false);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Prevent user to add new structure.
|
|
120
|
-
* @param event Event of dropped structure
|
|
121
|
-
*/
|
|
122
|
-
addStructure(event) {
|
|
123
|
-
return deferOf(event);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Prevent user to edit the structure.
|
|
127
|
-
* @param structure Structure that user intends to edit
|
|
128
|
-
*/
|
|
129
|
-
editStructure(structure) {
|
|
130
|
-
return deferOf(structure);
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Prevent user to remove the structure.
|
|
134
|
-
* @param index Index of the structure
|
|
135
|
-
* @param structure Structure that user intends to remove
|
|
136
|
-
*/
|
|
137
|
-
removeStructure(index, structure) {
|
|
138
|
-
return deferOf(index);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Prevent user to duplicate the structure within email body.
|
|
142
|
-
* @param index Index of structure
|
|
143
|
-
* @param structure Structure that user intends to duplicate
|
|
144
|
-
*/
|
|
145
|
-
duplicateStructure(index, structure) {
|
|
146
|
-
return deferOf(index);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Disable Drag and Drop certain structures from Structures list to Email body.
|
|
150
|
-
* Return TRUE to disable all structures.
|
|
151
|
-
* @param structure Structure to prevent from being dragged
|
|
152
|
-
*/
|
|
153
|
-
disableStructureDragFromList(structure) {
|
|
154
|
-
return deferOf(false);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Allow or disallow users to sort structures within email body.
|
|
158
|
-
* @param structure Structure that user intends to change the order
|
|
159
|
-
*/
|
|
160
|
-
disableStructureDragWithinEmailBody(structure) {
|
|
161
|
-
return deferOf(false);
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* I don't know why would you do that, but you can disable OnExit confirm modal.
|
|
165
|
-
* @param event Window [BeforeUnloadEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent}
|
|
166
|
-
*/
|
|
167
|
-
preventWindowExit(event) {
|
|
168
|
-
return deferOf(event);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Allow or disallow user to export certain types of file
|
|
172
|
-
* @param type Type that user intends to download
|
|
173
|
-
*/
|
|
174
|
-
exportFile(type) {
|
|
175
|
-
return deferOf(type);
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Allow or disallow user to import certain types of file
|
|
179
|
-
* @param file Web APIs [FILE]{@link https://developer.mozilla.org/en-US/docs/Web/API/File}
|
|
180
|
-
*/
|
|
181
|
-
importFile(file) {
|
|
182
|
-
return deferOf(file);
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Catch all errors within email editor, it might not work 100%, it's still on working process.
|
|
186
|
-
* @param error Throwable Error
|
|
187
|
-
*/
|
|
188
|
-
catchError(error) {
|
|
189
|
-
return deferOf(error);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
PbUserMiddlewaresService.decorators = [
|
|
193
|
-
{ type: Injectable }
|
|
194
|
-
];
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItbWlkZGxld2FyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWlDdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsTUFBTSxPQUFnQix3QkFBd0I7SUFDNUM7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLEtBQWM7UUFDL0IsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFjO1FBQzFCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxNQUE0QjtRQUM5QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsUUFBZ0IsRUFBRSxRQUF1QjtRQUN0RCxPQUFPLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsS0FBcUIsRUFBRSxNQUFpQjtRQUMvQyxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBYztRQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsS0FBYSxFQUFFLE1BQWlCLEVBQUUsS0FBYztRQUMxRCxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxLQUFhLEVBQUUsTUFBaUIsRUFBRSxLQUFjO1FBQzdELE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsS0FBYztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsK0JBQStCLENBQUMsS0FBYztRQUM1QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQXlCO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsU0FBcUI7UUFDakMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNEJBQTRCLENBQUMsU0FBcUI7UUFDaEQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1DQUFtQyxDQUFDLFNBQXFCO1FBQ3ZELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUF3QjtRQUN4QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQWlCO1FBQzFCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsSUFBVTtRQUNuQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQWdDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQXZMRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJU3RydWN0dXJlLCBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcbmltcG9ydCB7IFBCRW1haWwgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0RlZmF1bHRFbWFpbCc7XG5pbXBvcnQgeyBUUHJldmlld0RldmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmZXJPZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBFbWFpbCBlZGl0b3IgZXhwb3J0IGZpbGUgdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRFeHBvcnRUeXBlID0gJ2h0bWwnIHwgJ2pzb24nIHwgJ21qbWwnO1xuXG4vKipcbiAqIEVtYWlsIGVkaXRvciBpbXBvcnQgZmlsZSB0eXBlcy4gJ21qbWwnIHR5cGUgaXMgdW5kZXIgZGV2ZWxvcG1lbnQgLSBkb24ndCB1c2UgaXQgeWV0LlxuICovXG5leHBvcnQgdHlwZSBUSW1wb3J0VHlwZSA9ICdqc29uJyB8ICdtam1sJztcblxuLyoqXG4gKiBBZGQgbmV3IFN0cnVjdHVyZSB3aXRoaW4gZW1haWwgYm9keSBldmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBZGRTdHJ1Y3R1cmVFdmVudCBleHRlbmRzIENka0RyYWdEcm9wPFNldDxJU3RydWN0dXJlPiwgU2V0PElTdHJ1Y3R1cmU+PiB7XG4gIGl0ZW06IENka0RyYWc8SVN0cnVjdHVyZT47XG59XG5cbi8qKlxuICogQWRkIG5ldyBCbG9jayB3aXRoaW4gc3RydWN0dXJlcycgY29sdW1ucyBldmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBZGRCbG9ja0V2ZW50IGV4dGVuZHMgQ2RrRHJhZ0Ryb3A8VEJsb2Nrc1tdLCBUQmxvY2tzW10+IHtcbiAgaXRlbTogQ2RrRHJhZzxUQmxvY2tzPjtcbn1cblxuLyoqXG4gKiBQcmV2aWV3IGRldmljZSBidXR0b25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVByZXZpZXdUb2dnbGVCdXR0b24gZXh0ZW5kcyBNYXRCdXR0b25Ub2dnbGVDaGFuZ2Uge1xuICB2YWx1ZTogVFByZXZpZXdEZXZpY2U7XG59XG5cbi8qKlxuICogVGhpcyBzZXJ2aWNlIGFsbG93cyB5b3UgdG8gY29udHJvbCBhbGwgeW91ciB1c2VycycgYWJpbGl0aWVzIHdpdGhpbiB0aGlzIGJ1aWxkZXIuIExldHMgc2F5IHlvdSB3YW50IHRvIGltcGxlbWVudCB1c2VyIFJvbGVzIG9yIGp1c3RcbiAqIG5lZWQgdG8gZGlzYWJsZSBzb21lIGZ1bmN0aW9uYWxpdHkgZm9yIGNlcnRhaW4gdXNlcnMgYmFzZWQgb24gcHVyY2hhc2UgcGxhbiBvciBvbiBzb21ldGhpbmcgZWxzZS4gWW91IGNhbiBhbGxvdyBvciBkaXNhbGxvdyBhbG1vc3RcbiAqIGV2ZXJ5dGhpbmcuXG4gKlxuICogQWxsIHRoZSBtZXRob2RzIG11c3QgcmV0dXJuIGFuIE9ic2VydmFibGUsIHNvLCBpbiBteSBvcGluaW9uLCB0aGF0J3MgdGhlIGJlc3QgcGFydCBvZiB0aGlzIHNlcnZpY2UsIHlvdSBjYW4gZWl0aGVyIHJldHVybiBhblxuICogW0VNUFRZIE9ic2VydmFibGVde0BsaW5rIGh0dHBzOi8vcnhqcy5kZXYvYXBpL2luZGV4L2NvbnN0L0VNUFRZfSwgYSBtb2RpZmllZCBvYmplY3Qgb3IgYW4gKEluZm8gTW9kYWwpLnBpcGUobWFwVG8oRU1QVFkpKSAtIEkgdGhpbmsgeW91XG4gKiBnb3QgdGhlIGlkZWEuXG4gKlxuICogSSByZWNvbW1lbmQgYWx3YXlzIHVzaW5nIGEgTW9kYWwgb3IgYSBUb2FzdCBmb3IgZm9yYmlkZGVuIGFjdGlvbnMuXG4gKlxuICogSXQgd29uJ3Qgd29yayBpZiB5b3UgaGF2ZSBhIFJlZ3VsYXIvRnJlZSBMaWNlbnNlIC0geW91J2xsIGdldCBhbiBlcnJvciBvbiBydW5uaW5nIHRoZSBwcm9qZWN0LFxuICogeW91IG5lZWQgZWl0aGVyIGFuIFtFeHRlbmRlZCBvciBDb21tZXJjaWFsIExpY2Vuc2Vde0BsaW5rIGh0dHBzOi8vd2xvY2FsaG9zdC5vcmd9IGtleSBmb3IgdGhpcyBwdXJwb3NlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBjdXN0b20gc2VydmljZVxuICogY2xhc3MgWW91ck93bk1pZGRsZXdhcmVTZXJ2aWNlIGV4dGVuZHMgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIHt9XG4gKlxuICogLy8gUmV3cml0ZSBpdCBpbnRvIEFwcE1vZHVsZVxuICogeyBwcm92aWRlOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsIHVzZUNsYXNzOiBZb3VyT3duTWlkZGxld2FyZVNlcnZpY2UgfVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCB0byBNSk1MIENvbnZlcnRvci4gVXNlIGl0IHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgYmxvY2tzIG9yIGFueXRoaW5nIGVsc2UgdG9cbiAgICogdGhlIFBCRW1haWwgb2JqZWN0LlxuICAgKiBAcGFyYW0gZW1haWwgUEJFbWFpbCBvYmplY3QgdGhhdCdzIGJlaW5nIHNlbnQgdG8gTUpNTCBDb252ZXJ0b3IuXG4gICAqL1xuICBjcmVhdGVIVE1MVGVtcGxhdGUoZW1haWw6IFBCRW1haWwpOiBPYnNlcnZhYmxlPFBCRW1haWw+IHtcbiAgICByZXR1cm4gZGVmZXJPZihlbWFpbCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgRGlzYWxsb3cgcHJldmlldyB3aW5kb3cuXG4gICAqIEBwYXJhbSBzdGF0ZSBDb21pbmcgUHJldmlldyBzdGF0ZVxuICAgKi9cbiAgdG9nZ2xlUHJldmlldyhzdGF0ZTogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlck9mKHN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBvciBEaXNhbGxvdyBwcmV2aWV3IGRldmljZXMuXG4gICAqIEBwYXJhbSBidXR0b24gRGV2aWNlJ3MgYnV0dG9uIHRoYXQgaGFzIGJlZW4gY2xpY2tlZFxuICAgKi9cbiAgdG9nZ2xlUHJldmlld0RldmljZShidXR0b246IElQcmV2aWV3VG9nZ2xlQnV0dG9uKTogT2JzZXJ2YWJsZTxUUHJldmlld0RldmljZT4ge1xuICAgIHJldHVybiBkZWZlck9mKGJ1dHRvbi52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGNlcnRhaW4gdGVtcGxhdGVzIGJhc2VkIGVpdGhlciBvbiBjYXRlZ29yeSBvciB0ZW1wbGF0ZSBvYmplY3QuXG4gICAqIEBwYXJhbSBjYXRlZ29yeSBUZW1wbGF0ZSdzIGNhdGVnb3J5IHVzZXIgaGFzIHNlbGVjdGVkXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSB1c2VyIGhhcyBzZWxlY3RlZFxuICAgKi9cbiAgY2hvb3NlVGVtcGxhdGUoY2F0ZWdvcnk6IHN0cmluZywgdGVtcGxhdGU6IElVc2VyVGVtcGxhdGUpOiBPYnNlcnZhYmxlPHsgY2F0ZWdvcnk6IHN0cmluZzsgdGVtcGxhdGU6IElVc2VyVGVtcGxhdGUgfT4ge1xuICAgIHJldHVybiBkZWZlck9mKHsgY2F0ZWdvcnksIHRlbXBsYXRlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93LCBkaXNhbGxvdyBvciByZXR1cm4gdGhlIHNhbWUgcGF0aCBmb3IgYWxsIHVzZXIncyB1cGxvYWRlZCBpbWFnZXMuXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdXBsb2FkZWQgaW1hZ2VcbiAgICpcbiAgICogQFRPRE8gQ2hlY2sgaWYgdGhpcyBtaWRkbGV3YXJlIGlzIGJlaW5nIGNhbGxlZCBiZWZvcmUgaW1hZ2UgaGFzIGJlZW4gdXBsb2FkZWRcbiAgICovXG4gIHVwbG9hZEltYWdlKHBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGRlZmVyT2YocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlcnMgdG8gYWRkIGJsb2NrcyB3aXRoaW4gZW1haWwgc3RydWN0dXJlcy5cbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG9mIGRyb3BwZWQgYmxvY2tcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gdGhhdCBibG9jayBoYXMgYmVlbiBkcm9wcGVkXG4gICAqXG4gICAqIEBUT0RPIGFkZCBwYXJlbnQgc3RydWN0dXJlIGFzIGEgcGFyYW1ldGVyXG4gICAqL1xuICBhZGRCbG9jayhldmVudDogSUFkZEJsb2NrRXZlbnQsIGNvbHVtbjogVEJsb2Nrc1tdKTogT2JzZXJ2YWJsZTx7IGNvbHVtbjogVEJsb2Nrc1tdOyBldmVudDogSUFkZEJsb2NrRXZlbnQgfT4ge1xuICAgIHJldHVybiBkZWZlck9mKHsgZXZlbnQsIGNvbHVtbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZWRpdCBibG9ja3Mgd2l0aGluIGVtYWlsIGJvZHkuXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0aGF0IHVzZXIgaW50ZW5kcyB0byBlZGl0XG4gICAqL1xuICBlZGl0QmxvY2soYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPFRCbG9ja3M+IHtcbiAgICByZXR1cm4gZGVmZXJPZihibG9jayk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCB1c2VyIHRvIHJlbW92ZSBibG9ja3Mgd2l0aGluIGVtYWlsIGJvZHkuXG4gICAqIEBwYXJhbSBpbmRleCBCbG9jaydzIEluZGV4XG4gICAqIEBwYXJhbSBjb2x1bW4gQmxvY2sncyBwYXJlbnQgY29sdW1uXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0aGF0IHVzZXIgaW50ZW5kcyB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUJsb2NrKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVEJsb2Nrc1tdLCBibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8eyBpbmRleDogbnVtYmVyOyBjb2x1bW46IFRCbG9ja3NbXSB9PiB7XG4gICAgcmV0dXJuIGRlZmVyT2YoeyBpbmRleCwgY29sdW1uIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgdXNlciB0byBkdXBsaWNhdGUgYmxvY2tzIHdpdGhpbiBlbWFpbCBib2R5LlxuICAgKiBAcGFyYW0gaW5kZXggQmxvY2sncyBJbmRleFxuICAgKiBAcGFyYW0gY29sdW1uIEJsb2NrJ3MgcGFyZW50IGNvbHVtblxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB1c2VyIGludGVuZHMgdG8gZHVwbGljYXRlXG4gICAqL1xuICBkdXBsaWNhdGVCbG9jayhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSwgYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPHsgaW5kZXg6IG51bWJlcjsgY29sdW1uOiBUQmxvY2tzW107IGJsb2NrOiBUQmxvY2tzIH0+IHtcbiAgICByZXR1cm4gZGVmZXJPZih7IGluZGV4LCBjb2x1bW4sIGJsb2NrIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgRHJhZyBhbmQgRHJvcCBjZXJ0YWluIGJsb2NrcyBmcm9tIEJsb2NrcyBsaXN0IHRvIEVtYWlsIGJvZHkuXG4gICAqIFJldHVybiBUUlVFIHRvIGRpc2FibGUgYWxsIGJsb2NrcyAtIG5vIG1hdHRlciBvbiBibG9jaydzIGRhdGEuXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0byBhbGxvdyBvciBkaXNhbGxvdyBmcm9tIGJlaW5nIGRyYWdnZWRcbiAgICovXG4gIGRpc2FibGVCbG9ja0RyYWdGcm9tTGlzdChibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlck9mKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXJzIHRvIHNvcnQgYmxvY2tzIHdpdGhpbiBlbWFpbCBib2R5LlxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB1c2VyIGludGVuZHMgdG8gY2hhbmdlIHRoZSBvcmRlclxuICAgKi9cbiAgZGlzYWJsZUJsb2NrRHJhZ1dpdGhpbkVtYWlsQm9keShibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlck9mKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gYWRkIG5ldyBzdHJ1Y3R1cmUuXG4gICAqIEBwYXJhbSBldmVudCBFdmVudCBvZiBkcm9wcGVkIHN0cnVjdHVyZVxuICAgKi9cbiAgYWRkU3RydWN0dXJlKGV2ZW50OiBJQWRkU3RydWN0dXJlRXZlbnQpOiBPYnNlcnZhYmxlPElBZGRTdHJ1Y3R1cmVFdmVudD4ge1xuICAgIHJldHVybiBkZWZlck9mKGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZWRpdCB0aGUgc3RydWN0dXJlLlxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBlZGl0XG4gICAqL1xuICBlZGl0U3RydWN0dXJlKHN0cnVjdHVyZTogSVN0cnVjdHVyZSk6IE9ic2VydmFibGU8SVN0cnVjdHVyZT4ge1xuICAgIHJldHVybiBkZWZlck9mKHN0cnVjdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCB1c2VyIHRvIHJlbW92ZSB0aGUgc3RydWN0dXJlLlxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZVN0cnVjdHVyZShpbmRleDogbnVtYmVyLCBzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiBkZWZlck9mKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZHVwbGljYXRlIHRoZSBzdHJ1Y3R1cmUgd2l0aGluIGVtYWlsIGJvZHkuXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHN0cnVjdHVyZSBTdHJ1Y3R1cmUgdGhhdCB1c2VyIGludGVuZHMgdG8gZHVwbGljYXRlXG4gICAqL1xuICBkdXBsaWNhdGVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlciwgc3RydWN0dXJlOiBJU3RydWN0dXJlKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZGVmZXJPZihpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBEcmFnIGFuZCBEcm9wIGNlcnRhaW4gc3RydWN0dXJlcyBmcm9tIFN0cnVjdHVyZXMgbGlzdCB0byBFbWFpbCBib2R5LlxuICAgKiBSZXR1cm4gVFJVRSB0byBkaXNhYmxlIGFsbCBzdHJ1Y3R1cmVzLlxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0byBwcmV2ZW50IGZyb20gYmVpbmcgZHJhZ2dlZFxuICAgKi9cbiAgZGlzYWJsZVN0cnVjdHVyZURyYWdGcm9tTGlzdChzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZGVmZXJPZihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlcnMgdG8gc29ydCBzdHJ1Y3R1cmVzIHdpdGhpbiBlbWFpbCBib2R5LlxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBjaGFuZ2UgdGhlIG9yZGVyXG4gICAqL1xuICBkaXNhYmxlU3RydWN0dXJlRHJhZ1dpdGhpbkVtYWlsQm9keShzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZGVmZXJPZihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogSSBkb24ndCBrbm93IHdoeSB3b3VsZCB5b3UgZG8gdGhhdCwgYnV0IHlvdSBjYW4gZGlzYWJsZSBPbkV4aXQgY29uZmlybSBtb2RhbC5cbiAgICogQHBhcmFtIGV2ZW50IFdpbmRvdyBbQmVmb3JlVW5sb2FkRXZlbnRde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9CZWZvcmVVbmxvYWRFdmVudH1cbiAgICovXG4gIHByZXZlbnRXaW5kb3dFeGl0KGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCk6IE9ic2VydmFibGU8QmVmb3JlVW5sb2FkRXZlbnQ+IHtcbiAgICByZXR1cm4gZGVmZXJPZihldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlciB0byBleHBvcnQgY2VydGFpbiB0eXBlcyBvZiBmaWxlXG4gICAqIEBwYXJhbSB0eXBlIFR5cGUgdGhhdCB1c2VyIGludGVuZHMgdG8gZG93bmxvYWRcbiAgICovXG4gIGV4cG9ydEZpbGUodHlwZTogVEV4cG9ydFR5cGUpOiBPYnNlcnZhYmxlPFRFeHBvcnRUeXBlPiB7XG4gICAgcmV0dXJuIGRlZmVyT2YodHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlciB0byBpbXBvcnQgY2VydGFpbiB0eXBlcyBvZiBmaWxlXG4gICAqIEBwYXJhbSBmaWxlIFdlYiBBUElzIFtGSUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZX1cbiAgICovXG4gIGltcG9ydEZpbGUoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIHJldHVybiBkZWZlck9mKGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhdGNoIGFsbCBlcnJvcnMgd2l0aGluIGVtYWlsIGVkaXRvciwgaXQgbWlnaHQgbm90IHdvcmsgMTAwJSwgaXQncyBzdGlsbCBvbiB3b3JraW5nIHByb2Nlc3MuXG4gICAqIEBwYXJhbSBlcnJvciBUaHJvd2FibGUgRXJyb3JcbiAgICovXG4gIGNhdGNoRXJyb3IoZXJyb3I6IEVycm9yIHwgSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPEVycm9yIHwgSHR0cEVycm9yUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gZGVmZXJPZihlcnJvcik7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Injectable } from '@angular/core';
|
|
6
|
+
import { deferOf } from '../../utils';
|
|
7
|
+
/**
|
|
8
|
+
* This service allows you to control all your users' abilities within this builder. Lets say you want to implement user Roles or just
|
|
9
|
+
* need to disable some functionality for certain users based on purchase plan or on something else. You can allow or disallow almost
|
|
10
|
+
* everything.
|
|
11
|
+
*
|
|
12
|
+
* All the methods must return an Observable, so, in my opinion, that's the best part of this service, you can either return an
|
|
13
|
+
* [EMPTY Observable]{@link https://rxjs.dev/api/index/const/EMPTY}, a modified object or an (Info Modal).pipe(mapTo(EMPTY)) - I think you
|
|
14
|
+
* got the idea.
|
|
15
|
+
*
|
|
16
|
+
* I recommend always using a Modal or a Toast for forbidden actions.
|
|
17
|
+
*
|
|
18
|
+
* It won't work if you have a Regular/Free License - you'll get an error on running the project,
|
|
19
|
+
* you need either an [Extended or Commercial License]{@link https://wlocalhost.org} key for this purpose.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // Create a custom service
|
|
23
|
+
* class YourOwnMiddlewareService extends PbUserMiddlewaresService {}
|
|
24
|
+
*
|
|
25
|
+
* // Rewrite it into AppModule
|
|
26
|
+
* { provide: PbUserMiddlewaresService, useClass: YourOwnMiddlewareService }
|
|
27
|
+
*/
|
|
28
|
+
export class PbUserMiddlewaresService {
|
|
29
|
+
/**
|
|
30
|
+
* This method is called before sending the request to MJML Convertor. Use it to add some additional blocks or anything else to
|
|
31
|
+
* the PBEmail object.
|
|
32
|
+
* @param email PBEmail object that's being sent to MJML Convertor.
|
|
33
|
+
*/
|
|
34
|
+
createHTMLTemplate(email) {
|
|
35
|
+
return deferOf(email);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Allow or Disallow preview window.
|
|
39
|
+
* @param state Coming Preview state
|
|
40
|
+
*/
|
|
41
|
+
togglePreview(state) {
|
|
42
|
+
return deferOf(state);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Allow or Disallow preview devices.
|
|
46
|
+
* @param button Device's button that has been clicked
|
|
47
|
+
*/
|
|
48
|
+
togglePreviewDevice(button) {
|
|
49
|
+
return deferOf(button.value);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Allow or disallow users to select certain templates based either on category or template object.
|
|
53
|
+
* @param category Template's category user has selected
|
|
54
|
+
* @param template Template user has selected
|
|
55
|
+
*/
|
|
56
|
+
chooseTemplate(category, template) {
|
|
57
|
+
return deferOf({ category, template });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Allow, disallow or return the same path for all user's uploaded images.
|
|
61
|
+
* @param path Path of uploaded image
|
|
62
|
+
*
|
|
63
|
+
* @TODO Check if this middleware is being called before image has been uploaded
|
|
64
|
+
*/
|
|
65
|
+
uploadImage(path) {
|
|
66
|
+
return deferOf(path);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Allow or disallow users to add blocks within email structures.
|
|
70
|
+
* @param event Event of dropped block
|
|
71
|
+
* @param column Column that block has been dropped
|
|
72
|
+
*
|
|
73
|
+
* @TODO add parent structure as a parameter
|
|
74
|
+
*/
|
|
75
|
+
addBlock(event, column) {
|
|
76
|
+
return deferOf({ event, column });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Prevent user to edit blocks within email body.
|
|
80
|
+
* @param block Block that user intends to edit
|
|
81
|
+
*/
|
|
82
|
+
editBlock(block) {
|
|
83
|
+
return deferOf(block);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Prevent user to remove blocks within email body.
|
|
87
|
+
* @param index Block's Index
|
|
88
|
+
* @param column Block's parent column
|
|
89
|
+
* @param block Block that user intends to remove
|
|
90
|
+
*/
|
|
91
|
+
removeBlock(index, column, block) {
|
|
92
|
+
return deferOf({ index, column });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Prevent user to duplicate blocks within email body.
|
|
96
|
+
* @param index Block's Index
|
|
97
|
+
* @param column Block's parent column
|
|
98
|
+
* @param block Block that user intends to duplicate
|
|
99
|
+
*/
|
|
100
|
+
duplicateBlock(index, column, block) {
|
|
101
|
+
return deferOf({ index, column, block });
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Disable Drag and Drop certain blocks from Blocks list to Email body.
|
|
105
|
+
* Return TRUE to disable all blocks - no matter on block's data.
|
|
106
|
+
* @param block Block to allow or disallow from being dragged
|
|
107
|
+
*/
|
|
108
|
+
disableBlockDragFromList(block) {
|
|
109
|
+
return deferOf(false);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Prevent users to sort blocks within email body.
|
|
113
|
+
* @param block Block that user intends to change the order
|
|
114
|
+
*/
|
|
115
|
+
disableBlockDragWithinEmailBody(block) {
|
|
116
|
+
return deferOf(false);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Prevent user to add new structure.
|
|
120
|
+
* @param event Event of dropped structure
|
|
121
|
+
*/
|
|
122
|
+
addStructure(event) {
|
|
123
|
+
return deferOf(event);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Prevent user to edit the structure.
|
|
127
|
+
* @param structure Structure that user intends to edit
|
|
128
|
+
*/
|
|
129
|
+
editStructure(structure) {
|
|
130
|
+
return deferOf(structure);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Prevent user to remove the structure.
|
|
134
|
+
* @param index Index of the structure
|
|
135
|
+
* @param structure Structure that user intends to remove
|
|
136
|
+
*/
|
|
137
|
+
removeStructure(index, structure) {
|
|
138
|
+
return deferOf(index);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Prevent user to duplicate the structure within email body.
|
|
142
|
+
* @param index Index of structure
|
|
143
|
+
* @param structure Structure that user intends to duplicate
|
|
144
|
+
*/
|
|
145
|
+
duplicateStructure(index, structure) {
|
|
146
|
+
return deferOf(index);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Disable Drag and Drop certain structures from Structures list to Email body.
|
|
150
|
+
* Return TRUE to disable all structures.
|
|
151
|
+
* @param structure Structure to prevent from being dragged
|
|
152
|
+
*/
|
|
153
|
+
disableStructureDragFromList(structure) {
|
|
154
|
+
return deferOf(false);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Allow or disallow users to sort structures within email body.
|
|
158
|
+
* @param structure Structure that user intends to change the order
|
|
159
|
+
*/
|
|
160
|
+
disableStructureDragWithinEmailBody(structure) {
|
|
161
|
+
return deferOf(false);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* I don't know why would you do that, but you can disable OnExit confirm modal.
|
|
165
|
+
* @param event Window [BeforeUnloadEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent}
|
|
166
|
+
*/
|
|
167
|
+
preventWindowExit(event) {
|
|
168
|
+
return deferOf(event);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Allow or disallow user to export certain types of file
|
|
172
|
+
* @param type Type that user intends to download
|
|
173
|
+
*/
|
|
174
|
+
exportFile(type) {
|
|
175
|
+
return deferOf(type);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Allow or disallow user to import certain types of file
|
|
179
|
+
* @param file Web APIs [FILE]{@link https://developer.mozilla.org/en-US/docs/Web/API/File}
|
|
180
|
+
*/
|
|
181
|
+
importFile(file) {
|
|
182
|
+
return deferOf(file);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Catch all errors within email editor, it might not work 100%, it's still on working process.
|
|
186
|
+
* @param error Throwable Error
|
|
187
|
+
*/
|
|
188
|
+
catchError(error) {
|
|
189
|
+
return deferOf(error);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
PbUserMiddlewaresService.decorators = [
|
|
193
|
+
{ type: Injectable }
|
|
194
|
+
];
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItbWlkZGxld2FyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWlDdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsTUFBTSxPQUFnQix3QkFBd0I7SUFDNUM7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLEtBQWM7UUFDL0IsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFjO1FBQzFCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxNQUE0QjtRQUM5QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsUUFBZ0IsRUFBRSxRQUF1QjtRQUN0RCxPQUFPLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsS0FBcUIsRUFBRSxNQUFpQjtRQUMvQyxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBYztRQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsS0FBYSxFQUFFLE1BQWlCLEVBQUUsS0FBYztRQUMxRCxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxLQUFhLEVBQUUsTUFBaUIsRUFBRSxLQUFjO1FBQzdELE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsS0FBYztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsK0JBQStCLENBQUMsS0FBYztRQUM1QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQXlCO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsU0FBcUI7UUFDakMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNEJBQTRCLENBQUMsU0FBcUI7UUFDaEQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1DQUFtQyxDQUFDLFNBQXFCO1FBQ3ZELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUF3QjtRQUN4QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQWlCO1FBQzFCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsSUFBVTtRQUNuQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQWdDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQXZMRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgSVN0cnVjdHVyZSwgSVVzZXJUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcclxuaW1wb3J0IHsgUEJFbWFpbCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdEVtYWlsJztcclxuaW1wb3J0IHsgVFByZXZpZXdEZXZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3ByZXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgZGVmZXJPZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBFbWFpbCBlZGl0b3IgZXhwb3J0IGZpbGUgdHlwZXMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBURXhwb3J0VHlwZSA9ICdodG1sJyB8ICdqc29uJyB8ICdtam1sJztcclxuXHJcbi8qKlxyXG4gKiBFbWFpbCBlZGl0b3IgaW1wb3J0IGZpbGUgdHlwZXMuICdtam1sJyB0eXBlIGlzIHVuZGVyIGRldmVsb3BtZW50IC0gZG9uJ3QgdXNlIGl0IHlldC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFRJbXBvcnRUeXBlID0gJ2pzb24nIHwgJ21qbWwnO1xyXG5cclxuLyoqXHJcbiAqIEFkZCBuZXcgU3RydWN0dXJlIHdpdGhpbiBlbWFpbCBib2R5IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBZGRTdHJ1Y3R1cmVFdmVudCBleHRlbmRzIENka0RyYWdEcm9wPFNldDxJU3RydWN0dXJlPiwgU2V0PElTdHJ1Y3R1cmU+PiB7XHJcbiAgaXRlbTogQ2RrRHJhZzxJU3RydWN0dXJlPjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFkZCBuZXcgQmxvY2sgd2l0aGluIHN0cnVjdHVyZXMnIGNvbHVtbnMgZXZlbnRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFkZEJsb2NrRXZlbnQgZXh0ZW5kcyBDZGtEcmFnRHJvcDxUQmxvY2tzW10sIFRCbG9ja3NbXT4ge1xyXG4gIGl0ZW06IENka0RyYWc8VEJsb2Nrcz47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcmV2aWV3IGRldmljZSBidXR0b25zXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQcmV2aWV3VG9nZ2xlQnV0dG9uIGV4dGVuZHMgTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlIHtcclxuICB2YWx1ZTogVFByZXZpZXdEZXZpY2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIHNlcnZpY2UgYWxsb3dzIHlvdSB0byBjb250cm9sIGFsbCB5b3VyIHVzZXJzJyBhYmlsaXRpZXMgd2l0aGluIHRoaXMgYnVpbGRlci4gTGV0cyBzYXkgeW91IHdhbnQgdG8gaW1wbGVtZW50IHVzZXIgUm9sZXMgb3IganVzdFxyXG4gKiBuZWVkIHRvIGRpc2FibGUgc29tZSBmdW5jdGlvbmFsaXR5IGZvciBjZXJ0YWluIHVzZXJzIGJhc2VkIG9uIHB1cmNoYXNlIHBsYW4gb3Igb24gc29tZXRoaW5nIGVsc2UuIFlvdSBjYW4gYWxsb3cgb3IgZGlzYWxsb3cgYWxtb3N0XHJcbiAqIGV2ZXJ5dGhpbmcuXHJcbiAqXHJcbiAqIEFsbCB0aGUgbWV0aG9kcyBtdXN0IHJldHVybiBhbiBPYnNlcnZhYmxlLCBzbywgaW4gbXkgb3BpbmlvbiwgdGhhdCdzIHRoZSBiZXN0IHBhcnQgb2YgdGhpcyBzZXJ2aWNlLCB5b3UgY2FuIGVpdGhlciByZXR1cm4gYW5cclxuICogW0VNUFRZIE9ic2VydmFibGVde0BsaW5rIGh0dHBzOi8vcnhqcy5kZXYvYXBpL2luZGV4L2NvbnN0L0VNUFRZfSwgYSBtb2RpZmllZCBvYmplY3Qgb3IgYW4gKEluZm8gTW9kYWwpLnBpcGUobWFwVG8oRU1QVFkpKSAtIEkgdGhpbmsgeW91XHJcbiAqIGdvdCB0aGUgaWRlYS5cclxuICpcclxuICogSSByZWNvbW1lbmQgYWx3YXlzIHVzaW5nIGEgTW9kYWwgb3IgYSBUb2FzdCBmb3IgZm9yYmlkZGVuIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEl0IHdvbid0IHdvcmsgaWYgeW91IGhhdmUgYSBSZWd1bGFyL0ZyZWUgTGljZW5zZSAtIHlvdSdsbCBnZXQgYW4gZXJyb3Igb24gcnVubmluZyB0aGUgcHJvamVjdCxcclxuICogeW91IG5lZWQgZWl0aGVyIGFuIFtFeHRlbmRlZCBvciBDb21tZXJjaWFsIExpY2Vuc2Vde0BsaW5rIGh0dHBzOi8vd2xvY2FsaG9zdC5vcmd9IGtleSBmb3IgdGhpcyBwdXJwb3NlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBDcmVhdGUgYSBjdXN0b20gc2VydmljZVxyXG4gKiBjbGFzcyBZb3VyT3duTWlkZGxld2FyZVNlcnZpY2UgZXh0ZW5kcyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2Uge31cclxuICpcclxuICogLy8gUmV3cml0ZSBpdCBpbnRvIEFwcE1vZHVsZVxyXG4gKiB7IHByb3ZpZGU6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSwgdXNlQ2xhc3M6IFlvdXJPd25NaWRkbGV3YXJlU2VydmljZSB9XHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2Uge1xyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCB0byBNSk1MIENvbnZlcnRvci4gVXNlIGl0IHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgYmxvY2tzIG9yIGFueXRoaW5nIGVsc2UgdG9cclxuICAgKiB0aGUgUEJFbWFpbCBvYmplY3QuXHJcbiAgICogQHBhcmFtIGVtYWlsIFBCRW1haWwgb2JqZWN0IHRoYXQncyBiZWluZyBzZW50IHRvIE1KTUwgQ29udmVydG9yLlxyXG4gICAqL1xyXG4gIGNyZWF0ZUhUTUxUZW1wbGF0ZShlbWFpbDogUEJFbWFpbCk6IE9ic2VydmFibGU8UEJFbWFpbD4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoZW1haWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3cgb3IgRGlzYWxsb3cgcHJldmlldyB3aW5kb3cuXHJcbiAgICogQHBhcmFtIHN0YXRlIENvbWluZyBQcmV2aWV3IHN0YXRlXHJcbiAgICovXHJcbiAgdG9nZ2xlUHJldmlldyhzdGF0ZTogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2Yoc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3cgb3IgRGlzYWxsb3cgcHJldmlldyBkZXZpY2VzLlxyXG4gICAqIEBwYXJhbSBidXR0b24gRGV2aWNlJ3MgYnV0dG9uIHRoYXQgaGFzIGJlZW4gY2xpY2tlZFxyXG4gICAqL1xyXG4gIHRvZ2dsZVByZXZpZXdEZXZpY2UoYnV0dG9uOiBJUHJldmlld1RvZ2dsZUJ1dHRvbik6IE9ic2VydmFibGU8VFByZXZpZXdEZXZpY2U+IHtcclxuICAgIHJldHVybiBkZWZlck9mKGJ1dHRvbi52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBvciBkaXNhbGxvdyB1c2VycyB0byBzZWxlY3QgY2VydGFpbiB0ZW1wbGF0ZXMgYmFzZWQgZWl0aGVyIG9uIGNhdGVnb3J5IG9yIHRlbXBsYXRlIG9iamVjdC5cclxuICAgKiBAcGFyYW0gY2F0ZWdvcnkgVGVtcGxhdGUncyBjYXRlZ29yeSB1c2VyIGhhcyBzZWxlY3RlZFxyXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSB1c2VyIGhhcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIGNob29zZVRlbXBsYXRlKGNhdGVnb3J5OiBzdHJpbmcsIHRlbXBsYXRlOiBJVXNlclRlbXBsYXRlKTogT2JzZXJ2YWJsZTx7IGNhdGVnb3J5OiBzdHJpbmc7IHRlbXBsYXRlOiBJVXNlclRlbXBsYXRlIH0+IHtcclxuICAgIHJldHVybiBkZWZlck9mKHsgY2F0ZWdvcnksIHRlbXBsYXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3csIGRpc2FsbG93IG9yIHJldHVybiB0aGUgc2FtZSBwYXRoIGZvciBhbGwgdXNlcidzIHVwbG9hZGVkIGltYWdlcy5cclxuICAgKiBAcGFyYW0gcGF0aCBQYXRoIG9mIHVwbG9hZGVkIGltYWdlXHJcbiAgICpcclxuICAgKiBAVE9ETyBDaGVjayBpZiB0aGlzIG1pZGRsZXdhcmUgaXMgYmVpbmcgY2FsbGVkIGJlZm9yZSBpbWFnZSBoYXMgYmVlbiB1cGxvYWRlZFxyXG4gICAqL1xyXG4gIHVwbG9hZEltYWdlKHBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gZGVmZXJPZihwYXRoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IG9yIGRpc2FsbG93IHVzZXJzIHRvIGFkZCBibG9ja3Mgd2l0aGluIGVtYWlsIHN0cnVjdHVyZXMuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG9mIGRyb3BwZWQgYmxvY2tcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtbiB0aGF0IGJsb2NrIGhhcyBiZWVuIGRyb3BwZWRcclxuICAgKlxyXG4gICAqIEBUT0RPIGFkZCBwYXJlbnQgc3RydWN0dXJlIGFzIGEgcGFyYW1ldGVyXHJcbiAgICovXHJcbiAgYWRkQmxvY2soZXZlbnQ6IElBZGRCbG9ja0V2ZW50LCBjb2x1bW46IFRCbG9ja3NbXSk6IE9ic2VydmFibGU8eyBjb2x1bW46IFRCbG9ja3NbXTsgZXZlbnQ6IElBZGRCbG9ja0V2ZW50IH0+IHtcclxuICAgIHJldHVybiBkZWZlck9mKHsgZXZlbnQsIGNvbHVtbiB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgdXNlciB0byBlZGl0IGJsb2NrcyB3aXRoaW4gZW1haWwgYm9keS5cclxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB1c2VyIGludGVuZHMgdG8gZWRpdFxyXG4gICAqL1xyXG4gIGVkaXRCbG9jayhibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8VEJsb2Nrcz4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoYmxvY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudCB1c2VyIHRvIHJlbW92ZSBibG9ja3Mgd2l0aGluIGVtYWlsIGJvZHkuXHJcbiAgICogQHBhcmFtIGluZGV4IEJsb2NrJ3MgSW5kZXhcclxuICAgKiBAcGFyYW0gY29sdW1uIEJsb2NrJ3MgcGFyZW50IGNvbHVtblxyXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0aGF0IHVzZXIgaW50ZW5kcyB0byByZW1vdmVcclxuICAgKi9cclxuICByZW1vdmVCbG9jayhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSwgYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPHsgaW5kZXg6IG51bWJlcjsgY29sdW1uOiBUQmxvY2tzW10gfT4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoeyBpbmRleCwgY29sdW1uIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudCB1c2VyIHRvIGR1cGxpY2F0ZSBibG9ja3Mgd2l0aGluIGVtYWlsIGJvZHkuXHJcbiAgICogQHBhcmFtIGluZGV4IEJsb2NrJ3MgSW5kZXhcclxuICAgKiBAcGFyYW0gY29sdW1uIEJsb2NrJ3MgcGFyZW50IGNvbHVtblxyXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0aGF0IHVzZXIgaW50ZW5kcyB0byBkdXBsaWNhdGVcclxuICAgKi9cclxuICBkdXBsaWNhdGVCbG9jayhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSwgYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPHsgaW5kZXg6IG51bWJlcjsgY29sdW1uOiBUQmxvY2tzW107IGJsb2NrOiBUQmxvY2tzIH0+IHtcclxuICAgIHJldHVybiBkZWZlck9mKHsgaW5kZXgsIGNvbHVtbiwgYmxvY2sgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIERyYWcgYW5kIERyb3AgY2VydGFpbiBibG9ja3MgZnJvbSBCbG9ja3MgbGlzdCB0byBFbWFpbCBib2R5LlxyXG4gICAqIFJldHVybiBUUlVFIHRvIGRpc2FibGUgYWxsIGJsb2NrcyAtIG5vIG1hdHRlciBvbiBibG9jaydzIGRhdGEuXHJcbiAgICogQHBhcmFtIGJsb2NrIEJsb2NrIHRvIGFsbG93IG9yIGRpc2FsbG93IGZyb20gYmVpbmcgZHJhZ2dlZFxyXG4gICAqL1xyXG4gIGRpc2FibGVCbG9ja0RyYWdGcm9tTGlzdChibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudCB1c2VycyB0byBzb3J0IGJsb2NrcyB3aXRoaW4gZW1haWwgYm9keS5cclxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB1c2VyIGludGVuZHMgdG8gY2hhbmdlIHRoZSBvcmRlclxyXG4gICAqL1xyXG4gIGRpc2FibGVCbG9ja0RyYWdXaXRoaW5FbWFpbEJvZHkoYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBkZWZlck9mKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgdXNlciB0byBhZGQgbmV3IHN0cnVjdHVyZS5cclxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgb2YgZHJvcHBlZCBzdHJ1Y3R1cmVcclxuICAgKi9cclxuICBhZGRTdHJ1Y3R1cmUoZXZlbnQ6IElBZGRTdHJ1Y3R1cmVFdmVudCk6IE9ic2VydmFibGU8SUFkZFN0cnVjdHVyZUV2ZW50PiB7XHJcbiAgICByZXR1cm4gZGVmZXJPZihldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZWRpdCB0aGUgc3RydWN0dXJlLlxyXG4gICAqIEBwYXJhbSBzdHJ1Y3R1cmUgU3RydWN0dXJlIHRoYXQgdXNlciBpbnRlbmRzIHRvIGVkaXRcclxuICAgKi9cclxuICBlZGl0U3RydWN0dXJlKHN0cnVjdHVyZTogSVN0cnVjdHVyZSk6IE9ic2VydmFibGU8SVN0cnVjdHVyZT4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2Yoc3RydWN0dXJlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnQgdXNlciB0byByZW1vdmUgdGhlIHN0cnVjdHVyZS5cclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHN0cnVjdHVyZVxyXG4gICAqIEBwYXJhbSBzdHJ1Y3R1cmUgU3RydWN0dXJlIHRoYXQgdXNlciBpbnRlbmRzIHRvIHJlbW92ZVxyXG4gICAqL1xyXG4gIHJlbW92ZVN0cnVjdHVyZShpbmRleDogbnVtYmVyLCBzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudCB1c2VyIHRvIGR1cGxpY2F0ZSB0aGUgc3RydWN0dXJlIHdpdGhpbiBlbWFpbCBib2R5LlxyXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBzdHJ1Y3R1cmVcclxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBkdXBsaWNhdGVcclxuICAgKi9cclxuICBkdXBsaWNhdGVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlciwgc3RydWN0dXJlOiBJU3RydWN0dXJlKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBkZWZlck9mKGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2FibGUgRHJhZyBhbmQgRHJvcCBjZXJ0YWluIHN0cnVjdHVyZXMgZnJvbSBTdHJ1Y3R1cmVzIGxpc3QgdG8gRW1haWwgYm9keS5cclxuICAgKiBSZXR1cm4gVFJVRSB0byBkaXNhYmxlIGFsbCBzdHJ1Y3R1cmVzLlxyXG4gICAqIEBwYXJhbSBzdHJ1Y3R1cmUgU3RydWN0dXJlIHRvIHByZXZlbnQgZnJvbSBiZWluZyBkcmFnZ2VkXHJcbiAgICovXHJcbiAgZGlzYWJsZVN0cnVjdHVyZURyYWdGcm9tTGlzdChzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBkZWZlck9mKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IG9yIGRpc2FsbG93IHVzZXJzIHRvIHNvcnQgc3RydWN0dXJlcyB3aXRoaW4gZW1haWwgYm9keS5cclxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBjaGFuZ2UgdGhlIG9yZGVyXHJcbiAgICovXHJcbiAgZGlzYWJsZVN0cnVjdHVyZURyYWdXaXRoaW5FbWFpbEJvZHkoc3RydWN0dXJlOiBJU3RydWN0dXJlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gZGVmZXJPZihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJIGRvbid0IGtub3cgd2h5IHdvdWxkIHlvdSBkbyB0aGF0LCBidXQgeW91IGNhbiBkaXNhYmxlIE9uRXhpdCBjb25maXJtIG1vZGFsLlxyXG4gICAqIEBwYXJhbSBldmVudCBXaW5kb3cgW0JlZm9yZVVubG9hZEV2ZW50XXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQmVmb3JlVW5sb2FkRXZlbnR9XHJcbiAgICovXHJcbiAgcHJldmVudFdpbmRvd0V4aXQoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KTogT2JzZXJ2YWJsZTxCZWZvcmVVbmxvYWRFdmVudD4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlciB0byBleHBvcnQgY2VydGFpbiB0eXBlcyBvZiBmaWxlXHJcbiAgICogQHBhcmFtIHR5cGUgVHlwZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBkb3dubG9hZFxyXG4gICAqL1xyXG4gIGV4cG9ydEZpbGUodHlwZTogVEV4cG9ydFR5cGUpOiBPYnNlcnZhYmxlPFRFeHBvcnRUeXBlPiB7XHJcbiAgICByZXR1cm4gZGVmZXJPZih0eXBlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IG9yIGRpc2FsbG93IHVzZXIgdG8gaW1wb3J0IGNlcnRhaW4gdHlwZXMgb2YgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIFdlYiBBUElzIFtGSUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZX1cclxuICAgKi9cclxuICBpbXBvcnRGaWxlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEZpbGU+IHtcclxuICAgIHJldHVybiBkZWZlck9mKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2F0Y2ggYWxsIGVycm9ycyB3aXRoaW4gZW1haWwgZWRpdG9yLCBpdCBtaWdodCBub3Qgd29yayAxMDAlLCBpdCdzIHN0aWxsIG9uIHdvcmtpbmcgcHJvY2Vzcy5cclxuICAgKiBAcGFyYW0gZXJyb3IgVGhyb3dhYmxlIEVycm9yXHJcbiAgICovXHJcbiAgY2F0Y2hFcnJvcihlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8RXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIGRlZmVyT2YoZXJyb3IpO1xyXG4gIH1cclxufVxyXG4iXX0=
|