@sumaris-net/ngx-components 1.23.44 → 2.0.0-rc3

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 (739) hide show
  1. package/doc/build.md +2 -2
  2. package/doc/changelog.md +8 -0
  3. package/esm2020/public_api.mjs +278 -0
  4. package/esm2020/public_test_api.mjs +46 -0
  5. package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
  6. package/esm2020/src/app/admin/admin.module.mjs +34 -0
  7. package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
  8. package/esm2020/src/app/admin/services/person.service.mjs +161 -0
  9. package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
  10. package/esm2020/src/app/admin/users/list/users.mjs +233 -0
  11. package/esm2020/src/app/admin/users/list/users.module.mjs +58 -0
  12. package/esm2020/src/app/core/about/modal-about.mjs +71 -0
  13. package/esm2020/src/app/core/account/account.mjs +230 -0
  14. package/esm2020/src/app/core/auth/form/form-auth.mjs +131 -0
  15. package/esm2020/src/app/core/auth/modal/modal-auth.mjs +72 -0
  16. package/esm2020/src/app/core/core.module.mjs +223 -0
  17. package/esm2020/src/app/core/core.testing.module.mjs +86 -0
  18. package/esm2020/src/app/core/form/editor.class.mjs +672 -0
  19. package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +407 -0
  20. package/esm2020/src/app/core/form/entity-editor.class.mjs +646 -0
  21. package/esm2020/src/app/core/form/entity-metadata.component.mjs +25 -0
  22. package/esm2020/src/app/core/form/form-buttons-bar.component.mjs +71 -0
  23. package/esm2020/src/app/core/form/form.class.mjs +337 -0
  24. package/esm2020/src/app/core/form/form.utils.mjs +299 -0
  25. package/esm2020/src/app/core/form/list.form.mjs +222 -0
  26. package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -0
  27. package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
  28. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
  29. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
  30. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  31. package/esm2020/src/app/core/graphql/graphql.service.mjs +730 -0
  32. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  33. package/esm2020/src/app/core/home/home.mjs +257 -0
  34. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  35. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  36. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
  37. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +33 -0
  38. package/esm2020/src/app/core/menu/menu.component.mjs +317 -0
  39. package/{esm2015/src/app/core/menu/menu.model.js → esm2020/src/app/core/menu/menu.model.mjs} +0 -0
  40. package/esm2020/src/app/core/menu/menu.module.mjs +45 -0
  41. package/{esm2015/src/app/core/menu/menu.service.js → esm2020/src/app/core/menu/menu.service.mjs} +9 -7
  42. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  43. package/esm2020/src/app/core/peer/select-peer.modal.mjs +130 -0
  44. package/esm2020/src/app/core/peer/select-peer.module.mjs +35 -0
  45. package/esm2020/src/app/core/register/confirm/confirm.mjs +81 -0
  46. package/esm2020/src/app/core/register/form/form-register.mjs +181 -0
  47. package/esm2020/src/app/core/register/modal/modal-register.mjs +52 -0
  48. package/esm2020/src/app/core/register/register.module.mjs +42 -0
  49. package/esm2020/src/app/core/services/account.service.mjs +1112 -0
  50. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  51. package/esm2020/src/app/core/services/base-entity-service.class.mjs +432 -0
  52. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
  53. package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +0 -0
  54. package/{esm2015/src/app/core/services/config/core.config.js → esm2020/src/app/core/services/config/core.config.mjs} +0 -0
  55. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  56. package/{esm2015/src/app/core/services/crypto.service.js → esm2020/src/app/core/services/crypto.service.mjs} +7 -5
  57. package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +0 -0
  58. package/esm2020/src/app/core/services/local-settings.service.mjs +442 -0
  59. package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
  60. package/esm2020/src/app/core/services/model/config.model.mjs +89 -0
  61. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  62. package/esm2020/src/app/core/services/model/entity.decorators.mjs +107 -0
  63. package/esm2020/src/app/core/services/model/entity.model.mjs +242 -0
  64. package/{esm2015/src/app/core/services/model/filter.model.js → esm2020/src/app/core/services/model/filter.model.mjs} +0 -0
  65. package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
  66. package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
  67. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  68. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  69. package/esm2020/src/app/core/services/model/referential.model.mjs +145 -0
  70. package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
  71. package/esm2020/src/app/core/services/network.service.mjs +595 -0
  72. package/esm2020/src/app/core/services/network.utils.mjs +16 -0
  73. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  74. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  75. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  76. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  77. package/esm2020/src/app/core/services/platform.service.mjs +476 -0
  78. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +422 -0
  79. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  80. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  81. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  82. package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
  83. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  84. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  85. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
  86. package/esm2020/src/app/core/settings/settings.page.mjs +290 -0
  87. package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
  88. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +394 -0
  89. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  90. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  91. package/esm2020/src/app/core/table/table.class.mjs +1666 -0
  92. package/esm2020/src/app/core/table/table.utils.mjs +13 -0
  93. package/esm2020/src/app/core/table/testing/table.testing.mjs +264 -0
  94. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  95. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.mjs +37 -0
  96. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +45 -0
  97. package/esm2020/src/app/core/text-popover/text-form.component.mjs +84 -0
  98. package/esm2020/src/app/core/text-popover/text-popover.component.mjs +92 -0
  99. package/esm2020/src/app/shared/alerts.mjs +238 -0
  100. package/esm2020/src/app/shared/audio/audio.mjs +201 -0
  101. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  102. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  103. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  104. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  105. package/{esm2015/src/app/shared/constants.js → esm2020/src/app/shared/constants.mjs} +2 -1
  106. package/esm2020/src/app/shared/dates.mjs +134 -0
  107. package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
  108. package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
  109. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  110. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  111. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  112. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  113. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  114. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  115. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  116. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  117. package/esm2020/src/app/shared/events.mjs +64 -0
  118. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  119. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  120. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  121. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  122. package/{esm2015/src/app/shared/file/uri.utils.js → esm2020/src/app/shared/file/uri.utils.mjs} +0 -0
  123. package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
  124. package/esm2020/src/app/shared/form/field.component.mjs +244 -0
  125. package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
  126. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  127. package/esm2020/src/app/shared/forms.mjs +374 -0
  128. package/esm2020/src/app/shared/functions.mjs +430 -0
  129. package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
  130. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  131. package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +0 -0
  132. package/esm2020/src/app/shared/graph/graph-colors.mjs +254 -0
  133. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  134. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  135. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  136. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  137. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  138. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  139. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +279 -0
  140. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +46 -0
  141. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  142. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
  143. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +33 -0
  144. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  145. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  146. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  147. package/esm2020/src/app/shared/image/image.service.mjs +99 -0
  148. package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
  149. package/{esm2015/src/app/shared/interceptors/progess.interceptor.js → esm2020/src/app/shared/interceptors/progess.interceptor.mjs} +0 -0
  150. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  151. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +836 -0
  152. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  153. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  154. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +205 -0
  155. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +157 -0
  156. package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
  157. package/esm2020/src/app/shared/material/badge/badge.test.mjs +26 -0
  158. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  159. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  160. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  161. package/esm2020/src/app/shared/material/chips/material.chips.mjs +691 -0
  162. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +136 -0
  163. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  164. package/esm2020/src/app/shared/material/datetime/material.date.mjs +388 -0
  165. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +327 -0
  166. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +434 -0
  167. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +110 -0
  168. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +111 -0
  169. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  170. package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
  171. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  172. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  173. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  174. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  175. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +74 -0
  176. package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +0 -0
  177. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  178. package/esm2020/src/app/shared/material/material.testing.module.mjs +145 -0
  179. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  180. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  181. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  182. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  183. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  184. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  185. package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
  186. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  187. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  188. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
  189. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  190. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
  191. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
  192. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +65 -0
  193. package/esm2020/src/app/shared/observables.mjs +96 -0
  194. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +135 -0
  195. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  196. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +49 -0
  197. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +42 -0
  198. package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
  199. package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
  200. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  201. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  202. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  203. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  204. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  205. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  206. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  207. package/{esm2015/src/app/shared/pipes/number-format.pipe.js → esm2020/src/app/shared/pipes/number-format.pipe.mjs} +14 -9
  208. package/esm2020/src/app/shared/pipes/pipes.module.mjs +210 -0
  209. package/esm2020/src/app/shared/pipes/property.pipes.mjs +96 -0
  210. package/esm2020/src/app/shared/pipes/string.pipes.mjs +69 -0
  211. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  212. package/esm2020/src/app/shared/platforms.mjs +49 -0
  213. package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
  214. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  215. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +331 -0
  216. package/esm2020/src/app/shared/services/progress-bar.service.mjs +32 -0
  217. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
  218. package/esm2020/src/app/shared/services/startable-service.class.mjs +105 -0
  219. package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
  220. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
  221. package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
  222. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  223. package/esm2020/src/app/shared/services.mjs +62 -0
  224. package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
  225. package/esm2020/src/app/shared/shared.module.mjs +208 -0
  226. package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
  227. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  228. package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
  229. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  230. package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
  231. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  232. package/esm2020/src/app/shared/toolbar/toolbar.mjs +226 -0
  233. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  234. package/{esm2015/src/app/shared/types.js → esm2020/src/app/shared/types.mjs} +0 -0
  235. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  236. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  237. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  238. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  239. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  240. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  241. package/esm2020/src/app/shared/validator/validators.mjs +544 -0
  242. package/{esm2015/src/app/shared/version/versions.js → esm2020/src/app/shared/version/versions.mjs} +0 -0
  243. package/esm2020/src/app/social/job/job.model.mjs +26 -0
  244. package/esm2020/src/app/social/job/job.module.mjs +35 -0
  245. package/esm2020/src/app/social/job/job.service.mjs +71 -0
  246. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +210 -0
  247. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
  248. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +53 -0
  249. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
  250. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  251. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  252. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  253. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  254. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  255. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  256. package/{esm2015/src/app/social/social.errors.js → esm2020/src/app/social/social.errors.mjs} +0 -0
  257. package/esm2020/src/app/social/social.module.mjs +47 -0
  258. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  259. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +108 -0
  260. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +212 -0
  261. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +228 -0
  262. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +107 -0
  263. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  264. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  265. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  266. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  267. package/esm2020/src/app/social/user-event/user-event.service.mjs +486 -0
  268. package/{esm2015/src/app/vendor.js → esm2020/src/app/vendor.mjs} +3 -3
  269. package/esm2020/src/environments/environment.class.mjs +5 -0
  270. package/esm2020/src/environments/environment.mjs +86 -0
  271. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  272. package/fesm2015/sumaris-net.ngx-components.mjs +33173 -0
  273. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  274. package/fesm2020/sumaris-net.ngx-components.mjs +32440 -0
  275. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  276. package/index.d.ts +5 -0
  277. package/package.json +27 -32
  278. package/public_api.d.ts +29 -31
  279. package/public_test_api.d.ts +37 -0
  280. package/resources/README.md +8 -0
  281. package/src/app/admin/admin-routing.module.d.ts +7 -0
  282. package/src/app/admin/admin.module.d.ts +7 -0
  283. package/src/app/admin/services/person.service.d.ts +3 -0
  284. package/src/app/admin/services/validator/person.validator.d.ts +8 -5
  285. package/src/app/admin/users/list/users.d.ts +11 -7
  286. package/src/app/admin/users/list/users.module.d.ts +14 -0
  287. package/src/app/core/about/modal-about.d.ts +3 -0
  288. package/src/app/core/account/account.d.ts +11 -8
  289. package/src/app/core/auth/form/form-auth.d.ts +6 -3
  290. package/src/app/core/auth/modal/modal-auth.d.ts +3 -0
  291. package/src/app/core/core.module.d.ts +36 -0
  292. package/src/app/core/core.testing.module.d.ts +10 -0
  293. package/src/app/core/form/editor.class.d.ts +6 -1
  294. package/src/app/core/form/entity-editor-modal.class.d.ts +7 -4
  295. package/src/app/core/form/entity-editor.class.d.ts +4 -1
  296. package/src/app/core/form/entity-metadata.component.d.ts +3 -0
  297. package/src/app/core/form/form-buttons-bar.component.d.ts +3 -0
  298. package/src/app/core/form/form.class.d.ts +12 -9
  299. package/src/app/core/form/form.utils.d.ts +5 -5
  300. package/src/app/core/form/list.form.d.ts +10 -7
  301. package/src/app/core/form/properties/properties.form.d.ts +43 -0
  302. package/src/app/core/form/properties/property.validator.d.ts +13 -0
  303. package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
  304. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  305. package/src/app/core/graphql/graphql.module.d.ts +5 -0
  306. package/src/app/core/graphql/graphql.service.d.ts +9 -2
  307. package/src/app/core/graphql/graphql.utils.d.ts +8 -0
  308. package/src/app/core/home/home.d.ts +4 -1
  309. package/src/app/core/icon/icon.component.d.ts +5 -2
  310. package/src/app/core/icon/icon.module.d.ts +7 -0
  311. package/src/app/core/install/install-upgrade-card.component.d.ts +5 -2
  312. package/src/app/core/install/install-upgrade-card.module.d.ts +10 -0
  313. package/src/app/core/menu/menu.component.d.ts +7 -5
  314. package/src/app/core/menu/menu.module.d.ts +8 -0
  315. package/src/app/core/menu/menu.service.d.ts +3 -0
  316. package/src/app/core/offline/update-offline-mode-card.component.d.ts +3 -0
  317. package/src/app/core/peer/select-peer.modal.d.ts +7 -4
  318. package/src/app/core/peer/select-peer.module.d.ts +9 -0
  319. package/src/app/core/register/confirm/confirm.d.ts +3 -0
  320. package/src/app/core/register/form/form-register.d.ts +10 -7
  321. package/src/app/core/register/modal/modal-register.d.ts +3 -0
  322. package/src/app/core/register/register.module.d.ts +12 -0
  323. package/src/app/core/services/account.service.d.ts +5 -2
  324. package/src/app/core/services/auth-guard.service.d.ts +3 -0
  325. package/src/app/core/services/base-entity-service.class.d.ts +3 -0
  326. package/src/app/core/services/base-graphql-service.class.d.ts +3 -0
  327. package/src/app/core/services/config.service.d.ts +4 -1
  328. package/src/app/core/services/crypto.service.d.ts +3 -0
  329. package/src/app/core/services/local-settings.service.d.ts +5 -1
  330. package/src/app/core/services/model/referential.model.d.ts +1 -1
  331. package/src/app/core/services/network.service.d.ts +6 -5
  332. package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
  333. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
  334. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
  335. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
  336. package/src/app/core/services/platform.service.d.ts +22 -21
  337. package/src/app/core/services/storage/entities-storage.service.d.ts +5 -2
  338. package/src/app/core/services/storage/entity-store.class.d.ts +3 -3
  339. package/src/app/core/services/testing/referential.validator.d.ts +8 -5
  340. package/src/app/core/services/validator/account.validator.d.ts +6 -3
  341. package/src/app/core/services/validator/base.validator.class.d.ts +8 -5
  342. package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
  343. package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
  344. package/src/app/core/settings/settings.page.d.ts +8 -5
  345. package/src/app/core/table/actions-column.component.d.ts +3 -0
  346. package/src/app/core/table/entities-table-datasource.class.d.ts +16 -15
  347. package/src/app/core/table/memory-table.class.d.ts +3 -0
  348. package/src/app/core/table/table-select-columns.component.d.ts +4 -5
  349. package/src/app/core/table/table.class.d.ts +52 -34
  350. package/src/app/core/table/table.utils.d.ts +2 -1
  351. package/src/app/core/table/testing/table.testing.d.ts +13 -15
  352. package/src/app/core/table/testing/table.testing.module.d.ts +9 -0
  353. package/src/app/core/text-popover/testing/text-popover.testing.d.ts +4 -1
  354. package/src/app/core/text-popover/testing/text-popover.testing.module.d.ts +9 -0
  355. package/src/app/core/text-popover/text-form.component.d.ts +7 -4
  356. package/src/app/core/text-popover/text-popover.component.d.ts +3 -0
  357. package/src/app/shared/alerts.d.ts +4 -4
  358. package/src/app/shared/audio/audio.d.ts +20 -11
  359. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  360. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  361. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  362. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  363. package/src/app/shared/constants.d.ts +1 -0
  364. package/src/app/shared/debug/debug.component.d.ts +13 -0
  365. package/src/app/shared/debug/debug.module.d.ts +12 -0
  366. package/src/app/shared/directives/autofocus.directive.d.ts +9 -7
  367. package/src/app/shared/directives/autotitle.directive.d.ts +3 -0
  368. package/src/app/shared/directives/directives.module.d.ts +10 -0
  369. package/src/app/shared/directives/drag-and-drop.directive.d.ts +3 -0
  370. package/src/app/shared/directives/ng-var.directive.d.ts +3 -0
  371. package/src/app/shared/directives/resizable/resizable.component.d.ts +3 -0
  372. package/src/app/shared/directives/resizable/resizable.directive.d.ts +3 -0
  373. package/src/app/shared/directives/resizable/resizable.module.d.ts +6 -0
  374. package/src/app/shared/file/file.service.d.ts +3 -0
  375. package/src/app/shared/file/file.utils.d.ts +1 -1
  376. package/src/app/shared/form/field.component.d.ts +12 -3
  377. package/src/app/shared/form/field.model.d.ts +2 -2
  378. package/src/app/shared/form/loading-spinner.d.ts +3 -0
  379. package/src/app/shared/forms.d.ts +13 -13
  380. package/src/app/shared/gesture/gesture-config.d.ts +3 -0
  381. package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
  382. package/src/app/shared/graph/graph-colors.d.ts +8 -7
  383. package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
  384. package/src/app/shared/help/help.modal.d.ts +4 -1
  385. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
  386. package/src/app/shared/hotkeys/hotkeys.service.d.ts +4 -1
  387. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
  388. package/src/app/shared/image/gallery/image-gallery.component.d.ts +77 -0
  389. package/src/app/shared/image/gallery/image-gallery.module.d.ts +12 -0
  390. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  391. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  392. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +15 -0
  393. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  394. package/src/app/shared/image/image.model.d.ts +5 -0
  395. package/src/app/shared/image/image.module.d.ts +8 -0
  396. package/src/app/shared/image/image.service.d.ts +32 -0
  397. package/src/app/shared/inputs.d.ts +3 -3
  398. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  399. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +11 -40
  400. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
  401. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  402. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +12 -9
  403. package/src/app/shared/material/badge/badge.directive.d.ts +28 -0
  404. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  405. package/src/app/shared/material/badge/badge.test.d.ts +12 -0
  406. package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
  407. package/src/app/shared/material/boolean/material.boolean.d.ts +7 -4
  408. package/src/app/shared/material/chips/chips.module.d.ts +19 -0
  409. package/src/app/shared/material/chips/material.chips.d.ts +11 -8
  410. package/src/app/shared/material/chips/testing/chips.test.d.ts +8 -5
  411. package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
  412. package/src/app/shared/material/datetime/material.date.d.ts +19 -18
  413. package/src/app/shared/material/datetime/material.dateshort.d.ts +10 -9
  414. package/src/app/shared/material/datetime/material.datetime.d.ts +21 -20
  415. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +11 -9
  416. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +11 -9
  417. package/src/app/shared/material/duration/duration.module.d.ts +16 -0
  418. package/src/app/shared/material/duration/material.duration.d.ts +8 -5
  419. package/src/app/shared/material/latlong/material.latlong.d.ts +8 -5
  420. package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
  421. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +10 -7
  422. package/src/app/shared/material/material.module.d.ts +43 -0
  423. package/src/app/shared/material/material.testing.module.d.ts +19 -0
  424. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
  425. package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
  426. package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
  427. package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
  428. package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
  429. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
  430. package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
  431. package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
  432. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +7 -4
  433. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
  434. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
  435. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -3
  436. package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
  437. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +7 -4
  438. package/src/app/shared/pipes/arrays.pipe.d.ts +17 -0
  439. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  440. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +4 -0
  441. package/src/app/shared/pipes/date-format.pipe.d.ts +4 -0
  442. package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
  443. package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
  444. package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
  445. package/src/app/shared/pipes/form.pipes.d.ts +18 -5
  446. package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
  447. package/src/app/shared/pipes/latlong-format.pipe.d.ts +7 -0
  448. package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
  449. package/src/app/shared/pipes/math.pipes.d.ts +10 -0
  450. package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
  451. package/src/app/shared/pipes/number-format.pipe.d.ts +4 -0
  452. package/src/app/shared/pipes/pipes.module.d.ts +24 -0
  453. package/src/app/shared/pipes/property.pipes.d.ts +6 -0
  454. package/src/app/shared/pipes/string.pipes.d.ts +11 -0
  455. package/src/app/shared/pipes/translate-context.pipe.d.ts +7 -0
  456. package/src/app/shared/platforms.d.ts +1 -0
  457. package/src/app/shared/services/memory-entity-service.class.d.ts +3 -0
  458. package/src/app/shared/services/progress-bar.service.d.ts +4 -1
  459. package/src/app/shared/services/startable-observable-service.class.d.ts +1 -1
  460. package/src/app/shared/services/startable-service.class.d.ts +1 -1
  461. package/src/app/shared/services/storage/storage.service.d.ts +23 -0
  462. package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
  463. package/src/app/shared/services/translate-context.service.d.ts +3 -0
  464. package/src/app/shared/services/validator-service.class.d.ts +2 -2
  465. package/src/app/shared/shared-routing.module.d.ts +7 -0
  466. package/src/app/shared/shared.module.d.ts +23 -0
  467. package/src/app/shared/shared.testing.module.d.ts +12 -0
  468. package/src/app/shared/testing/tests.page.d.ts +3 -0
  469. package/src/app/shared/toast/toast.testing.d.ts +6 -5
  470. package/src/app/shared/toast/toast.testing.module.d.ts +9 -0
  471. package/src/app/shared/toast/toasts.d.ts +5 -2
  472. package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
  473. package/src/app/shared/toolbar/toolbar.d.ts +9 -5
  474. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  475. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +4 -1
  476. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +9 -0
  477. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +3 -0
  478. package/src/app/shared/upload-file/upload-file.component.d.ts +3 -0
  479. package/src/app/shared/validator/form-error-adapter.class.d.ts +3 -0
  480. package/src/app/shared/validator/validators.d.ts +9 -9
  481. package/src/app/social/job/job.module.d.ts +9 -0
  482. package/src/app/social/job/job.service.d.ts +3 -0
  483. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -1
  484. package/src/app/social/job/progression/job-progression.list.d.ts +3 -0
  485. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -0
  486. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -0
  487. package/src/app/social/job/testing/job.testing.module.d.ts +9 -0
  488. package/src/app/social/message/message.form.d.ts +5 -2
  489. package/src/app/social/message/message.modal.d.ts +5 -2
  490. package/src/app/social/message/message.module.d.ts +9 -0
  491. package/src/app/social/message/message.service.d.ts +3 -0
  492. package/src/app/social/social.module.d.ts +10 -0
  493. package/src/app/social/social.testing.module.d.ts +9 -0
  494. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -1
  495. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +7 -4
  496. package/src/app/social/user-event/testing/user-event.testing.d.ts +3 -0
  497. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +1 -0
  498. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +9 -0
  499. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +5 -1
  500. package/src/app/social/user-event/user-event.model.d.ts +3 -2
  501. package/src/app/social/user-event/user-event.module.d.ts +10 -0
  502. package/src/app/social/user-event/user-event.service.d.ts +16 -11
  503. package/src/assets/audio/beep-notification.mp3 +0 -0
  504. package/src/assets/i18n/fr.json +9 -2
  505. package/src/environments/environment.class.d.ts +2 -0
  506. package/src/environments/environment.d.ts +1 -1
  507. package/src/theme/_icons.scss +1 -1
  508. package/src/theme/_material.globals.scss +29 -31
  509. package/src/theme/_material.scss +32 -6
  510. package/src/theme/_mixins.scss +4 -4
  511. package/src/theme/_ngx-components.scss +27 -0
  512. package/src/theme/_print.scss +24 -0
  513. package/bundles/sumaris-net.ngx-components.umd.js +0 -35755
  514. package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
  515. package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
  516. package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
  517. package/esm2015/public_api.js +0 -245
  518. package/esm2015/src/app/admin/admin-routing.module.js +0 -34
  519. package/esm2015/src/app/admin/admin.module.js +0 -34
  520. package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
  521. package/esm2015/src/app/admin/services/person.service.js +0 -175
  522. package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
  523. package/esm2015/src/app/admin/users/list/users.js +0 -216
  524. package/esm2015/src/app/core/about/modal-about.js +0 -63
  525. package/esm2015/src/app/core/account/account.js +0 -240
  526. package/esm2015/src/app/core/auth/form/form-auth.js +0 -134
  527. package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -78
  528. package/esm2015/src/app/core/core.module.js +0 -127
  529. package/esm2015/src/app/core/core.testing.module.js +0 -51
  530. package/esm2015/src/app/core/form/editor.class.js +0 -698
  531. package/esm2015/src/app/core/form/entity-editor-modal.class.js +0 -422
  532. package/esm2015/src/app/core/form/entity-editor.class.js +0 -676
  533. package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
  534. package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -63
  535. package/esm2015/src/app/core/form/form.class.js +0 -342
  536. package/esm2015/src/app/core/form/form.utils.js +0 -299
  537. package/esm2015/src/app/core/form/list.form.js +0 -219
  538. package/esm2015/src/app/core/form/properties.form.js +0 -119
  539. package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
  540. package/esm2015/src/app/core/graphql/graphql.service.js +0 -734
  541. package/esm2015/src/app/core/graphql/graphql.utils.js +0 -106
  542. package/esm2015/src/app/core/home/home.js +0 -265
  543. package/esm2015/src/app/core/icon/icon.component.js +0 -32
  544. package/esm2015/src/app/core/icon/icon.module.js +0 -26
  545. package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -358
  546. package/esm2015/src/app/core/menu/menu.component.js +0 -329
  547. package/esm2015/src/app/core/menu/menu.module.js +0 -28
  548. package/esm2015/src/app/core/offline/update-offline-mode-card.component.js +0 -26
  549. package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
  550. package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
  551. package/esm2015/src/app/core/register/form/form-register.js +0 -172
  552. package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
  553. package/esm2015/src/app/core/services/account.service.js +0 -1165
  554. package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
  555. package/esm2015/src/app/core/services/base-entity-service.class.js +0 -454
  556. package/esm2015/src/app/core/services/base-graphql-service.class.js +0 -221
  557. package/esm2015/src/app/core/services/config.service.js +0 -385
  558. package/esm2015/src/app/core/services/local-settings.service.js +0 -460
  559. package/esm2015/src/app/core/services/model/account.model.js +0 -50
  560. package/esm2015/src/app/core/services/model/config.model.js +0 -89
  561. package/esm2015/src/app/core/services/model/department.model.js +0 -30
  562. package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
  563. package/esm2015/src/app/core/services/model/entity.model.js +0 -245
  564. package/esm2015/src/app/core/services/model/peer.model.js +0 -68
  565. package/esm2015/src/app/core/services/model/person.model.js +0 -83
  566. package/esm2015/src/app/core/services/model/referential.model.js +0 -147
  567. package/esm2015/src/app/core/services/model/settings.model.js +0 -75
  568. package/esm2015/src/app/core/services/network.service.js +0 -631
  569. package/esm2015/src/app/core/services/network.utils.js +0 -19
  570. package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
  571. package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
  572. package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
  573. package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
  574. package/esm2015/src/app/core/services/platform.service.js +0 -549
  575. package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -452
  576. package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -461
  577. package/esm2015/src/app/core/services/testing/referential-filter.model.js +0 -23
  578. package/esm2015/src/app/core/services/testing/referential.validator.js +0 -44
  579. package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
  580. package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
  581. package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
  582. package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
  583. package/esm2015/src/app/core/settings/settings.page.js +0 -305
  584. package/esm2015/src/app/core/table/actions-column.component.js +0 -74
  585. package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -405
  586. package/esm2015/src/app/core/table/memory-table.class.js +0 -59
  587. package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
  588. package/esm2015/src/app/core/table/table.class.js +0 -1677
  589. package/esm2015/src/app/core/table/table.utils.js +0 -13
  590. package/esm2015/src/app/core/table/testing/table.testing.js +0 -242
  591. package/esm2015/src/app/core/table/testing/table.testing.module.js +0 -26
  592. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.js +0 -37
  593. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.module.js +0 -33
  594. package/esm2015/src/app/core/text-popover/text-form.component.js +0 -72
  595. package/esm2015/src/app/core/text-popover/text-popover.component.js +0 -90
  596. package/esm2015/src/app/shared/alerts.js +0 -251
  597. package/esm2015/src/app/shared/audio/audio.js +0 -178
  598. package/esm2015/src/app/shared/dates.js +0 -134
  599. package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -90
  600. package/esm2015/src/app/shared/directives/autotitle.directive.js +0 -27
  601. package/esm2015/src/app/shared/directives/directives.module.js +0 -30
  602. package/esm2015/src/app/shared/directives/drag-and-drop.directive.js +0 -43
  603. package/esm2015/src/app/shared/directives/ng-var.directive.js +0 -32
  604. package/esm2015/src/app/shared/directives/resizable/resizable.component.js +0 -54
  605. package/esm2015/src/app/shared/directives/resizable/resizable.directive.js +0 -34
  606. package/esm2015/src/app/shared/directives/resizable/resizable.module.js +0 -12
  607. package/esm2015/src/app/shared/events.js +0 -61
  608. package/esm2015/src/app/shared/file/csv.utils.js +0 -70
  609. package/esm2015/src/app/shared/file/file.service.js +0 -120
  610. package/esm2015/src/app/shared/file/file.utils.js +0 -116
  611. package/esm2015/src/app/shared/file/images.utils.js +0 -166
  612. package/esm2015/src/app/shared/form/field.component.js +0 -206
  613. package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
  614. package/esm2015/src/app/shared/forms.js +0 -358
  615. package/esm2015/src/app/shared/functions.js +0 -431
  616. package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
  617. package/esm2015/src/app/shared/graph/graph-colors.js +0 -205
  618. package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
  619. package/esm2015/src/app/shared/help/help.modal.js +0 -56
  620. package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
  621. package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -91
  622. package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
  623. package/esm2015/src/app/shared/http/http.utils.js +0 -57
  624. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -825
  625. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
  626. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -200
  627. package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -135
  628. package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
  629. package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -17
  630. package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
  631. package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -223
  632. package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
  633. package/esm2015/src/app/shared/material/chips/material.chips.js +0 -636
  634. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -138
  635. package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
  636. package/esm2015/src/app/shared/material/datetime/material.date.js +0 -375
  637. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -316
  638. package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -398
  639. package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -110
  640. package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +0 -108
  641. package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
  642. package/esm2015/src/app/shared/material/duration/material.duration.js +0 -246
  643. package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
  644. package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -350
  645. package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
  646. package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
  647. package/esm2015/src/app/shared/material/material.module.js +0 -93
  648. package/esm2015/src/app/shared/material/material.testing.module.js +0 -111
  649. package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
  650. package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
  651. package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
  652. package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
  653. package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
  654. package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
  655. package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
  656. package/esm2015/src/app/shared/material/numpad/testing/numpad.test.js +0 -44
  657. package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
  658. package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
  659. package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -308
  660. package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
  661. package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
  662. package/esm2015/src/app/shared/observables.js +0 -99
  663. package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -110
  664. package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -50
  665. package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -43
  666. package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
  667. package/esm2015/src/app/shared/pipes/form.pipes.js +0 -177
  668. package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
  669. package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -36
  670. package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
  671. package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
  672. package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
  673. package/esm2015/src/app/shared/pipes/pipes.module.js +0 -117
  674. package/esm2015/src/app/shared/pipes/property.pipes.js +0 -98
  675. package/esm2015/src/app/shared/pipes/string.pipes.js +0 -53
  676. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -36
  677. package/esm2015/src/app/shared/platforms.js +0 -45
  678. package/esm2015/src/app/shared/services/entity-service.class.js +0 -8
  679. package/esm2015/src/app/shared/services/job.utils.js +0 -96
  680. package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -342
  681. package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
  682. package/esm2015/src/app/shared/services/startable-observable-service.class.js +0 -124
  683. package/esm2015/src/app/shared/services/startable-service.class.js +0 -110
  684. package/esm2015/src/app/shared/services/storage.utils.js +0 -41
  685. package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
  686. package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
  687. package/esm2015/src/app/shared/services.js +0 -61
  688. package/esm2015/src/app/shared/shared-routing.module.js +0 -54
  689. package/esm2015/src/app/shared/shared.module.js +0 -135
  690. package/esm2015/src/app/shared/shared.testing.module.js +0 -33
  691. package/esm2015/src/app/shared/testing/tests.page.js +0 -34
  692. package/esm2015/src/app/shared/toast/toast.testing.js +0 -39
  693. package/esm2015/src/app/shared/toast/toast.testing.module.js +0 -33
  694. package/esm2015/src/app/shared/toast/toasts.js +0 -119
  695. package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
  696. package/esm2015/src/app/shared/toolbar/toolbar.js +0 -213
  697. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +0 -59
  698. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.module.js +0 -33
  699. package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +0 -98
  700. package/esm2015/src/app/shared/upload-file/upload-file.component.js +0 -202
  701. package/esm2015/src/app/shared/upload-file/upload-file.model.js +0 -20
  702. package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -99
  703. package/esm2015/src/app/shared/validator/validators.js +0 -537
  704. package/esm2015/src/app/social/job/job.model.js +0 -26
  705. package/esm2015/src/app/social/job/job.module.js +0 -25
  706. package/esm2015/src/app/social/job/job.service.js +0 -66
  707. package/esm2015/src/app/social/job/progression/job-progression.icon.js +0 -208
  708. package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
  709. package/esm2015/src/app/social/job/testing/job-progression.testing.js +0 -49
  710. package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +0 -52
  711. package/esm2015/src/app/social/job/testing/job.testing.module.js +0 -25
  712. package/esm2015/src/app/social/message/message.form.js +0 -73
  713. package/esm2015/src/app/social/message/message.modal.js +0 -96
  714. package/esm2015/src/app/social/message/message.model.js +0 -65
  715. package/esm2015/src/app/social/message/message.module.js +0 -25
  716. package/esm2015/src/app/social/message/message.service.js +0 -87
  717. package/esm2015/src/app/social/social.module.js +0 -28
  718. package/esm2015/src/app/social/social.testing.module.js +0 -39
  719. package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +0 -106
  720. package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -203
  721. package/esm2015/src/app/social/user-event/testing/user-event.testing.js +0 -230
  722. package/esm2015/src/app/social/user-event/testing/user-event.testing.model.js +0 -103
  723. package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +0 -25
  724. package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +0 -117
  725. package/esm2015/src/app/social/user-event/user-event.model.js +0 -2
  726. package/esm2015/src/app/social/user-event/user-event.module.js +0 -27
  727. package/esm2015/src/app/social/user-event/user-event.service.js +0 -509
  728. package/esm2015/src/environments/environment.class.js +0 -5
  729. package/esm2015/src/environments/environment.js +0 -81
  730. package/esm2015/sumaris-net.ngx-components.js +0 -21
  731. package/fesm2015/sumaris-net.ngx-components.js +0 -30297
  732. package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
  733. package/src/app/core/form/properties.form.d.ts +0 -40
  734. package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -28
  735. package/src/app/shared/material/badge/badge-icon.module.d.ts +0 -2
  736. package/src/app/shared/material/badge/badge-icon.test.d.ts +0 -9
  737. package/src/app/shared/services/storage.utils.d.ts +0 -13
  738. package/sumaris-net.ngx-components.d.ts +0 -20
  739. package/sumaris-net.ngx-components.metadata.json +0 -1
@@ -0,0 +1,219 @@
1
+ import { EntityUtils } from './model/entity.model';
2
+ import { isNotEmptyArray, isNotNil, toBoolean } from '../../shared/functions';
3
+ import { environment } from '../../../environments/environment';
4
+ import { Directive, Optional } from '@angular/core';
5
+ import { StartableService } from '../../shared/services/startable-service.class';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../graphql/graphql.service";
8
+ const sha256 = require('hash.js/lib/hash/sha/256');
9
+ export class BaseGraphqlServiceOptions {
10
+ }
11
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
12
+ export class BaseGraphqlService extends StartableService {
13
+ constructor(graphql, options) {
14
+ super(graphql);
15
+ this.graphql = graphql;
16
+ this._mutableWatchQueries = [];
17
+ // Max updated queries, for this entity.
18
+ // - Can be override by subclasses (in constructor)
19
+ // - Use value -1 for no max size
20
+ // - Default value to 3, because it usually enough (e.g. OperationService and LandingService need at least 2)
21
+ this._mutableWatchQueriesMaxCount = 3;
22
+ // for DEV only
23
+ this._debug = toBoolean(options && !options.production, !environment.production);
24
+ this._logPrefix = `[base-graphql-service] `;
25
+ }
26
+ mutableWatchQuery(opts) {
27
+ opts.fetchPolicy = opts.fetchPolicy || this.graphql.defaultFetchPolicy;
28
+ // Standard query (no cache)
29
+ if (opts.fetchPolicy === 'no-cache') {
30
+ return this.graphql.watchQuery(opts);
31
+ }
32
+ // No arrayFieldName
33
+ if (!opts.arrayFieldName) {
34
+ if (this._debug)
35
+ console.warn(this._logPrefix + '̀Missing \'opts.arrayFieldName\' : unable to create a mutable watch query');
36
+ return this.graphql.watchQuery(opts);
37
+ }
38
+ // Create the query id
39
+ const queryId = this.computeMutableWatchQueryId(opts);
40
+ const exactMatchQueries = this._mutableWatchQueries.filter(q => q.id === queryId);
41
+ let mutableQuery;
42
+ let queryRef;
43
+ if (exactMatchQueries.length === 1) {
44
+ mutableQuery = exactMatchQueries[0];
45
+ mutableQuery.counter += 1;
46
+ queryRef = mutableQuery.queryRef;
47
+ if (this._debug)
48
+ console.debug(this._logPrefix + `Find same mutable watch query (same variables) {${queryId}}. Skip register`);
49
+ // Refetch if need data from network
50
+ if (opts.fetchPolicy === 'network-only' || opts.fetchPolicy === 'cache-and-network') {
51
+ console.warn(this._logPrefix + ' Mutable query already exists, and fetchPolicy=' + opts.fetchPolicy + '. Force refetch query...');
52
+ queryRef.refetch(mutableQuery.variables);
53
+ }
54
+ //if (mutableQuery.counter > 3) {
55
+ // console.warn(this._debugPrefix + 'TODO: clean previous queries with name: ' + queryName);
56
+ //}
57
+ }
58
+ else {
59
+ queryRef = this.graphql.watchQueryRef(opts);
60
+ this.registerNewMutableWatchQuery({
61
+ id: queryId,
62
+ query: opts.query,
63
+ queryRef,
64
+ variables: opts.variables,
65
+ arrayFieldName: opts.arrayFieldName,
66
+ totalFieldName: opts.totalFieldName,
67
+ insertFilterFn: opts.insertFilterFn,
68
+ sortFn: opts.sortFn,
69
+ counter: 1
70
+ });
71
+ }
72
+ return this.graphql.queryRefValuesChanges(queryRef, opts);
73
+ }
74
+ insertIntoMutableCachedQueries(cache, opts) {
75
+ const queries = this.findMutableWatchQueries(opts);
76
+ if (!queries.length)
77
+ return;
78
+ queries.forEach(query => {
79
+ if (Array.isArray(opts.data)) {
80
+ // Filter values, if a filter function exists
81
+ const data = query.insertFilterFn ? opts.data.filter(i => query.insertFilterFn(i)) : opts.data;
82
+ if (isNotEmptyArray(data)) {
83
+ if (this._debug)
84
+ console.debug(`[base-data-service] Inserting data into watching query: `, query.id);
85
+ this.graphql.addManyToQueryCache(cache, {
86
+ query: query.query,
87
+ variables: query.variables,
88
+ arrayFieldName: query.arrayFieldName,
89
+ totalFieldName: query.totalFieldName,
90
+ sortFn: query.sortFn,
91
+ data
92
+ });
93
+ }
94
+ }
95
+ // Filter value, if a filter function exists
96
+ else if (!query.insertFilterFn || query.insertFilterFn(opts.data)) {
97
+ if (this._debug)
98
+ console.debug(`[base-data-service] Inserting data into watching query: `, query.id);
99
+ this.graphql.insertIntoQueryCache(cache, {
100
+ query: query.query,
101
+ variables: query.variables,
102
+ arrayFieldName: query.arrayFieldName,
103
+ totalFieldName: query.totalFieldName,
104
+ sortFn: query.sortFn,
105
+ data: opts.data
106
+ });
107
+ }
108
+ });
109
+ }
110
+ removeFromMutableCachedQueriesByIds(cache, opts) {
111
+ const queries = this.findMutableWatchQueries(opts);
112
+ if (!queries.length)
113
+ return;
114
+ console.debug(`[base-data-service] Removing data from watching queries: `, queries);
115
+ return queries.map(query => {
116
+ if (Array.isArray(opts.ids)) {
117
+ return this.graphql.removeFromCachedQueryByIds(cache, {
118
+ query: query.query,
119
+ variables: query.variables,
120
+ arrayFieldName: query.arrayFieldName,
121
+ totalFieldName: query.totalFieldName,
122
+ ids: opts.ids
123
+ });
124
+ }
125
+ else {
126
+ return this.graphql.removeFromCachedQueryById(cache, {
127
+ query: query.query,
128
+ variables: query.variables,
129
+ arrayFieldName: query.arrayFieldName,
130
+ totalFieldName: query.totalFieldName,
131
+ ids: opts.ids
132
+ }) ? 1 : 0;
133
+ }
134
+ })
135
+ // Sum
136
+ .reduce((res, count) => res + count, 0);
137
+ }
138
+ async refetchMutableWatchQueries(opts) {
139
+ // Retrieve queries to refetch
140
+ const queries = this.findMutableWatchQueries(opts);
141
+ // Skip if nothing to refetch
142
+ if (!queries.length)
143
+ return;
144
+ try {
145
+ await Promise.all(queries.map(query => {
146
+ if (this._debug)
147
+ console.debug(this._logPrefix + `Refetching mutable watch query {${query.id}}`);
148
+ return query.queryRef.refetch({ ...query.variables, ...opts.variables });
149
+ }));
150
+ }
151
+ catch (err) {
152
+ console.error(this._logPrefix + 'Error while refetching mutable watch queries', err);
153
+ }
154
+ }
155
+ /* -- protected methods -- */
156
+ computeMutableWatchQueryId(opts) {
157
+ const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
158
+ const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
159
+ return [queryName, opts.arrayFieldName, variablesKey].join('|');
160
+ }
161
+ findMutableWatchQueries(opts) {
162
+ // Search by queryName
163
+ if (opts.queryName) {
164
+ return this._mutableWatchQueries.filter(q => q.id.startsWith(opts.queryName + '|'));
165
+ }
166
+ if (opts.queryNames) {
167
+ return opts.queryNames.map(queryName => this._mutableWatchQueries.filter(q => q.id.startsWith(queryName + '|')))
168
+ // flatMap
169
+ .reduce((res, array) => res.concat(...array), []);
170
+ }
171
+ // Search by query
172
+ if (opts.query) {
173
+ return this._mutableWatchQueries.filter(q => q.query === opts.query);
174
+ }
175
+ if (opts.queries) {
176
+ return opts.queries
177
+ .filter(isNotNil)
178
+ .map(query => this._mutableWatchQueries.filter(q => q.query === query))
179
+ // flatMap
180
+ .reduce((res, array) => res.concat(...array), []);
181
+ }
182
+ throw Error('Invalid options: only one property must be set');
183
+ }
184
+ registerNewMutableWatchQuery(mutableQuery) {
185
+ if (this._debug)
186
+ console.debug(this._logPrefix + `Register new mutable watch query {${mutableQuery.id}}`);
187
+ // If exceed the max size of mutable queries: remove some
188
+ if (this._mutableWatchQueriesMaxCount > 0 && this._mutableWatchQueries.length >= this._mutableWatchQueriesMaxCount) {
189
+ const removedWatchQueries = this._mutableWatchQueries.splice(0, 1 + this._mutableWatchQueries.length - this._mutableWatchQueriesMaxCount);
190
+ // Warn, as it shouldn't be happen often, when max is correctly set
191
+ console.warn(this._logPrefix + `Removing older mutable watching queries (stack exceed max of ${this._mutableWatchQueriesMaxCount}): `, removedWatchQueries.map(q => q.id));
192
+ }
193
+ // Define the sort function (to be used in insertIntoMutableCachedQuery())
194
+ if (!mutableQuery.sortFn && mutableQuery.variables && mutableQuery.variables.sortBy) {
195
+ mutableQuery.sortFn = mutableQuery.variables && mutableQuery.variables.sortBy
196
+ && EntityUtils.sortComparator(mutableQuery.variables.sortBy, mutableQuery.variables.sortDirection || 'asc');
197
+ }
198
+ // Add the new mutable query to array
199
+ this._mutableWatchQueries.push(mutableQuery);
200
+ }
201
+ findRefetchQueries(opts) {
202
+ return this.findMutableWatchQueries(opts)
203
+ // Workaround, to make refetch queries works: transform into a simple {query, variables}
204
+ .map(({ query, variables }) => {
205
+ return { query, variables };
206
+ });
207
+ }
208
+ ngOnStart() {
209
+ return Promise.resolve(null);
210
+ }
211
+ }
212
+ BaseGraphqlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: BaseGraphqlService, deps: [{ token: i1.GraphqlService }, { token: BaseGraphqlServiceOptions, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
213
+ BaseGraphqlService.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.6", type: BaseGraphqlService, usesInheritance: true, ngImport: i0 });
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: BaseGraphqlService, decorators: [{
215
+ type: Directive
216
+ }], ctorParameters: function () { return [{ type: i1.GraphqlService }, { type: BaseGraphqlServiceOptions, decorators: [{
217
+ type: Optional
218
+ }] }]; } });
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQzs7O0FBRS9FLE1BQU0sTUFBTSxHQUFJLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBOENwRCxNQUFNLE9BQU8seUJBQXlCO0NBRXJDO0FBR0Qsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0Isa0JBQXlELFNBQVEsZ0JBQW1CO0lBV3hHLFlBQ1ksT0FBdUIsRUFDckIsT0FBbUM7UUFFL0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEwsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFUekIseUJBQW9CLEdBQXdDLEVBQUUsQ0FBQztRQUV6RSx3Q0FBd0M7UUFDeEMsbURBQW1EO1FBQ25ELGlDQUFpQztRQUNqQyw2R0FBNkc7UUFDbkcsaUNBQTRCLEdBQUcsQ0FBQyxDQUFDO1FBUXpDLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxVQUFVLEdBQUcseUJBQXlCLENBQUM7SUFDOUMsQ0FB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QVM7OzBCQWVMLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0dyYXBocWxTZXJ2aWNlLCBNdXRhdGVRdWVyeU9wdGlvbnMsIFdhdGNoUXVlcnlPcHRpb25zfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge1BhZ2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0VtcHR5T2JqZWN0fSBmcm9tICdhcG9sbG8tYW5ndWxhci90eXBlcyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGZXRjaFJlc3VsdH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9jb3JlJztcbmltcG9ydCB7RW50aXR5VXRpbHN9IGZyb20gJy4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7QXBvbGxvQ2FjaGUsIEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtRdWVyeVJlZn0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtQdXJlUXVlcnlPcHRpb25zfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlL3R5cGVzJztcbmltcG9ydCB7RG9jdW1lbnROb2RlfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcblxuY29uc3Qgc2hhMjU2ID0gIHJlcXVpcmUoJ2hhc2guanMvbGliL2hhc2gvc2hhLzI1NicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VmFyaWFibGVzPEY9IGFueT4gZXh0ZW5kcyBQYXJ0aWFsPFBhZ2U+IHtcbiAgZmlsdGVyPzogRjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0ZVF1ZXJ5V2l0aENhY2hlVXBkYXRlT3B0aW9uczxUID0gYW55LCBWID0gRW1wdHlPYmplY3Q+IGV4dGVuZHMgTXV0YXRlUXVlcnlPcHRpb25zPFQsIFY+IHtcbiAgY2FjaGVJbnNlcnQ/OiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICBmZXRjaERhdGE6ICh2YXJpYWJsZXM6IFYsIG11dGF0aW9uUmVzdWx0OiBGZXRjaFJlc3VsdDxUPikgPT4gYW55O1xuICB9W107XG5cbiAgY2FjaGVSZW1vdmU/OiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICBmZXRjaElkczogKHZhcmlhYmxlczogVikgPT4gbnVtYmVyIHwgbnVtYmVyW107XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdXRhYmxlV2F0Y2hRdWVyeU9wdGlvbnM8RCwgVCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PiBleHRlbmRzIFdhdGNoUXVlcnlPcHRpb25zPFY+IHtcbiAgcXVlcnlOYW1lOiBzdHJpbmc7XG4gIGFycmF5RmllbGROYW1lOiBrZXlvZiBEO1xuICB0b3RhbEZpZWxkTmFtZT86IGtleW9mIEQgO1xuICBpbnNlcnRGaWx0ZXJGbj86IChkYXRhOiBUKSA9PiBib29sZWFuO1xuICBzb3J0Rm4/OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248RCwgVCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PiBleHRlbmRzIFB1cmVRdWVyeU9wdGlvbnMge1xuICBpZD86IHN0cmluZztcbiAgcXVlcnk6IERvY3VtZW50Tm9kZTtcbiAgcXVlcnlSZWY6IFF1ZXJ5UmVmPEQsIFY+O1xuICB2YXJpYWJsZXM6IFY7XG4gIGFycmF5RmllbGROYW1lOiBrZXlvZiBEO1xuICB0b3RhbEZpZWxkTmFtZT86IGtleW9mIEQ7XG4gIGluc2VydEZpbHRlckZuPzogKGRhdGE6IFQpID0+IGJvb2xlYW47XG4gIHNvcnRGbj86IChhOiBULCBiOiBUKSA9PiBudW1iZXI7XG4gIGNvdW50ZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaW5kTXV0YWJsZVdhdGNoUXVlcmllc09wdGlvbnMge1xuICBxdWVyeT86IERvY3VtZW50Tm9kZTtcbiAgcXVlcmllcz86IERvY3VtZW50Tm9kZVtdO1xuICBxdWVyeU5hbWU/OiBzdHJpbmc7XG4gIHF1ZXJ5TmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VHcmFwaHFsU2VydmljZU9wdGlvbnMge1xuICBwcm9kdWN0aW9uPzogYm9vbGVhbjtcbn1cblxuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlR3JhcGhxbFNlcnZpY2U8VCA9IGFueSwgRiA9IGFueSwgSUQgPSBhbnksIFMgPSB2b2lkPiBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8Uz4ge1xuXG4gIHByb3RlY3RlZCBfbG9nUHJlZml4OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfbXV0YWJsZVdhdGNoUXVlcmllczogTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxhbnk+W10gPSBbXTtcblxuICAvLyBNYXggdXBkYXRlZCBxdWVyaWVzLCBmb3IgdGhpcyBlbnRpdHkuXG4gIC8vIC0gQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMgKGluIGNvbnN0cnVjdG9yKVxuICAvLyAtIFVzZSB2YWx1ZSAtMSBmb3Igbm8gbWF4IHNpemVcbiAgLy8gLSBEZWZhdWx0IHZhbHVlIHRvIDMsIGJlY2F1c2UgaXQgdXN1YWxseSBlbm91Z2ggKGUuZy4gT3BlcmF0aW9uU2VydmljZSBhbmQgTGFuZGluZ1NlcnZpY2UgbmVlZCBhdCBsZWFzdCAyKVxuICBwcm90ZWN0ZWQgX211dGFibGVXYXRjaFF1ZXJpZXNNYXhDb3VudCA9IDM7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBvcHRpb25zPzogQmFzZUdyYXBocWxTZXJ2aWNlT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihncmFwaHFsKTtcblxuICAgIC8vIGZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gdG9Cb29sZWFuKG9wdGlvbnMgJiYgIW9wdGlvbnMucHJvZHVjdGlvbiwgIWVudmlyb25tZW50LnByb2R1Y3Rpb24pO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9IGBbYmFzZS1ncmFwaHFsLXNlcnZpY2VdIGA7XG4gIH1cblxuICBtdXRhYmxlV2F0Y2hRdWVyeTxELCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IE11dGFibGVXYXRjaFF1ZXJ5T3B0aW9uczxELCBULCBWPik6IE9ic2VydmFibGU8RD4ge1xuICAgIG9wdHMuZmV0Y2hQb2xpY3kgPSBvcHRzLmZldGNoUG9saWN5IHx8IHRoaXMuZ3JhcGhxbC5kZWZhdWx0RmV0Y2hQb2xpY3k7XG5cbiAgICAvLyBTdGFuZGFyZCBxdWVyeSAobm8gY2FjaGUpXG4gICAgaWYgKG9wdHMuZmV0Y2hQb2xpY3kgPT09ICduby1jYWNoZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyYXBocWwud2F0Y2hRdWVyeShvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBObyBhcnJheUZpZWxkTmFtZVxuICAgIGlmICghb3B0cy5hcnJheUZpZWxkTmFtZSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgJ8yATWlzc2luZyBcXCdvcHRzLmFycmF5RmllbGROYW1lXFwnIDogdW5hYmxlIHRvIGNyZWF0ZSBhIG11dGFibGUgd2F0Y2ggcXVlcnknKTtcbiAgICAgIHJldHVybiB0aGlzLmdyYXBocWwud2F0Y2hRdWVyeShvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHF1ZXJ5IGlkXG4gICAgY29uc3QgcXVlcnlJZCA9IHRoaXMuY29tcHV0ZU11dGFibGVXYXRjaFF1ZXJ5SWQob3B0cyk7XG4gICAgY29uc3QgZXhhY3RNYXRjaFF1ZXJpZXMgPSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmZpbHRlcihxID0+IHEuaWQgPT09IHF1ZXJ5SWQpO1xuXG4gICAgbGV0IG11dGFibGVRdWVyeTogTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxELCBULCBWPjtcbiAgICBsZXQgcXVlcnlSZWY6IFF1ZXJ5UmVmPEQsIFY+O1xuXG4gICAgaWYgKGV4YWN0TWF0Y2hRdWVyaWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbXV0YWJsZVF1ZXJ5ID0gZXhhY3RNYXRjaFF1ZXJpZXNbMF0gYXMgTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxELCBULCBWPjtcbiAgICAgIG11dGFibGVRdWVyeS5jb3VudGVyICs9IDE7XG4gICAgICBxdWVyeVJlZiA9IG11dGFibGVRdWVyeS5xdWVyeVJlZjtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgRmluZCBzYW1lIG11dGFibGUgd2F0Y2ggcXVlcnkgKHNhbWUgdmFyaWFibGVzKSB7JHtxdWVyeUlkfX0uIFNraXAgcmVnaXN0ZXJgKTtcblxuICAgICAgLy8gUmVmZXRjaCBpZiBuZWVkIGRhdGEgZnJvbSBuZXR3b3JrXG4gICAgICBpZiAob3B0cy5mZXRjaFBvbGljeSA9PT0gJ25ldHdvcmstb25seScgfHwgb3B0cy5mZXRjaFBvbGljeSA9PT0gJ2NhY2hlLWFuZC1uZXR3b3JrJykge1xuICAgICAgICBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgJyBNdXRhYmxlIHF1ZXJ5IGFscmVhZHkgZXhpc3RzLCBhbmQgZmV0Y2hQb2xpY3k9JyArIG9wdHMuZmV0Y2hQb2xpY3kgKyAnLiBGb3JjZSByZWZldGNoIHF1ZXJ5Li4uJyk7XG4gICAgICAgIHF1ZXJ5UmVmLnJlZmV0Y2gobXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcyk7XG4gICAgICB9XG4gICAgICAvL2lmIChtdXRhYmxlUXVlcnkuY291bnRlciA+IDMpIHtcbiAgICAgIC8vICBjb25zb2xlLndhcm4odGhpcy5fZGVidWdQcmVmaXggKyAnVE9ETzogY2xlYW4gcHJldmlvdXMgcXVlcmllcyB3aXRoIG5hbWU6ICcgKyBxdWVyeU5hbWUpO1xuICAgICAgLy99XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcXVlcnlSZWYgPSB0aGlzLmdyYXBocWwud2F0Y2hRdWVyeVJlZjxELCBWPihvcHRzKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJOZXdNdXRhYmxlV2F0Y2hRdWVyeSh7XG4gICAgICAgIGlkOiBxdWVyeUlkLFxuICAgICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgICAgcXVlcnlSZWYsXG4gICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgIGFycmF5RmllbGROYW1lOiBvcHRzLmFycmF5RmllbGROYW1lLFxuICAgICAgICB0b3RhbEZpZWxkTmFtZTogb3B0cy50b3RhbEZpZWxkTmFtZSxcbiAgICAgICAgaW5zZXJ0RmlsdGVyRm46IG9wdHMuaW5zZXJ0RmlsdGVyRm4sXG4gICAgICAgIHNvcnRGbjogb3B0cy5zb3J0Rm4sXG4gICAgICAgIGNvdW50ZXI6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwucXVlcnlSZWZWYWx1ZXNDaGFuZ2VzKHF1ZXJ5UmVmLCBvcHRzKTtcbiAgfVxuXG4gIGluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZTogQXBvbGxvQ2FjaGU8YW55Piwgb3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zICYge1xuICAgIGRhdGE6IFRbXSB8IFQ7XG4gIH0pIHtcbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5maW5kTXV0YWJsZVdhdGNoUXVlcmllcyhvcHRzKTtcbiAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSAgcmV0dXJuO1xuXG4gICAgcXVlcmllcy5mb3JFYWNoKHF1ZXJ5ID0+IHtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLmRhdGEpKSB7XG4gICAgICAgICAgLy8gRmlsdGVyIHZhbHVlcywgaWYgYSBmaWx0ZXIgZnVuY3Rpb24gZXhpc3RzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHF1ZXJ5Lmluc2VydEZpbHRlckZuID8gb3B0cy5kYXRhLmZpbHRlcihpID0+IHF1ZXJ5Lmluc2VydEZpbHRlckZuKGkpKSA6IG9wdHMuZGF0YTtcbiAgICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtiYXNlLWRhdGEtc2VydmljZV0gSW5zZXJ0aW5nIGRhdGEgaW50byB3YXRjaGluZyBxdWVyeTogYCwgcXVlcnkuaWQpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaHFsLmFkZE1hbnlUb1F1ZXJ5Q2FjaGUoY2FjaGUsIHtcbiAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHF1ZXJ5LmFycmF5RmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU6IHF1ZXJ5LnRvdGFsRmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgc29ydEZuOiBxdWVyeS5zb3J0Rm4sXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGaWx0ZXIgdmFsdWUsIGlmIGEgZmlsdGVyIGZ1bmN0aW9uIGV4aXN0c1xuICAgICAgICBlbHNlIGlmICghcXVlcnkuaW5zZXJ0RmlsdGVyRm4gfHwgcXVlcnkuaW5zZXJ0RmlsdGVyRm4ob3B0cy5kYXRhKSkge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2Jhc2UtZGF0YS1zZXJ2aWNlXSBJbnNlcnRpbmcgZGF0YSBpbnRvIHdhdGNoaW5nIHF1ZXJ5OiBgLCBxdWVyeS5pZCk7XG4gICAgICAgICAgdGhpcy5ncmFwaHFsLmluc2VydEludG9RdWVyeUNhY2hlKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyeTogcXVlcnkucXVlcnksXG4gICAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBxdWVyeS5hcnJheUZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICB0b3RhbEZpZWxkTmFtZTogcXVlcnkudG90YWxGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgc29ydEZuOiBxdWVyeS5zb3J0Rm4sXG4gICAgICAgICAgICBkYXRhOiBvcHRzLmRhdGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICByZW1vdmVGcm9tTXV0YWJsZUNhY2hlZFF1ZXJpZXNCeUlkcyhjYWNoZTogQXBvbGxvQ2FjaGU8YW55Piwgb3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zICYge1xuICAgIGlkczogSUR8SURbXTtcbiAgfSk6IG51bWJlciB7XG4gICAgY29uc3QgcXVlcmllcyA9IHRoaXMuZmluZE11dGFibGVXYXRjaFF1ZXJpZXMob3B0cyk7XG4gICAgaWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZyhgW2Jhc2UtZGF0YS1zZXJ2aWNlXSBSZW1vdmluZyBkYXRhIGZyb20gd2F0Y2hpbmcgcXVlcmllczogYCwgcXVlcmllcyk7XG4gICAgcmV0dXJuIHF1ZXJpZXMubWFwKHF1ZXJ5ID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuaWRzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFwaHFsLnJlbW92ZUZyb21DYWNoZWRRdWVyeUJ5SWRzKGNhY2hlLCB7XG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogcXVlcnkudmFyaWFibGVzLFxuICAgICAgICAgIGFycmF5RmllbGROYW1lOiBxdWVyeS5hcnJheUZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgdG90YWxGaWVsZE5hbWU6IHF1ZXJ5LnRvdGFsRmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICBpZHM6IG9wdHMuaWRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyYXBocWwucmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZChjYWNoZSwge1xuICAgICAgICAgIHF1ZXJ5OiBxdWVyeS5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICBhcnJheUZpZWxkTmFtZTogcXVlcnkuYXJyYXlGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgIHRvdGFsRmllbGROYW1lOiBxdWVyeS50b3RhbEZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgaWRzOiBvcHRzLmlkc1xuICAgICAgICB9KSA/IDEgOiAwO1xuICAgICAgfVxuICAgIH0pXG4gICAgLy8gU3VtXG4gICAgLnJlZHVjZSgocmVzLCBjb3VudCkgPT4gcmVzICsgY291bnQsIDApO1xuICB9XG5cbiAgYXN5bmMgcmVmZXRjaE11dGFibGVXYXRjaFF1ZXJpZXMob3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zICYgeyB2YXJpYWJsZXM/OiBhbnkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJldHJpZXZlIHF1ZXJpZXMgdG8gcmVmZXRjaFxuICAgIGNvbnN0IHF1ZXJpZXMgPSB0aGlzLmZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHMpO1xuXG4gICAgLy8gU2tpcCBpZiBub3RoaW5nIHRvIHJlZmV0Y2hcbiAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocXVlcmllcy5tYXAocXVlcnkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFJlZmV0Y2hpbmcgbXV0YWJsZSB3YXRjaCBxdWVyeSB7JHtxdWVyeS5pZH19YCk7XG4gICAgICAgIHJldHVybiBxdWVyeS5xdWVyeVJlZi5yZWZldGNoKHsuLi5xdWVyeS52YXJpYWJsZXMsIC4uLm9wdHMudmFyaWFibGVzfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy5fbG9nUHJlZml4ICsgJ0Vycm9yIHdoaWxlIHJlZmV0Y2hpbmcgbXV0YWJsZSB3YXRjaCBxdWVyaWVzJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBjb21wdXRlTXV0YWJsZVdhdGNoUXVlcnlJZDxELCBULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IE11dGFibGVXYXRjaFF1ZXJ5T3B0aW9uczxELCBULCBWPikge1xuICAgIGNvbnN0IHF1ZXJ5TmFtZSA9IG9wdHMucXVlcnlOYW1lIHx8IHNoYTI1NigpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShvcHRzLnF1ZXJ5KSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgOCk7XG4gICAgY29uc3QgdmFyaWFibGVzS2V5ID0gb3B0cy52YXJpYWJsZXMgJiYgc2hhMjU2KCkudXBkYXRlKEpTT04uc3RyaW5naWZ5KG9wdHMudmFyaWFibGVzKSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgOCkgfHwgJyc7XG4gICAgcmV0dXJuIFtxdWVyeU5hbWUsIG9wdHMuYXJyYXlGaWVsZE5hbWUsIHZhcmlhYmxlc0tleV0uam9pbignfCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHM6IEZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzT3B0aW9ucyk6IE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248YW55PltdIHtcbiAgICAvLyBTZWFyY2ggYnkgcXVlcnlOYW1lXG4gICAgaWYgKG9wdHMucXVlcnlOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5maWx0ZXIocSA9PiBxLmlkLnN0YXJ0c1dpdGgob3B0cy5xdWVyeU5hbWUgKyAnfCcpKTtcbiAgICB9XG4gICAgaWYgKG9wdHMucXVlcnlOYW1lcykge1xuICAgICAgcmV0dXJuIG9wdHMucXVlcnlOYW1lcy5tYXAocXVlcnlOYW1lID0+IHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMuZmlsdGVyKHEgPT4gcS5pZC5zdGFydHNXaXRoKHF1ZXJ5TmFtZSArICd8JykpKVxuICAgICAgICAvLyBmbGF0TWFwXG4gICAgICAgIC5yZWR1Y2UoKHJlcywgYXJyYXkpID0+IHJlcy5jb25jYXQoLi4uYXJyYXkpLCBbXSk7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGJ5IHF1ZXJ5XG4gICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmZpbHRlcihxID0+IHEucXVlcnkgPT09IG9wdHMucXVlcnkpO1xuICAgIH1cbiAgICBpZiAob3B0cy5xdWVyaWVzKSB7XG4gICAgICByZXR1cm4gb3B0cy5xdWVyaWVzXG4gICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIC5tYXAocXVlcnkgPT4gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5maWx0ZXIocSA9PiBxLnF1ZXJ5ID09PSBxdWVyeSkpXG4gICAgICAgIC8vIGZsYXRNYXBcbiAgICAgICAgLnJlZHVjZSgocmVzLCBhcnJheSkgPT4gcmVzLmNvbmNhdCguLi5hcnJheSksIFtdKTtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgb3B0aW9uczogb25seSBvbmUgcHJvcGVydHkgbXVzdCBiZSBzZXQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3Rlck5ld011dGFibGVXYXRjaFF1ZXJ5KG11dGFibGVRdWVyeTogTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxhbnk+KSB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFJlZ2lzdGVyIG5ldyBtdXRhYmxlIHdhdGNoIHF1ZXJ5IHske211dGFibGVRdWVyeS5pZH19YCk7XG5cbiAgICAvLyBJZiBleGNlZWQgdGhlIG1heCBzaXplIG9mIG11dGFibGUgcXVlcmllczogcmVtb3ZlIHNvbWVcbiAgICBpZiAodGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllc01heENvdW50ID4gMCAmJiB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmxlbmd0aCA+PSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQpIHtcbiAgICAgIGNvbnN0IHJlbW92ZWRXYXRjaFF1ZXJpZXMgPSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLnNwbGljZSgwLCAxICsgdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5sZW5ndGggLSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQpO1xuXG4gICAgICAvLyBXYXJuLCBhcyBpdCBzaG91bGRuJ3QgYmUgaGFwcGVuIG9mdGVuLCB3aGVuIG1heCBpcyBjb3JyZWN0bHkgc2V0XG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFJlbW92aW5nIG9sZGVyIG11dGFibGUgd2F0Y2hpbmcgcXVlcmllcyAoc3RhY2sgZXhjZWVkIG1heCBvZiAke3RoaXMuX211dGFibGVXYXRjaFF1ZXJpZXNNYXhDb3VudH0pOiBgLFxuICAgICAgICByZW1vdmVkV2F0Y2hRdWVyaWVzLm1hcChxID0+IHEuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHNvcnQgZnVuY3Rpb24gKHRvIGJlIHVzZWQgaW4gaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyeSgpKVxuICAgIGlmICghbXV0YWJsZVF1ZXJ5LnNvcnRGbiAmJiBtdXRhYmxlUXVlcnkudmFyaWFibGVzICYmIG11dGFibGVRdWVyeS52YXJpYWJsZXMuc29ydEJ5KSB7XG4gICAgICBtdXRhYmxlUXVlcnkuc29ydEZuID0gbXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcyAmJiBtdXRhYmxlUXVlcnkudmFyaWFibGVzLnNvcnRCeVxuICAgICAgJiYgRW50aXR5VXRpbHMuc29ydENvbXBhcmF0b3IobXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcy5zb3J0QnksIG11dGFibGVRdWVyeS52YXJpYWJsZXMuc29ydERpcmVjdGlvbiB8fCAnYXNjJyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBuZXcgbXV0YWJsZSBxdWVyeSB0byBhcnJheVxuICAgIHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMucHVzaChtdXRhYmxlUXVlcnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRSZWZldGNoUXVlcmllcyhvcHRzOiBGaW5kTXV0YWJsZVdhdGNoUXVlcmllc09wdGlvbnMpOiBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE11dGFibGVXYXRjaFF1ZXJpZXMob3B0cylcbiAgICAgIC8vIFdvcmthcm91bmQsIHRvIG1ha2UgcmVmZXRjaCBxdWVyaWVzIHdvcmtzOiB0cmFuc2Zvcm0gaW50byBhIHNpbXBsZSB7cXVlcnksIHZhcmlhYmxlc31cbiAgICAgIC5tYXAoKHtxdWVyeSwgdmFyaWFibGVzfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBxdWVyeSwgdmFyaWFibGVzIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RhcnQoKTogUHJvbWlzZTxTPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsIGFzIFMpO1xuICB9XG59XG4iXX0=