@lenne.tech/ng-base 0.3.12 → 13.0.0

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