@lenne.tech/ng-base 15.0.0-beta-2 → 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 (241) 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 +17 -5
  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 +3 -2
  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/factories/apollo-options.factory.mjs +108 -0
  84. package/esm2022/src/functions/extract-files.function.mjs +87 -0
  85. package/esm2022/src/guards/auth.guard.mjs +84 -0
  86. package/esm2022/src/guards/can-deactivate.guard.mjs +17 -0
  87. package/esm2022/src/guards/logout.guard.mjs +35 -0
  88. package/esm2022/src/pipes/date-ago.pipe.mjs +64 -0
  89. package/esm2022/src/pipes/safe-html.pipe.mjs +23 -0
  90. package/esm2022/src/services/fullscreen.service.mjs +52 -0
  91. package/esm2022/src/services/seo.service.mjs +100 -0
  92. package/esm2022/src/services/theme.service.mjs +45 -0
  93. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs +42 -30
  94. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs.map +1 -1
  95. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs +467 -286
  96. package/fesm2022/lenne.tech-ng-base-base-components.mjs.map +1 -0
  97. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs +127 -87
  98. package/{fesm2015 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  99. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs +165 -113
  100. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs.map +1 -1
  101. package/{fesm2020 → fesm2022}/lenne.tech-ng-base.mjs +113 -90
  102. package/fesm2022/lenne.tech-ng-base.mjs.map +1 -0
  103. package/package.json +27 -42
  104. package/src/directives/lazy-load.directive.d.ts +1 -1
  105. package/src/directives/match-height.directive.d.ts +1 -1
  106. package/src/directives/resizable.directive.d.ts +1 -1
  107. package/src/guards/auth.guard.d.ts +2 -2
  108. package/src/guards/can-deactivate.guard.d.ts +1 -2
  109. package/src/guards/logout.guard.d.ts +2 -2
  110. package/esm2020/base-cms/base-cms-routing.module.mjs +0 -32
  111. package/esm2020/base-cms/base-cms.module.mjs +0 -59
  112. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +0 -222
  113. package/esm2020/base-components/base-components.module.mjs +0 -123
  114. package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -18
  115. package/esm2020/base-components/components/change-password/change-password.component.mjs +0 -90
  116. package/esm2020/base-components/components/checkbox/checkbox.component.mjs +0 -31
  117. package/esm2020/base-components/components/delete-account/delete-account.component.mjs +0 -56
  118. package/esm2020/base-components/components/fab-button/fab-button.component.mjs +0 -21
  119. package/esm2020/base-components/components/input/input.component.mjs +0 -67
  120. package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +0 -35
  121. package/esm2020/base-components/components/model-form/model-form-base.component.mjs +0 -136
  122. package/esm2020/base-components/components/model-form/model-form.component.mjs +0 -564
  123. package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -102
  124. package/esm2020/base-components/components/model-table/model-table.component.mjs +0 -397
  125. package/esm2020/base-components/components/refence-input/refence-input.component.mjs +0 -261
  126. package/esm2020/base-components/components/select/select.component.mjs +0 -54
  127. package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -32
  128. package/esm2020/base-components/components/tags/tags.component.mjs +0 -218
  129. package/esm2020/base-components/components/textarea/textarea.component.mjs +0 -72
  130. package/esm2020/base-components/components/toast/toast.component.mjs +0 -68
  131. package/esm2020/base-components/components/upload-image/upload-image.component.mjs +0 -324
  132. package/esm2020/base-components/directives/back-button.directive.mjs +0 -23
  133. package/esm2020/base-components/directives/context-menu.directive.mjs +0 -108
  134. package/esm2020/base-components/directives/sort.directive.mjs +0 -54
  135. package/esm2020/base-components/directives/stop-propagation.directive.mjs +0 -23
  136. package/esm2020/base-components/pipes/ellipses.pipe.mjs +0 -22
  137. package/esm2020/base-prototype/base-prototype.module.mjs +0 -53
  138. package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +0 -55
  139. package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -67
  140. package/esm2020/base-prototype/pages/login/login.component.mjs +0 -102
  141. package/esm2020/base-prototype/pages/profile/profile.component.mjs +0 -81
  142. package/esm2020/base-prototype/pages/register/register.component.mjs +0 -86
  143. package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +0 -82
  144. package/esm2020/shared/classes/auth.class.mjs +0 -17
  145. package/esm2020/shared/classes/basic-user.class.mjs +0 -52
  146. package/esm2020/shared/classes/graphql-enum.class.mjs +0 -9
  147. package/esm2020/shared/classes/graphql-meta.class.mjs +0 -344
  148. package/esm2020/shared/classes/graphql-type.class.mjs +0 -17
  149. package/esm2020/shared/classes/sort.class.mjs +0 -40
  150. package/esm2020/shared/services/auth.service.mjs +0 -148
  151. package/esm2020/shared/services/breadcrumb.service.mjs +0 -68
  152. package/esm2020/shared/services/file.service.mjs +0 -84
  153. package/esm2020/shared/services/forms.service.mjs +0 -59
  154. package/esm2020/shared/services/graphql-meta.service.mjs +0 -123
  155. package/esm2020/shared/services/graphql-plus.service.mjs +0 -89
  156. package/esm2020/shared/services/graphql.service.mjs +0 -507
  157. package/esm2020/shared/services/image.service.mjs +0 -102
  158. package/esm2020/shared/services/loader.service.mjs +0 -79
  159. package/esm2020/shared/services/navigation.service.mjs +0 -36
  160. package/esm2020/shared/services/scroll.service.mjs +0 -179
  161. package/esm2020/shared/services/storage.service.mjs +0 -140
  162. package/esm2020/shared/services/toast.service.mjs +0 -41
  163. package/esm2020/shared/services/user.service.mjs +0 -155
  164. package/esm2020/shared/services/ws.service.mjs +0 -16
  165. package/esm2020/src/base.module.mjs +0 -97
  166. package/esm2020/src/directives/lazy-load.directive.mjs +0 -45
  167. package/esm2020/src/directives/match-height.directive.mjs +0 -84
  168. package/esm2020/src/directives/resizable.directive.mjs +0 -90
  169. package/esm2020/src/factories/apollo-options.factory.mjs +0 -106
  170. package/esm2020/src/functions/extract-files.function.mjs +0 -84
  171. package/esm2020/src/guards/auth.guard.mjs +0 -80
  172. package/esm2020/src/guards/can-deactivate.guard.mjs +0 -16
  173. package/esm2020/src/guards/logout.guard.mjs +0 -32
  174. package/esm2020/src/pipes/date-ago.pipe.mjs +0 -65
  175. package/esm2020/src/pipes/safe-html.pipe.mjs +0 -21
  176. package/esm2020/src/services/fullscreen.service.mjs +0 -51
  177. package/esm2020/src/services/seo.service.mjs +0 -97
  178. package/esm2020/src/services/theme.service.mjs +0 -43
  179. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +0 -322
  180. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +0 -1
  181. package/fesm2015/lenne.tech-ng-base-base-components.mjs +0 -2806
  182. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +0 -1
  183. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +0 -495
  184. package/fesm2015/lenne.tech-ng-base-shared.mjs +0 -2749
  185. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +0 -1
  186. package/fesm2015/lenne.tech-ng-base.mjs +0 -902
  187. package/fesm2015/lenne.tech-ng-base.mjs.map +0 -1
  188. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +0 -1
  189. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
  190. package/fesm2020/lenne.tech-ng-base.mjs.map +0 -1
  191. /package/{esm2020 → esm2022}/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -0
  192. /package/{esm2020 → esm2022}/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -0
  193. /package/{esm2020 → esm2022}/base-cms/public-api.mjs +0 -0
  194. /package/{esm2020 → esm2022}/base-components/lenne.tech-ng-base-base-components.mjs +0 -0
  195. /package/{esm2020 → esm2022}/base-components/public-api.mjs +0 -0
  196. /package/{esm2020 → esm2022}/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -0
  197. /package/{esm2020 → esm2022}/base-prototype/public-api.mjs +0 -0
  198. /package/{esm2020 → esm2022}/lenne.tech-ng-base.mjs +0 -0
  199. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  200. /package/{esm2020 → esm2022}/shared/classes/helper.class.mjs +0 -0
  201. /package/{esm2020 → esm2022}/shared/classes/standard.class.mjs +0 -0
  202. /package/{esm2020 → esm2022}/shared/decorators/debounce.decorator.mjs +0 -0
  203. /package/{esm2020 → esm2022}/shared/enums/comparison-operator.enum.mjs +0 -0
  204. /package/{esm2020 → esm2022}/shared/enums/graphql-request-type.enum.mjs +0 -0
  205. /package/{esm2020 → esm2022}/shared/enums/logical-operator.enum.mjs +0 -0
  206. /package/{esm2020 → esm2022}/shared/enums/skeleton-type.enum.mjs +0 -0
  207. /package/{esm2020 → esm2022}/shared/enums/sort-order.enum.mjs +0 -0
  208. /package/{esm2020 → esm2022}/shared/enums/toast-type.enum.mjs +0 -0
  209. /package/{esm2020 → esm2022}/shared/functions/ws-client.function.mjs +0 -0
  210. /package/{esm2020 → esm2022}/shared/interfaces/base-module-config.interface.mjs +0 -0
  211. /package/{esm2020 → esm2022}/shared/interfaces/breadcrumb.interface.mjs +0 -0
  212. /package/{esm2020 → esm2022}/shared/interfaces/can-component-deactivate.interface.mjs +0 -0
  213. /package/{esm2020 → esm2022}/shared/interfaces/cms-enum-values.interface.mjs +0 -0
  214. /package/{esm2020 → esm2022}/shared/interfaces/cms-field-config.interface.mjs +0 -0
  215. /package/{esm2020 → esm2022}/shared/interfaces/cms-model-config.interface.mjs +0 -0
  216. /package/{esm2020 → esm2022}/shared/interfaces/cms-table-field.interface.mjs +0 -0
  217. /package/{esm2020 → esm2022}/shared/interfaces/combined-filter-input.interface.mjs +0 -0
  218. /package/{esm2020 → esm2022}/shared/interfaces/compress-options.interface.mjs +0 -0
  219. /package/{esm2020 → esm2022}/shared/interfaces/cropping-options.interface.mjs +0 -0
  220. /package/{esm2020 → esm2022}/shared/interfaces/field-object.interface.mjs +0 -0
  221. /package/{esm2020 → esm2022}/shared/interfaces/field.interface.mjs +0 -0
  222. /package/{esm2020 → esm2022}/shared/interfaces/filter-input.interface.mjs +0 -0
  223. /package/{esm2020 → esm2022}/shared/interfaces/find-args.interface.mjs +0 -0
  224. /package/{esm2020 → esm2022}/shared/interfaces/graphql-crud-type.interface.mjs +0 -0
  225. /package/{esm2020 → esm2022}/shared/interfaces/graphql-fields-object.interface.mjs +0 -0
  226. /package/{esm2020 → esm2022}/shared/interfaces/graphql-options.interface.mjs +0 -0
  227. /package/{esm2020 → esm2022}/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -0
  228. /package/{esm2020 → esm2022}/shared/interfaces/graphql-type-collection.interface.mjs +0 -0
  229. /package/{esm2020 → esm2022}/shared/interfaces/login-config.interface.mjs +0 -0
  230. /package/{esm2020 → esm2022}/shared/interfaces/single-filter-input.interface.mjs +0 -0
  231. /package/{esm2020 → esm2022}/shared/interfaces/sort-input.interface.mjs +0 -0
  232. /package/{esm2020 → esm2022}/shared/interfaces/time-components.interface.mjs +0 -0
  233. /package/{esm2020 → esm2022}/shared/interfaces/toast.interface.mjs +0 -0
  234. /package/{esm2020 → esm2022}/shared/lenne.tech-ng-base-shared.mjs +0 -0
  235. /package/{esm2020 → esm2022}/shared/public-api.mjs +0 -0
  236. /package/{esm2020 → esm2022}/shared/types/graphql-fields.type.mjs +0 -0
  237. /package/{esm2020 → esm2022}/shared/types/storage.type.mjs +0 -0
  238. /package/{esm2020 → esm2022}/shared/validators/email.validator.mjs +0 -0
  239. /package/{esm2020 → esm2022}/shared/validators/match.validator.mjs +0 -0
  240. /package/{esm2020 → esm2022}/shared/validators/secure-password.validator.mjs +0 -0
  241. /package/{esm2020 → esm2022}/src/decorators/auto-unsubscribe.decorator.mjs +0 -0
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "angular-library",
11
11
  "angular13+"
12
12
  ],
13
- "version": "15.0.0-beta-2",
13
+ "version": "16.0.0",
14
14
  "author": "lenne.Tech <info@lenne.tech> (https://lenne.tech)",
15
15
  "homepage": "https://github.com/lenneTech/ng-base",
16
16
  "license": "MIT",
@@ -19,30 +19,25 @@
19
19
  "url": "https://github.com/lenneTech/ng-base"
20
20
  },
21
21
  "peerDependencies": {
22
- "@angular/common": "15.*.*",
23
- "@angular/core": "15.*.*",
24
- "@angular/forms": "15.*.*",
25
- "@angular/platform-browser": "15.*.*",
26
- "@angular/router": "15.*.*",
22
+ "@angular/common": "16.*.*",
23
+ "@angular/core": "16.*.*",
24
+ "@angular/forms": "16.*.*",
25
+ "@angular/platform-browser": "16.*.*",
26
+ "@angular/router": "16.*.*",
27
27
  "bootstrap": "5.*.*",
28
- "@ng-bootstrap/ng-bootstrap": "14.*.*",
29
28
  "compressorjs": "1.1.*",
30
29
  "js-sha256": "*",
31
30
  "rxjs": "7.*.*",
32
- "ngx-image-cropper": "6.3.2",
33
- "@apollo/client": "3.7.9",
34
- "apollo-angular": "4.2.1",
35
- "graphql": "16.6.0",
36
- "graphql-ws": "5.11.3"
31
+ "ngx-image-cropper": "6.3.*",
32
+ "@apollo/client": "3.7.*",
33
+ "apollo-angular": "5.0.*",
34
+ "graphql": "16.6.*",
35
+ "graphql-ws": "5.*.*"
37
36
  },
38
37
  "dependencies": {
39
38
  "tslib": "2.5.0"
40
39
  },
41
- "module": "fesm2015/lenne.tech-ng-base.mjs",
42
- "es2020": "fesm2020/lenne.tech-ng-base.mjs",
43
- "esm2020": "esm2020/lenne.tech-ng-base.mjs",
44
- "fesm2020": "fesm2020/lenne.tech-ng-base.mjs",
45
- "fesm2015": "fesm2015/lenne.tech-ng-base.mjs",
40
+ "module": "fesm2022/lenne.tech-ng-base.mjs",
46
41
  "typings": "index.d.ts",
47
42
  "exports": {
48
43
  "./package.json": {
@@ -50,43 +45,33 @@
50
45
  },
51
46
  ".": {
52
47
  "types": "./index.d.ts",
53
- "esm2020": "./esm2020/lenne.tech-ng-base.mjs",
54
- "es2020": "./fesm2020/lenne.tech-ng-base.mjs",
55
- "es2015": "./fesm2015/lenne.tech-ng-base.mjs",
56
- "node": "./fesm2015/lenne.tech-ng-base.mjs",
57
- "default": "./fesm2020/lenne.tech-ng-base.mjs"
48
+ "esm2022": "./esm2022/lenne.tech-ng-base.mjs",
49
+ "esm": "./esm2022/lenne.tech-ng-base.mjs",
50
+ "default": "./fesm2022/lenne.tech-ng-base.mjs"
58
51
  },
59
52
  "./base-cms": {
60
53
  "types": "./base-cms/index.d.ts",
61
- "esm2020": "./esm2020/base-cms/lenne.tech-ng-base-base-cms.mjs",
62
- "es2020": "./fesm2020/lenne.tech-ng-base-base-cms.mjs",
63
- "es2015": "./fesm2015/lenne.tech-ng-base-base-cms.mjs",
64
- "node": "./fesm2015/lenne.tech-ng-base-base-cms.mjs",
65
- "default": "./fesm2020/lenne.tech-ng-base-base-cms.mjs"
54
+ "esm2022": "./esm2022/base-cms/lenne.tech-ng-base-base-cms.mjs",
55
+ "esm": "./esm2022/base-cms/lenne.tech-ng-base-base-cms.mjs",
56
+ "default": "./fesm2022/lenne.tech-ng-base-base-cms.mjs"
66
57
  },
67
58
  "./base-components": {
68
59
  "types": "./base-components/index.d.ts",
69
- "esm2020": "./esm2020/base-components/lenne.tech-ng-base-base-components.mjs",
70
- "es2020": "./fesm2020/lenne.tech-ng-base-base-components.mjs",
71
- "es2015": "./fesm2015/lenne.tech-ng-base-base-components.mjs",
72
- "node": "./fesm2015/lenne.tech-ng-base-base-components.mjs",
73
- "default": "./fesm2020/lenne.tech-ng-base-base-components.mjs"
60
+ "esm2022": "./esm2022/base-components/lenne.tech-ng-base-base-components.mjs",
61
+ "esm": "./esm2022/base-components/lenne.tech-ng-base-base-components.mjs",
62
+ "default": "./fesm2022/lenne.tech-ng-base-base-components.mjs"
74
63
  },
75
64
  "./base-prototype": {
76
65
  "types": "./base-prototype/index.d.ts",
77
- "esm2020": "./esm2020/base-prototype/lenne.tech-ng-base-base-prototype.mjs",
78
- "es2020": "./fesm2020/lenne.tech-ng-base-base-prototype.mjs",
79
- "es2015": "./fesm2015/lenne.tech-ng-base-base-prototype.mjs",
80
- "node": "./fesm2015/lenne.tech-ng-base-base-prototype.mjs",
81
- "default": "./fesm2020/lenne.tech-ng-base-base-prototype.mjs"
66
+ "esm2022": "./esm2022/base-prototype/lenne.tech-ng-base-base-prototype.mjs",
67
+ "esm": "./esm2022/base-prototype/lenne.tech-ng-base-base-prototype.mjs",
68
+ "default": "./fesm2022/lenne.tech-ng-base-base-prototype.mjs"
82
69
  },
83
70
  "./shared": {
84
71
  "types": "./shared/index.d.ts",
85
- "esm2020": "./esm2020/shared/lenne.tech-ng-base-shared.mjs",
86
- "es2020": "./fesm2020/lenne.tech-ng-base-shared.mjs",
87
- "es2015": "./fesm2015/lenne.tech-ng-base-shared.mjs",
88
- "node": "./fesm2015/lenne.tech-ng-base-shared.mjs",
89
- "default": "./fesm2020/lenne.tech-ng-base-shared.mjs"
72
+ "esm2022": "./esm2022/shared/lenne.tech-ng-base-shared.mjs",
73
+ "esm": "./esm2022/shared/lenne.tech-ng-base-shared.mjs",
74
+ "default": "./fesm2022/lenne.tech-ng-base-shared.mjs"
90
75
  }
91
76
  },
92
77
  "sideEffects": false
@@ -13,5 +13,5 @@ export declare class LazyLoadDirective implements AfterViewInit {
13
13
  private lazyLoadImage;
14
14
  private loadImage;
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<LazyLoadDirective, never>;
16
- static ɵdir: i0.ɵɵDirectiveDeclaration<LazyLoadDirective, "img[ltLazyLoad]", never, { "src": "src"; }, {}, never, never, false, never>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LazyLoadDirective, "img[ltLazyLoad]", never, { "src": { "alias": "src"; "required": false; }; }, {}, never, never, false, never>;
17
17
  }
@@ -16,5 +16,5 @@ export declare class MatchHeightDirective implements AfterViewInit {
16
16
  ngAfterViewInit(): void;
17
17
  matchHeight(parent: HTMLElement, target: string | string[]): Promise<void>;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<MatchHeightDirective, never>;
19
- static ɵdir: i0.ɵɵDirectiveDeclaration<MatchHeightDirective, "[ltMatchHeight]", never, { "ltMatchHeight": "ltMatchHeight"; "loadImages": "loadImages"; }, {}, never, never, false, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<MatchHeightDirective, "[ltMatchHeight]", never, { "ltMatchHeight": { "alias": "ltMatchHeight"; "required": false; }; "loadImages": { "alias": "loadImages"; "required": false; }; }, {}, never, never, false, never>;
20
20
  }
@@ -22,5 +22,5 @@ export declare class ResizableDirective implements OnInit {
22
22
  private addListenerToDocument;
23
23
  private addListenerToElement;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ResizableDirective, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<ResizableDirective, "[ltResizable]", never, { "resizableGrabWidth": "resizableGrabWidth"; "resizableMinWidth": "resizableMinWidth"; }, {}, never, never, false, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ResizableDirective, "[ltResizable]", never, { "resizableGrabWidth": { "alias": "resizableGrabWidth"; "required": false; }; "resizableMinWidth": { "alias": "resizableMinWidth"; "required": false; }; }, {}, never, never, false, never>;
26
26
  }
@@ -1,11 +1,11 @@
1
- import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';
1
+ import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
2
2
  import { Observable } from 'rxjs';
3
3
  import { AuthService, BaseModuleConfig } from '@lenne.tech/ng-base/shared';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * Authentication guard
7
7
  */
8
- export declare class AuthGuard implements CanActivate, CanActivateChild {
8
+ export declare class AuthGuard {
9
9
  private router;
10
10
  private authService;
11
11
  private moduleConfig;
@@ -1,10 +1,9 @@
1
- import { CanDeactivate } from '@angular/router';
2
1
  import { ICanComponentDeactivate } from '@lenne.tech/ng-base/shared';
3
2
  import * as i0 from "@angular/core";
4
3
  /**
5
4
  * Guard to check if a component can be deactivated
6
5
  */
7
- export declare class CanDeactivateGuard implements CanDeactivate<ICanComponentDeactivate> {
6
+ export declare class CanDeactivateGuard {
8
7
  canDeactivate(component: ICanComponentDeactivate): boolean | Promise<boolean> | import("rxjs").Observable<boolean>;
9
8
  static ɵfac: i0.ɵɵFactoryDeclaration<CanDeactivateGuard, never>;
10
9
  static ɵprov: i0.ɵɵInjectableDeclaration<CanDeactivateGuard>;
@@ -1,11 +1,11 @@
1
- import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';
1
+ import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
2
2
  import { Observable } from 'rxjs';
3
3
  import { AuthService } from '@lenne.tech/ng-base/shared';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * Logout guard
7
7
  */
8
- export declare class LogoutGuard implements CanActivate, CanActivateChild {
8
+ export declare class LogoutGuard {
9
9
  private router;
10
10
  private authService;
11
11
  constructor(router: Router, authService: AuthService);
@@ -1,32 +0,0 @@
1
- import { RouterModule } from '@angular/router';
2
- import { NgModule } from '@angular/core';
3
- import { BaseCmsComponent } from './pages/base-cms/base-cms.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/router";
6
- const routes = [
7
- {
8
- path: '',
9
- component: BaseCmsComponent,
10
- },
11
- {
12
- path: ':modelName',
13
- component: BaseCmsComponent,
14
- },
15
- {
16
- path: ':modelName/:id',
17
- component: BaseCmsComponent,
18
- },
19
- ];
20
- export class BaseCMSRoutingModule {
21
- }
22
- BaseCMSRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
- BaseCMSRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
24
- BaseCMSRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSRoutingModule, decorators: [{
26
- type: NgModule,
27
- args: [{
28
- imports: [RouterModule.forChild(routes)],
29
- exports: [RouterModule],
30
- }]
31
- }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMtcm91dGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL2Jhc2UtY21zLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFFdkUsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxZQUFZO1FBQ2xCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsU0FBUyxFQUFFLGdCQUFnQjtLQUM1QjtDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0Isd0NBRnJCLFlBQVk7a0hBRVgsb0JBQW9CLFlBSHJCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzdCLFlBQVk7MkZBRVgsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUNtc0NvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvYmFzZS1jbXMvYmFzZS1jbXMuY29tcG9uZW50JztcblxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICBjb21wb25lbnQ6IEJhc2VDbXNDb21wb25lbnQsXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnOm1vZGVsTmFtZScsXG4gICAgY29tcG9uZW50OiBCYXNlQ21zQ29tcG9uZW50LFxuICB9LFxuICB7XG4gICAgcGF0aDogJzptb2RlbE5hbWUvOmlkJyxcbiAgICBjb21wb25lbnQ6IEJhc2VDbXNDb21wb25lbnQsXG4gIH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyldLFxuICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNNU1JvdXRpbmdNb2R1bGUge31cbiJdfQ==
@@ -1,59 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ReactiveFormsModule } from '@angular/forms';
4
- import { BaseCmsComponent } from './pages/base-cms/base-cms.component';
5
- import { BaseCMSRoutingModule } from './base-cms-routing.module';
6
- import { BaseComponentsModule } from '@lenne.tech/ng-base/base-components';
7
- import { BASE_CMS_MODULE_CONFIG } from './interfaces/base-cms-module-config.interface';
8
- import * as i0 from "@angular/core";
9
- export function CMSConfigFactory() {
10
- return {
11
- modelConfig: {},
12
- fieldConfig: {},
13
- branding: true,
14
- logoUrl: '',
15
- logging: false,
16
- ...BaseCMSModule.config,
17
- };
18
- }
19
- export class BaseCMSModule {
20
- }
21
- BaseCMSModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
22
- BaseCMSModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSModule, declarations: [BaseCmsComponent], imports: [
23
- // Modules
24
- CommonModule,
25
- ReactiveFormsModule,
26
- BaseCMSRoutingModule,
27
- BaseComponentsModule] });
28
- BaseCMSModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSModule, providers: [
29
- {
30
- provide: BASE_CMS_MODULE_CONFIG,
31
- useFactory: CMSConfigFactory,
32
- },
33
- ], imports: [
34
- // Modules
35
- CommonModule,
36
- ReactiveFormsModule,
37
- BaseCMSRoutingModule,
38
- BaseComponentsModule] });
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCMSModule, decorators: [{
40
- type: NgModule,
41
- args: [{
42
- imports: [
43
- // Modules
44
- CommonModule,
45
- ReactiveFormsModule,
46
- BaseCMSRoutingModule,
47
- BaseComponentsModule,
48
- ],
49
- declarations: [BaseCmsComponent],
50
- exports: [],
51
- providers: [
52
- {
53
- provide: BASE_CMS_MODULE_CONFIG,
54
- useFactory: CMSConfigFactory,
55
- },
56
- ],
57
- }]
58
- }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9iYXNlLWNtcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLCtDQUErQyxDQUFDOztBQUU1RyxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxXQUFXLEVBQUUsRUFBRTtRQUNmLFdBQVcsRUFBRSxFQUFFO1FBQ2YsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsRUFBRTtRQUNYLE9BQU8sRUFBRSxLQUFLO1FBQ2QsR0FBRyxhQUFhLENBQUMsTUFBTTtLQUN4QixDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLGlCQVRULGdCQUFnQjtRQU43QixVQUFVO1FBQ1YsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsb0JBQW9COzJHQVdYLGFBQWEsYUFQYjtRQUNUO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixVQUFVLEVBQUUsZ0JBQWdCO1NBQzdCO0tBQ0Y7UUFiQyxVQUFVO1FBQ1YsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsb0JBQW9COzJGQVdYLGFBQWE7a0JBakJ6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjtxQkFDckI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxFQUFFO29CQUNYLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsc0JBQXNCOzRCQUMvQixVQUFVLEVBQUUsZ0JBQWdCO3lCQUM3QjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDbXNDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlQ01TUm91dGluZ01vZHVsZSB9IGZyb20gJy4vYmFzZS1jbXMtcm91dGluZy5tb2R1bGUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCQVNFX0NNU19NT0RVTEVfQ09ORklHLCBCYXNlQ01TTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Jhc2UtY21zLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIENNU0NvbmZpZ0ZhY3RvcnkoKSB7XG4gIHJldHVybiB7XG4gICAgbW9kZWxDb25maWc6IHt9LFxuICAgIGZpZWxkQ29uZmlnOiB7fSxcbiAgICBicmFuZGluZzogdHJ1ZSxcbiAgICBsb2dvVXJsOiAnJyxcbiAgICBsb2dnaW5nOiBmYWxzZSxcbiAgICAuLi5CYXNlQ01TTW9kdWxlLmNvbmZpZyxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIC8vIE1vZHVsZXNcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBCYXNlQ01TUm91dGluZ01vZHVsZSxcbiAgICBCYXNlQ29tcG9uZW50c01vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbQmFzZUNtc0NvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBCQVNFX0NNU19NT0RVTEVfQ09ORklHLFxuICAgICAgdXNlRmFjdG9yeTogQ01TQ29uZmlnRmFjdG9yeSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlQ01TTW9kdWxlIHtcbiAgc3RhdGljIGNvbmZpZzogQmFzZUNNU01vZHVsZUNvbmZpZztcbn1cbiJdfQ==
@@ -1,222 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { BasicUser, } from '@lenne.tech/ng-base/shared';
3
- import { BASE_CMS_MODULE_CONFIG } from '../../interfaces/base-cms-module-config.interface';
4
- import { Subscription } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@lenne.tech/ng-base/shared";
7
- import * as i2 from "@angular/router";
8
- import * as i3 from "@angular/common";
9
- import * as i4 from "@lenne.tech/ng-base/base-components";
10
- export class BaseCmsComponent {
11
- constructor(moduleConfig, graphQLMetaService, route, router, authService, cmsService) {
12
- this.moduleConfig = moduleConfig;
13
- this.graphQLMetaService = graphQLMetaService;
14
- this.route = route;
15
- this.router = router;
16
- this.authService = authService;
17
- this.cmsService = cmsService;
18
- this.types = [];
19
- this.subscription = new Subscription();
20
- this.sideBarWidth = '22%';
21
- this.responsiveToggle = false;
22
- this.calcSideBarWidth();
23
- this.subscription.add(this.route.params.subscribe((value) => {
24
- if (value['modelName']) {
25
- const exclude = this.moduleConfig.modelConfig[value['modelName']]?.exclude;
26
- if (exclude !== null && !exclude) {
27
- this.modelName = value['modelName'];
28
- this.camelModelName = this.toCamelCase(this.modelName);
29
- }
30
- else {
31
- this.init().then((types) => {
32
- this.router.navigate(['../' + this.toKebabCase(types[0].name)], { relativeTo: this.route });
33
- });
34
- }
35
- }
36
- if (value['id']) {
37
- this.id = value['id'];
38
- }
39
- }));
40
- }
41
- async ngOnInit() {
42
- await this.init();
43
- }
44
- ngOnDestroy() {
45
- this.subscription.unsubscribe();
46
- }
47
- /**
48
- * It returns a promise that resolves to an array of GraphqlCrudType objects
49
- *
50
- * @returns The types that are available to the user.
51
- */
52
- init() {
53
- return new Promise((resolve, reject) => {
54
- this.graphQLMetaService.getMeta().subscribe((meta) => {
55
- this.meta = meta;
56
- if (this.route.snapshot?.params?.['modelName']) {
57
- this.modelName = this.route.snapshot?.params?.['modelName'];
58
- this.camelModelName = this.toCamelCase(this.modelName);
59
- }
60
- if (this.route.snapshot?.params?.['id']) {
61
- this.id = this.route.snapshot?.params?.['id'];
62
- }
63
- const types = meta.getTypes(this.moduleConfig?.logging);
64
- // Check for excluded types
65
- let filteredTypes = types.filter((e) => !this.moduleConfig?.modelConfig[e.name.toLowerCase()]?.exclude);
66
- // Sort types
67
- filteredTypes = filteredTypes.sort((a, b) => {
68
- return ((this.moduleConfig?.modelConfig[a.name.toLowerCase()]?.order
69
- ? this.moduleConfig?.modelConfig[a.name.toLowerCase()]?.order
70
- : 99) -
71
- (this.moduleConfig?.modelConfig[b.name.toLowerCase()]?.order
72
- ? this.moduleConfig?.modelConfig[b.name.toLowerCase()]?.order
73
- : 99));
74
- });
75
- // Check for restricted types
76
- this.types = filteredTypes.filter((e) => {
77
- if (this.moduleConfig?.modelConfig[e.name.toLowerCase()]?.restricted) {
78
- if (!this.authService?.currentUser) {
79
- return false;
80
- }
81
- const user = this.authService?.currentUser;
82
- const mappedUser = BasicUser.map(user);
83
- return mappedUser?.hasAllRoles(this.moduleConfig?.modelConfig[e.name.toLowerCase()]?.roles);
84
- }
85
- else {
86
- return true;
87
- }
88
- });
89
- if (this.moduleConfig?.logging) {
90
- console.log('BaseCmsComponent::init->types', this.types);
91
- console.log('BaseCmsComponent::init->camelModelName', this.camelModelName);
92
- console.log('BaseCmsComponent::init->fieldConfig', this.moduleConfig?.fieldConfig);
93
- }
94
- resolve(this.types);
95
- if (!this.modelName && this.types) {
96
- this.router.navigate(['./' + this.toKebabCase(this.types[0].name)], { relativeTo: this.route });
97
- }
98
- });
99
- });
100
- }
101
- /**
102
- * If the model name is set and the types are set, then return the type that matches the model name
103
- *
104
- * @returns The type object that matches the model name.
105
- */
106
- getTypeByModelName() {
107
- if (this.modelName && this.types) {
108
- return this.types.find((e) => this.toKebabCase(e.name) === this.toKebabCase(this.modelName));
109
- }
110
- else {
111
- return null;
112
- }
113
- }
114
- /**
115
- * When the createModeChanged event is emitted, if the createMode is true, navigate to the new route
116
- *
117
- * @param createMode - boolean - This is a boolean value that indicates whether the user is in create mode or
118
- * not.
119
- */
120
- onCreateModeChanged(createMode) {
121
- if (createMode) {
122
- this.router.navigate(['./' + 'neu'], { relativeTo: this.route });
123
- }
124
- }
125
- /**
126
- * If the type exists, return the create property of the type, otherwise return false.
127
- *
128
- * @returns A boolean value.
129
- */
130
- isCreatePossible() {
131
- const type = this.getTypeByModelName();
132
- return type ? type.create : false;
133
- }
134
- isImportPossible() {
135
- let result = false;
136
- const config = this.moduleConfig?.modelConfig[this.camelModelName]?.import;
137
- if (config !== null && config !== undefined) {
138
- result = config;
139
- }
140
- return result;
141
- }
142
- isExportPossible() {
143
- let result = false;
144
- const config = this.moduleConfig?.modelConfig[this.camelModelName]?.export;
145
- if (config !== null && config !== undefined) {
146
- result = config;
147
- }
148
- return result;
149
- }
150
- /**
151
- * If the model name is found in the type map, return the update property of the type object
152
- *
153
- * @returns A boolean value.
154
- */
155
- isUpdatePossible() {
156
- const type = this.getTypeByModelName();
157
- return type ? type.update : false;
158
- }
159
- /**
160
- * If the type is defined, return the delete property of the type, otherwise return false
161
- *
162
- * @returns A boolean value.
163
- */
164
- isDeletePossible() {
165
- const type = this.getTypeByModelName();
166
- return type ? type.delete : false;
167
- }
168
- /**
169
- * If the model name is found in the type array, return the duplicate property of the type object
170
- *
171
- * @returns A boolean value.
172
- */
173
- isDuplicatePossible() {
174
- const type = this.getTypeByModelName();
175
- return type ? type.duplicate : false;
176
- }
177
- /**
178
- * If the id is truthy, navigate to the id, otherwise navigate to the parent route
179
- */
180
- idSelected(id) {
181
- if (id) {
182
- this.router.navigate(['./' + id], { relativeTo: this.route });
183
- }
184
- else {
185
- this.router.navigate(['..'], { relativeTo: this.route });
186
- }
187
- }
188
- /**
189
- * Transform string to kebab case
190
- */
191
- toKebabCase(str) {
192
- return str?.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
193
- }
194
- /**
195
- * Transform string to camel case
196
- */
197
- toCamelCase(str) {
198
- return str?.replace(/-./g, (match) => match[1].toUpperCase());
199
- }
200
- /**
201
- * Transform first letter to lower case
202
- */
203
- lowerCaseFirstLetter(value) {
204
- return this.cmsService.lowerCaseFirstLetter(value);
205
- }
206
- /**
207
- * Calculates sidebar width based on screen size
208
- */
209
- calcSideBarWidth() {
210
- this.sideBarWidth = window.innerWidth < 768 ? '8%' : '22%';
211
- }
212
- }
213
- BaseCmsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCmsComponent, deps: [{ token: BASE_CMS_MODULE_CONFIG }, { token: i1.GraphQLMetaService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i1.AuthService }, { token: i1.CmsService }], target: i0.ɵɵFactoryTarget.Component });
214
- BaseCmsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: BaseCmsComponent, selector: "app-base-cms", ngImport: i0, template: "<div class=\"main\">\n <div\n class=\"sidebar\"\n [ngStyle]=\"{\n 'flex-basis': !responsiveToggle ? sideBarWidth : '100%',\n 'min-width': !responsiveToggle ? sideBarWidth : ''\n }\"\n >\n <div class=\"d-none d-md-flex flex-column flex-shrink-0 p-3 h-100\">\n <ng-container *ngIf=\"moduleConfig.branding\">\n <a\n href=\"/\"\n class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none\"\n *ngIf=\"!moduleConfig?.logoUrl\"\n >\n <span class=\"d-block fs-4\"><b class=\"text-primary\">Base</b>CMS</span>\n <small class=\"fw-lighter\">The auto generated GraphQL CMS</small>\n </a>\n\n <a\n href=\"/\"\n class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none w-100\"\n *ngIf=\"moduleConfig?.logoUrl\"\n >\n <img [src]=\"moduleConfig.logoUrl\" class=\"img-responsive w-100\" alt=\"Logo\" />\n </a>\n <hr />\n </ng-container>\n <ul class=\"nav nav-pills flex-column mb-auto\" *ngIf=\"types\">\n <li class=\"nav-item\" *ngFor=\"let type of types\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + toKebabCase(type?.name)\"\n [ngClass]=\"{ active: toKebabCase(type?.name) === toKebabCase(this.modelName) }\"\n >\n {{\n moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n : moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n : type.name + 's'\n }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"d-flex flex-column d-md-none p-3 h-100\">\n <div class=\"d-flex justify-content-end\">\n <i\n class=\"bi\"\n [ngClass]=\"{ 'bi-chevron-left': !responsiveToggle, 'bi-chevron-right': responsiveToggle }\"\n (click)=\"responsiveToggle = !responsiveToggle\"\n ></i>\n </div>\n <ul\n class=\"nav nav-pills responsive-pills flex-column mb-auto\"\n [ngClass]=\"{ 'w-100-transition': responsiveToggle }\"\n *ngIf=\"types\"\n >\n <li class=\"nav-item\" *ngFor=\"let type of types\" (click)=\"responsiveToggle = !responsiveToggle\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + toKebabCase(type?.name)\"\n [ngClass]=\"{ active: toKebabCase(type?.name) === toKebabCase(this.modelName) }\"\n >\n {{\n moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n : moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n : type.name + 's'\n }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"sidebar-content\" [ngStyle]=\"{ 'flex-basis': !responsiveToggle ? 'unset' : '0' }\">\n <div class=\"p-3 p-md-5 mb-3\">\n <base-model-table\n [modelConfig]=\"moduleConfig?.modelConfig[camelModelName]\"\n [config]=\"moduleConfig?.fieldConfig[camelModelName] || {}\"\n [modelName]=\"modelName\"\n [logging]=\"moduleConfig?.logging\"\n [objectId]=\"id !== 'neu' ? id : ''\"\n [createMode]=\"id === 'neu'\"\n (createModeChanged)=\"onCreateModeChanged($event)\"\n (idSelected)=\"idSelected($event)\"\n [import]=\"isImportPossible()\"\n [export]=\"isExportPossible()\"\n [create]=\"isCreatePossible()\"\n [update]=\"isUpdatePossible()\"\n [delete]=\"isDeletePossible()\"\n [duplicate]=\"isDuplicatePossible()\"\n [showFavButton]=\"!responsiveToggle\"\n ></base-model-table>\n </div>\n </div>\n</div>\n", styles: [".active{color:var(--bs-primary)!important;background-color:rgba(var(--bs-primary-rgb),.2)!important;font-weight:700}.nav-link{color:var(--bs-body-color)}.sidebar{box-shadow:#7090b014 14px 17px 40px 4px;transition:all .2s linear 0s;z-index:99}.main{display:flex;flex-direction:row;overflow:hidden;height:100%}.main .sidebar{flex-grow:1}@media only screen and (min-width: 992px){.main .sidebar{max-width:300px}}.main .sidebar-content{flex-grow:999;overflow-y:auto;background-color:#f5f7fe;min-height:100vh}.nav-flush .nav-link{border-radius:0}.responsive-pills{width:0;text-align:center;overflow:hidden}.w-100-transition{width:100%;transition:width .2s}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.ModelTableComponent, selector: "base-model-table", inputs: ["modelName", "objectId", "createMode", "logging", "create", "update", "delete", "import", "export", "duplicate", "modelConfig", "config", "showFavButton"], outputs: ["idSelected", "createModeChanged"] }] });
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: BaseCmsComponent, decorators: [{
216
- type: Component,
217
- args: [{ selector: 'app-base-cms', template: "<div class=\"main\">\n <div\n class=\"sidebar\"\n [ngStyle]=\"{\n 'flex-basis': !responsiveToggle ? sideBarWidth : '100%',\n 'min-width': !responsiveToggle ? sideBarWidth : ''\n }\"\n >\n <div class=\"d-none d-md-flex flex-column flex-shrink-0 p-3 h-100\">\n <ng-container *ngIf=\"moduleConfig.branding\">\n <a\n href=\"/\"\n class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none\"\n *ngIf=\"!moduleConfig?.logoUrl\"\n >\n <span class=\"d-block fs-4\"><b class=\"text-primary\">Base</b>CMS</span>\n <small class=\"fw-lighter\">The auto generated GraphQL CMS</small>\n </a>\n\n <a\n href=\"/\"\n class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none w-100\"\n *ngIf=\"moduleConfig?.logoUrl\"\n >\n <img [src]=\"moduleConfig.logoUrl\" class=\"img-responsive w-100\" alt=\"Logo\" />\n </a>\n <hr />\n </ng-container>\n <ul class=\"nav nav-pills flex-column mb-auto\" *ngIf=\"types\">\n <li class=\"nav-item\" *ngFor=\"let type of types\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + toKebabCase(type?.name)\"\n [ngClass]=\"{ active: toKebabCase(type?.name) === toKebabCase(this.modelName) }\"\n >\n {{\n moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n : moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n : type.name + 's'\n }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"d-flex flex-column d-md-none p-3 h-100\">\n <div class=\"d-flex justify-content-end\">\n <i\n class=\"bi\"\n [ngClass]=\"{ 'bi-chevron-left': !responsiveToggle, 'bi-chevron-right': responsiveToggle }\"\n (click)=\"responsiveToggle = !responsiveToggle\"\n ></i>\n </div>\n <ul\n class=\"nav nav-pills responsive-pills flex-column mb-auto\"\n [ngClass]=\"{ 'w-100-transition': responsiveToggle }\"\n *ngIf=\"types\"\n >\n <li class=\"nav-item\" *ngFor=\"let type of types\" (click)=\"responsiveToggle = !responsiveToggle\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + toKebabCase(type?.name)\"\n [ngClass]=\"{ active: toKebabCase(type?.name) === toKebabCase(this.modelName) }\"\n >\n {{\n moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.plural\n : moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n ? moduleConfig?.modelConfig[lowerCaseFirstLetter(type?.name)]?.label\n : type.name + 's'\n }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"sidebar-content\" [ngStyle]=\"{ 'flex-basis': !responsiveToggle ? 'unset' : '0' }\">\n <div class=\"p-3 p-md-5 mb-3\">\n <base-model-table\n [modelConfig]=\"moduleConfig?.modelConfig[camelModelName]\"\n [config]=\"moduleConfig?.fieldConfig[camelModelName] || {}\"\n [modelName]=\"modelName\"\n [logging]=\"moduleConfig?.logging\"\n [objectId]=\"id !== 'neu' ? id : ''\"\n [createMode]=\"id === 'neu'\"\n (createModeChanged)=\"onCreateModeChanged($event)\"\n (idSelected)=\"idSelected($event)\"\n [import]=\"isImportPossible()\"\n [export]=\"isExportPossible()\"\n [create]=\"isCreatePossible()\"\n [update]=\"isUpdatePossible()\"\n [delete]=\"isDeletePossible()\"\n [duplicate]=\"isDuplicatePossible()\"\n [showFavButton]=\"!responsiveToggle\"\n ></base-model-table>\n </div>\n </div>\n</div>\n", styles: [".active{color:var(--bs-primary)!important;background-color:rgba(var(--bs-primary-rgb),.2)!important;font-weight:700}.nav-link{color:var(--bs-body-color)}.sidebar{box-shadow:#7090b014 14px 17px 40px 4px;transition:all .2s linear 0s;z-index:99}.main{display:flex;flex-direction:row;overflow:hidden;height:100%}.main .sidebar{flex-grow:1}@media only screen and (min-width: 992px){.main .sidebar{max-width:300px}}.main .sidebar-content{flex-grow:999;overflow-y:auto;background-color:#f5f7fe;min-height:100vh}.nav-flush .nav-link{border-radius:0}.responsive-pills{width:0;text-align:center;overflow:hidden}.w-100-transition{width:100%;transition:width .2s}\n"] }]
218
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
219
- type: Inject,
220
- args: [BASE_CMS_MODULE_CONFIG]
221
- }] }, { type: i1.GraphQLMetaService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i1.AuthService }, { type: i1.CmsService }]; } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9wYWdlcy9iYXNlLWNtcy9iYXNlLWNtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBRUwsU0FBUyxHQUtWLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLG1EQUFtRCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU9wQyxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQ3lDLFlBQWlDLEVBQ2hFLGtCQUFzQyxFQUN0QyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsVUFBc0I7UUFMUyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDaEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVhoQyxVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUM5QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBVXZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNu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SyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RCxDQUFDOzs2R0EvT1UsZ0JBQWdCLGtCQVdqQixzQkFBc0I7aUdBWHJCLGdCQUFnQixvRENsQjdCLGlwSUFzR0E7MkZEcEZhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzswQkFlckIsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBCYXNpY1VzZXIsXG4gIENtc1NlcnZpY2UsXG4gIEdyYXBocWxDcnVkVHlwZSxcbiAgR3JhcGhRTE1ldGEsXG4gIEdyYXBoUUxNZXRhU2VydmljZSxcbn0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCQVNFX0NNU19NT0RVTEVfQ09ORklHLCBCYXNlQ01TTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9iYXNlLWNtcy1tb2R1bGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJhc2UtY21zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFzZS1jbXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBjYW1lbE1vZGVsTmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlczogR3JhcGhxbENydWRUeXBlW10gPSBbXTtcbiAgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBzaWRlQmFyV2lkdGggPSAnMjIlJztcbiAgcmVzcG9uc2l2ZVRvZ2dsZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQkFTRV9DTVNfTU9EVUxFX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQmFzZUNNU01vZHVsZUNvbmZpZyxcbiAgICBwcml2YXRlIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbXNTZXJ2aWNlOiBDbXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY2FsY1NpZGVCYXJXaWR0aCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlWydtb2RlbE5hbWUnXSkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGUgPSB0aGlzLm1vZHVsZUNvbmZpZy5tb2RlbENvbmZpZ1t2YWx1ZVsnbW9kZWxOYW1lJ11dPy5leGNsdWRlO1xuXG4gICAgICAgICAgaWYgKGV4Y2x1ZGUgIT09IG51bGwgJiYgIWV4Y2x1ZGUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxOYW1lID0gdmFsdWVbJ21vZGVsTmFtZSddO1xuICAgICAgICAgICAgdGhpcy5jYW1lbE1vZGVsTmFtZSA9IHRoaXMudG9DYW1lbENhc2UodGhpcy5tb2RlbE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXQoKS50aGVuKCh0eXBlczogR3JhcGhxbENydWRUeXBlW10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nICsgdGhpcy50b0tlYmFiQ2FzZSh0eXBlc1swXS5uYW1lKV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZVsnaWQnXSkge1xuICAgICAgICAgIHRoaXMuaWQgPSB2YWx1ZVsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgR3JhcGhxbENydWRUeXBlIG9iamVjdHNcbiAgICpcbiAgICogQHJldHVybnMgVGhlIHR5cGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXQoKTogUHJvbWlzZTxHcmFwaHFsQ3J1ZFR5cGVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcz8uWydtb2RlbE5hbWUnXSkge1xuICAgICAgICAgIHRoaXMubW9kZWxOYW1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ21vZGVsTmFtZSddO1xuICAgICAgICAgIHRoaXMuY2FtZWxNb2RlbE5hbWUgPSB0aGlzLnRvQ2FtZWxDYXNlKHRoaXMubW9kZWxOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXM/LlsnaWQnXSkge1xuICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXM/LlsnaWQnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGVzID0gbWV0YS5nZXRUeXBlcyh0aGlzLm1vZHVsZUNvbmZpZz8ubG9nZ2luZyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGV4Y2x1ZGVkIHR5cGVzXG4gICAgICAgIGxldCBmaWx0ZXJlZFR5cGVzID0gdHlwZXMuZmlsdGVyKChlKSA9PiAhdGhpcy5tb2R1bGVDb25maWc/Lm1vZGVsQ29uZmlnW2UubmFtZS50b0xvd2VyQ2FzZSgpXT8uZXhjbHVkZSk7XG5cbiAgICAgICAgLy8gU29ydCB0eXBlc1xuICAgICAgICBmaWx0ZXJlZFR5cGVzID0gZmlsdGVyZWRUeXBlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLm1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbYS5uYW1lLnRvTG93ZXJDYXNlKCldPy5vcmRlclxuICAgICAgICAgICAgICA/IHRoaXMubW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1thLm5hbWUudG9Mb3dlckNhc2UoKV0/Lm9yZGVyXG4gICAgICAgICAgICAgIDogOTkpIC1cbiAgICAgICAgICAgICh0aGlzLm1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbYi5uYW1lLnRvTG93ZXJDYXNlKCldPy5vcmRlclxuICAgICAgICAgICAgICA/IHRoaXMubW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tiLm5hbWUudG9Mb3dlckNhc2UoKV0/Lm9yZGVyXG4gICAgICAgICAgICAgIDogOTkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJlc3RyaWN0ZWQgdHlwZXNcbiAgICAgICAgdGhpcy50eXBlcyA9IGZpbHRlcmVkVHlwZXMuZmlsdGVyKChlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tlLm5hbWUudG9Mb3dlckNhc2UoKV0/LnJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZT8uY3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2U/LmN1cnJlbnRVc2VyO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkVXNlciA9IEJhc2ljVXNlci5tYXAodXNlcik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXBwZWRVc2VyPy5oYXNBbGxSb2xlcyh0aGlzLm1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbZS5uYW1lLnRvTG93ZXJDYXNlKCldPy5yb2xlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5sb2dnaW5nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Jhc2VDbXNDb21wb25lbnQ6OmluaXQtPnR5cGVzJywgdGhpcy50eXBlcyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Jhc2VDbXNDb21wb25lbnQ6OmluaXQtPmNhbWVsTW9kZWxOYW1lJywgdGhpcy5jYW1lbE1vZGVsTmFtZSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Jhc2VDbXNDb21wb25lbnQ6OmluaXQtPmZpZWxkQ29uZmlnJywgdGhpcy5tb2R1bGVDb25maWc/LmZpZWxkQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUodGhpcy50eXBlcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycgKyB0aGlzLnRvS2ViYWJDYXNlKHRoaXMudHlwZXNbMF0ubmFtZSldLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtb2RlbCBuYW1lIGlzIHNldCBhbmQgdGhlIHR5cGVzIGFyZSBzZXQsIHRoZW4gcmV0dXJuIHRoZSB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgbW9kZWwgbmFtZVxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHlwZSBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBtb2RlbCBuYW1lLlxuICAgKi9cbiAgZ2V0VHlwZUJ5TW9kZWxOYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLnR5cGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlcy5maW5kKChlKSA9PiB0aGlzLnRvS2ViYWJDYXNlKGUubmFtZSkgPT09IHRoaXMudG9LZWJhYkNhc2UodGhpcy5tb2RlbE5hbWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIGNyZWF0ZU1vZGVDaGFuZ2VkIGV2ZW50IGlzIGVtaXR0ZWQsIGlmIHRoZSBjcmVhdGVNb2RlIGlzIHRydWUsIG5hdmlnYXRlIHRvIHRoZSBuZXcgcm91dGVcbiAgICpcbiAgICogQHBhcmFtIGNyZWF0ZU1vZGUgLSBib29sZWFuIC0gVGhpcyBpcyBhIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciBpcyBpbiBjcmVhdGUgbW9kZSBvclxuICAgKiBub3QuXG4gICAqL1xuICBvbkNyZWF0ZU1vZGVDaGFuZ2VkKGNyZWF0ZU1vZGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoY3JlYXRlTW9kZSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycgKyAnbmV1J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgZXhpc3RzLCByZXR1cm4gdGhlIGNyZWF0ZSBwcm9wZXJ0eSBvZiB0aGUgdHlwZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNDcmVhdGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUuY3JlYXRlIDogZmFsc2U7XG4gIH1cblxuICBpc0ltcG9ydFBvc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLm1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbdGhpcy5jYW1lbE1vZGVsTmFtZV0/LmltcG9ydDtcblxuICAgIGlmIChjb25maWcgIT09IG51bGwgJiYgY29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IGNvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaXNFeHBvcnRQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5tb2R1bGVDb25maWc/Lm1vZGVsQ29uZmlnW3RoaXMuY2FtZWxNb2RlbE5hbWVdPy5leHBvcnQ7XG5cbiAgICBpZiAoY29uZmlnICE9PSBudWxsICYmIGNvbmZpZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSBjb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgbW9kZWwgbmFtZSBpcyBmb3VuZCBpbiB0aGUgdHlwZSBtYXAsIHJldHVybiB0aGUgdXBkYXRlIHByb3BlcnR5IG9mIHRoZSB0eXBlIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBpc1VwZGF0ZVBvc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGVCeU1vZGVsTmFtZSgpO1xuICAgIHJldHVybiB0eXBlID8gdHlwZS51cGRhdGUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdHlwZSBpcyBkZWZpbmVkLCByZXR1cm4gdGhlIGRlbGV0ZSBwcm9wZXJ0eSBvZiB0aGUgdHlwZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZVxuICAgKlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBpc0RlbGV0ZVBvc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGVCeU1vZGVsTmFtZSgpO1xuICAgIHJldHVybiB0eXBlID8gdHlwZS5kZWxldGUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgbW9kZWwgbmFtZSBpcyBmb3VuZCBpbiB0aGUgdHlwZSBhcnJheSwgcmV0dXJuIHRoZSBkdXBsaWNhdGUgcHJvcGVydHkgb2YgdGhlIHR5cGUgb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzRHVwbGljYXRlUG9zc2libGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZUJ5TW9kZWxOYW1lKCk7XG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlLmR1cGxpY2F0ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpZCBpcyB0cnV0aHksIG5hdmlnYXRlIHRvIHRoZSBpZCwgb3RoZXJ3aXNlIG5hdmlnYXRlIHRvIHRoZSBwYXJlbnQgcm91dGVcbiAgICovXG4gIGlkU2VsZWN0ZWQoaWQ6IHN0cmluZykge1xuICAgIGlmIChpZCkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycgKyBpZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBzdHJpbmcgdG8ga2ViYWIgY2FzZVxuICAgKi9cbiAgdG9LZWJhYkNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyPy5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBzdHJpbmcgdG8gY2FtZWwgY2FzZVxuICAgKi9cbiAgdG9DYW1lbENhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyPy5yZXBsYWNlKC8tLi9nLCAobWF0Y2gpID0+IG1hdGNoWzFdLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBmaXJzdCBsZXR0ZXIgdG8gbG93ZXIgY2FzZVxuICAgKi9cbiAgbG93ZXJDYXNlRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNtc1NlcnZpY2UubG93ZXJDYXNlRmlyc3RMZXR0ZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgc2lkZWJhciB3aWR0aCBiYXNlZCBvbiBzY3JlZW4gc2l6ZVxuICAgKi9cbiAgY2FsY1NpZGVCYXJXaWR0aCgpIHtcbiAgICB0aGlzLnNpZGVCYXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ID8gJzglJyA6ICcyMiUnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWFpblwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzaWRlYmFyXCJcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAnZmxleC1iYXNpcyc6ICFyZXNwb25zaXZlVG9nZ2xlID8gc2lkZUJhcldpZHRoIDogJzEwMCUnLFxuICAgICAgJ21pbi13aWR0aCc6ICFyZXNwb25zaXZlVG9nZ2xlID8gc2lkZUJhcldpZHRoIDogJydcbiAgICB9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtc2hyaW5rLTAgcC0zIGgtMTAwXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kdWxlQ29uZmlnLmJyYW5kaW5nXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIi9cIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IG1iLTMgbXQtMyBtZS1tZC1hdXRvIGxpbmstZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZVwiXG4gICAgICAgICAgKm5nSWY9XCIhbW9kdWxlQ29uZmlnPy5sb2dvVXJsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBmcy00XCI+PGIgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj5CYXNlPC9iPkNNUzwvc3Bhbj5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmdy1saWdodGVyXCI+VGhlIGF1dG8gZ2VuZXJhdGVkIEdyYXBoUUwgQ01TPC9zbWFsbD5cbiAgICAgICAgPC9hPlxuXG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIi9cIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IG1iLTMgbXQtMyBtZS1tZC1hdXRvIGxpbmstZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSB3LTEwMFwiXG4gICAgICAgICAgKm5nSWY9XCJtb2R1bGVDb25maWc/LmxvZ29VcmxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGltZyBbc3JjXT1cIm1vZHVsZUNvbmZpZy5sb2dvVXJsXCIgY2xhc3M9XCJpbWctcmVzcG9uc2l2ZSB3LTEwMFwiIGFsdD1cIkxvZ29cIiAvPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxociAvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGZsZXgtY29sdW1uIG1iLWF1dG9cIiAqbmdJZj1cInR5cGVzXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgdHlwZXNcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICBhcmlhLWN1cnJlbnQ9XCJwYWdlXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIihpZCA/ICcuLi8uLi8nIDogJy4uLycpICsgdG9LZWJhYkNhc2UodHlwZT8ubmFtZSlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHRvS2ViYWJDYXNlKHR5cGU/Lm5hbWUpID09PSB0b0tlYmFiQ2FzZSh0aGlzLm1vZGVsTmFtZSkgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgbW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tsb3dlckNhc2VGaXJzdExldHRlcih0eXBlPy5uYW1lKV0/LnBsdXJhbFxuICAgICAgICAgICAgICAgID8gbW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tsb3dlckNhc2VGaXJzdExldHRlcih0eXBlPy5uYW1lKV0/LnBsdXJhbFxuICAgICAgICAgICAgICAgIDogbW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tsb3dlckNhc2VGaXJzdExldHRlcih0eXBlPy5uYW1lKV0/LmxhYmVsXG4gICAgICAgICAgICAgICAgPyBtb2R1bGVDb25maWc/Lm1vZGVsQ29uZmlnW2xvd2VyQ2FzZUZpcnN0TGV0dGVyKHR5cGU/Lm5hbWUpXT8ubGFiZWxcbiAgICAgICAgICAgICAgICA6IHR5cGUubmFtZSArICdzJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZC1tZC1ub25lIHAtMyBoLTEwMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJiaVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnYmktY2hldnJvbi1sZWZ0JzogIXJlc3BvbnNpdmVUb2dnbGUsICdiaS1jaGV2cm9uLXJpZ2h0JzogcmVzcG9uc2l2ZVRvZ2dsZSB9XCJcbiAgICAgICAgICAoY2xpY2spPVwicmVzcG9uc2l2ZVRvZ2dsZSA9ICFyZXNwb25zaXZlVG9nZ2xlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHVsXG4gICAgICAgIGNsYXNzPVwibmF2IG5hdi1waWxscyByZXNwb25zaXZlLXBpbGxzIGZsZXgtY29sdW1uIG1iLWF1dG9cIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICd3LTEwMC10cmFuc2l0aW9uJzogcmVzcG9uc2l2ZVRvZ2dsZSB9XCJcbiAgICAgICAgKm5nSWY9XCJ0eXBlc1wiXG4gICAgICA+XG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgdHlwZXNcIiAoY2xpY2spPVwicmVzcG9uc2l2ZVRvZ2dsZSA9ICFyZXNwb25zaXZlVG9nZ2xlXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgICAgYXJpYS1jdXJyZW50PVwicGFnZVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIoaWQgPyAnLi4vLi4vJyA6ICcuLi8nKSArIHRvS2ViYWJDYXNlKHR5cGU/Lm5hbWUpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiB0b0tlYmFiQ2FzZSh0eXBlPy5uYW1lKSA9PT0gdG9LZWJhYkNhc2UodGhpcy5tb2RlbE5hbWUpIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIG1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbbG93ZXJDYXNlRmlyc3RMZXR0ZXIodHlwZT8ubmFtZSldPy5wbHVyYWxcbiAgICAgICAgICAgICAgICA/IG1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbbG93ZXJDYXNlRmlyc3RMZXR0ZXIodHlwZT8ubmFtZSldPy5wbHVyYWxcbiAgICAgICAgICAgICAgICA6IG1vZHVsZUNvbmZpZz8ubW9kZWxDb25maWdbbG93ZXJDYXNlRmlyc3RMZXR0ZXIodHlwZT8ubmFtZSldPy5sYWJlbFxuICAgICAgICAgICAgICAgID8gbW9kdWxlQ29uZmlnPy5tb2RlbENvbmZpZ1tsb3dlckNhc2VGaXJzdExldHRlcih0eXBlPy5uYW1lKV0/LmxhYmVsXG4gICAgICAgICAgICAgICAgOiB0eXBlLm5hbWUgKyAncydcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNpZGViYXItY29udGVudFwiIFtuZ1N0eWxlXT1cInsgJ2ZsZXgtYmFzaXMnOiAhcmVzcG9uc2l2ZVRvZ2dsZSA/ICd1bnNldCcgOiAnMCcgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTMgcC1tZC01IG1iLTNcIj5cbiAgICAgIDxiYXNlLW1vZGVsLXRhYmxlXG4gICAgICAgIFttb2RlbENvbmZpZ109XCJtb2R1bGVDb25maWc/Lm1vZGVsQ29uZmlnW2NhbWVsTW9kZWxOYW1lXVwiXG4gICAgICAgIFtjb25maWddPVwibW9kdWxlQ29uZmlnPy5maWVsZENvbmZpZ1tjYW1lbE1vZGVsTmFtZV0gfHwge31cIlxuICAgICAgICBbbW9kZWxOYW1lXT1cIm1vZGVsTmFtZVwiXG4gICAgICAgIFtsb2dnaW5nXT1cIm1vZHVsZUNvbmZpZz8ubG9nZ2luZ1wiXG4gICAgICAgIFtvYmplY3RJZF09XCJpZCAhPT0gJ25ldScgPyBpZCA6ICcnXCJcbiAgICAgICAgW2NyZWF0ZU1vZGVdPVwiaWQgPT09ICduZXUnXCJcbiAgICAgICAgKGNyZWF0ZU1vZGVDaGFuZ2VkKT1cIm9uQ3JlYXRlTW9kZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIChpZFNlbGVjdGVkKT1cImlkU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtpbXBvcnRdPVwiaXNJbXBvcnRQb3NzaWJsZSgpXCJcbiAgICAgICAgW2V4cG9ydF09XCJpc0V4cG9ydFBvc3NpYmxlKClcIlxuICAgICAgICBbY3JlYXRlXT1cImlzQ3JlYXRlUG9zc2libGUoKVwiXG4gICAgICAgIFt1cGRhdGVdPVwiaXNVcGRhdGVQb3NzaWJsZSgpXCJcbiAgICAgICAgW2RlbGV0ZV09XCJpc0RlbGV0ZVBvc3NpYmxlKClcIlxuICAgICAgICBbZHVwbGljYXRlXT1cImlzRHVwbGljYXRlUG9zc2libGUoKVwiXG4gICAgICAgIFtzaG93RmF2QnV0dG9uXT1cIiFyZXNwb25zaXZlVG9nZ2xlXCJcbiAgICAgID48L2Jhc2UtbW9kZWwtdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=