@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.
Files changed (239) hide show
  1. package/base-components/base-components.module.d.ts +1 -2
  2. package/base-components/components/checkbox/checkbox.component.d.ts +1 -1
  3. package/base-components/components/delete-account/delete-account.component.d.ts +1 -1
  4. package/base-components/components/fab-button/fab-button.component.d.ts +1 -1
  5. package/base-components/components/input/input.component.d.ts +1 -1
  6. package/base-components/components/loading-bar/loading-bar.component.d.ts +1 -1
  7. package/base-components/components/model-form/model-form-base.component.d.ts +1 -1
  8. package/base-components/components/model-form/model-form.component.d.ts +1 -1
  9. package/base-components/components/model-form-sub/model-form-sub.component.d.ts +1 -1
  10. package/base-components/components/model-table/model-table.component.d.ts +1 -1
  11. package/base-components/components/refence-input/refence-input.component.d.ts +1 -1
  12. package/base-components/components/select/select.component.d.ts +1 -1
  13. package/base-components/components/skeleton-loader/skeleton-loader.component.d.ts +1 -1
  14. package/base-components/components/tags/tags.component.d.ts +1 -1
  15. package/base-components/components/textarea/textarea.component.d.ts +1 -1
  16. package/base-components/components/toast/toast.component.d.ts +1 -1
  17. package/base-components/components/upload-image/upload-image.component.d.ts +1 -1
  18. package/base-components/directives/context-menu.directive.d.ts +1 -1
  19. package/base-components/directives/sort.directive.d.ts +1 -1
  20. package/base-prototype/pages/login/login.component.d.ts +1 -1
  21. package/base-prototype/pages/profile/profile.component.d.ts +1 -1
  22. package/base-prototype/pages/set-password/set-password.component.d.ts +1 -1
  23. package/esm2022/base-cms/base-cms-routing.module.mjs +33 -0
  24. package/esm2022/base-cms/base-cms.module.mjs +61 -0
  25. package/esm2022/base-cms/pages/base-cms/base-cms.component.mjs +233 -0
  26. package/esm2022/base-components/base-components.module.mjs +123 -0
  27. package/esm2022/base-components/components/breadcrumb/breadcrumb.component.mjs +21 -0
  28. package/esm2022/base-components/components/change-password/change-password.component.mjs +96 -0
  29. package/esm2022/base-components/components/checkbox/checkbox.component.mjs +35 -0
  30. package/esm2022/base-components/components/delete-account/delete-account.component.mjs +61 -0
  31. package/esm2022/base-components/components/fab-button/fab-button.component.mjs +21 -0
  32. package/esm2022/base-components/components/input/input.component.mjs +72 -0
  33. package/esm2022/base-components/components/loading-bar/loading-bar.component.mjs +39 -0
  34. package/esm2022/base-components/components/model-form/model-form-base.component.mjs +145 -0
  35. package/esm2022/base-components/components/model-form/model-form.component.mjs +585 -0
  36. package/esm2022/base-components/components/model-form-sub/model-form-sub.component.mjs +111 -0
  37. package/esm2022/base-components/components/model-table/model-table.component.mjs +470 -0
  38. package/esm2022/base-components/components/refence-input/refence-input.component.mjs +273 -0
  39. package/esm2022/base-components/components/select/select.component.mjs +59 -0
  40. package/esm2022/base-components/components/skeleton-loader/skeleton-loader.component.mjs +32 -0
  41. package/esm2022/base-components/components/tags/tags.component.mjs +224 -0
  42. package/esm2022/base-components/components/textarea/textarea.component.mjs +76 -0
  43. package/esm2022/base-components/components/toast/toast.component.mjs +70 -0
  44. package/esm2022/base-components/components/upload-image/upload-image.component.mjs +343 -0
  45. package/esm2022/base-components/directives/back-button.directive.mjs +25 -0
  46. package/esm2022/base-components/directives/context-menu.directive.mjs +112 -0
  47. package/esm2022/base-components/directives/sort.directive.mjs +61 -0
  48. package/esm2022/base-components/directives/stop-propagation.directive.mjs +24 -0
  49. package/esm2022/base-components/pipes/ellipses.pipe.mjs +23 -0
  50. package/esm2022/base-prototype/base-prototype.module.mjs +54 -0
  51. package/esm2022/base-prototype/pages/email-verification/email-verification.component.mjs +62 -0
  52. package/esm2022/base-prototype/pages/forgot-password/forgot-password.component.mjs +75 -0
  53. package/esm2022/base-prototype/pages/login/login.component.mjs +111 -0
  54. package/esm2022/base-prototype/pages/profile/profile.component.mjs +86 -0
  55. package/esm2022/base-prototype/pages/register/register.component.mjs +94 -0
  56. package/esm2022/base-prototype/pages/set-password/set-password.component.mjs +90 -0
  57. package/esm2022/shared/classes/auth.class.mjs +14 -0
  58. package/esm2022/shared/classes/basic-user.class.mjs +49 -0
  59. package/esm2022/shared/classes/graphql-enum.class.mjs +10 -0
  60. package/esm2022/shared/classes/graphql-meta.class.mjs +345 -0
  61. package/esm2022/shared/classes/graphql-type.class.mjs +14 -0
  62. package/esm2022/shared/classes/sort.class.mjs +38 -0
  63. package/esm2022/shared/services/auth.service.mjs +153 -0
  64. package/esm2022/shared/services/breadcrumb.service.mjs +70 -0
  65. package/{esm2020 → esm2022}/shared/services/cms.service.mjs +7 -5
  66. package/esm2022/shared/services/file.service.mjs +87 -0
  67. package/esm2022/shared/services/forms.service.mjs +62 -0
  68. package/esm2022/shared/services/graphql-meta.service.mjs +133 -0
  69. package/esm2022/shared/services/graphql-plus.service.mjs +94 -0
  70. package/esm2022/shared/services/graphql.service.mjs +511 -0
  71. package/esm2022/shared/services/image.service.mjs +103 -0
  72. package/esm2022/shared/services/loader.service.mjs +79 -0
  73. package/esm2022/shared/services/navigation.service.mjs +39 -0
  74. package/esm2022/shared/services/scroll.service.mjs +208 -0
  75. package/esm2022/shared/services/storage.service.mjs +142 -0
  76. package/esm2022/shared/services/toast.service.mjs +40 -0
  77. package/esm2022/shared/services/user.service.mjs +161 -0
  78. package/esm2022/shared/services/ws.service.mjs +18 -0
  79. package/esm2022/src/base.module.mjs +98 -0
  80. package/esm2022/src/directives/lazy-load.directive.mjs +48 -0
  81. package/esm2022/src/directives/match-height.directive.mjs +92 -0
  82. package/esm2022/src/directives/resizable.directive.mjs +92 -0
  83. package/esm2022/src/functions/extract-files.function.mjs +87 -0
  84. package/esm2022/src/guards/auth.guard.mjs +84 -0
  85. package/esm2022/src/guards/can-deactivate.guard.mjs +17 -0
  86. package/esm2022/src/guards/logout.guard.mjs +35 -0
  87. package/esm2022/src/pipes/date-ago.pipe.mjs +64 -0
  88. package/esm2022/src/pipes/safe-html.pipe.mjs +23 -0
  89. package/esm2022/src/services/fullscreen.service.mjs +52 -0
  90. package/esm2022/src/services/seo.service.mjs +100 -0
  91. package/esm2022/src/services/theme.service.mjs +45 -0
  92. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs +41 -30
  93. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs.map +1 -1
  94. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs +419 -298
  95. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs.map +1 -1
  96. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs +126 -87
  97. package/{fesm2015 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  98. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs +164 -113
  99. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs.map +1 -1
  100. package/{fesm2020 → fesm2022}/lenne.tech-ng-base.mjs +108 -88
  101. package/fesm2022/lenne.tech-ng-base.mjs.map +1 -0
  102. package/package.json +23 -38
  103. package/src/directives/lazy-load.directive.d.ts +1 -1
  104. package/src/directives/match-height.directive.d.ts +1 -1
  105. package/src/directives/resizable.directive.d.ts +1 -1
  106. package/src/guards/auth.guard.d.ts +2 -2
  107. package/src/guards/can-deactivate.guard.d.ts +1 -2
  108. package/src/guards/logout.guard.d.ts +2 -2
  109. package/esm2020/base-cms/base-cms-routing.module.mjs +0 -32
  110. package/esm2020/base-cms/base-cms.module.mjs +0 -59
  111. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +0 -222
  112. package/esm2020/base-components/base-components.module.mjs +0 -123
  113. package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -18
  114. package/esm2020/base-components/components/change-password/change-password.component.mjs +0 -90
  115. package/esm2020/base-components/components/checkbox/checkbox.component.mjs +0 -31
  116. package/esm2020/base-components/components/delete-account/delete-account.component.mjs +0 -56
  117. package/esm2020/base-components/components/fab-button/fab-button.component.mjs +0 -21
  118. package/esm2020/base-components/components/input/input.component.mjs +0 -67
  119. package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +0 -35
  120. package/esm2020/base-components/components/model-form/model-form-base.component.mjs +0 -136
  121. package/esm2020/base-components/components/model-form/model-form.component.mjs +0 -564
  122. package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -102
  123. package/esm2020/base-components/components/model-table/model-table.component.mjs +0 -456
  124. package/esm2020/base-components/components/refence-input/refence-input.component.mjs +0 -261
  125. package/esm2020/base-components/components/select/select.component.mjs +0 -54
  126. package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -32
  127. package/esm2020/base-components/components/tags/tags.component.mjs +0 -218
  128. package/esm2020/base-components/components/textarea/textarea.component.mjs +0 -72
  129. package/esm2020/base-components/components/toast/toast.component.mjs +0 -68
  130. package/esm2020/base-components/components/upload-image/upload-image.component.mjs +0 -324
  131. package/esm2020/base-components/directives/back-button.directive.mjs +0 -23
  132. package/esm2020/base-components/directives/context-menu.directive.mjs +0 -108
  133. package/esm2020/base-components/directives/sort.directive.mjs +0 -57
  134. package/esm2020/base-components/directives/stop-propagation.directive.mjs +0 -23
  135. package/esm2020/base-components/pipes/ellipses.pipe.mjs +0 -22
  136. package/esm2020/base-prototype/base-prototype.module.mjs +0 -53
  137. package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +0 -55
  138. package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -67
  139. package/esm2020/base-prototype/pages/login/login.component.mjs +0 -102
  140. package/esm2020/base-prototype/pages/profile/profile.component.mjs +0 -81
  141. package/esm2020/base-prototype/pages/register/register.component.mjs +0 -86
  142. package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +0 -82
  143. package/esm2020/shared/classes/auth.class.mjs +0 -17
  144. package/esm2020/shared/classes/basic-user.class.mjs +0 -52
  145. package/esm2020/shared/classes/graphql-enum.class.mjs +0 -9
  146. package/esm2020/shared/classes/graphql-meta.class.mjs +0 -344
  147. package/esm2020/shared/classes/graphql-type.class.mjs +0 -17
  148. package/esm2020/shared/classes/sort.class.mjs +0 -40
  149. package/esm2020/shared/services/auth.service.mjs +0 -148
  150. package/esm2020/shared/services/breadcrumb.service.mjs +0 -68
  151. package/esm2020/shared/services/file.service.mjs +0 -84
  152. package/esm2020/shared/services/forms.service.mjs +0 -59
  153. package/esm2020/shared/services/graphql-meta.service.mjs +0 -123
  154. package/esm2020/shared/services/graphql-plus.service.mjs +0 -89
  155. package/esm2020/shared/services/graphql.service.mjs +0 -507
  156. package/esm2020/shared/services/image.service.mjs +0 -102
  157. package/esm2020/shared/services/loader.service.mjs +0 -79
  158. package/esm2020/shared/services/navigation.service.mjs +0 -36
  159. package/esm2020/shared/services/scroll.service.mjs +0 -179
  160. package/esm2020/shared/services/storage.service.mjs +0 -140
  161. package/esm2020/shared/services/toast.service.mjs +0 -41
  162. package/esm2020/shared/services/user.service.mjs +0 -155
  163. package/esm2020/shared/services/ws.service.mjs +0 -16
  164. package/esm2020/src/base.module.mjs +0 -97
  165. package/esm2020/src/directives/lazy-load.directive.mjs +0 -45
  166. package/esm2020/src/directives/match-height.directive.mjs +0 -84
  167. package/esm2020/src/directives/resizable.directive.mjs +0 -90
  168. package/esm2020/src/functions/extract-files.function.mjs +0 -84
  169. package/esm2020/src/guards/auth.guard.mjs +0 -80
  170. package/esm2020/src/guards/can-deactivate.guard.mjs +0 -16
  171. package/esm2020/src/guards/logout.guard.mjs +0 -32
  172. package/esm2020/src/pipes/date-ago.pipe.mjs +0 -65
  173. package/esm2020/src/pipes/safe-html.pipe.mjs +0 -21
  174. package/esm2020/src/services/fullscreen.service.mjs +0 -51
  175. package/esm2020/src/services/seo.service.mjs +0 -97
  176. package/esm2020/src/services/theme.service.mjs +0 -43
  177. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +0 -323
  178. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +0 -1
  179. package/fesm2015/lenne.tech-ng-base-base-components.mjs +0 -2866
  180. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +0 -1
  181. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +0 -496
  182. package/fesm2015/lenne.tech-ng-base-shared.mjs +0 -2750
  183. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +0 -1
  184. package/fesm2015/lenne.tech-ng-base.mjs +0 -905
  185. package/fesm2015/lenne.tech-ng-base.mjs.map +0 -1
  186. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
  187. package/fesm2020/lenne.tech-ng-base.mjs.map +0 -1
  188. /package/{esm2020 → esm2022}/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -0
  189. /package/{esm2020 → esm2022}/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -0
  190. /package/{esm2020 → esm2022}/base-cms/public-api.mjs +0 -0
  191. /package/{esm2020 → esm2022}/base-components/lenne.tech-ng-base-base-components.mjs +0 -0
  192. /package/{esm2020 → esm2022}/base-components/public-api.mjs +0 -0
  193. /package/{esm2020 → esm2022}/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -0
  194. /package/{esm2020 → esm2022}/base-prototype/public-api.mjs +0 -0
  195. /package/{esm2020 → esm2022}/lenne.tech-ng-base.mjs +0 -0
  196. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  197. /package/{esm2020 → esm2022}/shared/classes/helper.class.mjs +0 -0
  198. /package/{esm2020 → esm2022}/shared/classes/standard.class.mjs +0 -0
  199. /package/{esm2020 → esm2022}/shared/decorators/debounce.decorator.mjs +0 -0
  200. /package/{esm2020 → esm2022}/shared/enums/comparison-operator.enum.mjs +0 -0
  201. /package/{esm2020 → esm2022}/shared/enums/graphql-request-type.enum.mjs +0 -0
  202. /package/{esm2020 → esm2022}/shared/enums/logical-operator.enum.mjs +0 -0
  203. /package/{esm2020 → esm2022}/shared/enums/skeleton-type.enum.mjs +0 -0
  204. /package/{esm2020 → esm2022}/shared/enums/sort-order.enum.mjs +0 -0
  205. /package/{esm2020 → esm2022}/shared/enums/toast-type.enum.mjs +0 -0
  206. /package/{esm2020 → esm2022}/shared/functions/ws-client.function.mjs +0 -0
  207. /package/{esm2020 → esm2022}/shared/interfaces/base-module-config.interface.mjs +0 -0
  208. /package/{esm2020 → esm2022}/shared/interfaces/breadcrumb.interface.mjs +0 -0
  209. /package/{esm2020 → esm2022}/shared/interfaces/can-component-deactivate.interface.mjs +0 -0
  210. /package/{esm2020 → esm2022}/shared/interfaces/cms-enum-values.interface.mjs +0 -0
  211. /package/{esm2020 → esm2022}/shared/interfaces/cms-field-config.interface.mjs +0 -0
  212. /package/{esm2020 → esm2022}/shared/interfaces/cms-model-config.interface.mjs +0 -0
  213. /package/{esm2020 → esm2022}/shared/interfaces/cms-table-field.interface.mjs +0 -0
  214. /package/{esm2020 → esm2022}/shared/interfaces/combined-filter-input.interface.mjs +0 -0
  215. /package/{esm2020 → esm2022}/shared/interfaces/compress-options.interface.mjs +0 -0
  216. /package/{esm2020 → esm2022}/shared/interfaces/cropping-options.interface.mjs +0 -0
  217. /package/{esm2020 → esm2022}/shared/interfaces/field-object.interface.mjs +0 -0
  218. /package/{esm2020 → esm2022}/shared/interfaces/field.interface.mjs +0 -0
  219. /package/{esm2020 → esm2022}/shared/interfaces/filter-input.interface.mjs +0 -0
  220. /package/{esm2020 → esm2022}/shared/interfaces/find-args.interface.mjs +0 -0
  221. /package/{esm2020 → esm2022}/shared/interfaces/graphql-crud-type.interface.mjs +0 -0
  222. /package/{esm2020 → esm2022}/shared/interfaces/graphql-fields-object.interface.mjs +0 -0
  223. /package/{esm2020 → esm2022}/shared/interfaces/graphql-options.interface.mjs +0 -0
  224. /package/{esm2020 → esm2022}/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -0
  225. /package/{esm2020 → esm2022}/shared/interfaces/graphql-type-collection.interface.mjs +0 -0
  226. /package/{esm2020 → esm2022}/shared/interfaces/login-config.interface.mjs +0 -0
  227. /package/{esm2020 → esm2022}/shared/interfaces/single-filter-input.interface.mjs +0 -0
  228. /package/{esm2020 → esm2022}/shared/interfaces/sort-input.interface.mjs +0 -0
  229. /package/{esm2020 → esm2022}/shared/interfaces/time-components.interface.mjs +0 -0
  230. /package/{esm2020 → esm2022}/shared/interfaces/toast.interface.mjs +0 -0
  231. /package/{esm2020 → esm2022}/shared/lenne.tech-ng-base-shared.mjs +0 -0
  232. /package/{esm2020 → esm2022}/shared/public-api.mjs +0 -0
  233. /package/{esm2020 → esm2022}/shared/types/graphql-fields.type.mjs +0 -0
  234. /package/{esm2020 → esm2022}/shared/types/storage.type.mjs +0 -0
  235. /package/{esm2020 → esm2022}/shared/validators/email.validator.mjs +0 -0
  236. /package/{esm2020 → esm2022}/shared/validators/match.validator.mjs +0 -0
  237. /package/{esm2020 → esm2022}/shared/validators/secure-password.validator.mjs +0 -0
  238. /package/{esm2020 → esm2022}/src/decorators/auto-unsubscribe.decorator.mjs +0 -0
  239. /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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1tZXRhLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvY2xhc3Nlcy9ncmFwaHFsLW1ldGEuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsV0FBVyxFQUVYLGNBQWMsRUFDZCxpQkFBaUIsR0FFbEIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUduRDs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBS3RCOztPQUVHO0lBQ0gsWUFBc0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVAzQyxnQkFBZ0I7UUFDTixTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQU16QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDakUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdkUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoRixDQUFD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SSxDQUFDLE9BQU8sRUFBRTtZQUNsQixXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUMxQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzNELElBQUksQ0FBRSxLQUFhLENBQUMsWUFBWSxFQUFFO29CQUNoQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtTQUNGO1FBRUQsU0FBUztRQUNULE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEdyYXBoUUxFbnVtVHlwZSxcbiAgR3JhcGhRTElucHV0T2JqZWN0VHlwZSxcbiAgR3JhcGhRTExpc3QsXG4gIEdyYXBoUUxOYW1lZFR5cGUsXG4gIEdyYXBoUUxOb25OdWxsLFxuICBHcmFwaFFMU2NhbGFyVHlwZSxcbiAgR3JhcGhRTFNjaGVtYSxcbn0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4vaGVscGVyLmNsYXNzJztcbmltcG9ydCB7IEdyYXBoUUxUeXBlIH0gZnJvbSAnLi9ncmFwaHFsLXR5cGUuY2xhc3MnO1xuaW1wb3J0IHsgR3JhcGhxbENydWRUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLWNydWQtdHlwZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEdyYXBoUUwgbWV0YVxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRTE1ldGEge1xuICAvLyBGcm96ZW4gY2FjaGVzXG4gIHByb3RlY3RlZCBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+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=