@lenne.tech/ng-base 0.3.12 → 13.0.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/{esm2015/lenne.tech-ng-base.js → esm2020/lenne.tech-ng-base.mjs} +0 -0
- package/esm2020/lib/base/base.module.mjs +97 -0
- package/{esm2015/lib/base/classes/basic-user.class.js → esm2020/lib/base/classes/basic-user.class.mjs} +0 -0
- package/{esm2015/lib/base/classes/graphql-enum.class.js → esm2020/lib/base/classes/graphql-enum.class.mjs} +0 -0
- package/esm2020/lib/base/classes/graphql-meta.class.mjs +171 -0
- package/{esm2015/lib/base/classes/graphql-type.class.js → esm2020/lib/base/classes/graphql-type.class.mjs} +0 -0
- package/esm2020/lib/base/classes/helper.class.mjs +295 -0
- package/{esm2015/lib/base/classes/standard.class.js → esm2020/lib/base/classes/standard.class.mjs} +0 -0
- package/esm2020/lib/base/directives/context-menu.directive.mjs +109 -0
- package/esm2020/lib/base/directives/lazy-load.directive.mjs +45 -0
- package/esm2020/lib/base/directives/match-height.directive.mjs +79 -0
- package/esm2020/lib/base/directives/resizable.directive.mjs +90 -0
- package/{esm2015/lib/base/enums/comparison-operator.enum.js → esm2020/lib/base/enums/comparison-operator.enum.mjs} +0 -0
- package/{esm2015/lib/base/enums/graphql-request-type.enum.js → esm2020/lib/base/enums/graphql-request-type.enum.mjs} +0 -0
- package/{esm2015/lib/base/enums/logical-operator.enum.js → esm2020/lib/base/enums/logical-operator.enum.mjs} +0 -0
- package/{esm2015/lib/base/enums/sort-order.enum.js → esm2020/lib/base/enums/sort-order.enum.mjs} +0 -0
- package/{esm2015/lib/base/factories/apollo-options.factory.js → esm2020/lib/base/factories/apollo-options.factory.mjs} +0 -0
- package/esm2020/lib/base/guards/auth.guard.mjs +61 -0
- package/esm2020/lib/base/guards/can-deactivate.guard.mjs +16 -0
- package/esm2020/lib/base/guards/logout.guard.mjs +32 -0
- package/{esm2015/lib/base/index.js → esm2020/lib/base/index.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/base-module-config.interface.js → esm2020/lib/base/interfaces/base-module-config.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/can-component-deactivate.interface.js → esm2020/lib/base/interfaces/can-component-deactivate.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/combined-filter-input.interface.js → esm2020/lib/base/interfaces/combined-filter-input.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/field-object.interface.js → esm2020/lib/base/interfaces/field-object.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/field.interface.js → esm2020/lib/base/interfaces/field.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/filter-input.interface.js → esm2020/lib/base/interfaces/filter-input.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/find-args.interface.js → esm2020/lib/base/interfaces/find-args.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/graphql-options.interface.js → esm2020/lib/base/interfaces/graphql-options.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/graphql-plus-options.interfacen.js → esm2020/lib/base/interfaces/graphql-plus-options.interfacen.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/graphql-type-collection.interface.js → esm2020/lib/base/interfaces/graphql-type-collection.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/single-filter-input.interface.js → esm2020/lib/base/interfaces/single-filter-input.interface.mjs} +0 -0
- package/{esm2015/lib/base/interfaces/sort-input.interface.js → esm2020/lib/base/interfaces/sort-input.interface.mjs} +0 -0
- package/esm2020/lib/base/pipes/ellipses.pipe.mjs +22 -0
- package/esm2020/lib/base/pipes/safe-html.pipe.mjs +21 -0
- package/{esm2015/lib/base/public-api.js → esm2020/lib/base/public-api.mjs} +2 -1
- package/{esm2015/lib/base/services/auth.service.js → esm2020/lib/base/services/auth.service.mjs} +14 -17
- package/{esm2015/lib/base/services/fullscreen.service.js → esm2020/lib/base/services/fullscreen.service.mjs} +9 -8
- package/esm2020/lib/base/services/graphql-meta.service.mjs +123 -0
- package/esm2020/lib/base/services/graphql-plus.service.mjs +84 -0
- package/esm2020/lib/base/services/graphql.service.mjs +441 -0
- package/esm2020/lib/base/services/image.service.mjs +102 -0
- package/esm2020/lib/base/services/loader.service.mjs +29 -0
- package/esm2020/lib/base/services/scroll.service.mjs +179 -0
- package/esm2020/lib/base/services/seo.service.mjs +97 -0
- package/esm2020/lib/base/services/storage.service.mjs +132 -0
- package/esm2020/lib/base/services/ws.service.mjs +17 -0
- package/{esm2015/lib/base/types/storage.type.js → esm2020/lib/base/types/storage.type.mjs} +0 -0
- package/{esm2015/lib/base/validators/must-match.validator.js → esm2020/lib/base/validators/must-match.validator.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/esm2020/src/lib/base/base.module.mjs +97 -0
- package/{esm2015/src/lib/base/classes/basic-user.class.js → esm2020/src/lib/base/classes/basic-user.class.mjs} +0 -0
- package/{esm2015/src/lib/base/classes/graphql-enum.class.js → esm2020/src/lib/base/classes/graphql-enum.class.mjs} +0 -0
- package/esm2020/src/lib/base/classes/graphql-meta.class.mjs +171 -0
- package/{esm2015/src/lib/base/classes/graphql-type.class.js → esm2020/src/lib/base/classes/graphql-type.class.mjs} +0 -0
- package/esm2020/src/lib/base/classes/helper.class.mjs +295 -0
- package/{esm2015/src/lib/base/classes/standard.class.js → esm2020/src/lib/base/classes/standard.class.mjs} +0 -0
- package/esm2020/src/lib/base/directives/context-menu.directive.mjs +109 -0
- package/esm2020/src/lib/base/directives/lazy-load.directive.mjs +45 -0
- package/esm2020/src/lib/base/directives/match-height.directive.mjs +79 -0
- package/esm2020/src/lib/base/directives/resizable.directive.mjs +90 -0
- package/{esm2015/src/lib/base/enums/comparison-operator.enum.js → esm2020/src/lib/base/enums/comparison-operator.enum.mjs} +0 -0
- package/{esm2015/src/lib/base/enums/graphql-request-type.enum.js → esm2020/src/lib/base/enums/graphql-request-type.enum.mjs} +0 -0
- package/{esm2015/src/lib/base/enums/logical-operator.enum.js → esm2020/src/lib/base/enums/logical-operator.enum.mjs} +0 -0
- package/{esm2015/src/lib/base/enums/sort-order.enum.js → esm2020/src/lib/base/enums/sort-order.enum.mjs} +0 -0
- package/{esm2015/src/lib/base/factories/apollo-options.factory.js → esm2020/src/lib/base/factories/apollo-options.factory.mjs} +0 -0
- package/esm2020/src/lib/base/guards/auth.guard.mjs +61 -0
- package/esm2020/src/lib/base/guards/can-deactivate.guard.mjs +16 -0
- package/esm2020/src/lib/base/guards/logout.guard.mjs +32 -0
- package/{esm2015/src/lib/base/interfaces/base-module-config.interface.js → esm2020/src/lib/base/interfaces/base-module-config.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/can-component-deactivate.interface.js → esm2020/src/lib/base/interfaces/can-component-deactivate.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/combined-filter-input.interface.js → esm2020/src/lib/base/interfaces/combined-filter-input.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/field-object.interface.js → esm2020/src/lib/base/interfaces/field-object.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/field.interface.js → esm2020/src/lib/base/interfaces/field.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/filter-input.interface.js → esm2020/src/lib/base/interfaces/filter-input.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/find-args.interface.js → esm2020/src/lib/base/interfaces/find-args.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/graphql-options.interface.js → esm2020/src/lib/base/interfaces/graphql-options.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/graphql-plus-options.interfacen.js → esm2020/src/lib/base/interfaces/graphql-plus-options.interfacen.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/graphql-type-collection.interface.js → esm2020/src/lib/base/interfaces/graphql-type-collection.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/single-filter-input.interface.js → esm2020/src/lib/base/interfaces/single-filter-input.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/interfaces/sort-input.interface.js → esm2020/src/lib/base/interfaces/sort-input.interface.mjs} +0 -0
- package/{esm2015/src/lib/base/lenne.tech-ng-base-src-lib-base.js → esm2020/src/lib/base/lenne.tech-ng-base-src-lib-base.mjs} +1 -2
- package/esm2020/src/lib/base/pipes/ellipses.pipe.mjs +22 -0
- package/esm2020/src/lib/base/pipes/safe-html.pipe.mjs +21 -0
- package/{esm2015/src/lib/base/public-api.js → esm2020/src/lib/base/public-api.mjs} +2 -1
- package/{esm2015/src/lib/base/services/auth.service.js → esm2020/src/lib/base/services/auth.service.mjs} +14 -17
- package/{esm2015/src/lib/base/services/fullscreen.service.js → esm2020/src/lib/base/services/fullscreen.service.mjs} +9 -8
- package/esm2020/src/lib/base/services/graphql-meta.service.mjs +123 -0
- package/esm2020/src/lib/base/services/graphql-plus.service.mjs +84 -0
- package/esm2020/src/lib/base/services/graphql.service.mjs +441 -0
- package/esm2020/src/lib/base/services/image.service.mjs +102 -0
- package/esm2020/src/lib/base/services/loader.service.mjs +29 -0
- package/esm2020/src/lib/base/services/scroll.service.mjs +179 -0
- package/esm2020/src/lib/base/services/seo.service.mjs +97 -0
- package/esm2020/src/lib/base/services/storage.service.mjs +132 -0
- package/esm2020/src/lib/base/services/ws.service.mjs +17 -0
- package/{esm2015/src/lib/base/types/storage.type.js → esm2020/src/lib/base/types/storage.type.mjs} +0 -0
- package/{esm2015/src/lib/base/validators/must-match.validator.js → esm2020/src/lib/base/validators/must-match.validator.mjs} +0 -0
- package/fesm2015/{lenne.tech-ng-base-src-lib-base.js → lenne.tech-ng-base-src-lib-base.mjs} +241 -198
- package/fesm2015/lenne.tech-ng-base-src-lib-base.mjs.map +1 -0
- package/fesm2015/{lenne.tech-ng-base.js → lenne.tech-ng-base.mjs} +241 -198
- package/fesm2015/lenne.tech-ng-base.mjs.map +1 -0
- package/fesm2020/lenne.tech-ng-base-src-lib-base.mjs +2524 -0
- package/fesm2020/lenne.tech-ng-base-src-lib-base.mjs.map +1 -0
- package/fesm2020/lenne.tech-ng-base.mjs +2526 -0
- package/fesm2020/lenne.tech-ng-base.mjs.map +1 -0
- package/lenne.tech-ng-base.d.ts +1 -0
- package/lib/base/base.module.d.ts +11 -1
- package/lib/base/classes/graphql-meta.class.d.ts +2 -4
- package/lib/base/directives/context-menu.directive.d.ts +3 -0
- package/lib/base/directives/lazy-load.directive.d.ts +3 -0
- package/lib/base/directives/match-height.directive.d.ts +3 -0
- package/lib/base/directives/resizable.directive.d.ts +3 -0
- package/lib/base/guards/auth.guard.d.ts +3 -0
- package/lib/base/guards/can-deactivate.guard.d.ts +3 -0
- package/lib/base/guards/logout.guard.d.ts +3 -0
- package/lib/base/pipes/ellipses.pipe.d.ts +3 -0
- package/lib/base/pipes/safe-html.pipe.d.ts +3 -0
- package/lib/base/public-api.d.ts +1 -0
- package/lib/base/services/auth.service.d.ts +3 -0
- package/lib/base/services/fullscreen.service.d.ts +3 -0
- package/lib/base/services/graphql-meta.service.d.ts +3 -0
- package/lib/base/services/graphql-plus.service.d.ts +3 -0
- package/lib/base/services/graphql.service.d.ts +3 -0
- package/lib/base/services/image.service.d.ts +3 -0
- package/lib/base/services/loader.service.d.ts +3 -0
- package/lib/base/services/scroll.service.d.ts +3 -0
- package/lib/base/services/seo.service.d.ts +3 -0
- package/lib/base/services/storage.service.d.ts +3 -0
- package/lib/base/services/ws.service.d.ts +3 -0
- package/package.json +34 -14
- package/src/lib/base/base.module.d.ts +11 -1
- package/src/lib/base/classes/graphql-meta.class.d.ts +2 -4
- package/src/lib/base/directives/context-menu.directive.d.ts +3 -0
- package/src/lib/base/directives/lazy-load.directive.d.ts +3 -0
- package/src/lib/base/directives/match-height.directive.d.ts +3 -0
- package/src/lib/base/directives/resizable.directive.d.ts +3 -0
- package/src/lib/base/guards/auth.guard.d.ts +3 -0
- package/src/lib/base/guards/can-deactivate.guard.d.ts +3 -0
- package/src/lib/base/guards/logout.guard.d.ts +3 -0
- package/src/lib/base/lenne.tech-ng-base-src-lib-base.d.ts +1 -1
- package/src/lib/base/package.json +5 -6
- package/src/lib/base/pipes/ellipses.pipe.d.ts +3 -0
- package/src/lib/base/pipes/safe-html.pipe.d.ts +3 -0
- package/src/lib/base/public-api.d.ts +1 -0
- package/src/lib/base/services/auth.service.d.ts +3 -0
- package/src/lib/base/services/fullscreen.service.d.ts +3 -0
- package/src/lib/base/services/graphql-meta.service.d.ts +3 -0
- package/src/lib/base/services/graphql-plus.service.d.ts +3 -0
- package/src/lib/base/services/graphql.service.d.ts +3 -0
- package/src/lib/base/services/image.service.d.ts +3 -0
- package/src/lib/base/services/loader.service.d.ts +3 -0
- package/src/lib/base/services/scroll.service.d.ts +3 -0
- package/src/lib/base/services/seo.service.d.ts +3 -0
- package/src/lib/base/services/storage.service.d.ts +3 -0
- package/src/lib/base/services/ws.service.d.ts +3 -0
- package/bundles/lenne.tech-ng-base-src-lib-base.umd.js +0 -3152
- package/bundles/lenne.tech-ng-base-src-lib-base.umd.js.map +0 -1
- package/bundles/lenne.tech-ng-base.umd.js +0 -3153
- package/bundles/lenne.tech-ng-base.umd.js.map +0 -1
- package/esm2015/lib/base/base.module.js +0 -66
- package/esm2015/lib/base/classes/graphql-meta.class.js +0 -156
- package/esm2015/lib/base/classes/helper.class.js +0 -290
- package/esm2015/lib/base/directives/context-menu.directive.js +0 -104
- package/esm2015/lib/base/directives/lazy-load.directive.js +0 -43
- package/esm2015/lib/base/directives/match-height.directive.js +0 -78
- package/esm2015/lib/base/directives/resizable.directive.js +0 -89
- package/esm2015/lib/base/guards/auth.guard.js +0 -61
- package/esm2015/lib/base/guards/can-deactivate.guard.js +0 -13
- package/esm2015/lib/base/guards/logout.guard.js +0 -33
- package/esm2015/lib/base/pipes/ellipses.pipe.js +0 -18
- package/esm2015/lib/base/pipes/safe-html.pipe.js +0 -20
- package/esm2015/lib/base/services/graphql-meta.service.js +0 -116
- package/esm2015/lib/base/services/graphql-plus.service.js +0 -90
- package/esm2015/lib/base/services/graphql.service.js +0 -423
- package/esm2015/lib/base/services/image.service.js +0 -99
- package/esm2015/lib/base/services/loader.service.js +0 -27
- package/esm2015/lib/base/services/scroll.service.js +0 -172
- package/esm2015/lib/base/services/seo.service.js +0 -100
- package/esm2015/lib/base/services/storage.service.js +0 -131
- package/esm2015/lib/base/services/ws.service.js +0 -16
- package/esm2015/src/lib/base/base.module.js +0 -66
- package/esm2015/src/lib/base/classes/graphql-meta.class.js +0 -156
- package/esm2015/src/lib/base/classes/helper.class.js +0 -290
- package/esm2015/src/lib/base/directives/context-menu.directive.js +0 -104
- package/esm2015/src/lib/base/directives/lazy-load.directive.js +0 -43
- package/esm2015/src/lib/base/directives/match-height.directive.js +0 -78
- package/esm2015/src/lib/base/directives/resizable.directive.js +0 -89
- package/esm2015/src/lib/base/guards/auth.guard.js +0 -61
- package/esm2015/src/lib/base/guards/can-deactivate.guard.js +0 -13
- package/esm2015/src/lib/base/guards/logout.guard.js +0 -33
- package/esm2015/src/lib/base/pipes/ellipses.pipe.js +0 -18
- package/esm2015/src/lib/base/pipes/safe-html.pipe.js +0 -20
- package/esm2015/src/lib/base/services/graphql-meta.service.js +0 -116
- package/esm2015/src/lib/base/services/graphql-plus.service.js +0 -90
- package/esm2015/src/lib/base/services/graphql.service.js +0 -423
- package/esm2015/src/lib/base/services/image.service.js +0 -99
- package/esm2015/src/lib/base/services/loader.service.js +0 -27
- package/esm2015/src/lib/base/services/scroll.service.js +0 -172
- package/esm2015/src/lib/base/services/seo.service.js +0 -100
- package/esm2015/src/lib/base/services/storage.service.js +0 -131
- package/esm2015/src/lib/base/services/ws.service.js +0 -16
- package/fesm2015/lenne.tech-ng-base-src-lib-base.js.map +0 -1
- package/fesm2015/lenne.tech-ng-base.js.map +0 -1
- package/lenne.tech-ng-base.metadata.json +0 -1
- package/src/lib/base/lenne.tech-ng-base-src-lib-base.metadata.json +0 -1
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { Helper } from './helper.class';
|
|
2
|
-
import { GraphQLType } from './graphql-type.class';
|
|
3
|
-
/**
|
|
4
|
-
* GraphQL meta
|
|
5
|
-
*/
|
|
6
|
-
export class GraphQLMeta {
|
|
7
|
-
/**
|
|
8
|
-
* Integrate schema
|
|
9
|
-
*/
|
|
10
|
-
constructor(schema) {
|
|
11
|
-
this.schema = schema;
|
|
12
|
-
// Frozen caches
|
|
13
|
-
this.args = {};
|
|
14
|
-
this.fields = {};
|
|
15
|
-
if (!schema) {
|
|
16
|
-
throw Error('Missing schema');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Get arguments of GraphQL function
|
|
21
|
-
*/
|
|
22
|
-
getArgs(functionName, options = {}) {
|
|
23
|
-
const { cache, freeze, type } = Object.assign({ cache: true, freeze: true, type: undefined }, options);
|
|
24
|
-
// Get cache
|
|
25
|
-
if (cache && freeze) {
|
|
26
|
-
const args = this.args[functionName + type];
|
|
27
|
-
if (args) {
|
|
28
|
-
return args;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const func = this.getFunction(functionName, { type });
|
|
32
|
-
const result = {};
|
|
33
|
-
if (func === null || func === void 0 ? void 0 : func.args) {
|
|
34
|
-
func.args.forEach((item) => {
|
|
35
|
-
result[item.name] = this.getDeepType(item.type);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
// Set cache
|
|
39
|
-
if (freeze) {
|
|
40
|
-
this.args[functionName + type] = Helper.deepFreeze(result);
|
|
41
|
-
}
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Get fields of GraphQL function
|
|
46
|
-
*/
|
|
47
|
-
getFields(functionName, options = {}) {
|
|
48
|
-
const { cache, freeze, type } = Object.assign({ cache: true, freeze: true, type: undefined }, options);
|
|
49
|
-
// Get cache
|
|
50
|
-
if (cache && freeze) {
|
|
51
|
-
const args = this.fields[functionName + type];
|
|
52
|
-
if (args) {
|
|
53
|
-
return args;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const func = this.getFunction(functionName, options);
|
|
57
|
-
const result = this.getDeepType(func.type);
|
|
58
|
-
// Set cache
|
|
59
|
-
if (freeze) {
|
|
60
|
-
this.fields[functionName + type] = Helper.deepFreeze(result);
|
|
61
|
-
}
|
|
62
|
-
return result;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get GraphQL function
|
|
66
|
-
*/
|
|
67
|
-
getFunction(name, options = {}) {
|
|
68
|
-
// Set config
|
|
69
|
-
const config = Object.assign({}, options);
|
|
70
|
-
// Init possible functions
|
|
71
|
-
let functions = {};
|
|
72
|
-
// If function type is set
|
|
73
|
-
if (config.type) {
|
|
74
|
-
const graphQLType = config.type.charAt(0).toUpperCase() + config.type.slice(1);
|
|
75
|
-
const type = this.schema.getType(graphQLType);
|
|
76
|
-
if (type) {
|
|
77
|
-
functions = type.getFields();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// If function type is not set
|
|
81
|
-
else {
|
|
82
|
-
['Subscription', 'Mutation', 'Query'].forEach((item) => {
|
|
83
|
-
const type = this.schema.getType(item);
|
|
84
|
-
if (type) {
|
|
85
|
-
functions = Object.assign(Object.assign({}, functions), (type.getFields() || {}));
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
// Get function via name
|
|
90
|
-
return functions[name];
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Get type
|
|
94
|
-
*/
|
|
95
|
-
getType(name) {
|
|
96
|
-
return this.schema.getType(name);
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Get deep type data
|
|
100
|
-
*/
|
|
101
|
-
getDeepType(type, prepared = new WeakMap()) {
|
|
102
|
-
// Check type
|
|
103
|
-
if (!type) {
|
|
104
|
-
return type;
|
|
105
|
-
}
|
|
106
|
-
// Infinite regress protection
|
|
107
|
-
const preparedObject = {};
|
|
108
|
-
// Check prepared
|
|
109
|
-
if (typeof type === 'object') {
|
|
110
|
-
const preparedType = prepared.get(type);
|
|
111
|
-
if (preparedType) {
|
|
112
|
-
return preparedType;
|
|
113
|
-
}
|
|
114
|
-
// Set prepared
|
|
115
|
-
prepared.set(type, preparedObject);
|
|
116
|
-
}
|
|
117
|
-
// Search deeper
|
|
118
|
-
if (type.ofType) {
|
|
119
|
-
const ofTypeResult = this.getDeepType(type.ofType, prepared);
|
|
120
|
-
Object.assign(preparedObject, ofTypeResult);
|
|
121
|
-
return ofTypeResult;
|
|
122
|
-
}
|
|
123
|
-
// Process fields
|
|
124
|
-
if (type._fields) {
|
|
125
|
-
const result = {};
|
|
126
|
-
for (const [key, value] of Object.entries(type._fields)) {
|
|
127
|
-
result[key] = this.getDeepType(value, prepared);
|
|
128
|
-
}
|
|
129
|
-
Object.assign(preparedObject, result);
|
|
130
|
-
return result;
|
|
131
|
-
}
|
|
132
|
-
// Get type name
|
|
133
|
-
if (type.type) {
|
|
134
|
-
const typeResult = this.getDeepType(type.type, prepared);
|
|
135
|
-
Object.assign(preparedObject, typeResult);
|
|
136
|
-
return typeResult;
|
|
137
|
-
}
|
|
138
|
-
// Initialize GraphQLType
|
|
139
|
-
const graphqlType = GraphQLType.map({
|
|
140
|
-
type: type.name,
|
|
141
|
-
});
|
|
142
|
-
// Set enum values
|
|
143
|
-
if (!!type._values) {
|
|
144
|
-
graphqlType.isEnum = true;
|
|
145
|
-
for (const [key, value] of Object.entries(type._nameLookup)) {
|
|
146
|
-
if (!value.isDeprecated) {
|
|
147
|
-
graphqlType.validEnums.push(key);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Finish
|
|
152
|
-
prepared.set(type, graphqlType);
|
|
153
|
-
return graphqlType;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1tZXRhLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zcmMvbGliL2Jhc2UvY2xhc3Nlcy9ncmFwaHFsLW1ldGEuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUduRDs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBS3RCOztPQUVHO0lBQ0gsWUFBc0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVAzQyxnQkFBZ0I7UUFDTixTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQU16QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FDTCxZQUFvQixFQUNwQixVQUE0RSxFQUFFO1FBRTlFLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxtQkFDekIsS0FBSyxFQUFFLElBQUksRUFDWCxNQUFNLEVBQUUsSUFBSSxFQUNaLElBQUksRUFBRSxTQUFTLElBQ1osT0FBTyxDQUNYLENBQUM7UUFFRixZQUFZO1FBQ1osSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksSUFBSSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUMsSUFBSSxFQUFDLENBQUMs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LENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNqRDtZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUVILGtCQUFrQjtRQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2xCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQzFCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxDQUFFLEtBQWEsQ0FBQyxZQUFZLEVBQUU7b0JBQ2hDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQzthQUNGO1NBQ0Y7UUFFRCxTQUFTO1FBQ1QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDaEMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhRTFNjaGVtYSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgTWF5YmUgfSBmcm9tICdncmFwaHFsL2pzdXRpbHMvTWF5YmUnO1xuaW1wb3J0IHsgR3JhcGhRTE5hbWVkVHlwZSB9IGZyb20gJ2dyYXBocWwvdHlwZS9kZWZpbml0aW9uJztcbmltcG9ydCB7IEdyYXBoUUxSZXF1ZXN0VHlwZSB9IGZyb20gJy4uL2VudW1zL2dyYXBocWwtcmVxdWVzdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi9oZWxwZXIuY2xhc3MnO1xuaW1wb3J0IHsgR3JhcGhRTFR5cGUgfSBmcm9tICcuL2dyYXBocWwtdHlwZS5jbGFzcyc7XG5pbXBvcnQgeyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLXR5cGUtY29sbGVjdGlvbi5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEdyYXBoUUwgbWV0YVxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRTE1ldGEge1xuICAvLyBGcm96ZW4gY2FjaGVzXG4gIHByb3RlY3RlZCBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHByb3RlY3RlZCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvKipcbiAgICogSW50ZWdyYXRlIHNjaGVtYVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNjaGVtYTogR3JhcGhRTFNjaGVtYSkge1xuICAgIGlmICghc2NoZW1hKSB7XG4gICAgICB0aHJvdyBFcnJvcignTWlzc2luZyBzY2hlbWEnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFyZ3VtZW50cyBvZiBHcmFwaFFMIGZ1bmN0aW9uXG4gICAqL1xuICBnZXRBcmdzKFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2FjaGU/OiBib29sZWFuOyBmcmVlemU/OiBib29sZWFuOyB0eXBlPzogR3JhcGhRTFJlcXVlc3RUeXBlIH0gPSB7fVxuICApOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIHtcbiAgICBjb25zdCB7Y2FjaGUsIGZyZWV6ZSwgdHlwZX0gPSB7XG4gICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgIGZyZWV6ZTogdHJ1ZSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEdldCBjYWNoZVxuICAgIGlmIChjYWNoZSAmJiBmcmVlemUpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmFyZ3NbZnVuY3Rpb25OYW1lICsgdHlwZV07XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmdW5jID0gdGhpcy5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIHt0eXBlfSk7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKGZ1bmM/LmFyZ3MpIHtcbiAgICAgIGZ1bmMuYXJncy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIHJlc3VsdFtpdGVtLm5hbWVdID0gdGhpcy5nZXREZWVwVHlwZShpdGVtLnR5cGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGNhY2hlXG4gICAgaWYgKGZyZWV6ZSkge1xuICAgICAgdGhpcy5hcmdzW2Z1bmN0aW9uTmFtZSArIHR5cGVdID0gSGVscGVyLmRlZXBGcmVlemUocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZHMgb2YgR3JhcGhRTCBmdW5jdGlvblxuICAgKi9cbiAgZ2V0RmllbGRzKFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2FjaGU/OiBib29sZWFuOyBmcmVlemU/OiBib29sZWFuOyB0eXBlPzogR3JhcGhRTFJlcXVlc3RUeXBlIH0gPSB7fVxuICApOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIHtcbiAgICBjb25zdCB7Y2FjaGUsIGZyZWV6ZSwgdHlwZX0gPSB7XG4gICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgIGZyZWV6ZTogdHJ1ZSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEdldCBjYWNoZVxuICAgIGlmIChjYWNoZSAmJiBmcmVlemUpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmZpZWxkc1tmdW5jdGlvbk5hbWUgKyB0eXBlXTtcbiAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmdldEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0OiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uID0gdGhpcy5nZXREZWVwVHlwZShmdW5jLnR5cGUpIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb247XG5cbiAgICAvLyBTZXQgY2FjaGVcbiAgICBpZiAoZnJlZXplKSB7XG4gICAgICB0aGlzLmZpZWxkc1tmdW5jdGlvbk5hbWUgKyB0eXBlXSA9IEhlbHBlci5kZWVwRnJlZXplKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR3JhcGhRTCBmdW5jdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEZ1bmN0aW9uKG5hbWU6IHN0cmluZywgb3B0aW9uczogeyB0eXBlPzogR3JhcGhRTFJlcXVlc3RUeXBlIH0gPSB7fSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIC8vIFNldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBJbml0IHBvc3NpYmxlIGZ1bmN0aW9uc1xuICAgIGxldCBmdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIElmIGZ1bmN0aW9uIHR5cGUgaXMgc2V0XG4gICAgaWYgKGNvbmZpZy50eXBlKSB7XG4gICAgICBjb25zdCBncmFwaFFMVHlwZSA9IGNvbmZpZy50eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY29uZmlnLnR5cGUuc2xpY2UoMSk7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5zY2hlbWEuZ2V0VHlwZShncmFwaFFMVHlwZSk7XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICBmdW5jdGlvbnMgPSAodHlwZSBhcyBhbnkpLmdldEZpZWxkcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGZ1bmN0aW9uIHR5cGUgaXMgbm90IHNldFxuICAgIGVsc2Uge1xuICAgICAgWydTdWJzY3JpcHRpb24nLCAnTXV0YXRpb24nLCAnUXVlcnknXS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGU6IGFueSA9IHRoaXMuc2NoZW1hLmdldFR5cGUoaXRlbSk7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgZnVuY3Rpb25zID0ge1xuICAgICAgICAgICAgLi4uZnVuY3Rpb25zLFxuICAgICAgICAgICAgLi4uKHR5cGUuZ2V0RmllbGRzKCkgfHwge30pLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEdldCBmdW5jdGlvbiB2aWEgbmFtZVxuICAgIHJldHVybiBmdW5jdGlvbnNbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHR5cGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXRUeXBlKG5hbWU6IHN0cmluZyk6IE1heWJlPEdyYXBoUUxOYW1lZFR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuZ2V0VHlwZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVlcCB0eXBlIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBnZXREZWVwVHlwZSh0eXBlOiBhbnksIHByZXBhcmVkOiBXZWFrTWFwPGFueSwgYW55PiA9IG5ldyBXZWFrTWFwKCkpOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIHwgR3JhcGhRTFR5cGUge1xuICAgIC8vIENoZWNrIHR5cGVcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIC8vIEluZmluaXRlIHJlZ3Jlc3MgcHJvdGVjdGlvblxuICAgIGNvbnN0IHByZXBhcmVkT2JqZWN0ID0ge307XG5cbiAgICAvLyBDaGVjayBwcmVwYXJlZFxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IHByZXBhcmVkVHlwZSA9IHByZXBhcmVkLmdldCh0eXBlKTtcbiAgICAgIGlmIChwcmVwYXJlZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHByZXBhcmVkVHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHByZXBhcmVkXG4gICAgICBwcmVwYXJlZC5zZXQodHlwZSwgcHJlcGFyZWRPYmplY3QpO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCBkZWVwZXJcbiAgICBpZiAodHlwZS5vZlR5cGUpIHtcbiAgICAgIGNvbnN0IG9mVHlwZVJlc3VsdCA9IHRoaXMuZ2V0RGVlcFR5cGUodHlwZS5vZlR5cGUsIHByZXBhcmVkKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocHJlcGFyZWRPYmplY3QsIG9mVHlwZVJlc3VsdCk7XG4gICAgICByZXR1cm4gb2ZUeXBlUmVzdWx0O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZmllbGRzXG4gICAgaWYgKHR5cGUuX2ZpZWxkcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0eXBlLl9maWVsZHMpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5nZXREZWVwVHlwZSh2YWx1ZSwgcHJlcGFyZWQpO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmFzc2lnbihwcmVwYXJlZE9iamVjdCwgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gR2V0IHR5cGUgbmFtZVxuICAgIGlmICh0eXBlLnR5cGUpIHtcbiAgICAgIGNvbnN0IHR5cGVSZXN1bHQgPSB0aGlzLmdldERlZXBUeXBlKHR5cGUudHlwZSwgcHJlcGFyZWQpO1xuICAgICAgT2JqZWN0LmFzc2lnbihwcmVwYXJlZE9iamVjdCwgdHlwZVJlc3VsdCk7XG4gICAgICByZXR1cm4gdHlwZVJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIEdyYXBoUUxUeXBlXG4gICAgY29uc3QgZ3JhcGhxbFR5cGUgPSBHcmFwaFFMVHlwZS5tYXAoe1xuICAgICAgdHlwZTogdHlwZS5uYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gU2V0IGVudW0gdmFsdWVzXG4gICAgaWYgKCEhdHlwZS5fdmFsdWVzKSB7XG4gICAgICBncmFwaHFsVHlwZS5pc0VudW0gPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModHlwZS5fbmFtZUxvb2t1cCkpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgYXMgYW55KS5pc0RlcHJlY2F0ZWQpIHtcbiAgICAgICAgICBncmFwaHFsVHlwZS52YWxpZEVudW1zLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmlzaFxuICAgIHByZXBhcmVkLnNldCh0eXBlLCBncmFwaHFsVHlwZSk7XG4gICAgcmV0dXJuIGdyYXBocWxUeXBlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper class
|
|
3
|
-
*/
|
|
4
|
-
export class Helper {
|
|
5
|
-
/**
|
|
6
|
-
* Simple filter function for plain objects
|
|
7
|
-
*/
|
|
8
|
-
static filter(objects, filter) {
|
|
9
|
-
return ((objects === null || objects === void 0 ? void 0 : objects.filter((element) => {
|
|
10
|
-
for (const [key, value] of Object.entries(filter)) {
|
|
11
|
-
if (Array.isArray(element[key])) {
|
|
12
|
-
for (const item of element[key]) {
|
|
13
|
-
if (!element[key].includs(value)) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
else if (element[key] !== value) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return true;
|
|
23
|
-
})) || []);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Convert to a url/uri conform string
|
|
27
|
-
* Only:
|
|
28
|
-
* - lower case
|
|
29
|
-
* - chars, numbers and hyphens
|
|
30
|
-
*/
|
|
31
|
-
static urlString(str, options = {}) {
|
|
32
|
-
// Config
|
|
33
|
-
const config = Object.assign({ allowAll: false }, options);
|
|
34
|
-
// To string
|
|
35
|
-
str = str + '';
|
|
36
|
-
// Trim
|
|
37
|
-
str = str.trim();
|
|
38
|
-
// Lower case
|
|
39
|
-
str = str.toLowerCase();
|
|
40
|
-
if (!config.allowAll) {
|
|
41
|
-
// Replace spaces
|
|
42
|
-
str = str.trim().replace(/\s+/g, '-');
|
|
43
|
-
// Replace some special chars
|
|
44
|
-
str = str.replace('ä', 'ae');
|
|
45
|
-
str = str.replace('ö', 'oe');
|
|
46
|
-
str = str.replace('ü', 'ue');
|
|
47
|
-
str = str.replace('ß', 'ss');
|
|
48
|
-
// Remove other special chars
|
|
49
|
-
str = str.replace(/[^a-zA-Z0-9-]/g, '');
|
|
50
|
-
}
|
|
51
|
-
// Return url conform string
|
|
52
|
-
return encodeURI(str);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Simple map function
|
|
56
|
-
*/
|
|
57
|
-
static map(source, target, options = {}) {
|
|
58
|
-
// Set config
|
|
59
|
-
const config = Object.assign({ funcAllowed: false, dateStringToDate: true }, options);
|
|
60
|
-
// Check source
|
|
61
|
-
if (!source || typeof source !== 'object' || Array.isArray(source)) {
|
|
62
|
-
return target;
|
|
63
|
-
}
|
|
64
|
-
// Update properties
|
|
65
|
-
for (const key of Object.keys(target)) {
|
|
66
|
-
if (source[key] !== undefined && (config.funcAllowed || typeof (source[key] !== 'function'))) {
|
|
67
|
-
if (typeof source[key] === 'string' && config.dateStringToDate) {
|
|
68
|
-
if (Array.isArray(config.dateStringToDate)) {
|
|
69
|
-
if (config.dateStringToDate.includes(key)) {
|
|
70
|
-
target[key] = Helper.parseDate(source[key]);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
target[key] = Helper.parseDate(source[key]);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
target[key] = source[key];
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Return target
|
|
83
|
-
return target;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Create Object or Objects of specified type with specified data
|
|
87
|
-
*/
|
|
88
|
-
static maps(data, targetClass) {
|
|
89
|
-
// Check data
|
|
90
|
-
if (!data || typeof data !== 'object') {
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
// Check array
|
|
94
|
-
if (!Array.isArray(data)) {
|
|
95
|
-
data = [data];
|
|
96
|
-
}
|
|
97
|
-
// Map
|
|
98
|
-
return data.map((item) => {
|
|
99
|
-
return targetClass.map(item);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Get plain parameter
|
|
104
|
-
*/
|
|
105
|
-
static getPlainParameter(parameter) {
|
|
106
|
-
var _a, _b, _c;
|
|
107
|
-
if (!parameter) {
|
|
108
|
-
return parameter;
|
|
109
|
-
}
|
|
110
|
-
return (_c = (_b = (_a = parameter === null || parameter === void 0 ? void 0 : parameter.split('?')) === null || _a === void 0 ? void 0 : _a.shift()) === null || _b === void 0 ? void 0 : _b.split('#')) === null || _c === void 0 ? void 0 : _c.shift();
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Get ID of an url parameter
|
|
114
|
-
*/
|
|
115
|
-
static getParameterId(parameter) {
|
|
116
|
-
var _a;
|
|
117
|
-
if (!parameter) {
|
|
118
|
-
return parameter;
|
|
119
|
-
}
|
|
120
|
-
return (_a = Helper.getPlainParameter(parameter)) === null || _a === void 0 ? void 0 : _a.split('-').pop();
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Delay
|
|
124
|
-
*/
|
|
125
|
-
static delay(ms) {
|
|
126
|
-
const promise = new Promise((resolve) => setTimeout(resolve, ms));
|
|
127
|
-
return promise;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Deep freeze
|
|
131
|
-
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze#What_is_shallow_freeze
|
|
132
|
-
*/
|
|
133
|
-
static deepFreeze(object, preparedObjects = []) {
|
|
134
|
-
// Prevent infinit regress
|
|
135
|
-
if (preparedObjects.includes(object)) {
|
|
136
|
-
return object;
|
|
137
|
-
}
|
|
138
|
-
preparedObjects.push(object);
|
|
139
|
-
// Retrieve the property names defined on object
|
|
140
|
-
const propNames = Object.getOwnPropertyNames(object);
|
|
141
|
-
// Freeze properties before freezing self
|
|
142
|
-
for (const name of propNames) {
|
|
143
|
-
const value = object[name];
|
|
144
|
-
if (value && typeof value === 'object') {
|
|
145
|
-
Helper.deepFreeze(value, preparedObjects);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return Object.freeze(object);
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Generates an unique identifier with 24 characters
|
|
152
|
-
*/
|
|
153
|
-
static getUID() {
|
|
154
|
-
let dt = new Date().getTime();
|
|
155
|
-
const uuid = 'xxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
156
|
-
// eslint-disable-next-line no-bitwise
|
|
157
|
-
const r = (dt + Math.random() * 16) % 16 | 0;
|
|
158
|
-
dt = Math.floor(dt / 16);
|
|
159
|
-
// eslint-disable-next-line no-bitwise
|
|
160
|
-
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
|
161
|
-
});
|
|
162
|
-
return uuid;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Parse date string to date object
|
|
166
|
-
*/
|
|
167
|
-
static parseDate(dateString) {
|
|
168
|
-
const reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/;
|
|
169
|
-
const reMsAjax = /^\/Date\((d|-|.*)\)[\/|\\]$/;
|
|
170
|
-
if (typeof dateString === 'string') {
|
|
171
|
-
const isoExec = reISO.exec(dateString);
|
|
172
|
-
if (isoExec) {
|
|
173
|
-
return new Date(dateString);
|
|
174
|
-
}
|
|
175
|
-
const msAjaxExec = reMsAjax.exec(dateString);
|
|
176
|
-
if (msAjaxExec) {
|
|
177
|
-
const cleaned = msAjaxExec[1].split(/[-+,.]/);
|
|
178
|
-
return new Date(cleaned[0] ? +cleaned[0] : 0 - +cleaned[1]);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return dateString;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Get browser name and version
|
|
185
|
-
*/
|
|
186
|
-
static getBrowser() {
|
|
187
|
-
const userAgent = navigator.userAgent;
|
|
188
|
-
let data = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
|
|
189
|
-
let version;
|
|
190
|
-
if (/trident/i.test(data[1])) {
|
|
191
|
-
version = /\brv[ :]+(\d+)/g.exec(userAgent) || [];
|
|
192
|
-
return { name: 'IE', version: version[1] || '' };
|
|
193
|
-
}
|
|
194
|
-
if (data[1] === 'Chrome') {
|
|
195
|
-
version = userAgent.match(/\bOPR|Edge\/(\d+)/);
|
|
196
|
-
if (version != null) {
|
|
197
|
-
return { name: 'Opera', version: version[1] };
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
data = data[2] ? [data[1], data[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
|
201
|
-
version = userAgent.match(/version\/(\d+)/i);
|
|
202
|
-
if (version !== null) {
|
|
203
|
-
data.splice(1, 1, version[1]);
|
|
204
|
-
}
|
|
205
|
-
return {
|
|
206
|
-
name: data[0],
|
|
207
|
-
version: data[1],
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Whether first parameter is a deep subset of second parameter
|
|
212
|
-
* Hint: functions will be ignored
|
|
213
|
-
*/
|
|
214
|
-
static isSubset(a, b) {
|
|
215
|
-
// Equal
|
|
216
|
-
if (a === b) {
|
|
217
|
-
return true;
|
|
218
|
-
}
|
|
219
|
-
// Different type
|
|
220
|
-
if (typeof a !== typeof b) {
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
// Process array
|
|
224
|
-
if (Array.isArray(a)) {
|
|
225
|
-
for (const [key, value] of Object.entries(a)) {
|
|
226
|
-
if (Helper.isSubset(value, b[key])) {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
// Process object
|
|
233
|
-
if (typeof a === 'object') {
|
|
234
|
-
const plain = JSON.parse(JSON.stringify(a));
|
|
235
|
-
for (const [key, value] of Object.entries(plain)) {
|
|
236
|
-
if (Helper.isSubset(value, b[key])) {
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return true;
|
|
241
|
-
}
|
|
242
|
-
// Else
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Whether parameters are equal (have equal properties)
|
|
247
|
-
* Hint: functions will be ignored
|
|
248
|
-
*/
|
|
249
|
-
static isEqual(a, b) {
|
|
250
|
-
return Helper.isSubset(a, b) && Helper.isSubset(b, a);
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* First level difference of two objects
|
|
254
|
-
* Hint: functions will be ignored and when an array or an object is different the hole array or object will used as property value
|
|
255
|
-
*
|
|
256
|
-
* @returns Record<string, any> Object with properties from first object
|
|
257
|
-
*/
|
|
258
|
-
static getDiff(a, b, clone = true) {
|
|
259
|
-
const result = {};
|
|
260
|
-
let firstObject = a;
|
|
261
|
-
if (clone) {
|
|
262
|
-
firstObject = JSON.parse(JSON.stringify(a));
|
|
263
|
-
}
|
|
264
|
-
for (const [key, value] of Object.entries(firstObject)) {
|
|
265
|
-
if (!Helper.isSubset(value, b[key])) {
|
|
266
|
-
result[key] = value;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
return result;
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Check if propertie is type of HTMLCollection or NodeList
|
|
273
|
-
* See https://stackoverflow.com/a/7238344
|
|
274
|
-
*
|
|
275
|
-
* @param nodes
|
|
276
|
-
*/
|
|
277
|
-
static isNodeList(nodes) {
|
|
278
|
-
try {
|
|
279
|
-
const stringRepr = Object.prototype.toString.call(nodes);
|
|
280
|
-
return (typeof nodes === 'object' &&
|
|
281
|
-
/^\[object (HTMLCollection|NodeList|Object)\]$/.test(stringRepr) &&
|
|
282
|
-
typeof nodes.length === 'number' &&
|
|
283
|
-
(nodes.length === 0 || (typeof nodes[0] === 'object' && nodes[0].nodeType > 0)));
|
|
284
|
-
}
|
|
285
|
-
catch (e) {
|
|
286
|
-
return false;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zcmMvbGliL2Jhc2UvY2xhc3Nlcy9oZWxwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNqQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQTZCLE9BQVksRUFBRSxNQUE4QjtRQUNwRixPQUFPLENBQUMsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDL0IsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUNoQyxPQUFPLEtBQUssQ0FBQzt5QkFDZDtxQkFDRjtpQkFDRjtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUU7b0JBQ2pDLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxLQUFJLEVBQUUsQ0FBVSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUSxFQUFFLFVBQWtDLEVBQUU7UUFDN0QsU0FBUztRQUNULE1BQU0sTUFBTSxtQkFDVixRQUFRLEVBQUUsS0FBSyxJQUNaLE9BQU8sQ0FDWCxDQUFDO1FBRUYsWUFBWTtRQUNaLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWYsT0FBTztRQUNQLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakIsYUFBYTtRQUNiLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsaUJBQWlCO1lBQ2pCLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV0Qyw2QkFBNkI7WUFDN0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTdCLDZCQUE2QjtZQUM3QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN6QztRQUVELDRCQUE0QjtRQUM1QixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUNmLE1BQTJDLEVBQzNDLE1BQVMsRUFDVCxVQUE0RSxFQUFFO1FBRTlFLGFBQWE7UUFDYixNQUFNLE1BQU0sbUJBQ1YsV0FBVyxFQUFFLEtBQUssRUFDbEIsZ0JBQWdCLEVBQUUsSUFBSSxJQUNuQixPQUFPLENBQ1gsQ0FBQztRQUVGLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xFLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFO2dCQUM1RixJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzlELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRTt3QkFDMUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt5QkFDN0M7cUJBQ0Y7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQzdDO2lCQUNGO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzNCO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUNoQixJQUFtRixFQUNuRixXQUFzQztRQUV0QyxhQUFhO1FBQ2IsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDckMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxjQUFjO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDZjtRQUVELE1BQU07UUFDTixPQUFRLElBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNyQyxPQUFRLFdBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQWlCOztRQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLE1BQUEsTUFBQSxNQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLDBDQUFFLEtBQUssRUFBRSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLDBDQUFFLEtBQUssRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBaUI7O1FBQzVDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELE9BQU8sTUFBQSxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLDBDQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBVyxFQUFFLGVBQWUsR0FBRyxFQUFFO1FBQ3hELDBCQUEwQjtRQUMxQixJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBZSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBZSxDQUFDLENBQUM7UUFFdEMsZ0RBQWdEO1FBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyRCx5Q0FBeUM7UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLEVBQUU7WUFDNUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDdEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDM0M7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTTtRQUNsQixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3RCxzQ0FBc0M7WUFDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0MsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBa0I7UUFDeEMsTUFBTSxLQUFLLEdBQUcsa0ZBQWtGLENBQUM7UUFDakcsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQUM7UUFDL0MsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDbEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3QyxJQUFJLFVBQVUsRUFBRTtnQkFDZCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVTtRQUN0QixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakcsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUNsRDtRQUNELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN4QixPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDbkIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQy9DO1NBQ0Y7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEYsT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3QyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQU0sRUFBRSxDQUFNO1FBQzVCLFFBQVE7UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLEVBQUU7WUFDekIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELGdCQUFnQjtRQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xDLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNsQyxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQU0sRUFBRSxDQUFNO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFzQixFQUFFLENBQXNCLEVBQUUsUUFBaUIsSUFBSTtRQUNsRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksS0FBSyxFQUFFO1lBQ1QsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7UUFDckIsSUFBSTtZQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFDekIsK0NBQStDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVE7Z0JBQ2hDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNoRixDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFuZGFyZCB9IGZyb20gJy4vc3RhbmRhcmQuY2xhc3MnO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgSGVscGVyIHtcbiAgLyoqXG4gICAqIFNpbXBsZSBmaWx0ZXIgZnVuY3Rpb24gZm9yIHBsYWluIG9iamVjdHNcbiAgICovXG4gIHN0YXRpYyBmaWx0ZXI8VCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0+KG9iamVjdHM6IFRbXSwgZmlsdGVyOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogVFtdIHtcbiAgICByZXR1cm4gKG9iamVjdHM/LmZpbHRlcigoZWxlbWVudCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVyKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50W2tleV0pKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGVsZW1lbnRba2V5XSkge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50W2tleV0uaW5jbHVkcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KSB8fCBbXSkgYXMgYW55W107XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBhIHVybC91cmkgY29uZm9ybSBzdHJpbmdcbiAgICogT25seTpcbiAgICogLSBsb3dlciBjYXNlXG4gICAqIC0gY2hhcnMsIG51bWJlcnMgYW5kIGh5cGhlbnNcbiAgICovXG4gIHN0YXRpYyB1cmxTdHJpbmcoc3RyOiBhbnksIG9wdGlvbnM6IHsgYWxsb3dBbGw/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgLy8gQ29uZmlnXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgYWxsb3dBbGw6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gVG8gc3RyaW5nXG4gICAgc3RyID0gc3RyICsgJyc7XG5cbiAgICAvLyBUcmltXG4gICAgc3RyID0gc3RyLnRyaW0oKTtcblxuICAgIC8vIExvd2VyIGNhc2VcbiAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghY29uZmlnLmFsbG93QWxsKSB7XG4gICAgICAvLyBSZXBsYWNlIHNwYWNlc1xuICAgICAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICctJyk7XG5cbiAgICAgIC8vIFJlcGxhY2Ugc29tZSBzcGVjaWFsIGNoYXJzXG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnw6QnLCAnYWUnKTtcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCfDticsICdvZScpO1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ8O8JywgJ3VlJyk7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnw58nLCAnc3MnKTtcblxuICAgICAgLy8gUmVtb3ZlIG90aGVyIHNwZWNpYWwgY2hhcnNcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9bXmEtekEtWjAtOS1dL2csICcnKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdXJsIGNvbmZvcm0gc3RyaW5nXG4gICAgcmV0dXJuIGVuY29kZVVSSShzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXBsZSBtYXAgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFwPFQgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9PihcbiAgICBzb3VyY2U6IFBhcnRpYWw8VD4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICAgIHRhcmdldDogVCxcbiAgICBvcHRpb25zOiB7IGZ1bmNBbGxvd2VkPzogYm9vbGVhbjsgZGF0ZVN0cmluZ1RvRGF0ZT86IGJvb2xlYW4gfCBzdHJpbmdbXSB9ID0ge31cbiAgKTogVCB7XG4gICAgLy8gU2V0IGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGZ1bmNBbGxvd2VkOiBmYWxzZSxcbiAgICAgIGRhdGVTdHJpbmdUb0RhdGU6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBzb3VyY2VcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0YXJnZXQpKSB7XG4gICAgICBpZiAoc291cmNlW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoY29uZmlnLmZ1bmNBbGxvd2VkIHx8IHR5cGVvZiAoc291cmNlW2tleV0gIT09ICdmdW5jdGlvbicpKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtrZXldID09PSAnc3RyaW5nJyAmJiBjb25maWcuZGF0ZVN0cmluZ1RvRGF0ZSkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5kYXRlU3RyaW5nVG9EYXRlKSkge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5kYXRlU3RyaW5nVG9EYXRlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBIZWxwZXIucGFyc2VEYXRlKHNvdXJjZVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBIZWxwZXIucGFyc2VEYXRlKHNvdXJjZVtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiB0YXJnZXRcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBPYmplY3Qgb3IgT2JqZWN0cyBvZiBzcGVjaWZpZWQgdHlwZSB3aXRoIHNwZWNpZmllZCBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hcHM8VCBleHRlbmRzIFN0YW5kYXJkPihcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+IHwgUGFydGlhbDxUPltdIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSxcbiAgICB0YXJnZXRDbGFzczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVFxuICApOiBUW10ge1xuICAgIC8vIENoZWNrIGRhdGFcbiAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhID0gW2RhdGFdO1xuICAgIH1cblxuICAgIC8vIE1hcFxuICAgIHJldHVybiAoZGF0YSBhcyBhbnkpLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICByZXR1cm4gKHRhcmdldENsYXNzIGFzIGFueSkubWFwKGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwbGFpbiBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGxhaW5QYXJhbWV0ZXIocGFyYW1ldGVyOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBhcmFtZXRlcikge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtZXRlcj8uc3BsaXQoJz8nKT8uc2hpZnQoKT8uc3BsaXQoJyMnKT8uc2hpZnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSUQgb2YgYW4gdXJsIHBhcmFtZXRlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRQYXJhbWV0ZXJJZChwYXJhbWV0ZXI6IHN0cmluZykge1xuICAgIGlmICghcGFyYW1ldGVyKSB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgIH1cbiAgICByZXR1cm4gSGVscGVyLmdldFBsYWluUGFyYW1ldGVyKHBhcmFtZXRlcik/LnNwbGl0KCctJykucG9wKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsYXlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGVsYXkobXM6IG51bWJlcikge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZXAgZnJlZXplXG4gICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZnJlZXplI1doYXRfaXNfc2hhbGxvd19mcmVlemVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGVlcEZyZWV6ZShvYmplY3Q6IGFueSwgcHJlcGFyZWRPYmplY3RzID0gW10pIHtcbiAgICAvLyBQcmV2ZW50IGluZmluaXQgcmVncmVzc1xuICAgIGlmIChwcmVwYXJlZE9iamVjdHMuaW5jbHVkZXMob2JqZWN0IGFzIG5ldmVyKSkge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gICAgcHJlcGFyZWRPYmplY3RzLnB1c2gob2JqZWN0IGFzIG5ldmVyKTtcblxuICAgIC8vIFJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lcyBkZWZpbmVkIG9uIG9iamVjdFxuICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cbiAgICAvLyBGcmVlemUgcHJvcGVydGllcyBiZWZvcmUgZnJlZXppbmcgc2VsZlxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBIZWxwZXIuZGVlcEZyZWV6ZSh2YWx1ZSwgcHJlcGFyZWRPYmplY3RzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiB1bmlxdWUgaWRlbnRpZmllciB3aXRoIDI0IGNoYXJhY3RlcnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VUlEKCk6IHN0cmluZyB7XG4gICAgbGV0IGR0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdXVpZCA9ICd4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICBjb25zdCByID0gKGR0ICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2IHwgMDtcbiAgICAgIGR0ID0gTWF0aC5mbG9vcihkdCAvIDE2KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICByZXR1cm4gKGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXVpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBkYXRlIHN0cmluZyB0byBkYXRlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwYXJzZURhdGUoZGF0ZVN0cmluZzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVJU08gPSAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKSkoPzpafChcXCt8LSkoW1xcZHw6XSopKT8kLztcbiAgICBjb25zdCByZU1zQWpheCA9IC9eXFwvRGF0ZVxcKChkfC18LiopXFwpW1xcL3xcXFxcXSQvO1xuICAgIGlmICh0eXBlb2YgZGF0ZVN0cmluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGlzb0V4ZWMgPSByZUlTTy5leGVjKGRhdGVTdHJpbmcpO1xuICAgICAgaWYgKGlzb0V4ZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgfVxuICAgICAgY29uc3QgbXNBamF4RXhlYyA9IHJlTXNBamF4LmV4ZWMoZGF0ZVN0cmluZyk7XG4gICAgICBpZiAobXNBamF4RXhlYykge1xuICAgICAgICBjb25zdCBjbGVhbmVkID0gbXNBamF4RXhlY1sxXS5zcGxpdCgvWy0rLC5dLyk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShjbGVhbmVkWzBdID8gK2NsZWFuZWRbMF0gOiAwIC0gK2NsZWFuZWRbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0ZVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYnJvd3NlciBuYW1lIGFuZCB2ZXJzaW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEJyb3dzZXIoKSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBsZXQgZGF0YSA9IHVzZXJBZ2VudC5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgIGxldCB2ZXJzaW9uO1xuICAgIGlmICgvdHJpZGVudC9pLnRlc3QoZGF0YVsxXSkpIHtcbiAgICAgIHZlcnNpb24gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModXNlckFnZW50KSB8fCBbXTtcbiAgICAgIHJldHVybiB7IG5hbWU6ICdJRScsIHZlcnNpb246IHZlcnNpb25bMV0gfHwgJycgfTtcbiAgICB9XG4gICAgaWYgKGRhdGFbMV0gPT09ICdDaHJvbWUnKSB7XG4gICAgICB2ZXJzaW9uID0gdXNlckFnZW50Lm1hdGNoKC9cXGJPUFJ8RWRnZVxcLyhcXGQrKS8pO1xuICAgICAgaWYgKHZlcnNpb24gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geyBuYW1lOiAnT3BlcmEnLCB2ZXJzaW9uOiB2ZXJzaW9uWzFdIH07XG4gICAgICB9XG4gICAgfVxuICAgIGRhdGEgPSBkYXRhWzJdID8gW2RhdGFbMV0sIGRhdGFbMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gICAgdmVyc2lvbiA9IHVzZXJBZ2VudC5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKTtcbiAgICBpZiAodmVyc2lvbiAhPT0gbnVsbCkge1xuICAgICAgZGF0YS5zcGxpY2UoMSwgMSwgdmVyc2lvblsxXSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBkYXRhWzBdLFxuICAgICAgdmVyc2lvbjogZGF0YVsxXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZmlyc3QgcGFyYW1ldGVyIGlzIGEgZGVlcCBzdWJzZXQgb2Ygc2Vjb25kIHBhcmFtZXRlclxuICAgKiBIaW50OiBmdW5jdGlvbnMgd2lsbCBiZSBpZ25vcmVkXG4gICAqL1xuICBzdGF0aWMgaXNTdWJzZXQoYTogYW55LCBiOiBhbnkpIHtcbiAgICAvLyBFcXVhbFxuICAgIGlmIChhID09PSBiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEaWZmZXJlbnQgdHlwZVxuICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGEpKSB7XG4gICAgICAgIGlmIChIZWxwZXIuaXNTdWJzZXQodmFsdWUsIGJba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgcGxhaW4gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBsYWluKSkge1xuICAgICAgICBpZiAoSGVscGVyLmlzU3Vic2V0KHZhbHVlLCBiW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBFbHNlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAoaGF2ZSBlcXVhbCBwcm9wZXJ0aWVzKVxuICAgKiBIaW50OiBmdW5jdGlvbnMgd2lsbCBiZSBpZ25vcmVkXG4gICAqL1xuICBzdGF0aWMgaXNFcXVhbChhOiBhbnksIGI6IGFueSkge1xuICAgIHJldHVybiBIZWxwZXIuaXNTdWJzZXQoYSwgYikgJiYgSGVscGVyLmlzU3Vic2V0KGIsIGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcnN0IGxldmVsIGRpZmZlcmVuY2Ugb2YgdHdvIG9iamVjdHNcbiAgICogSGludDogZnVuY3Rpb25zIHdpbGwgYmUgaWdub3JlZCBhbmQgd2hlbiBhbiBhcnJheSBvciBhbiBvYmplY3QgaXMgZGlmZmVyZW50IHRoZSBob2xlIGFycmF5IG9yIG9iamVjdCB3aWxsIHVzZWQgYXMgcHJvcGVydHkgdmFsdWVcbiAgICpcbiAgICogQHJldHVybnMgUmVjb3JkPHN0cmluZywgYW55PiBPYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGZyb20gZmlyc3Qgb2JqZWN0XG4gICAqL1xuICBzdGF0aWMgZ2V0RGlmZihhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBiOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjbG9uZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBsZXQgZmlyc3RPYmplY3QgPSBhO1xuICAgIGlmIChjbG9uZSkge1xuICAgICAgZmlyc3RPYmplY3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmlyc3RPYmplY3QpKSB7XG4gICAgICBpZiAoIUhlbHBlci5pc1N1YnNldCh2YWx1ZSwgYltrZXldKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHByb3BlcnRpZSBpcyB0eXBlIG9mIEhUTUxDb2xsZWN0aW9uIG9yIE5vZGVMaXN0XG4gICAqIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzIzODM0NFxuICAgKlxuICAgKiBAcGFyYW0gbm9kZXNcbiAgICovXG4gIHN0YXRpYyBpc05vZGVMaXN0KG5vZGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmluZ1JlcHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobm9kZXMpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIG5vZGVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAvXlxcW29iamVjdCAoSFRNTENvbGxlY3Rpb258Tm9kZUxpc3R8T2JqZWN0KVxcXSQvLnRlc3Qoc3RyaW5nUmVwcikgJiZcbiAgICAgICAgdHlwZW9mIG5vZGVzLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgKG5vZGVzLmxlbmd0aCA9PT0gMCB8fCAodHlwZW9mIG5vZGVzWzBdID09PSAnb2JqZWN0JyAmJiBub2Rlc1swXS5ub2RlVHlwZSA+IDApKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { Directive, ElementRef, Input, Output } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* Directive vor context menu
|
|
4
|
-
* See https://stackblitz.com/edit/angular-custom-context-menu
|
|
5
|
-
*/
|
|
6
|
-
export class ContextMenuDirective {
|
|
7
|
-
constructor(el) {
|
|
8
|
-
this.el = el;
|
|
9
|
-
this.xGap = 0;
|
|
10
|
-
this.yGap = 0;
|
|
11
|
-
this.overflowSpace = 10;
|
|
12
|
-
this.selectors = '*';
|
|
13
|
-
this.clickedElement = null;
|
|
14
|
-
this.previousDisplayStatus = null;
|
|
15
|
-
}
|
|
16
|
-
ngOnInit() {
|
|
17
|
-
if (this.ltContextMenu) {
|
|
18
|
-
this.previousDisplayStatus = this.ltContextMenu.style.display;
|
|
19
|
-
}
|
|
20
|
-
// Add a click listener to the window,
|
|
21
|
-
// so that we can close the context menu on left click
|
|
22
|
-
window.addEventListener('click', () => {
|
|
23
|
-
this.showContextMenu(null, false);
|
|
24
|
-
});
|
|
25
|
-
// Close context menu when escape is pressed
|
|
26
|
-
window.addEventListener('keydown', (e) => {
|
|
27
|
-
if (e.code === 'Escape') {
|
|
28
|
-
this.showContextMenu(null, false);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
// Add an event listener to listen to the 'contextmenu' event
|
|
32
|
-
this.el.nativeElement.addEventListener('contextmenu', (e) => {
|
|
33
|
-
// Prevent the default context menu to popup
|
|
34
|
-
if (e.preventDefault) {
|
|
35
|
-
e.preventDefault();
|
|
36
|
-
}
|
|
37
|
-
// Shows our own context menu
|
|
38
|
-
this.showContextMenu(e, true);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
// Shows or hides our custom context menu, which is specified as a input
|
|
42
|
-
showContextMenu(event, show) {
|
|
43
|
-
var _a;
|
|
44
|
-
const cm = this.ltContextMenu;
|
|
45
|
-
if (cm) {
|
|
46
|
-
// Try to open context menu
|
|
47
|
-
if (show && event && event instanceof MouseEvent) {
|
|
48
|
-
// Get valid clicked structureElement
|
|
49
|
-
const clickedElement = (_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.closest(this.selectors);
|
|
50
|
-
if (clickedElement) {
|
|
51
|
-
// Set clicked structureElement
|
|
52
|
-
this.clickedElement = clickedElement;
|
|
53
|
-
setTimeout(() => {
|
|
54
|
-
// Set display status
|
|
55
|
-
cm.style.display = 'block';
|
|
56
|
-
// Calculate top position
|
|
57
|
-
let top = event.y + this.yGap;
|
|
58
|
-
if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {
|
|
59
|
-
top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;
|
|
60
|
-
}
|
|
61
|
-
// Calculate left position
|
|
62
|
-
let left = event.x + this.xGap;
|
|
63
|
-
if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {
|
|
64
|
-
left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;
|
|
65
|
-
}
|
|
66
|
-
// Set position
|
|
67
|
-
cm.style.top = top + 'px';
|
|
68
|
-
cm.style.left = left + 'px';
|
|
69
|
-
// Show
|
|
70
|
-
cm.style.opacity = '1.0';
|
|
71
|
-
cm.style['pointer-events'] = 'auto';
|
|
72
|
-
}, 1);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Close context menu
|
|
77
|
-
this.clickedElement = null;
|
|
78
|
-
if (this.previousDisplayStatus) {
|
|
79
|
-
cm.style.display = this.previousDisplayStatus;
|
|
80
|
-
}
|
|
81
|
-
cm.style.opacity = '0.01';
|
|
82
|
-
cm.style['pointer-events'] = 'none';
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
ContextMenuDirective.decorators = [
|
|
87
|
-
{ type: Directive, args: [{
|
|
88
|
-
selector: '[ltContextMenu]',
|
|
89
|
-
exportAs: 'contextMenuData',
|
|
90
|
-
},] }
|
|
91
|
-
];
|
|
92
|
-
ContextMenuDirective.ctorParameters = () => [
|
|
93
|
-
{ type: ElementRef }
|
|
94
|
-
];
|
|
95
|
-
ContextMenuDirective.propDecorators = {
|
|
96
|
-
contextMenuData: [{ type: Input }],
|
|
97
|
-
ltContextMenu: [{ type: Input }],
|
|
98
|
-
xGap: [{ type: Input }],
|
|
99
|
-
yGap: [{ type: Input }],
|
|
100
|
-
overflowSpace: [{ type: Input }],
|
|
101
|
-
selectors: [{ type: Input }],
|
|
102
|
-
clickedElement: [{ type: Output }]
|
|
103
|
-
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2RpcmVjdGl2ZXMvY29udGV4dC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdFOzs7R0FHRztBQUtILE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUFQekIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixjQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2YsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDekMsMEJBQXFCLEdBQVcsSUFBSSxDQUFDO0lBRUEsQ0FBQztJQUV0QyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDL0Q7UUFFRCxzQ0FBc0M7UUFDdEMsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO1FBQzVDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN2QixJQUFJLENBQUMsZUFBZSxDQUFD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QUM7U0FDckM7SUFDSCxDQUFDOzs7WUE5RkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFFBQVEsRUFBRSxpQkFBaUI7YUFDNUI7OztZQVRtQixVQUFVOzs7OEJBVzNCLEtBQUs7NEJBQ0wsS0FBSzttQkFDTCxLQUFLO21CQUNMLEtBQUs7NEJBQ0wsS0FBSzt3QkFDTCxLQUFLOzZCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB2b3IgY29udGV4dCBtZW51XG4gKiBTZWUgaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L2FuZ3VsYXItY3VzdG9tLWNvbnRleHQtbWVudVxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbHRDb250ZXh0TWVudV0nLFxuICBleHBvcnRBczogJ2NvbnRleHRNZW51RGF0YScsXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29udGV4dE1lbnVEYXRhPzogYW55O1xuICBASW5wdXQoKSBsdENvbnRleHRNZW51OiBIVE1MRWxlbWVudDtcbiAgQElucHV0KCkgeEdhcCA9IDA7XG4gIEBJbnB1dCgpIHlHYXAgPSAwO1xuICBASW5wdXQoKSBvdmVyZmxvd1NwYWNlID0gMTA7XG4gIEBJbnB1dCgpIHNlbGVjdG9ycyA9ICcqJztcbiAgQE91dHB1dCgpIGNsaWNrZWRFbGVtZW50OiBFbGVtZW50ID0gbnVsbDtcbiAgcHJldmlvdXNEaXNwbGF5U3RhdHVzOiBzdHJpbmcgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMubHRDb250ZXh0TWVudSkge1xuICAgICAgdGhpcy5wcmV2aW91c0Rpc3BsYXlTdGF0dXMgPSB0aGlzLmx0Q29udGV4dE1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYSBjbGljayBsaXN0ZW5lciB0byB0aGUgd2luZG93LFxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIGNsb3NlIHRoZSBjb250ZXh0IG1lbnUgb24gbGVmdCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51KG51bGwsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIGNvbnRleHQgbWVudSB3aGVuIGVzY2FwZSBpcyBwcmVzc2VkXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAgaWYgKGUuY29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnUobnVsbCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGxpc3RlbiB0byB0aGUgJ2NvbnRleHRtZW51JyBldmVudFxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlKSA9PiB7XG4gICAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSB0byBwb3B1cFxuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgLy8gU2hvd3Mgb3VyIG93biBjb250ZXh0IG1lbnVcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51KGUsIHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU2hvd3Mgb3IgaGlkZXMgb3VyIGN1c3RvbSBjb250ZXh0IG1lbnUsIHdoaWNoIGlzIHNwZWNpZmllZCBhcyBhIGlucHV0XG4gIHNob3dDb250ZXh0TWVudShldmVudCwgc2hvdzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNtID0gdGhpcy5sdENvbnRleHRNZW51O1xuICAgIGlmIChjbSkge1xuICAgICAgLy8gVHJ5IHRvIG9wZW4gY29udGV4dCBtZW51XG4gICAgICBpZiAoc2hvdyAmJiBldmVudCAmJiBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgLy8gR2V0IHZhbGlkIGNsaWNrZWQgc3RydWN0dXJlRWxlbWVudFxuICAgICAgICBjb25zdCBjbGlja2VkRWxlbWVudCA9IChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xvc2VzdCh0aGlzLnNlbGVjdG9ycyk7XG4gICAgICAgIGlmIChjbGlja2VkRWxlbWVudCkge1xuICAgICAgICAgIC8vIFNldCBjbGlja2VkIHN0cnVjdHVyZUVsZW1lbnRcbiAgICAgICAgICB0aGlzLmNsaWNrZWRFbGVtZW50ID0gY2xpY2tlZEVsZW1lbnQ7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNldCBkaXNwbGF5IHN0YXR1c1xuICAgICAgICAgICAgY20uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0b3AgcG9zaXRpb25cbiAgICAgICAgICAgIGxldCB0b3AgPSBldmVudC55ICsgdGhpcy55R2FwO1xuICAgICAgICAgICAgaWYgKHRvcCArIGNtLm9mZnNldEhlaWdodCArIDEwID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgICB0b3AgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gY20ub2Zmc2V0SGVpZ2h0IC0gdGhpcy5vdmVyZmxvd1NwYWNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgbGVmdCBwb3NpdGlvblxuICAgICAgICAgICAgbGV0IGxlZnQgPSBldmVudC54ICsgdGhpcy54R2FwO1xuICAgICAgICAgICAgaWYgKGxlZnQgKyBjbS5vZmZzZXRXaWR0aCArIDEwID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICAgIGxlZnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBjbS5vZmZzZXRXaWR0aCAtIHRoaXMub3ZlcmZsb3dTcGFjZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2V0IHBvc2l0aW9uXG4gICAgICAgICAgICBjbS5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuICAgICAgICAgICAgY20uc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuXG4gICAgICAgICAgICAvLyBTaG93XG4gICAgICAgICAgICBjbS5zdHlsZS5vcGFjaXR5ID0gJzEuMCc7XG4gICAgICAgICAgICBjbS5zdHlsZVsncG9pbnRlci1ldmVudHMnXSA9ICdhdXRvJztcbiAgICAgICAgICB9LCAxKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbG9zZSBjb250ZXh0IG1lbnVcbiAgICAgIHRoaXMuY2xpY2tlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNEaXNwbGF5U3RhdHVzKSB7XG4gICAgICAgIGNtLnN0eWxlLmRpc3BsYXkgPSB0aGlzLnByZXZpb3VzRGlzcGxheVN0YXR1cztcbiAgICAgIH1cbiAgICAgIGNtLnN0eWxlLm9wYWNpdHkgPSAnMC4wMSc7XG4gICAgICBjbS5zdHlsZVsncG9pbnRlci1ldmVudHMnXSA9ICdub25lJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|