@lenne.tech/ng-base 15.0.0-beta-3 → 16.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/base-components/base-components.module.d.ts +1 -2
- package/base-components/components/checkbox/checkbox.component.d.ts +1 -1
- package/base-components/components/delete-account/delete-account.component.d.ts +1 -1
- package/base-components/components/fab-button/fab-button.component.d.ts +1 -1
- package/base-components/components/input/input.component.d.ts +1 -1
- package/base-components/components/loading-bar/loading-bar.component.d.ts +1 -1
- package/base-components/components/model-form/model-form-base.component.d.ts +1 -1
- package/base-components/components/model-form/model-form.component.d.ts +1 -1
- package/base-components/components/model-form-sub/model-form-sub.component.d.ts +1 -1
- package/base-components/components/model-table/model-table.component.d.ts +1 -1
- package/base-components/components/refence-input/refence-input.component.d.ts +1 -1
- package/base-components/components/select/select.component.d.ts +1 -1
- package/base-components/components/skeleton-loader/skeleton-loader.component.d.ts +1 -1
- package/base-components/components/tags/tags.component.d.ts +1 -1
- package/base-components/components/textarea/textarea.component.d.ts +1 -1
- package/base-components/components/toast/toast.component.d.ts +1 -1
- package/base-components/components/upload-image/upload-image.component.d.ts +1 -1
- package/base-components/directives/context-menu.directive.d.ts +1 -1
- package/base-components/directives/sort.directive.d.ts +1 -1
- package/base-prototype/pages/login/login.component.d.ts +1 -1
- package/base-prototype/pages/profile/profile.component.d.ts +1 -1
- package/base-prototype/pages/set-password/set-password.component.d.ts +1 -1
- package/esm2022/base-cms/base-cms-routing.module.mjs +33 -0
- package/esm2022/base-cms/base-cms.module.mjs +61 -0
- package/esm2022/base-cms/pages/base-cms/base-cms.component.mjs +233 -0
- package/esm2022/base-components/base-components.module.mjs +123 -0
- package/esm2022/base-components/components/breadcrumb/breadcrumb.component.mjs +21 -0
- package/esm2022/base-components/components/change-password/change-password.component.mjs +96 -0
- package/esm2022/base-components/components/checkbox/checkbox.component.mjs +35 -0
- package/esm2022/base-components/components/delete-account/delete-account.component.mjs +61 -0
- package/esm2022/base-components/components/fab-button/fab-button.component.mjs +21 -0
- package/esm2022/base-components/components/input/input.component.mjs +72 -0
- package/esm2022/base-components/components/loading-bar/loading-bar.component.mjs +39 -0
- package/esm2022/base-components/components/model-form/model-form-base.component.mjs +145 -0
- package/esm2022/base-components/components/model-form/model-form.component.mjs +585 -0
- package/esm2022/base-components/components/model-form-sub/model-form-sub.component.mjs +111 -0
- package/esm2022/base-components/components/model-table/model-table.component.mjs +470 -0
- package/esm2022/base-components/components/refence-input/refence-input.component.mjs +273 -0
- package/esm2022/base-components/components/select/select.component.mjs +59 -0
- package/esm2022/base-components/components/skeleton-loader/skeleton-loader.component.mjs +32 -0
- package/esm2022/base-components/components/tags/tags.component.mjs +224 -0
- package/esm2022/base-components/components/textarea/textarea.component.mjs +76 -0
- package/esm2022/base-components/components/toast/toast.component.mjs +70 -0
- package/esm2022/base-components/components/upload-image/upload-image.component.mjs +343 -0
- package/esm2022/base-components/directives/back-button.directive.mjs +25 -0
- package/esm2022/base-components/directives/context-menu.directive.mjs +112 -0
- package/esm2022/base-components/directives/sort.directive.mjs +61 -0
- package/esm2022/base-components/directives/stop-propagation.directive.mjs +24 -0
- package/esm2022/base-components/pipes/ellipses.pipe.mjs +23 -0
- package/esm2022/base-prototype/base-prototype.module.mjs +54 -0
- package/esm2022/base-prototype/pages/email-verification/email-verification.component.mjs +62 -0
- package/esm2022/base-prototype/pages/forgot-password/forgot-password.component.mjs +75 -0
- package/esm2022/base-prototype/pages/login/login.component.mjs +111 -0
- package/esm2022/base-prototype/pages/profile/profile.component.mjs +86 -0
- package/esm2022/base-prototype/pages/register/register.component.mjs +94 -0
- package/esm2022/base-prototype/pages/set-password/set-password.component.mjs +90 -0
- package/esm2022/shared/classes/auth.class.mjs +14 -0
- package/esm2022/shared/classes/basic-user.class.mjs +49 -0
- package/esm2022/shared/classes/graphql-enum.class.mjs +10 -0
- package/esm2022/shared/classes/graphql-meta.class.mjs +345 -0
- package/esm2022/shared/classes/graphql-type.class.mjs +14 -0
- package/esm2022/shared/classes/sort.class.mjs +38 -0
- package/esm2022/shared/services/auth.service.mjs +153 -0
- package/esm2022/shared/services/breadcrumb.service.mjs +70 -0
- package/{esm2020 → esm2022}/shared/services/cms.service.mjs +7 -5
- package/esm2022/shared/services/file.service.mjs +87 -0
- package/esm2022/shared/services/forms.service.mjs +62 -0
- package/esm2022/shared/services/graphql-meta.service.mjs +133 -0
- package/esm2022/shared/services/graphql-plus.service.mjs +94 -0
- package/esm2022/shared/services/graphql.service.mjs +511 -0
- package/esm2022/shared/services/image.service.mjs +103 -0
- package/esm2022/shared/services/loader.service.mjs +79 -0
- package/esm2022/shared/services/navigation.service.mjs +39 -0
- package/esm2022/shared/services/scroll.service.mjs +208 -0
- package/esm2022/shared/services/storage.service.mjs +142 -0
- package/esm2022/shared/services/toast.service.mjs +40 -0
- package/esm2022/shared/services/user.service.mjs +161 -0
- package/esm2022/shared/services/ws.service.mjs +18 -0
- package/esm2022/src/base.module.mjs +98 -0
- package/esm2022/src/directives/lazy-load.directive.mjs +48 -0
- package/esm2022/src/directives/match-height.directive.mjs +92 -0
- package/esm2022/src/directives/resizable.directive.mjs +92 -0
- package/esm2022/src/functions/extract-files.function.mjs +87 -0
- package/esm2022/src/guards/auth.guard.mjs +84 -0
- package/esm2022/src/guards/can-deactivate.guard.mjs +17 -0
- package/esm2022/src/guards/logout.guard.mjs +35 -0
- package/esm2022/src/pipes/date-ago.pipe.mjs +64 -0
- package/esm2022/src/pipes/safe-html.pipe.mjs +23 -0
- package/esm2022/src/services/fullscreen.service.mjs +52 -0
- package/esm2022/src/services/seo.service.mjs +100 -0
- package/esm2022/src/services/theme.service.mjs +45 -0
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs +41 -30
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs +419 -298
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs +126 -87
- package/{fesm2015 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs +164 -113
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base.mjs +108 -88
- package/fesm2022/lenne.tech-ng-base.mjs.map +1 -0
- package/package.json +23 -38
- package/src/directives/lazy-load.directive.d.ts +1 -1
- package/src/directives/match-height.directive.d.ts +1 -1
- package/src/directives/resizable.directive.d.ts +1 -1
- package/src/guards/auth.guard.d.ts +2 -2
- package/src/guards/can-deactivate.guard.d.ts +1 -2
- package/src/guards/logout.guard.d.ts +2 -2
- package/esm2020/base-cms/base-cms-routing.module.mjs +0 -32
- package/esm2020/base-cms/base-cms.module.mjs +0 -59
- package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +0 -222
- package/esm2020/base-components/base-components.module.mjs +0 -123
- package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -18
- package/esm2020/base-components/components/change-password/change-password.component.mjs +0 -90
- package/esm2020/base-components/components/checkbox/checkbox.component.mjs +0 -31
- package/esm2020/base-components/components/delete-account/delete-account.component.mjs +0 -56
- package/esm2020/base-components/components/fab-button/fab-button.component.mjs +0 -21
- package/esm2020/base-components/components/input/input.component.mjs +0 -67
- package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +0 -35
- package/esm2020/base-components/components/model-form/model-form-base.component.mjs +0 -136
- package/esm2020/base-components/components/model-form/model-form.component.mjs +0 -564
- package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -102
- package/esm2020/base-components/components/model-table/model-table.component.mjs +0 -456
- package/esm2020/base-components/components/refence-input/refence-input.component.mjs +0 -261
- package/esm2020/base-components/components/select/select.component.mjs +0 -54
- package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -32
- package/esm2020/base-components/components/tags/tags.component.mjs +0 -218
- package/esm2020/base-components/components/textarea/textarea.component.mjs +0 -72
- package/esm2020/base-components/components/toast/toast.component.mjs +0 -68
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +0 -324
- package/esm2020/base-components/directives/back-button.directive.mjs +0 -23
- package/esm2020/base-components/directives/context-menu.directive.mjs +0 -108
- package/esm2020/base-components/directives/sort.directive.mjs +0 -57
- package/esm2020/base-components/directives/stop-propagation.directive.mjs +0 -23
- package/esm2020/base-components/pipes/ellipses.pipe.mjs +0 -22
- package/esm2020/base-prototype/base-prototype.module.mjs +0 -53
- package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +0 -55
- package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -67
- package/esm2020/base-prototype/pages/login/login.component.mjs +0 -102
- package/esm2020/base-prototype/pages/profile/profile.component.mjs +0 -81
- package/esm2020/base-prototype/pages/register/register.component.mjs +0 -86
- package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +0 -82
- package/esm2020/shared/classes/auth.class.mjs +0 -17
- package/esm2020/shared/classes/basic-user.class.mjs +0 -52
- package/esm2020/shared/classes/graphql-enum.class.mjs +0 -9
- package/esm2020/shared/classes/graphql-meta.class.mjs +0 -344
- package/esm2020/shared/classes/graphql-type.class.mjs +0 -17
- package/esm2020/shared/classes/sort.class.mjs +0 -40
- package/esm2020/shared/services/auth.service.mjs +0 -148
- package/esm2020/shared/services/breadcrumb.service.mjs +0 -68
- package/esm2020/shared/services/file.service.mjs +0 -84
- package/esm2020/shared/services/forms.service.mjs +0 -59
- package/esm2020/shared/services/graphql-meta.service.mjs +0 -123
- package/esm2020/shared/services/graphql-plus.service.mjs +0 -89
- package/esm2020/shared/services/graphql.service.mjs +0 -507
- package/esm2020/shared/services/image.service.mjs +0 -102
- package/esm2020/shared/services/loader.service.mjs +0 -79
- package/esm2020/shared/services/navigation.service.mjs +0 -36
- package/esm2020/shared/services/scroll.service.mjs +0 -179
- package/esm2020/shared/services/storage.service.mjs +0 -140
- package/esm2020/shared/services/toast.service.mjs +0 -41
- package/esm2020/shared/services/user.service.mjs +0 -155
- package/esm2020/shared/services/ws.service.mjs +0 -16
- package/esm2020/src/base.module.mjs +0 -97
- package/esm2020/src/directives/lazy-load.directive.mjs +0 -45
- package/esm2020/src/directives/match-height.directive.mjs +0 -84
- package/esm2020/src/directives/resizable.directive.mjs +0 -90
- package/esm2020/src/functions/extract-files.function.mjs +0 -84
- package/esm2020/src/guards/auth.guard.mjs +0 -80
- package/esm2020/src/guards/can-deactivate.guard.mjs +0 -16
- package/esm2020/src/guards/logout.guard.mjs +0 -32
- package/esm2020/src/pipes/date-ago.pipe.mjs +0 -65
- package/esm2020/src/pipes/safe-html.pipe.mjs +0 -21
- package/esm2020/src/services/fullscreen.service.mjs +0 -51
- package/esm2020/src/services/seo.service.mjs +0 -97
- package/esm2020/src/services/theme.service.mjs +0 -43
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs +0 -323
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +0 -2866
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +0 -496
- package/fesm2015/lenne.tech-ng-base-shared.mjs +0 -2750
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base.mjs +0 -905
- package/fesm2015/lenne.tech-ng-base.mjs.map +0 -1
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
- package/fesm2020/lenne.tech-ng-base.mjs.map +0 -1
- /package/{esm2020 → esm2022}/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -0
- /package/{esm2020 → esm2022}/base-cms/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/base-components/lenne.tech-ng-base-base-components.mjs +0 -0
- /package/{esm2020 → esm2022}/base-components/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -0
- /package/{esm2020 → esm2022}/base-prototype/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lenne.tech-ng-base.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/classes/helper.class.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/classes/standard.class.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/decorators/debounce.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/comparison-operator.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/graphql-request-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/logical-operator.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/skeleton-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/sort-order.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/toast-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/functions/ws-client.function.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/base-module-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/breadcrumb.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/can-component-deactivate.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-enum-values.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-field-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-model-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-table-field.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/combined-filter-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/compress-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cropping-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/field-object.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/field.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/filter-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/find-args.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-crud-type.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-fields-object.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-type-collection.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/login-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/single-filter-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/sort-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/time-components.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/toast.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/lenne.tech-ng-base-shared.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/types/graphql-fields.type.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/types/storage.type.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/validators/email.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/validators/match.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/validators/secure-password.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/src/decorators/auto-unsubscribe.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/src/factories/apollo-options.factory.mjs +0 -0
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
import { GraphQLEnumType, GraphQLInputObjectType, GraphQLList, GraphQLNonNull, GraphQLScalarType, } from 'graphql';
|
|
2
|
-
import { Helper } from './helper.class';
|
|
3
|
-
import { GraphQLType } from './graphql-type.class';
|
|
4
|
-
/**
|
|
5
|
-
* GraphQL meta
|
|
6
|
-
*/
|
|
7
|
-
export class GraphQLMeta {
|
|
8
|
-
/**
|
|
9
|
-
* Integrate schema
|
|
10
|
-
*/
|
|
11
|
-
constructor(schema) {
|
|
12
|
-
this.schema = schema;
|
|
13
|
-
// Frozen caches
|
|
14
|
-
this.args = {};
|
|
15
|
-
this.fields = {};
|
|
16
|
-
if (!schema) {
|
|
17
|
-
throw Error('Missing schema');
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get an object with GraphQLRequestType (operation type) as keys and method (fields) names as value
|
|
22
|
-
*/
|
|
23
|
-
getMethodNames() {
|
|
24
|
-
return {
|
|
25
|
-
query: Object.keys(this.schema.getQueryType()?.getFields() || {}),
|
|
26
|
-
mutation: Object.keys(this.schema.getMutationType()?.getFields() || {}),
|
|
27
|
-
subscription: Object.keys(this.schema.getSubscriptionType()?.getFields() || {}),
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Get GraphQLRequestTypes (operation types) via method (field) name
|
|
32
|
-
*/
|
|
33
|
-
getRequestTypesViaMethod(methodName) {
|
|
34
|
-
const result = [];
|
|
35
|
-
const methodNames = this.getMethodNames();
|
|
36
|
-
for (const [key, value] of Object.entries(methodNames)) {
|
|
37
|
-
if (value.includes(methodName)) {
|
|
38
|
-
result.push(key);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* We're going to get the query and mutation types from the schema, then we're going to loop through the fields of each
|
|
45
|
-
* type and check if the field name starts with `find`, `create`, `update`, or `delete`. If it does, we're going to add
|
|
46
|
-
* the model name to the `possibleTypes` array
|
|
47
|
-
*
|
|
48
|
-
* @returns An array of objects with the name of the model, and the CRUD operations that are available for that model.
|
|
49
|
-
*/
|
|
50
|
-
getTypes(logging = false) {
|
|
51
|
-
const possibleTypes = [];
|
|
52
|
-
const mutationType = this.schema.getMutationType();
|
|
53
|
-
const queryType = this.schema.getQueryType();
|
|
54
|
-
if (logging) {
|
|
55
|
-
console.log('GraphQLMeta::getTypes->queryTypeFields', queryType.getFields());
|
|
56
|
-
}
|
|
57
|
-
for (const [key, value] of Object.entries(queryType.getFields())) {
|
|
58
|
-
if (key.startsWith('find')) {
|
|
59
|
-
possibleTypes.push({
|
|
60
|
-
name: key.split('find').pop().slice(0, -1),
|
|
61
|
-
create: false,
|
|
62
|
-
update: false,
|
|
63
|
-
delete: false,
|
|
64
|
-
duplicate: false,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (logging) {
|
|
69
|
-
console.log('GraphQLMeta::getTypes->mutationTypeFields', mutationType.getFields());
|
|
70
|
-
console.log('GraphQLMeta::getTypes->possibleTypes', possibleTypes);
|
|
71
|
-
}
|
|
72
|
-
for (const [key, value] of Object.entries(mutationType.getFields())) {
|
|
73
|
-
if (key.startsWith('create')) {
|
|
74
|
-
const model = key.split('create').pop();
|
|
75
|
-
if (possibleTypes.find((e) => e.name === model)) {
|
|
76
|
-
possibleTypes.find((item) => item.name === model).create = true;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (key.startsWith('update')) {
|
|
80
|
-
const model = key.split('update').pop();
|
|
81
|
-
if (possibleTypes.find((e) => e.name === model)) {
|
|
82
|
-
possibleTypes.find((item) => item.name === model).update = true;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (key.startsWith('delete')) {
|
|
86
|
-
const model = key.split('delete').pop();
|
|
87
|
-
if (possibleTypes.find((e) => e.name === model)) {
|
|
88
|
-
possibleTypes.find((item) => item.name === model).delete = true;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (key.startsWith('duplicate')) {
|
|
92
|
-
const model = key.split('duplicate').pop();
|
|
93
|
-
if (possibleTypes.find((e) => e.name === model)) {
|
|
94
|
-
possibleTypes.find((item) => item.name === model).duplicate = true;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (logging) {
|
|
99
|
-
console.log('GraphQLMeta::getTypes->possibleTypes', possibleTypes);
|
|
100
|
-
console.log('GraphQLMeta::getTypes->filteredPossibleTypes', possibleTypes.filter((e) => e.create || e.update));
|
|
101
|
-
}
|
|
102
|
-
return possibleTypes.filter((e) => e.create || e.update);
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Get arguments of GraphQL function
|
|
106
|
-
*/
|
|
107
|
-
getArgs(functionName, options = {}) {
|
|
108
|
-
const { cache, freeze, type } = {
|
|
109
|
-
cache: true,
|
|
110
|
-
freeze: true,
|
|
111
|
-
type: undefined,
|
|
112
|
-
...options,
|
|
113
|
-
};
|
|
114
|
-
// Get cache
|
|
115
|
-
if (cache && freeze) {
|
|
116
|
-
const args = this.args[functionName + type];
|
|
117
|
-
if (args) {
|
|
118
|
-
return args;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
const func = this.getFunction(functionName, { type });
|
|
122
|
-
const result = new GraphQLType();
|
|
123
|
-
if (func?.args) {
|
|
124
|
-
func.args.forEach((item) => {
|
|
125
|
-
result.fields[item.name] = this.getDeepType(item.type);
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
// Set cache
|
|
129
|
-
if (freeze) {
|
|
130
|
-
this.args[functionName + type] = Helper.deepFreeze(result);
|
|
131
|
-
}
|
|
132
|
-
return result;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Get fields of GraphQL function
|
|
136
|
-
*/
|
|
137
|
-
getFields(functionName, options = {}) {
|
|
138
|
-
const { cache, freeze, type } = {
|
|
139
|
-
cache: true,
|
|
140
|
-
freeze: true,
|
|
141
|
-
type: undefined,
|
|
142
|
-
...options,
|
|
143
|
-
};
|
|
144
|
-
// Get cache
|
|
145
|
-
if (cache && freeze) {
|
|
146
|
-
const args = this.fields[functionName + type];
|
|
147
|
-
if (args) {
|
|
148
|
-
return args;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
const func = this.getFunction(functionName, options);
|
|
152
|
-
const result = this.getDeepType(func.type);
|
|
153
|
-
// Set cache
|
|
154
|
-
if (freeze) {
|
|
155
|
-
this.fields[functionName + type] = Helper.deepFreeze(result);
|
|
156
|
-
}
|
|
157
|
-
return result;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get GraphQL function
|
|
161
|
-
*/
|
|
162
|
-
getFunction(name, options = {}) {
|
|
163
|
-
// Set config
|
|
164
|
-
const config = {
|
|
165
|
-
...options,
|
|
166
|
-
};
|
|
167
|
-
// Init possible functions
|
|
168
|
-
let functions = {};
|
|
169
|
-
// If function type is set
|
|
170
|
-
if (config.type) {
|
|
171
|
-
const graphQLType = config.type.charAt(0).toUpperCase() + config.type.slice(1);
|
|
172
|
-
const type = this.schema.getType(graphQLType);
|
|
173
|
-
if (type) {
|
|
174
|
-
functions = type.getFields();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// If function type is not set
|
|
178
|
-
else {
|
|
179
|
-
['Subscription', 'Mutation', 'Query'].forEach((item) => {
|
|
180
|
-
const type = this.schema.getType(item);
|
|
181
|
-
if (type) {
|
|
182
|
-
functions = {
|
|
183
|
-
...functions,
|
|
184
|
-
...(type.getFields() || {}),
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
// Get function via name
|
|
190
|
-
return functions[name];
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Get type
|
|
194
|
-
*/
|
|
195
|
-
getType(name) {
|
|
196
|
-
return this.schema.getType(name);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Get (deep) type name
|
|
200
|
-
*/
|
|
201
|
-
getTypeName(type) {
|
|
202
|
-
if (type instanceof GraphQLInputObjectType ||
|
|
203
|
-
type instanceof GraphQLScalarType ||
|
|
204
|
-
type instanceof GraphQLEnumType) {
|
|
205
|
-
return type.name;
|
|
206
|
-
}
|
|
207
|
-
else if (type.type) {
|
|
208
|
-
return this.getTypeName(type.type);
|
|
209
|
-
}
|
|
210
|
-
else if (type.ofType) {
|
|
211
|
-
return this.getTypeName(type.ofType);
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return type.name;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Get deep type data
|
|
219
|
-
*/
|
|
220
|
-
getDeepType(type, prepared = {}, setMetaData = false) {
|
|
221
|
-
// Check type
|
|
222
|
-
if (!type) {
|
|
223
|
-
return type;
|
|
224
|
-
}
|
|
225
|
-
// Infinite regress protection
|
|
226
|
-
const typeName = this.getTypeName(type);
|
|
227
|
-
const graphQLType = GraphQLType.map({
|
|
228
|
-
type: this.getTypeName(type),
|
|
229
|
-
});
|
|
230
|
-
// Check prepared
|
|
231
|
-
if (typeof type === 'object') {
|
|
232
|
-
const preparedType = prepared[typeName];
|
|
233
|
-
// Work with cached type
|
|
234
|
-
if (preparedType) {
|
|
235
|
-
// Create a new object to protect own isXXX information
|
|
236
|
-
const clone = Object.assign({}, preparedType);
|
|
237
|
-
// But use fields as reference to get future changes via prepared caching
|
|
238
|
-
clone.fields = preparedType.fields;
|
|
239
|
-
// Disable meta flags for sub objects
|
|
240
|
-
if (type?.type instanceof GraphQLInputObjectType ||
|
|
241
|
-
(type?.type instanceof GraphQLNonNull && type?.type?.ofType instanceof GraphQLInputObjectType && setMetaData)) {
|
|
242
|
-
setMetaData = false;
|
|
243
|
-
}
|
|
244
|
-
// Check for meta flags
|
|
245
|
-
if (type.type && setMetaData) {
|
|
246
|
-
if (type.type instanceof GraphQLNonNull) {
|
|
247
|
-
clone.isRequired = true;
|
|
248
|
-
if (type.type.ofType instanceof GraphQLList) {
|
|
249
|
-
clone.isList = true;
|
|
250
|
-
clone.isItemRequired = type.type.ofType.ofType instanceof GraphQLNonNull;
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
clone.isList = false;
|
|
254
|
-
clone.isItemRequired = false;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
clone.isRequired = false;
|
|
259
|
-
// List first
|
|
260
|
-
if (type.type instanceof GraphQLList) {
|
|
261
|
-
clone.isList = true;
|
|
262
|
-
clone.isItemRequired = type.ofType instanceof GraphQLNonNull;
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
clone.isList = false;
|
|
266
|
-
clone.isItemRequired = false;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
return clone;
|
|
271
|
-
}
|
|
272
|
-
// Set prepared cache for GraphQL types
|
|
273
|
-
// (type names start with uppercase letters as opposed to property names that start with lowercase letters)
|
|
274
|
-
if (type.name && type.name[0].toUpperCase() === type.name[0] && !prepared[type.name]) {
|
|
275
|
-
prepared[type.name] = graphQLType;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
// Search deeper
|
|
279
|
-
if (type.ofType) {
|
|
280
|
-
const ofTypeResult = this.getDeepType(type.ofType, prepared, setMetaData);
|
|
281
|
-
Object.assign(graphQLType, ofTypeResult);
|
|
282
|
-
return graphQLType;
|
|
283
|
-
}
|
|
284
|
-
// Process fields
|
|
285
|
-
if (type._fields) {
|
|
286
|
-
const fields = {};
|
|
287
|
-
for (const [key, value] of Object.entries(type._fields)) {
|
|
288
|
-
fields[key] = this.getDeepType(value, prepared, true);
|
|
289
|
-
}
|
|
290
|
-
// Assign and not replace to preserve updates in the cache
|
|
291
|
-
Object.assign(graphQLType.fields, fields);
|
|
292
|
-
return graphQLType;
|
|
293
|
-
}
|
|
294
|
-
// Process type
|
|
295
|
-
if (type.type) {
|
|
296
|
-
const typeResult = this.getDeepType(type.type, prepared, setMetaData);
|
|
297
|
-
// Disable meta flags for sub objects
|
|
298
|
-
if (type?.type instanceof GraphQLInputObjectType ||
|
|
299
|
-
(type?.type instanceof GraphQLNonNull && type?.type?.ofType instanceof GraphQLInputObjectType && setMetaData)) {
|
|
300
|
-
setMetaData = false;
|
|
301
|
-
}
|
|
302
|
-
// Check for meta flags
|
|
303
|
-
if (setMetaData) {
|
|
304
|
-
if (type.type instanceof GraphQLNonNull) {
|
|
305
|
-
typeResult.isRequired = true;
|
|
306
|
-
if (type.type.ofType instanceof GraphQLList) {
|
|
307
|
-
typeResult.isList = true;
|
|
308
|
-
typeResult.isItemRequired = type.type.ofType.ofType instanceof GraphQLNonNull;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
typeResult.isList = false;
|
|
312
|
-
typeResult.isItemRequired = false;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
typeResult.isRequired = false;
|
|
317
|
-
// List first
|
|
318
|
-
if (type.type instanceof GraphQLList) {
|
|
319
|
-
typeResult.isList = true;
|
|
320
|
-
typeResult.isItemRequired = type.ofType instanceof GraphQLNonNull;
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
typeResult.isList = false;
|
|
324
|
-
typeResult.isItemRequired = false;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
Object.assign(graphQLType, typeResult);
|
|
329
|
-
return graphQLType;
|
|
330
|
-
}
|
|
331
|
-
// Set enum values
|
|
332
|
-
if (!!type._values) {
|
|
333
|
-
graphQLType.isEnum = true;
|
|
334
|
-
for (const [key, value] of Object.entries(type._nameLookup)) {
|
|
335
|
-
if (!value.isDeprecated) {
|
|
336
|
-
graphQLType.validEnums.push(key);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
// Finish
|
|
341
|
-
return graphQLType;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1tZXRhLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvY2xhc3Nlcy9ncmFwaHFsLW1ldGEuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsV0FBVyxFQUVYLGNBQWMsRUFDZCxpQkFBaUIsR0FFbEIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUduRDs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBS3RCOztPQUVHO0lBQ0gsWUFBc0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVAzQyxnQkFBZ0I7UUFDTixTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQU16QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDakUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdkUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsd0JBQXdCLENBQUMsVUFBa0I7UUFDekMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN0RCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUs7UUFDdEIsTUFBTSxhQUFhLEdBQXNCLEVBQVMsQ0FBQztRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFN0MsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDaEUsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMxQixhQUFhLENBQUMsSUFBSSxDQUFDO29CQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMxQyxNQUFNLEVBQUUsS0FBSztvQkFDYixNQUFNLEVBQUUsS0FBSztvQkFDYixNQUFNLEVBQUUsS0FBSztvQkFDYixTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNuRixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDbkUsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQy9DLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztpQkFDakU7YUFDRjtZQUVELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ2pFO2FBQ0Y7WUFFRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtvQkFDL0MsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2lCQUNqRTthQUNGO1lBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQy9DLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztpQkFDcEU7YUFDRjtTQUNGO1FBRUQsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQ1QsOENBQThDLEVBQzlDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUNsRCxDQUFDO1NBQ0g7UUFFRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FDTCxZQUFvQixFQUNwQixVQUE0RSxFQUFFO1FBRTlFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHO1lBQzlCLEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLElBQUk7WUFDWixJQUFJLEVBQUUsU0FBUztZQUNmLEdBQUcsT0FBTztTQUNYLENBQUM7UUFFRixZQUFZO1FBQ1osSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksSUFBSSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxZQUFZO1FBQ1osSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUNQLFlBQW9CLEVBQ3BCLFVBQTRFLEVBQUU7UUFFOUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUc7WUFDOUIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxTQUFTO1lBQ2YsR0FBRyxPQUFPO1NBQ1gsQ0FBQztRQUVGLFlBQVk7UUFDWixJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsWUFBWTtRQUNaLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNPLFdBQVcsQ0FBQyxJQUFZLEVBQUUsVUFBeUMsRUFBRTtRQUM3RSxhQUFhO1FBQ2IsTUFBTSxNQUFNLEdBQUc7WUFDYixHQUFHLE9BQU87U0FDWCxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVuQiwwQkFBMEI7UUFDMUIsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2YsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsU0FBUyxHQUFJLElBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUN2QztTQUNGO1FBRUQsOEJBQThCO2FBQ3pCO1lBQ0gsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyRCxNQUFNLElBQUksR0FBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsU0FBUyxHQUFHO3dCQUNWLEdBQUcsU0FBUzt3QkFDWixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztxQkFDNUIsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCx3QkFBd0I7UUFDeEIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ08sT0FBTyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxXQUFXLENBQUMsSUFBUztRQUM3QixJQUNFLElBQUksWUFBWSxzQkFBc0I7WUFDdEMsSUFBSSxZQUFZLGlCQUFpQjtZQUNqQyxJQUFJLFlBQVksZUFBZSxFQUMvQjtZQUNBLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLFdBQVcsQ0FBQyxJQUFTLEVBQUUsV0FBZ0MsRUFBRSxFQUFFLFdBQVcsR0FBRyxLQUFLO1FBQ3RGLGFBQWE7UUFDYixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELDhCQUE4QjtRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQzdCLENBQUMsQ0FBQztRQUVILGlCQUFpQjtRQUNqQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM1QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFeEMsd0JBQXdCO1lBQ3hCLElBQUksWUFBWSxFQUFFO2dCQUNoQix1REFBdUQ7Z0JBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUU5Qyx5RUFBeUU7Z0JBQ3pFLEtBQUssQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFFbkMscUNBQXFDO2dCQUNyQyxJQUNFLElBQUksRUFBRSxJQUFJLFlBQVksc0JBQXNCO29CQUM1QyxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksY0FBYyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLHNCQUFzQixJQUFJLFdBQVcsQ0FBQyxFQUM3RztvQkFDQSxXQUFXLEdBQUcsS0FBSyxDQUFDO2lCQUNyQjtnQkFFRCx1QkFBdUI7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUU7b0JBQzVCLElBQUksSUFBSSxDQUFDLElBQUksWUFBWSxjQUFjLEVBQUU7d0JBQ3ZDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxZQUFZLFdBQVcsRUFBRTs0QkFDM0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7NEJBQ3BCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxZQUFZLGNBQWMsQ0FBQzt5QkFDMUU7NkJBQU07NEJBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7NEJBQ3JCLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO3lCQUM5QjtxQkFDRjt5QkFBTTt3QkFDTCxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQzt3QkFFekIsYUFBYTt3QkFDYixJQUFJLElBQUksQ0FBQyxJQUFJLFlBQVksV0FBVyxFQUFFOzRCQUNwQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs0QkFDcEIsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxZQUFZLGNBQWMsQ0FBQzt5QkFDOUQ7NkJBQU07NEJBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7NEJBQ3JCLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO3lCQUM5QjtxQkFDRjtpQkFDRjtnQkFFRCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsdUNBQXVDO1lBQ3ZDLDJHQUEyRztZQUMzRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEYsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7YUFDbkM7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN2RCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsMERBQTBEO1lBQzFELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQyxPQUFPLFdBQVcsQ0FBQztTQUNwQjtRQUVELGVBQWU7UUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRXRFLHFDQUFxQztZQUNyQyxJQUNFLElBQUksRUFBRSxJQUFJLFlBQVksc0JBQXNCO2dCQUM1QyxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksY0FBYyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLHNCQUFzQixJQUFJLFdBQVcsQ0FBQyxFQUM3RztnQkFDQSxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1lBRUQsdUJBQXVCO1lBQ3ZCLElBQUksV0FBVyxFQUFFO2dCQUNmLElBQUksSUFBSSxDQUFDLElBQUksWUFBWSxjQUFjLEVBQUU7b0JBQ3ZDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxZQUFZLFdBQVcsRUFBRTt3QkFDM0MsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ3pCLFVBQVUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxZQUFZLGNBQWMsQ0FBQztxQkFDL0U7eUJBQU07d0JBQ0wsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQzFCLFVBQVUsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO3FCQUNuQztpQkFDRjtxQkFBTTtvQkFDTCxVQUFVLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFFOUIsYUFBYTtvQkFDYixJQUFJLElBQUksQ0FBQyxJQUFJLFlBQVksV0FBVyxFQUFFO3dCQUNwQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDekIsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxZQUFZLGNBQWMsQ0FBQztxQkFDbkU7eUJBQU07d0JBQ0wsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQzFCLFVBQVUsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO3FCQUNuQztpQkFDRjthQUNGO1lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdkMsT0FBTyxXQUFXLENBQUM7U0FDcEI7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNsQixXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUMxQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzNELElBQUksQ0FBRSxLQUFhLENBQUMsWUFBWSxFQUFFO29CQUNoQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtTQUNGO1FBRUQsU0FBUztRQUNULE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEdyYXBoUUxFbnVtVHlwZSxcbiAgR3JhcGhRTElucHV0T2JqZWN0VHlwZSxcbiAgR3JhcGhRTExpc3QsXG4gIEdyYXBoUUxOYW1lZFR5cGUsXG4gIEdyYXBoUUxOb25OdWxsLFxuICBHcmFwaFFMU2NhbGFyVHlwZSxcbiAgR3JhcGhRTFNjaGVtYSxcbn0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4vaGVscGVyLmNsYXNzJztcbmltcG9ydCB7IEdyYXBoUUxUeXBlIH0gZnJvbSAnLi9ncmFwaHFsLXR5cGUuY2xhc3MnO1xuaW1wb3J0IHsgR3JhcGhxbENydWRUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLWNydWQtdHlwZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEdyYXBoUUwgbWV0YVxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRTE1ldGEge1xuICAvLyBGcm96ZW4gY2FjaGVzXG4gIHByb3RlY3RlZCBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHByb3RlY3RlZCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvKipcbiAgICogSW50ZWdyYXRlIHNjaGVtYVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNjaGVtYTogR3JhcGhRTFNjaGVtYSkge1xuICAgIGlmICghc2NoZW1hKSB7XG4gICAgICB0aHJvdyBFcnJvcignTWlzc2luZyBzY2hlbWEnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIG9iamVjdCB3aXRoIEdyYXBoUUxSZXF1ZXN0VHlwZSAob3BlcmF0aW9uIHR5cGUpIGFzIGtleXMgYW5kIG1ldGhvZCAoZmllbGRzKSBuYW1lcyBhcyB2YWx1ZVxuICAgKi9cbiAgZ2V0TWV0aG9kTmFtZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLmdldFF1ZXJ5VHlwZSgpPy5nZXRGaWVsZHMoKSB8fCB7fSksXG4gICAgICBtdXRhdGlvbjogT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZ2V0TXV0YXRpb25UeXBlKCk/LmdldEZpZWxkcygpIHx8IHt9KSxcbiAgICAgIHN1YnNjcmlwdGlvbjogT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZ2V0U3Vic2NyaXB0aW9uVHlwZSgpPy5nZXRGaWVsZHMoKSB8fCB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR3JhcGhRTFJlcXVlc3RUeXBlcyAob3BlcmF0aW9uIHR5cGVzKSB2aWEgbWV0aG9kIChmaWVsZCkgbmFtZVxuICAgKi9cbiAgZ2V0UmVxdWVzdFR5cGVzVmlhTWV0aG9kKG1ldGhvZE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBtZXRob2ROYW1lcyA9IHRoaXMuZ2V0TWV0aG9kTmFtZXMoKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRob2ROYW1lcykpIHtcbiAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhtZXRob2ROYW1lKSkge1xuICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdlJ3JlIGdvaW5nIHRvIGdldCB0aGUgcXVlcnkgYW5kIG11dGF0aW9uIHR5cGVzIGZyb20gdGhlIHNjaGVtYSwgdGhlbiB3ZSdyZSBnb2luZyB0byBsb29wIHRocm91Z2ggdGhlIGZpZWxkcyBvZiBlYWNoXG4gICAqIHR5cGUgYW5kIGNoZWNrIGlmIHRoZSBmaWVsZCBuYW1lIHN0YXJ0cyB3aXRoIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBvciBgZGVsZXRlYC4gSWYgaXQgZG9lcywgd2UncmUgZ29pbmcgdG8gYWRkXG4gICAqIHRoZSBtb2RlbCBuYW1lIHRvIHRoZSBgcG9zc2libGVUeXBlc2AgYXJyYXlcbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2RlbCwgYW5kIHRoZSBDUlVEIG9wZXJhdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGF0IG1vZGVsLlxuICAgKi9cbiAgZ2V0VHlwZXMobG9nZ2luZyA9IGZhbHNlKTogR3JhcGhxbENydWRUeXBlW10ge1xuICAgIGNvbnN0IHBvc3NpYmxlVHlwZXM6IEdyYXBocWxDcnVkVHlwZVtdID0gW10gYXMgYW55O1xuICAgIGNvbnN0IG11dGF0aW9uVHlwZSA9IHRoaXMuc2NoZW1hLmdldE11dGF0aW9uVHlwZSgpO1xuICAgIGNvbnN0IHF1ZXJ5VHlwZSA9IHRoaXMuc2NoZW1hLmdldFF1ZXJ5VHlwZSgpO1xuXG4gICAgaWYgKGxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdHcmFwaFFMTWV0YTo6Z2V0VHlwZXMtPnF1ZXJ5VHlwZUZpZWxkcycsIHF1ZXJ5VHlwZS5nZXRGaWVsZHMoKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocXVlcnlUeXBlLmdldEZpZWxkcygpKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdmaW5kJykpIHtcbiAgICAgICAgcG9zc2libGVUeXBlcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBrZXkuc3BsaXQoJ2ZpbmQnKS5wb3AoKS5zbGljZSgwLCAtMSksXG4gICAgICAgICAgY3JlYXRlOiBmYWxzZSxcbiAgICAgICAgICB1cGRhdGU6IGZhbHNlLFxuICAgICAgICAgIGRlbGV0ZTogZmFsc2UsXG4gICAgICAgICAgZHVwbGljYXRlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdHcmFwaFFMTWV0YTo6Z2V0VHlwZXMtPm11dGF0aW9uVHlwZUZpZWxkcycsIG11dGF0aW9uVHlwZS5nZXRGaWVsZHMoKSk7XG4gICAgICBjb25zb2xlLmxvZygnR3JhcGhRTE1ldGE6OmdldFR5cGVzLT5wb3NzaWJsZVR5cGVzJywgcG9zc2libGVUeXBlcyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobXV0YXRpb25UeXBlLmdldEZpZWxkcygpKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdjcmVhdGUnKSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGtleS5zcGxpdCgnY3JlYXRlJykucG9wKCk7XG4gICAgICAgIGlmIChwb3NzaWJsZVR5cGVzLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbW9kZWwpKSB7XG4gICAgICAgICAgcG9zc2libGVUeXBlcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG1vZGVsKS5jcmVhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgndXBkYXRlJykpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBrZXkuc3BsaXQoJ3VwZGF0ZScpLnBvcCgpO1xuICAgICAgICBpZiAocG9zc2libGVUeXBlcy5maW5kKChlKSA9PiBlLm5hbWUgPT09IG1vZGVsKSkge1xuICAgICAgICAgIHBvc3NpYmxlVHlwZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBtb2RlbCkudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2RlbGV0ZScpKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0ga2V5LnNwbGl0KCdkZWxldGUnKS5wb3AoKTtcbiAgICAgICAgaWYgKHBvc3NpYmxlVHlwZXMuZmluZCgoZSkgPT4gZS5uYW1lID09PSBtb2RlbCkpIHtcbiAgICAgICAgICBwb3NzaWJsZVR5cGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gbW9kZWwpLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdkdXBsaWNhdGUnKSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGtleS5zcGxpdCgnZHVwbGljYXRlJykucG9wKCk7XG4gICAgICAgIGlmIChwb3NzaWJsZVR5cGVzLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbW9kZWwpKSB7XG4gICAgICAgICAgcG9zc2libGVUeXBlcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG1vZGVsKS5kdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdHcmFwaFFMTWV0YTo6Z2V0VHlwZXMtPnBvc3NpYmxlVHlwZXMnLCBwb3NzaWJsZVR5cGVzKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnR3JhcGhRTE1ldGE6OmdldFR5cGVzLT5maWx0ZXJlZFBvc3NpYmxlVHlwZXMnLFxuICAgICAgICBwb3NzaWJsZVR5cGVzLmZpbHRlcigoZSkgPT4gZS5jcmVhdGUgfHwgZS51cGRhdGUpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVR5cGVzLmZpbHRlcigoZSkgPT4gZS5jcmVhdGUgfHwgZS51cGRhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcmd1bWVudHMgb2YgR3JhcGhRTCBmdW5jdGlvblxuICAgKi9cbiAgZ2V0QXJncyhcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGNhY2hlPzogYm9vbGVhbjsgZnJlZXplPzogYm9vbGVhbjsgdHlwZT86IEdyYXBoUUxSZXF1ZXN0VHlwZSB9ID0ge31cbiAgKTogR3JhcGhRTFR5cGUge1xuICAgIGNvbnN0IHsgY2FjaGUsIGZyZWV6ZSwgdHlwZSB9ID0ge1xuICAgICAgY2FjaGU6IHRydWUsXG4gICAgICBmcmVlemU6IHRydWUsXG4gICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBHZXQgY2FjaGVcbiAgICBpZiAoY2FjaGUgJiYgZnJlZXplKSB7XG4gICAgICBjb25zdCBhcmdzID0gdGhpcy5hcmdzW2Z1bmN0aW9uTmFtZSArIHR5cGVdO1xuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZnVuYyA9IHRoaXMuZ2V0RnVuY3Rpb24oZnVuY3Rpb25OYW1lLCB7IHR5cGUgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEdyYXBoUUxUeXBlKCk7XG4gICAgaWYgKGZ1bmM/LmFyZ3MpIHtcbiAgICAgIGZ1bmMuYXJncy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIHJlc3VsdC5maWVsZHNbaXRlbS5uYW1lXSA9IHRoaXMuZ2V0RGVlcFR5cGUoaXRlbS50eXBlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNldCBjYWNoZVxuICAgIGlmIChmcmVlemUpIHtcbiAgICAgIHRoaXMuYXJnc1tmdW5jdGlvbk5hbWUgKyB0eXBlXSA9IEhlbHBlci5kZWVwRnJlZXplKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRzIG9mIEdyYXBoUUwgZnVuY3Rpb25cbiAgICovXG4gIGdldEZpZWxkcyhcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGNhY2hlPzogYm9vbGVhbjsgZnJlZXplPzogYm9vbGVhbjsgdHlwZT86IEdyYXBoUUxSZXF1ZXN0VHlwZSB9ID0ge31cbiAgKTogR3JhcGhRTFR5cGUge1xuICAgIGNvbnN0IHsgY2FjaGUsIGZyZWV6ZSwgdHlwZSB9ID0ge1xuICAgICAgY2FjaGU6IHRydWUsXG4gICAgICBmcmVlemU6IHRydWUsXG4gICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBHZXQgY2FjaGVcbiAgICBpZiAoY2FjaGUgJiYgZnJlZXplKSB7XG4gICAgICBjb25zdCBhcmdzID0gdGhpcy5maWVsZHNbZnVuY3Rpb25OYW1lICsgdHlwZV07XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmdW5jID0gdGhpcy5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0RGVlcFR5cGUoZnVuYy50eXBlKTtcblxuICAgIC8vIFNldCBjYWNoZVxuICAgIGlmIChmcmVlemUpIHtcbiAgICAgIHRoaXMuZmllbGRzW2Z1bmN0aW9uTmFtZSArIHR5cGVdID0gSGVscGVyLmRlZXBGcmVlemUocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBHcmFwaFFMIGZ1bmN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0RnVuY3Rpb24obmFtZTogc3RyaW5nLCBvcHRpb25zOiB7IHR5cGU/OiBHcmFwaFFMUmVxdWVzdFR5cGUgfSA9IHt9KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgLy8gU2V0IGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEluaXQgcG9zc2libGUgZnVuY3Rpb25zXG4gICAgbGV0IGZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gSWYgZnVuY3Rpb24gdHlwZSBpcyBzZXRcbiAgICBpZiAoY29uZmlnLnR5cGUpIHtcbiAgICAgIGNvbnN0IGdyYXBoUUxUeXBlID0gY29uZmlnLnR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjb25maWcudHlwZS5zbGljZSgxKTtcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnNjaGVtYS5nZXRUeXBlKGdyYXBoUUxUeXBlKTtcbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGZ1bmN0aW9ucyA9ICh0eXBlIGFzIGFueSkuZ2V0RmllbGRzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZnVuY3Rpb24gdHlwZSBpcyBub3Qgc2V0XG4gICAgZWxzZSB7XG4gICAgICBbJ1N1YnNjcmlwdGlvbicsICdNdXRhdGlvbicsICdRdWVyeSddLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZTogYW55ID0gdGhpcy5zY2hlbWEuZ2V0VHlwZShpdGVtKTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICBmdW5jdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5mdW5jdGlvbnMsXG4gICAgICAgICAgICAuLi4odHlwZS5nZXRGaWVsZHMoKSB8fCB7fSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZ1bmN0aW9uIHZpYSBuYW1lXG4gICAgcmV0dXJuIGZ1bmN0aW9uc1tuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFR5cGUobmFtZTogc3RyaW5nKTogR3JhcGhRTE5hbWVkVHlwZSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5nZXRUeXBlKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCAoZGVlcCkgdHlwZSBuYW1lXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VHlwZU5hbWUodHlwZTogYW55KSB7XG4gICAgaWYgKFxuICAgICAgdHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxJbnB1dE9iamVjdFR5cGUgfHxcbiAgICAgIHR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMU2NhbGFyVHlwZSB8fFxuICAgICAgdHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxFbnVtVHlwZVxuICAgICkge1xuICAgICAgcmV0dXJuIHR5cGUubmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUudHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZU5hbWUodHlwZS50eXBlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUub2ZUeXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUeXBlTmFtZSh0eXBlLm9mVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWVwIHR5cGUgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERlZXBUeXBlKHR5cGU6IGFueSwgcHJlcGFyZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgc2V0TWV0YURhdGEgPSBmYWxzZSk6IEdyYXBoUUxUeXBlIHtcbiAgICAvLyBDaGVjayB0eXBlXG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICAvLyBJbmZpbml0ZSByZWdyZXNzIHByb3RlY3Rpb25cbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMuZ2V0VHlwZU5hbWUodHlwZSk7XG4gICAgY29uc3QgZ3JhcGhRTFR5cGUgPSBHcmFwaFFMVHlwZS5tYXAoe1xuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlTmFtZSh0eXBlKSxcbiAgICB9KTtcblxuICAgIC8vIENoZWNrIHByZXBhcmVkXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgcHJlcGFyZWRUeXBlID0gcHJlcGFyZWRbdHlwZU5hbWVdO1xuXG4gICAgICAvLyBXb3JrIHdpdGggY2FjaGVkIHR5cGVcbiAgICAgIGlmIChwcmVwYXJlZFR5cGUpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCB0byBwcm90ZWN0IG93biBpc1hYWCBpbmZvcm1hdGlvblxuICAgICAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIHByZXBhcmVkVHlwZSk7XG5cbiAgICAgICAgLy8gQnV0IHVzZSBmaWVsZHMgYXMgcmVmZXJlbmNlIHRvIGdldCBmdXR1cmUgY2hhbmdlcyB2aWEgcHJlcGFyZWQgY2FjaGluZ1xuICAgICAgICBjbG9uZS5maWVsZHMgPSBwcmVwYXJlZFR5cGUuZmllbGRzO1xuXG4gICAgICAgIC8vIERpc2FibGUgbWV0YSBmbGFncyBmb3Igc3ViIG9iamVjdHNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGU/LnR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMSW5wdXRPYmplY3RUeXBlIHx8XG4gICAgICAgICAgKHR5cGU/LnR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMTm9uTnVsbCAmJiB0eXBlPy50eXBlPy5vZlR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMSW5wdXRPYmplY3RUeXBlICYmIHNldE1ldGFEYXRhKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRNZXRhRGF0YSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIG1ldGEgZmxhZ3NcbiAgICAgICAgaWYgKHR5cGUudHlwZSAmJiBzZXRNZXRhRGF0YSkge1xuICAgICAgICAgIGlmICh0eXBlLnR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMTm9uTnVsbCkge1xuICAgICAgICAgICAgY2xvbmUuaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodHlwZS50eXBlLm9mVHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxMaXN0KSB7XG4gICAgICAgICAgICAgIGNsb25lLmlzTGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgIGNsb25lLmlzSXRlbVJlcXVpcmVkID0gdHlwZS50eXBlLm9mVHlwZS5vZlR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMTm9uTnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsb25lLmlzTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICBjbG9uZS5pc0l0ZW1SZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbG9uZS5pc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIExpc3QgZmlyc3RcbiAgICAgICAgICAgIGlmICh0eXBlLnR5cGUgaW5zdGFuY2VvZiBHcmFwaFFMTGlzdCkge1xuICAgICAgICAgICAgICBjbG9uZS5pc0xpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICBjbG9uZS5pc0l0ZW1SZXF1aXJlZCA9IHR5cGUub2ZUeXBlIGluc3RhbmNlb2YgR3JhcGhRTE5vbk51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbG9uZS5pc0xpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY2xvbmUuaXNJdGVtUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBwcmVwYXJlZCBjYWNoZSBmb3IgR3JhcGhRTCB0eXBlc1xuICAgICAgLy8gKHR5cGUgbmFtZXMgc3RhcnQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycyBhcyBvcHBvc2VkIHRvIHByb3BlcnR5IG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBsb3dlcmNhc2UgbGV0dGVycylcbiAgICAgIGlmICh0eXBlLm5hbWUgJiYgdHlwZS5uYW1lWzBdLnRvVXBwZXJDYXNlKCkgPT09IHR5cGUubmFtZVswXSAmJiAhcHJlcGFyZWRbdHlwZS5uYW1lXSkge1xuICAgICAgICBwcmVwYXJlZFt0eXBlLm5hbWVdID0gZ3JhcGhRTFR5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGRlZXBlclxuICAgIGlmICh0eXBlLm9mVHlwZSkge1xuICAgICAgY29uc3Qgb2ZUeXBlUmVzdWx0ID0gdGhpcy5nZXREZWVwVHlwZSh0eXBlLm9mVHlwZSwgcHJlcGFyZWQsIHNldE1ldGFEYXRhKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ3JhcGhRTFR5cGUsIG9mVHlwZVJlc3VsdCk7XG4gICAgICByZXR1cm4gZ3JhcGhRTFR5cGU7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBmaWVsZHNcbiAgICBpZiAodHlwZS5fZmllbGRzKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGUuX2ZpZWxkcykpIHtcbiAgICAgICAgZmllbGRzW2tleV0gPSB0aGlzLmdldERlZXBUeXBlKHZhbHVlLCBwcmVwYXJlZCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzc2lnbiBhbmQgbm90IHJlcGxhY2UgdG8gcHJlc2VydmUgdXBkYXRlcyBpbiB0aGUgY2FjaGVcbiAgICAgIE9iamVjdC5hc3NpZ24oZ3JhcGhRTFR5cGUuZmllbGRzLCBmaWVsZHMpO1xuICAgICAgcmV0dXJuIGdyYXBoUUxUeXBlO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgdHlwZVxuICAgIGlmICh0eXBlLnR5cGUpIHtcbiAgICAgIGNvbnN0IHR5cGVSZXN1bHQgPSB0aGlzLmdldERlZXBUeXBlKHR5cGUudHlwZSwgcHJlcGFyZWQsIHNldE1ldGFEYXRhKTtcblxuICAgICAgLy8gRGlzYWJsZSBtZXRhIGZsYWdzIGZvciBzdWIgb2JqZWN0c1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlPy50eXBlIGluc3RhbmNlb2YgR3JhcGhRTElucHV0T2JqZWN0VHlwZSB8fFxuICAgICAgICAodHlwZT8udHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxOb25OdWxsICYmIHR5cGU/LnR5cGU/Lm9mVHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxJbnB1dE9iamVjdFR5cGUgJiYgc2V0TWV0YURhdGEpXG4gICAgICApIHtcbiAgICAgICAgc2V0TWV0YURhdGEgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIG1ldGEgZmxhZ3NcbiAgICAgIGlmIChzZXRNZXRhRGF0YSkge1xuICAgICAgICBpZiAodHlwZS50eXBlIGluc3RhbmNlb2YgR3JhcGhRTE5vbk51bGwpIHtcbiAgICAgICAgICB0eXBlUmVzdWx0LmlzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICh0eXBlLnR5cGUub2ZUeXBlIGluc3RhbmNlb2YgR3JhcGhRTExpc3QpIHtcbiAgICAgICAgICAgIHR5cGVSZXN1bHQuaXNMaXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHR5cGVSZXN1bHQuaXNJdGVtUmVxdWlyZWQgPSB0eXBlLnR5cGUub2ZUeXBlLm9mVHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxOb25OdWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlUmVzdWx0LmlzTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdHlwZVJlc3VsdC5pc0l0ZW1SZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eXBlUmVzdWx0LmlzUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIExpc3QgZmlyc3RcbiAgICAgICAgICBpZiAodHlwZS50eXBlIGluc3RhbmNlb2YgR3JhcGhRTExpc3QpIHtcbiAgICAgICAgICAgIHR5cGVSZXN1bHQuaXNMaXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHR5cGVSZXN1bHQuaXNJdGVtUmVxdWlyZWQgPSB0eXBlLm9mVHlwZSBpbnN0YW5jZW9mIEdyYXBoUUxOb25OdWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlUmVzdWx0LmlzTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdHlwZVJlc3VsdC5pc0l0ZW1SZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGdyYXBoUUxUeXBlLCB0eXBlUmVzdWx0KTtcbiAgICAgIHJldHVybiBncmFwaFFMVHlwZTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZW51bSB2YWx1ZXNcbiAgICBpZiAoISF0eXBlLl92YWx1ZXMpIHtcbiAgICAgIGdyYXBoUUxUeXBlLmlzRW51bSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0eXBlLl9uYW1lTG9va3VwKSkge1xuICAgICAgICBpZiAoISh2YWx1ZSBhcyBhbnkpLmlzRGVwcmVjYXRlZCkge1xuICAgICAgICAgIGdyYXBoUUxUeXBlLnZhbGlkRW51bXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmluaXNoXG4gICAgcmV0dXJuIGdyYXBoUUxUeXBlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Standard } from './standard.class';
|
|
2
|
-
/**
|
|
3
|
-
* GraphQL type
|
|
4
|
-
*/
|
|
5
|
-
export class GraphQLType extends Standard {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.type = '';
|
|
9
|
-
this.fields = {};
|
|
10
|
-
this.isRequired = false;
|
|
11
|
-
this.isItemRequired = false;
|
|
12
|
-
this.isList = false;
|
|
13
|
-
this.isEnum = false;
|
|
14
|
-
this.validEnums = [];
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC10eXBlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvY2xhc3Nlcy9ncmFwaHFsLXR5cGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxRQUFRO0lBQXpDOztRQUNFLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixXQUFNLEdBQWdDLEVBQUUsQ0FBQztRQUN6QyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsZUFBVSxHQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFuZGFyZCB9IGZyb20gJy4vc3RhbmRhcmQuY2xhc3MnO1xuXG4vKipcbiAqIEdyYXBoUUwgdHlwZVxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRTFR5cGUgZXh0ZW5kcyBTdGFuZGFyZCB7XG4gIHR5cGUgPSAnJztcbiAgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBHcmFwaFFMVHlwZT4gPSB7fTtcbiAgaXNSZXF1aXJlZCA9IGZhbHNlO1xuICBpc0l0ZW1SZXF1aXJlZCA9IGZhbHNlO1xuICBpc0xpc3QgPSBmYWxzZTtcbiAgaXNFbnVtID0gZmFsc2U7XG4gIHZhbGlkRW51bXM6IHN0cmluZ1tdID0gW107XG59XG4iXX0=
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export class Sort {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.sortOrder = 1;
|
|
4
|
-
this.collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Sorts clicked column
|
|
8
|
-
*/
|
|
9
|
-
startSort(property, order, type = '') {
|
|
10
|
-
if (order === 'desc') {
|
|
11
|
-
this.sortOrder = -1;
|
|
12
|
-
}
|
|
13
|
-
return (a, b) => {
|
|
14
|
-
if (type === 'date') {
|
|
15
|
-
return this.sortDate(new Date(a.latestStep[property]), new Date(b.latestStep[property]));
|
|
16
|
-
}
|
|
17
|
-
else if (type === 'position') {
|
|
18
|
-
return this.collator.compare(a.position.Value[property], b.position.Value[property]) * this.sortOrder;
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
return this.collator.compare(a[property], b[property]) * this.sortOrder;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Sorts dates
|
|
27
|
-
*/
|
|
28
|
-
sortDate(a, b) {
|
|
29
|
-
if (a < b) {
|
|
30
|
-
return -1 * this.sortOrder;
|
|
31
|
-
}
|
|
32
|
-
else if (a > b) {
|
|
33
|
-
return 1 * this.sortOrder;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
return 0 * this.sortOrder;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc2hhcmVkL2NsYXNzZXMvc29ydC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sSUFBSTtJQUFqQjtRQUNVLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBZ0NsRixDQUFDO0lBOUJDOztPQUVHO0lBQ0ksU0FBUyxDQUFDLFFBQWdCLEVBQUUsS0FBYSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ3pELElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNkLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRjtpQkFBTSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ3ZHO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDekU7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQzVCO2FBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDM0I7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDM0I7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgU29ydCB7XG4gIHByaXZhdGUgc29ydE9yZGVyID0gMTtcbiAgY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KTtcblxuICAvKipcbiAgICogU29ydHMgY2xpY2tlZCBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBzdGFydFNvcnQocHJvcGVydHk6IHN0cmluZywgb3JkZXI6IHN0cmluZywgdHlwZSA9ICcnKSB7XG4gICAgaWYgKG9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gLTE7XG4gICAgfVxuICAgIHJldHVybiAoYSwgYikgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3J0RGF0ZShuZXcgRGF0ZShhLmxhdGVzdFN0ZXBbcHJvcGVydHldKSwgbmV3IERhdGUoYi5sYXRlc3RTdGVwW3Byb3BlcnR5XSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncG9zaXRpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUoYS5wb3NpdGlvbi5WYWx1ZVtwcm9wZXJ0eV0sIGIucG9zaXRpb24uVmFsdWVbcHJvcGVydHldKSAqIHRoaXMuc29ydE9yZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZShhW3Byb3BlcnR5XSwgYltwcm9wZXJ0eV0pICogdGhpcy5zb3J0T3JkZXI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBkYXRlc1xuICAgKi9cbiAgcHJpdmF0ZSBzb3J0RGF0ZShhOiBEYXRlLCBiOiBEYXRlKSB7XG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICByZXR1cm4gLTEgKiB0aGlzLnNvcnRPcmRlcjtcbiAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICByZXR1cm4gMSAqIHRoaXMuc29ydE9yZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMCAqIHRoaXMuc29ydE9yZGVyO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
|
-
import { GraphQLService } from './graphql.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./storage.service";
|
|
6
|
-
import * as i2 from "./ws.service";
|
|
7
|
-
import * as i3 from "@angular/router";
|
|
8
|
-
/**
|
|
9
|
-
* Authentication service
|
|
10
|
-
*/
|
|
11
|
-
export class AuthService {
|
|
12
|
-
/**
|
|
13
|
-
* Constructor
|
|
14
|
-
*/
|
|
15
|
-
constructor(storageService, wsService, injector, router) {
|
|
16
|
-
this.storageService = storageService;
|
|
17
|
-
this.wsService = wsService;
|
|
18
|
-
this.injector = injector;
|
|
19
|
-
this.router = router;
|
|
20
|
-
// Subjects
|
|
21
|
-
this._currentUser = new BehaviorSubject(null);
|
|
22
|
-
this._token = new BehaviorSubject(null);
|
|
23
|
-
this._refreshToken = new BehaviorSubject(null);
|
|
24
|
-
this.loadFromStorage();
|
|
25
|
-
}
|
|
26
|
-
requestNewToken() {
|
|
27
|
-
return new Observable((subscriber) => {
|
|
28
|
-
this.injector
|
|
29
|
-
.get(GraphQLService)
|
|
30
|
-
.graphQl('refreshToken', {
|
|
31
|
-
fields: ['token', 'refreshToken'],
|
|
32
|
-
})
|
|
33
|
-
.subscribe({
|
|
34
|
-
next: (response) => {
|
|
35
|
-
this.token = response.token;
|
|
36
|
-
this.refreshToken = response.refreshToken;
|
|
37
|
-
subscriber.next(response);
|
|
38
|
-
subscriber.complete();
|
|
39
|
-
},
|
|
40
|
-
error: (err) => {
|
|
41
|
-
subscriber.error(err);
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
loadFromStorage() {
|
|
47
|
-
if (localStorage) {
|
|
48
|
-
this.token = this.storageService.load('token');
|
|
49
|
-
this.refreshToken = this.storageService.load('refreshToken');
|
|
50
|
-
this.currentUser = this.storageService.load('currentUser');
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Logout
|
|
55
|
-
*/
|
|
56
|
-
logout(redirect = true) {
|
|
57
|
-
return new Observable((subscriber) => {
|
|
58
|
-
this.injector
|
|
59
|
-
.get(GraphQLService)
|
|
60
|
-
.graphQl('logout', {
|
|
61
|
-
fields: [],
|
|
62
|
-
})
|
|
63
|
-
.subscribe({
|
|
64
|
-
next: () => {
|
|
65
|
-
this.clearSession(redirect);
|
|
66
|
-
subscriber.next(true);
|
|
67
|
-
subscriber.complete();
|
|
68
|
-
},
|
|
69
|
-
error: (err) => {
|
|
70
|
-
subscriber.error(err);
|
|
71
|
-
},
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
clearSession(redirect = true) {
|
|
76
|
-
this.storageService.remove(['token', 'refreshToken', 'currentUser']);
|
|
77
|
-
this.currentUser = null;
|
|
78
|
-
this.token = null;
|
|
79
|
-
this.refreshToken = null;
|
|
80
|
-
if (redirect) {
|
|
81
|
-
this.router.navigate(['/auth']);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// #################################################################
|
|
85
|
-
// Current User
|
|
86
|
-
// #################################################################
|
|
87
|
-
get currentUser() {
|
|
88
|
-
if (!localStorage) {
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
return this._currentUser.value;
|
|
92
|
-
}
|
|
93
|
-
set currentUser(user) {
|
|
94
|
-
this._currentUser.next(user);
|
|
95
|
-
this.storageService.save('currentUser', user);
|
|
96
|
-
}
|
|
97
|
-
get currentUserObservable() {
|
|
98
|
-
return this._currentUser.asObservable();
|
|
99
|
-
}
|
|
100
|
-
// #################################################################
|
|
101
|
-
// Token
|
|
102
|
-
// #################################################################
|
|
103
|
-
get token() {
|
|
104
|
-
if (!localStorage) {
|
|
105
|
-
return undefined;
|
|
106
|
-
}
|
|
107
|
-
return this._token.value;
|
|
108
|
-
}
|
|
109
|
-
set token(token) {
|
|
110
|
-
this._token.next(token);
|
|
111
|
-
this.storageService.save('token', token);
|
|
112
|
-
this.wsService.reconnect();
|
|
113
|
-
}
|
|
114
|
-
get tokenObservable() {
|
|
115
|
-
if (!this._token.value) {
|
|
116
|
-
this.loadFromStorage();
|
|
117
|
-
}
|
|
118
|
-
return this._token.asObservable();
|
|
119
|
-
}
|
|
120
|
-
// #################################################################
|
|
121
|
-
// refreshToken
|
|
122
|
-
// #################################################################
|
|
123
|
-
get refreshToken() {
|
|
124
|
-
if (!localStorage) {
|
|
125
|
-
return undefined;
|
|
126
|
-
}
|
|
127
|
-
return this._refreshToken.value;
|
|
128
|
-
}
|
|
129
|
-
set refreshToken(refreshToken) {
|
|
130
|
-
this._refreshToken.next(refreshToken);
|
|
131
|
-
this.storageService.save('refreshToken', refreshToken);
|
|
132
|
-
}
|
|
133
|
-
get refreshTokenObservable() {
|
|
134
|
-
if (!this._refreshToken.value) {
|
|
135
|
-
this.loadFromStorage();
|
|
136
|
-
}
|
|
137
|
-
return this._refreshToken.asObservable();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AuthService, deps: [{ token: i1.StorageService }, { token: i2.WsService }, { token: i0.Injector }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
141
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AuthService, decorators: [{
|
|
143
|
-
type: Injectable,
|
|
144
|
-
args: [{
|
|
145
|
-
providedIn: 'root',
|
|
146
|
-
}]
|
|
147
|
-
}], ctorParameters: function () { return [{ type: i1.StorageService }, { type: i2.WsService }, { type: i0.Injector }, { type: i3.Router }]; } });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUduRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBTXRCOztPQUVHO0lBQ0gsWUFDVSxjQUE4QixFQUM5QixTQUFvQixFQUNwQixRQUFrQixFQUNsQixNQUFjO1FBSGQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWnhCLFdBQVc7UUFDSCxpQkFBWSxHQUErQixJQUFJLGVBQWUsQ0FBWSxJQUFJLENBQUMsQ0FBQztRQUNoRixXQUFNLEdBQTRCLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3BFLGtCQUFhLEdBQTRCLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBV2pGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxVQUFVLENBQTBDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDNUUsSUFBSSxDQUFDLFFBQVE7aUJBQ1YsR0FBRyxDQUFDLGNBQWMsQ0FBQztpQkFDbkIsT0FBTyxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQzthQUNsQyxDQUFDO2lCQUNELFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVB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QUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzt3R0F2SlUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2ljVXNlciB9IGZyb20gJy4uL2NsYXNzZXMvYmFzaWMtdXNlci5jbGFzcyc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFdzU2VydmljZSB9IGZyb20gJy4vd3Muc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaFFMU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24gc2VydmljZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAvLyBTdWJqZWN0c1xuICBwcml2YXRlIF9jdXJyZW50VXNlcjogQmVoYXZpb3JTdWJqZWN0PEJhc2ljVXNlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2ljVXNlcj4obnVsbCk7XG4gIHByaXZhdGUgX3Rva2VuOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgcHJpdmF0ZSBfcmVmcmVzaFRva2VuOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgd3NTZXJ2aWNlOiBXc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLmxvYWRGcm9tU3RvcmFnZSgpO1xuICB9XG5cbiAgcmVxdWVzdE5ld1Rva2VuKCk6IE9ic2VydmFibGU8eyB0b2tlbjogc3RyaW5nOyByZWZyZXNoVG9rZW46IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHsgdG9rZW46IHN0cmluZzsgcmVmcmVzaFRva2VuOiBzdHJpbmcgfT4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIHRoaXMuaW5qZWN0b3JcbiAgICAgICAgLmdldChHcmFwaFFMU2VydmljZSlcbiAgICAgICAgLmdyYXBoUWwoJ3JlZnJlc2hUb2tlbicsIHtcbiAgICAgICAgICBmaWVsZHM6IFsndG9rZW4nLCAncmVmcmVzaFRva2VuJ10sXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHJlc3BvbnNlLnRva2VuO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZXNwb25zZS5yZWZyZXNoVG9rZW47XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRGcm9tU3RvcmFnZSgpIHtcbiAgICBpZiAobG9jYWxTdG9yYWdlKSB7XG4gICAgICB0aGlzLnRva2VuID0gdGhpcy5zdG9yYWdlU2VydmljZS5sb2FkKCd0b2tlbicpIGFzIHN0cmluZztcbiAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gdGhpcy5zdG9yYWdlU2VydmljZS5sb2FkKCdyZWZyZXNoVG9rZW4nKSBhcyBzdHJpbmc7XG4gICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5zdG9yYWdlU2VydmljZS5sb2FkKCdjdXJyZW50VXNlcicpIGFzIEJhc2ljVXNlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9nb3V0XG4gICAqL1xuICBwdWJsaWMgbG9nb3V0KHJlZGlyZWN0ID0gdHJ1ZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgdGhpcy5pbmplY3RvclxuICAgICAgICAuZ2V0KEdyYXBoUUxTZXJ2aWNlKVxuICAgICAgICAuZ3JhcGhRbCgnbG9nb3V0Jywge1xuICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZXNzaW9uKHJlZGlyZWN0KTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhclNlc3Npb24ocmVkaXJlY3QgPSB0cnVlKSB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmUoWyd0b2tlbicsICdyZWZyZXNoVG9rZW4nLCAnY3VycmVudFVzZXInXSk7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IG51bGw7XG4gICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBudWxsO1xuXG4gICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hdXRoJ10pO1xuICAgIH1cbiAgfVxuXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIEN1cnJlbnQgVXNlclxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIGdldCBjdXJyZW50VXNlcigpOiBCYXNpY1VzZXIge1xuICAgIGlmICghbG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXNlci52YWx1ZTtcbiAgfVxuXG4gIHNldCBjdXJyZW50VXNlcih1c2VyOiBCYXNpY1VzZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50VXNlci5uZXh0KHVzZXIpO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZSgnY3VycmVudFVzZXInLCB1c2VyKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50VXNlck9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxCYXNpY1VzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFVzZXIuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICAvLyBUb2tlblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIGdldCB0b2tlbigpOiBzdHJpbmcge1xuICAgIGlmICghbG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5fdG9rZW4ubmV4dCh0b2tlbik7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlKCd0b2tlbicsIHRva2VuKTtcbiAgICB0aGlzLndzU2VydmljZS5yZWNvbm5lY3QoKTtcbiAgfVxuXG4gIGdldCB0b2tlbk9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuX3Rva2VuLnZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRGcm9tU3RvcmFnZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90b2tlbi5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIHJlZnJlc2hUb2tlblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIGdldCByZWZyZXNoVG9rZW4oKTogc3RyaW5nIHtcbiAgICBpZiAoIWxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZykge1xuICAgIHRoaXMuX3JlZnJlc2hUb2tlbi5uZXh0KHJlZnJlc2hUb2tlbik7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlKCdyZWZyZXNoVG9rZW4nLCByZWZyZXNoVG9rZW4pO1xuICB9XG5cbiAgZ2V0IHJlZnJlc2hUb2tlbk9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuX3JlZnJlc2hUb2tlbi52YWx1ZSkge1xuICAgICAgdGhpcy5sb2FkRnJvbVN0b3JhZ2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFRva2VuLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG59XG4iXX0=
|