@sumaris-net/ngx-components 1.2.8 → 1.2.14

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 (793) hide show
  1. package/README.md +9 -7
  2. package/doc/build.md +2 -2
  3. package/doc/changelog.md +402 -0
  4. package/esm2020/public_api.mjs +298 -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/users.mjs +234 -0
  11. package/esm2020/src/app/admin/users/users.module.mjs +54 -0
  12. package/esm2020/src/app/core/about/about.modal.mjs +71 -0
  13. package/esm2020/src/app/core/about/about.module.mjs +34 -0
  14. package/esm2020/src/app/core/account/account.module.mjs +43 -0
  15. package/esm2020/src/app/core/account/account.page.mjs +245 -0
  16. package/esm2020/src/app/core/auth/auth.form.mjs +131 -0
  17. package/esm2020/src/app/core/auth/auth.modal.mjs +72 -0
  18. package/esm2020/src/app/core/auth/auth.module.mjs +47 -0
  19. package/esm2020/src/app/core/core.module.mjs +184 -0
  20. package/esm2020/src/app/core/core.testing.module.mjs +86 -0
  21. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +71 -0
  22. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +35 -0
  23. package/esm2020/src/app/core/form/entity/editor.class.mjs +675 -0
  24. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +419 -0
  25. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +652 -0
  26. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +25 -0
  27. package/esm2020/src/app/core/form/entity/entity.module.mjs +38 -0
  28. package/esm2020/src/app/core/form/form.class.mjs +340 -0
  29. package/esm2020/src/app/core/form/form.module.mjs +66 -0
  30. package/esm2020/src/app/core/form/form.utils.mjs +473 -0
  31. package/esm2020/src/app/core/form/list/list.form.mjs +222 -0
  32. package/esm2020/src/app/core/form/list/list.module.mjs +35 -0
  33. package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -0
  34. package/esm2020/src/app/core/form/properties/properties.module.mjs +35 -0
  35. package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
  36. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
  37. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
  38. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +37 -0
  39. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +45 -0
  40. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +89 -0
  41. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +105 -0
  42. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +40 -0
  43. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  44. package/esm2020/src/app/core/graphql/graphql.service.mjs +749 -0
  45. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  46. package/esm2020/src/app/core/home/home.mjs +257 -0
  47. package/esm2020/src/app/core/home/home.module.mjs +48 -0
  48. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  49. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  50. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
  51. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +35 -0
  52. package/esm2020/src/app/core/menu/menu.component.mjs +330 -0
  53. package/esm2020/src/app/core/menu/menu.model.mjs +35 -0
  54. package/esm2020/src/app/core/menu/menu.module.mjs +44 -0
  55. package/esm2020/src/app/core/menu/menu.service.mjs +55 -0
  56. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  57. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +35 -0
  58. package/esm2020/src/app/core/peer/select-peer.modal.mjs +174 -0
  59. package/esm2020/src/app/core/peer/select-peer.module.mjs +42 -0
  60. package/esm2020/src/app/core/register/register-confirm.page.mjs +81 -0
  61. package/esm2020/src/app/core/register/register.form.mjs +181 -0
  62. package/esm2020/src/app/core/register/register.modal.mjs +52 -0
  63. package/esm2020/src/app/core/register/register.module.mjs +44 -0
  64. package/esm2020/src/app/core/services/account.service.mjs +1111 -0
  65. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  66. package/esm2020/src/app/core/services/base-entity-service.class.mjs +441 -0
  67. package/{esm2015/src/app/core/services/base-graphql-service.class.js → esm2020/src/app/core/services/base-graphql-service.class.mjs} +36 -34
  68. package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +2 -2
  69. package/esm2020/src/app/core/services/config/core.config.mjs +168 -0
  70. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  71. package/esm2020/src/app/core/services/crypto.service.mjs +114 -0
  72. package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +1 -1
  73. package/esm2020/src/app/core/services/local-settings.service.mjs +445 -0
  74. package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
  75. package/esm2020/src/app/core/services/model/config.model.mjs +92 -0
  76. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  77. package/esm2020/src/app/core/services/model/entity.decorators.mjs +97 -0
  78. package/esm2020/src/app/core/services/model/entity.model.mjs +228 -0
  79. package/esm2020/src/app/core/services/model/filter.model.mjs +94 -0
  80. package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
  81. package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
  82. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  83. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  84. package/esm2020/src/app/core/services/model/referential.model.mjs +153 -0
  85. package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
  86. package/esm2020/src/app/core/services/network.service.mjs +574 -0
  87. package/esm2020/src/app/core/services/network.types.mjs +20 -0
  88. package/esm2020/src/app/core/services/network.utils.mjs +16 -0
  89. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  90. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  91. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  92. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  93. package/esm2020/src/app/core/services/platform.service.mjs +493 -0
  94. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +427 -0
  95. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  96. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  97. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  98. package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
  99. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  100. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  101. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
  102. package/esm2020/src/app/core/settings/settings.module.mjs +34 -0
  103. package/esm2020/src/app/core/settings/settings.page.mjs +293 -0
  104. package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
  105. package/esm2020/src/app/core/table/async-table.class.mjs +1619 -0
  106. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +382 -0
  107. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +399 -0
  108. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  109. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  110. package/esm2020/src/app/core/table/table.class.mjs +1658 -0
  111. package/esm2020/src/app/core/table/table.model.mjs +12 -0
  112. package/esm2020/src/app/core/table/table.module.mjs +40 -0
  113. package/esm2020/src/app/core/table/table.utils.mjs +13 -0
  114. package/esm2020/src/app/core/table/testing/table.testing.mjs +265 -0
  115. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  116. package/esm2020/src/app/shared/alerts.mjs +238 -0
  117. package/esm2020/src/app/shared/audio/audio.mjs +201 -0
  118. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  119. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  120. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  121. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  122. package/esm2020/src/app/shared/constants.mjs +10 -0
  123. package/esm2020/src/app/shared/dates.mjs +142 -0
  124. package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
  125. package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
  126. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  127. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  128. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  129. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  130. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  131. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  132. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  133. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  134. package/esm2020/src/app/shared/events.mjs +64 -0
  135. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  136. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  137. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  138. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  139. package/esm2020/src/app/shared/file/json.utils.mjs +33 -0
  140. package/esm2020/src/app/shared/file/uri.utils.mjs +23 -0
  141. package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
  142. package/esm2020/src/app/shared/form/field.component.mjs +244 -0
  143. package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
  144. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  145. package/esm2020/src/app/shared/forms.mjs +391 -0
  146. package/esm2020/src/app/shared/functions.mjs +462 -0
  147. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +41 -0
  148. package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
  149. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  150. package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +1 -1
  151. package/esm2020/src/app/shared/graph/graph-colors.mjs +208 -0
  152. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  153. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  154. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  155. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  156. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  157. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  158. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +355 -0
  159. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +58 -0
  160. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  161. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
  162. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +39 -0
  163. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  164. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  165. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  166. package/esm2020/src/app/shared/image/image.service.mjs +98 -0
  167. package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
  168. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
  169. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  170. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +905 -0
  171. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  172. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  173. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +209 -0
  174. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +176 -0
  175. package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
  176. package/esm2020/src/app/shared/material/badge/badge.test.mjs +28 -0
  177. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  178. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  179. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  180. package/esm2020/src/app/shared/material/chips/material.chips.mjs +697 -0
  181. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +143 -0
  182. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  183. package/esm2020/src/app/shared/material/datetime/material.date.mjs +388 -0
  184. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +385 -0
  185. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +436 -0
  186. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +108 -0
  187. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +110 -0
  188. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +103 -0
  189. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  190. package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
  191. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  192. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  193. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  194. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  195. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +102 -0
  196. package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +1 -1
  197. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  198. package/esm2020/src/app/shared/material/material.testing.module.mjs +168 -0
  199. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  200. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  201. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  202. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  203. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  204. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  205. package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
  206. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  207. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  208. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
  209. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  210. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
  211. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
  212. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +64 -0
  213. package/esm2020/src/app/shared/modules.mjs +11 -0
  214. package/esm2020/src/app/shared/observables.mjs +103 -0
  215. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +135 -0
  216. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  217. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +48 -0
  218. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +66 -0
  219. package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
  220. package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
  221. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  222. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  223. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  224. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  225. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  226. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  227. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  228. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +30 -0
  229. package/esm2020/src/app/shared/pipes/pipes.module.mjs +218 -0
  230. package/esm2020/src/app/shared/pipes/property.pipes.mjs +93 -0
  231. package/esm2020/src/app/shared/pipes/string.pipes.mjs +95 -0
  232. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  233. package/esm2020/src/app/shared/platforms.mjs +43 -0
  234. package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
  235. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  236. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +337 -0
  237. package/esm2020/src/app/shared/services/progress-bar.service.mjs +33 -0
  238. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
  239. package/esm2020/src/app/shared/services/startable-service.class.mjs +105 -0
  240. package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
  241. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
  242. package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
  243. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  244. package/esm2020/src/app/shared/services.mjs +62 -0
  245. package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
  246. package/esm2020/src/app/shared/shared.module.mjs +207 -0
  247. package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
  248. package/esm2020/src/app/shared/testing/observable.test.mjs +95 -0
  249. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  250. package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
  251. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  252. package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
  253. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  254. package/esm2020/src/app/shared/toolbar/toolbar.mjs +249 -0
  255. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  256. package/esm2020/src/app/shared/types.mjs +2 -0
  257. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  258. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  259. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  260. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  261. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  262. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  263. package/esm2020/src/app/shared/validator/validators.mjs +543 -0
  264. package/esm2020/src/app/shared/version/versions.mjs +81 -0
  265. package/esm2020/src/app/social/job/job.module.mjs +35 -0
  266. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +213 -0
  267. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
  268. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
  269. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
  270. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +52 -0
  271. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
  272. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  273. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  274. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  275. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  276. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  277. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  278. package/esm2020/src/app/social/social.errors.mjs +10 -0
  279. package/esm2020/src/app/social/social.module.mjs +47 -0
  280. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  281. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +108 -0
  282. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +242 -0
  283. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +229 -0
  284. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +112 -0
  285. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  286. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  287. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  288. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  289. package/esm2020/src/app/social/user-event/user-event.service.mjs +487 -0
  290. package/esm2020/src/environments/environment.class.mjs +5 -0
  291. package/esm2020/src/environments/environment.mjs +86 -0
  292. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  293. package/fesm2015/sumaris-net.ngx-components.mjs +36563 -0
  294. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  295. package/fesm2020/sumaris-net.ngx-components.mjs +35734 -0
  296. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  297. package/index.d.ts +5 -0
  298. package/package.json +34 -32
  299. package/public_api.d.ts +137 -30
  300. package/resources/README.md +7 -0
  301. package/src/app/admin/admin-routing.module.d.ts +7 -0
  302. package/src/app/admin/admin.module.d.ts +7 -0
  303. package/src/app/admin/services/person.service.d.ts +5 -1
  304. package/src/app/admin/services/validator/person.validator.d.ts +8 -5
  305. package/src/app/admin/users/users.d.ts +44 -0
  306. package/src/app/admin/users/users.module.d.ts +13 -0
  307. package/src/app/core/about/{modal-about.d.ts → about.modal.d.ts} +3 -0
  308. package/src/app/core/about/about.module.d.ts +10 -0
  309. package/src/app/core/account/account.module.d.ts +11 -0
  310. package/src/app/core/account/{account.d.ts → account.page.d.ts} +23 -10
  311. package/src/app/core/auth/auth.form.d.ts +36 -0
  312. package/src/app/core/auth/auth.modal.d.ts +24 -0
  313. package/src/app/core/auth/auth.module.d.ts +11 -0
  314. package/src/app/core/core.module.d.ts +27 -0
  315. package/src/app/core/core.testing.module.d.ts +14 -0
  316. package/src/app/core/form/{form-buttons-bar.component.d.ts → buttons/form-buttons-bar.component.d.ts} +7 -2
  317. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  318. package/src/app/core/form/{editor.class.d.ts → entity/editor.class.d.ts} +84 -22
  319. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +129 -0
  320. package/src/app/core/form/{entity-editor.class.d.ts → entity/entity-editor.class.d.ts} +54 -29
  321. package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
  322. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  323. package/src/app/core/form/form.class.d.ts +57 -30
  324. package/src/app/core/form/form.module.d.ts +13 -0
  325. package/src/app/core/form/form.utils.d.ts +123 -114
  326. package/src/app/core/form/{list.form.d.ts → list/list.form.d.ts} +14 -11
  327. package/src/app/core/form/list/list.module.d.ts +9 -0
  328. package/src/app/core/form/properties/properties.form.d.ts +43 -0
  329. package/src/app/core/form/properties/properties.module.d.ts +9 -0
  330. package/src/app/core/form/properties/property.validator.d.ts +13 -0
  331. package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
  332. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  333. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +10 -0
  334. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
  335. package/src/app/core/form/text-popover/text-form.component.d.ts +32 -0
  336. package/src/app/core/form/text-popover/text-popover.component.d.ts +45 -0
  337. package/src/app/core/form/text-popover/text-popover.module.d.ts +10 -0
  338. package/src/app/core/graphql/graphql.module.d.ts +5 -0
  339. package/src/app/core/graphql/graphql.service.d.ts +16 -5
  340. package/src/app/core/graphql/graphql.utils.d.ts +12 -1
  341. package/src/app/core/home/home.d.ts +9 -4
  342. package/src/app/core/home/home.module.d.ts +12 -0
  343. package/src/app/core/icon/icon.component.d.ts +6 -2
  344. package/src/app/core/icon/icon.module.d.ts +9 -0
  345. package/src/app/core/install/install-upgrade-card.component.d.ts +7 -9
  346. package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
  347. package/src/app/core/menu/menu.component.d.ts +22 -15
  348. package/src/app/core/menu/menu.model.d.ts +2 -0
  349. package/src/app/core/menu/menu.module.d.ts +8 -0
  350. package/src/app/core/menu/menu.service.d.ts +18 -6
  351. package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
  352. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  353. package/src/app/core/peer/select-peer.modal.d.ts +25 -8
  354. package/src/app/core/peer/select-peer.module.d.ts +11 -0
  355. package/src/app/core/register/{confirm/confirm.d.ts → register-confirm.page.d.ts} +6 -3
  356. package/src/app/core/register/{form/form-register.d.ts → register.form.d.ts} +15 -12
  357. package/src/app/core/register/{modal/modal-register.d.ts → register.modal.d.ts} +4 -1
  358. package/src/app/core/register/register.module.d.ts +12 -0
  359. package/src/app/core/services/account.service.d.ts +34 -13
  360. package/src/app/core/services/auth-guard.service.d.ts +3 -0
  361. package/src/app/core/services/base-entity-service.class.d.ts +10 -19
  362. package/src/app/core/services/base-graphql-service.class.d.ts +13 -9
  363. package/src/app/core/services/config/core.config.d.ts +25 -24
  364. package/src/app/core/services/config.service.d.ts +9 -3
  365. package/src/app/core/services/crypto.service.d.ts +26 -18
  366. package/src/app/core/services/errors.d.ts +1 -1
  367. package/src/app/core/services/local-settings.service.d.ts +15 -7
  368. package/src/app/core/services/model/config.model.d.ts +1 -0
  369. package/src/app/core/services/model/entity.decorators.d.ts +1 -9
  370. package/src/app/core/services/model/entity.model.d.ts +4 -1
  371. package/src/app/core/services/model/filter.model.d.ts +13 -2
  372. package/src/app/core/services/model/referential.model.d.ts +20 -14
  373. package/src/app/core/services/model/settings.model.d.ts +0 -1
  374. package/src/app/core/services/network.service.d.ts +34 -22
  375. package/src/app/core/services/network.types.d.ts +5 -0
  376. package/src/app/core/services/network.utils.d.ts +16 -0
  377. package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
  378. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
  379. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
  380. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
  381. package/src/app/core/services/platform.service.d.ts +40 -25
  382. package/src/app/core/services/storage/entities-storage.service.d.ts +16 -9
  383. package/src/app/core/services/storage/entity-store.class.d.ts +6 -5
  384. package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
  385. package/src/app/core/services/testing/referential.validator.d.ts +22 -0
  386. package/src/app/core/services/validator/account.validator.d.ts +6 -3
  387. package/src/app/core/services/validator/base.validator.class.d.ts +9 -6
  388. package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
  389. package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
  390. package/src/app/core/settings/settings.module.d.ts +10 -0
  391. package/src/app/core/settings/settings.page.d.ts +13 -12
  392. package/src/app/core/table/actions-column.component.d.ts +4 -1
  393. package/src/app/core/table/async-table.class.d.ts +368 -0
  394. package/src/app/core/table/entities-async-table-datasource.class.d.ts +80 -0
  395. package/src/app/core/table/entities-table-datasource.class.d.ts +59 -36
  396. package/src/app/core/table/memory-table.class.d.ts +5 -3
  397. package/src/app/core/table/table-select-columns.component.d.ts +4 -5
  398. package/src/app/core/table/table.class.d.ts +67 -70
  399. package/src/app/core/table/table.model.d.ts +26 -0
  400. package/src/app/core/table/table.module.d.ts +10 -0
  401. package/src/app/core/table/table.utils.d.ts +2 -1
  402. package/src/app/core/table/testing/table.testing.d.ts +51 -0
  403. package/src/app/core/table/testing/table.testing.module.d.ts +11 -0
  404. package/src/app/shared/alerts.d.ts +4 -4
  405. package/src/app/shared/audio/audio.d.ts +20 -11
  406. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  407. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  408. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  409. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  410. package/src/app/shared/constants.d.ts +2 -0
  411. package/src/app/shared/dates.d.ts +25 -4
  412. package/src/app/shared/debug/debug.component.d.ts +13 -0
  413. package/src/app/shared/debug/debug.module.d.ts +12 -0
  414. package/src/app/shared/directives/autofocus.directive.d.ts +11 -9
  415. package/src/app/shared/directives/autotitle.directive.d.ts +10 -0
  416. package/src/app/shared/directives/directives.module.d.ts +10 -0
  417. package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
  418. package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
  419. package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
  420. package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
  421. package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
  422. package/src/app/shared/events.d.ts +6 -6
  423. package/src/app/shared/file/csv.utils.d.ts +19 -0
  424. package/src/app/shared/file/file.service.d.ts +8 -5
  425. package/src/app/shared/file/file.utils.d.ts +20 -0
  426. package/src/app/shared/file/images.utils.d.ts +19 -0
  427. package/src/app/shared/file/json.utils.d.ts +11 -0
  428. package/src/app/shared/file/uri.utils.d.ts +7 -0
  429. package/src/app/shared/form/field.component.d.ts +12 -3
  430. package/src/app/shared/form/field.model.d.ts +7 -6
  431. package/src/app/shared/form/loading-spinner.d.ts +3 -0
  432. package/src/app/shared/forms.d.ts +89 -0
  433. package/src/app/shared/functions.d.ts +21 -13
  434. package/src/app/shared/geolocation/geolocation.utils.d.ts +11 -0
  435. package/src/app/shared/gesture/gesture-config.d.ts +3 -0
  436. package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
  437. package/src/app/shared/graph/graph-colors.d.ts +8 -8
  438. package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
  439. package/src/app/shared/help/help.modal.d.ts +7 -4
  440. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
  441. package/src/app/shared/hotkeys/hotkeys.service.d.ts +7 -3
  442. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
  443. package/src/app/shared/http/http.utils.d.ts +14 -1
  444. package/src/app/shared/image/gallery/image-gallery.component.d.ts +101 -0
  445. package/src/app/shared/image/gallery/image-gallery.module.d.ts +14 -0
  446. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  447. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  448. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
  449. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  450. package/src/app/shared/image/image.model.d.ts +5 -0
  451. package/src/app/shared/image/image.module.d.ts +8 -0
  452. package/src/app/shared/image/image.service.d.ts +32 -0
  453. package/src/app/shared/inputs.d.ts +3 -3
  454. package/src/app/shared/interceptors/progess.interceptor.d.ts +2 -2
  455. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  456. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +69 -77
  457. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
  458. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  459. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +24 -17
  460. package/src/app/shared/material/badge/badge.directive.d.ts +30 -0
  461. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  462. package/src/app/shared/material/badge/badge.test.d.ts +13 -0
  463. package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
  464. package/src/app/shared/material/boolean/material.boolean.d.ts +11 -10
  465. package/src/app/shared/material/chips/chips.module.d.ts +20 -1
  466. package/src/app/shared/material/chips/material.chips.d.ts +52 -19
  467. package/src/app/shared/material/chips/testing/chips.test.d.ts +12 -7
  468. package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
  469. package/src/app/shared/material/datetime/material.date.d.ts +45 -38
  470. package/src/app/shared/material/datetime/material.dateshort.d.ts +47 -38
  471. package/src/app/shared/material/datetime/material.datetime.d.ts +40 -39
  472. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +12 -9
  473. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +30 -0
  474. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +29 -0
  475. package/src/app/shared/material/duration/duration.module.d.ts +16 -0
  476. package/src/app/shared/material/duration/material.duration.d.ts +14 -10
  477. package/src/app/shared/material/latlong/latlong.utils.d.ts +2 -2
  478. package/src/app/shared/material/latlong/material.latlong.d.ts +27 -23
  479. package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
  480. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +13 -7
  481. package/src/app/shared/material/material.module.d.ts +43 -0
  482. package/src/app/shared/material/material.testing.module.d.ts +25 -0
  483. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
  484. package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
  485. package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
  486. package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
  487. package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
  488. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
  489. package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
  490. package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
  491. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +13 -0
  492. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
  493. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
  494. package/src/app/shared/material/swipe/material.swipe.d.ts +12 -8
  495. package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
  496. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +11 -9
  497. package/src/app/shared/modules.d.ts +8 -0
  498. package/src/app/shared/observables.d.ts +18 -10
  499. package/src/app/shared/pipes/arrays.pipe.d.ts +27 -2
  500. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  501. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +10 -2
  502. package/src/app/shared/pipes/date-format.pipe.d.ts +25 -9
  503. package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
  504. package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
  505. package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
  506. package/src/app/shared/pipes/form.pipes.d.ts +43 -3
  507. package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
  508. package/src/app/shared/pipes/latlong-format.pipe.d.ts +13 -4
  509. package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
  510. package/src/app/shared/pipes/math.pipes.d.ts +10 -0
  511. package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
  512. package/src/app/shared/pipes/number-format.pipe.d.ts +7 -1
  513. package/src/app/shared/pipes/pipes.module.d.ts +24 -0
  514. package/src/app/shared/pipes/property.pipes.d.ts +26 -0
  515. package/src/app/shared/pipes/string.pipes.d.ts +24 -0
  516. package/src/app/shared/pipes/translate-context.pipe.d.ts +8 -1
  517. package/src/app/shared/platforms.d.ts +8 -0
  518. package/src/app/shared/services/entity-service.class.d.ts +28 -15
  519. package/src/app/shared/services/job.utils.d.ts +4 -2
  520. package/src/app/shared/services/memory-entity-service.class.d.ts +31 -10
  521. package/src/app/shared/services/progress-bar.service.d.ts +15 -4
  522. package/src/app/shared/services/startable-observable-service.class.d.ts +33 -0
  523. package/src/app/shared/services/startable-service.class.d.ts +13 -9
  524. package/src/app/shared/services/storage/storage.service.d.ts +23 -0
  525. package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
  526. package/src/app/shared/services/translate-context.service.d.ts +3 -0
  527. package/src/app/shared/services/validator-service.class.d.ts +2 -2
  528. package/src/app/shared/services.d.ts +9 -0
  529. package/src/app/shared/shared-routing.module.d.ts +7 -0
  530. package/src/app/shared/shared.module.d.ts +24 -0
  531. package/src/app/shared/shared.testing.module.d.ts +14 -0
  532. package/src/app/shared/testing/observable.test.d.ts +25 -0
  533. package/src/app/shared/{material/testing/material.testing.page.d.ts → testing/tests.page.d.ts} +6 -2
  534. package/src/app/shared/toast/toast.testing.d.ts +15 -0
  535. package/src/app/shared/toast/toast.testing.module.d.ts +11 -0
  536. package/src/app/shared/{toasts.d.ts → toast/toasts.d.ts} +5 -2
  537. package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
  538. package/src/app/shared/toolbar/toolbar.d.ts +22 -10
  539. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  540. package/src/app/shared/types.d.ts +4 -0
  541. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +20 -0
  542. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
  543. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +39 -0
  544. package/src/app/shared/upload-file/upload-file.component.d.ts +48 -0
  545. package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
  546. package/src/app/shared/validator/form-error-adapter.class.d.ts +6 -1
  547. package/src/app/shared/validator/validators.d.ts +47 -11
  548. package/src/app/shared/version/versions.d.ts +2 -0
  549. package/src/app/social/job/job.module.d.ts +11 -0
  550. package/src/app/social/job/progression/job-progression.icon.d.ts +47 -0
  551. package/src/app/social/job/progression/job-progression.list.d.ts +15 -0
  552. package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
  553. package/src/app/social/job/progression/job-progression.service.d.ts +34 -0
  554. package/src/app/social/job/testing/job-progression.testing.d.ts +17 -0
  555. package/src/app/social/job/testing/job-progression.testing.service.d.ts +17 -0
  556. package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
  557. package/src/app/social/message/message.form.d.ts +30 -0
  558. package/src/app/social/message/message.modal.d.ts +39 -0
  559. package/src/app/social/message/message.model.d.ts +31 -0
  560. package/src/app/social/message/message.module.d.ts +11 -0
  561. package/src/app/social/message/message.service.d.ts +27 -0
  562. package/src/app/social/social.errors.d.ts +9 -0
  563. package/src/app/social/social.module.d.ts +18 -2
  564. package/src/app/social/social.testing.module.d.ts +13 -0
  565. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +29 -0
  566. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +67 -0
  567. package/src/app/social/user-event/testing/user-event.testing.d.ts +34 -0
  568. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +44 -0
  569. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
  570. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +41 -0
  571. package/src/app/social/user-event/user-event.model.d.ts +45 -0
  572. package/src/app/social/user-event/user-event.module.d.ts +12 -0
  573. package/src/app/social/user-event/user-event.service.d.ts +124 -0
  574. package/src/assets/audio/beep-notification.mp3 +0 -0
  575. package/src/assets/i18n/en-US.json +83 -18
  576. package/src/assets/i18n/en.json +83 -18
  577. package/src/assets/i18n/fr.json +95 -21
  578. package/src/assets/manifest.json +5 -5
  579. package/src/environments/environment.class.d.ts +12 -1
  580. package/src/environments/environment.d.ts +1 -1
  581. package/src/theme/_icons.scss +1 -1
  582. package/src/theme/_ionic.globals.scss +6 -1
  583. package/src/theme/_material.globals.scss +32 -32
  584. package/src/theme/_material.scss +32 -6
  585. package/src/theme/_mixins.scss +6 -4
  586. package/src/theme/_ngx-components.globals.scss +1 -0
  587. package/src/theme/_ngx-components.scss +222 -39
  588. package/src/theme/_print.scss +24 -0
  589. package/src/theme/_responsive.scss +12 -3
  590. package/bundles/sumaris-net.ngx-components.umd.js +0 -28718
  591. package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
  592. package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
  593. package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
  594. package/esm2015/public_api.js +0 -183
  595. package/esm2015/src/app/admin/admin-routing.module.js +0 -32
  596. package/esm2015/src/app/admin/admin.module.js +0 -33
  597. package/esm2015/src/app/admin/services/errors.js +0 -6
  598. package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
  599. package/esm2015/src/app/admin/services/person.service.js +0 -179
  600. package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
  601. package/esm2015/src/app/admin/users/list/users.js +0 -196
  602. package/esm2015/src/app/core/about/modal-about.js +0 -63
  603. package/esm2015/src/app/core/account/account.js +0 -193
  604. package/esm2015/src/app/core/auth/form/form-auth.js +0 -126
  605. package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -66
  606. package/esm2015/src/app/core/core.module.js +0 -114
  607. package/esm2015/src/app/core/form/editor.class.js +0 -559
  608. package/esm2015/src/app/core/form/entity-editor.class.js +0 -617
  609. package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
  610. package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -60
  611. package/esm2015/src/app/core/form/form.class.js +0 -279
  612. package/esm2015/src/app/core/form/form.utils.js +0 -599
  613. package/esm2015/src/app/core/form/list.form.js +0 -219
  614. package/esm2015/src/app/core/form/properties.form.js +0 -119
  615. package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
  616. package/esm2015/src/app/core/graphql/graphql.service.js +0 -733
  617. package/esm2015/src/app/core/graphql/graphql.utils.js +0 -107
  618. package/esm2015/src/app/core/home/home.js +0 -263
  619. package/esm2015/src/app/core/icon/icon.component.js +0 -29
  620. package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -388
  621. package/esm2015/src/app/core/menu/menu.component.js +0 -279
  622. package/esm2015/src/app/core/menu/menu.model.js +0 -33
  623. package/esm2015/src/app/core/menu/menu.module.js +0 -28
  624. package/esm2015/src/app/core/menu/menu.service.js +0 -28
  625. package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
  626. package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
  627. package/esm2015/src/app/core/register/form/form-register.js +0 -172
  628. package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
  629. package/esm2015/src/app/core/services/account.service.js +0 -1101
  630. package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
  631. package/esm2015/src/app/core/services/base-entity-service.class.js +0 -448
  632. package/esm2015/src/app/core/services/config/core.config.js +0 -162
  633. package/esm2015/src/app/core/services/config.service.js +0 -377
  634. package/esm2015/src/app/core/services/crypto.service.js +0 -127
  635. package/esm2015/src/app/core/services/local-settings.service.js +0 -454
  636. package/esm2015/src/app/core/services/model/account.model.js +0 -50
  637. package/esm2015/src/app/core/services/model/config.model.js +0 -89
  638. package/esm2015/src/app/core/services/model/department.model.js +0 -30
  639. package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
  640. package/esm2015/src/app/core/services/model/entity.model.js +0 -230
  641. package/esm2015/src/app/core/services/model/filter.model.js +0 -68
  642. package/esm2015/src/app/core/services/model/peer.model.js +0 -68
  643. package/esm2015/src/app/core/services/model/person.model.js +0 -81
  644. package/esm2015/src/app/core/services/model/referential.model.js +0 -149
  645. package/esm2015/src/app/core/services/model/settings.model.js +0 -75
  646. package/esm2015/src/app/core/services/network.service.js +0 -581
  647. package/esm2015/src/app/core/services/network.utils.js +0 -19
  648. package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
  649. package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
  650. package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
  651. package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
  652. package/esm2015/src/app/core/services/platform.service.js +0 -420
  653. package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -445
  654. package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -458
  655. package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
  656. package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
  657. package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
  658. package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
  659. package/esm2015/src/app/core/settings/settings.page.js +0 -301
  660. package/esm2015/src/app/core/table/actions-column.component.js +0 -74
  661. package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -326
  662. package/esm2015/src/app/core/table/memory-table.class.js +0 -64
  663. package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
  664. package/esm2015/src/app/core/table/table.class.js +0 -1552
  665. package/esm2015/src/app/core/table/table.utils.js +0 -13
  666. package/esm2015/src/app/shared/alerts.js +0 -251
  667. package/esm2015/src/app/shared/audio/audio.js +0 -178
  668. package/esm2015/src/app/shared/colors.utils.js +0 -2
  669. package/esm2015/src/app/shared/constants.js +0 -6
  670. package/esm2015/src/app/shared/dates.js +0 -82
  671. package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -97
  672. package/esm2015/src/app/shared/directives/directives.module.js +0 -21
  673. package/esm2015/src/app/shared/events.js +0 -56
  674. package/esm2015/src/app/shared/file/base64-image-reader.js +0 -141
  675. package/esm2015/src/app/shared/file/file.service.js +0 -121
  676. package/esm2015/src/app/shared/form/field.component.js +0 -206
  677. package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
  678. package/esm2015/src/app/shared/functions.js +0 -440
  679. package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
  680. package/esm2015/src/app/shared/graph/graph-colors.js +0 -256
  681. package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
  682. package/esm2015/src/app/shared/help/help.modal.js +0 -56
  683. package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
  684. package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -87
  685. package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
  686. package/esm2015/src/app/shared/http/http.utils.js +0 -23
  687. package/esm2015/src/app/shared/interceptors/progess.interceptor.js +0 -20
  688. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -711
  689. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
  690. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -167
  691. package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -62
  692. package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
  693. package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -10
  694. package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
  695. package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -234
  696. package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
  697. package/esm2015/src/app/shared/material/chips/material.chips.js +0 -342
  698. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -100
  699. package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
  700. package/esm2015/src/app/shared/material/datetime/material.date.js +0 -307
  701. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -315
  702. package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -389
  703. package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -102
  704. package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
  705. package/esm2015/src/app/shared/material/duration/material.duration.js +0 -245
  706. package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
  707. package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -345
  708. package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
  709. package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
  710. package/esm2015/src/app/shared/material/material.module.js +0 -93
  711. package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
  712. package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
  713. package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
  714. package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
  715. package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
  716. package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
  717. package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
  718. package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
  719. package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
  720. package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -306
  721. package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
  722. package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
  723. package/esm2015/src/app/shared/material/testing/material.testing.module.js +0 -92
  724. package/esm2015/src/app/shared/material/testing/material.testing.page.js +0 -34
  725. package/esm2015/src/app/shared/observables.js +0 -68
  726. package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -92
  727. package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -46
  728. package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -40
  729. package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
  730. package/esm2015/src/app/shared/pipes/form.pipes.js +0 -70
  731. package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
  732. package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -43
  733. package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
  734. package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
  735. package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
  736. package/esm2015/src/app/shared/pipes/number-format.pipe.js +0 -22
  737. package/esm2015/src/app/shared/pipes/pipes.module.js +0 -100
  738. package/esm2015/src/app/shared/pipes/properties.pipe.js +0 -20
  739. package/esm2015/src/app/shared/pipes/string.pipes.js +0 -52
  740. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -38
  741. package/esm2015/src/app/shared/services/entity-service.class.js +0 -17
  742. package/esm2015/src/app/shared/services/job.utils.js +0 -78
  743. package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -226
  744. package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
  745. package/esm2015/src/app/shared/services/startable-service.class.js +0 -95
  746. package/esm2015/src/app/shared/services/storage.utils.js +0 -41
  747. package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
  748. package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
  749. package/esm2015/src/app/shared/shared-routing.module.js +0 -54
  750. package/esm2015/src/app/shared/shared.module.js +0 -125
  751. package/esm2015/src/app/shared/shared.testing.module.js +0 -19
  752. package/esm2015/src/app/shared/toasts.js +0 -119
  753. package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
  754. package/esm2015/src/app/shared/toolbar/toolbar.js +0 -195
  755. package/esm2015/src/app/shared/types.js +0 -2
  756. package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -75
  757. package/esm2015/src/app/shared/validator/validators.js +0 -421
  758. package/esm2015/src/app/shared/version/versions.js +0 -77
  759. package/esm2015/src/app/social/list/user-events.table.js +0 -159
  760. package/esm2015/src/app/social/services/errors.js +0 -5
  761. package/esm2015/src/app/social/services/model/user-event.model.js +0 -46
  762. package/esm2015/src/app/social/services/social.fragments.js +0 -27
  763. package/esm2015/src/app/social/services/user-event.service.js +0 -367
  764. package/esm2015/src/app/social/social.module.js +0 -31
  765. package/esm2015/src/app/vendor.js +0 -5
  766. package/esm2015/src/environments/environment.class.js +0 -5
  767. package/esm2015/src/environments/environment.js +0 -75
  768. package/esm2015/sumaris-net.ngx-components.js +0 -17
  769. package/fesm2015/sumaris-net.ngx-components.js +0 -24430
  770. package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
  771. package/src/app/admin/services/errors.d.ts +0 -5
  772. package/src/app/admin/users/list/users.d.ts +0 -49
  773. package/src/app/core/auth/form/form-auth.d.ts +0 -33
  774. package/src/app/core/auth/modal/modal-auth.d.ts +0 -14
  775. package/src/app/core/form/entity-metadata.component.d.ts +0 -10
  776. package/src/app/core/form/properties.form.d.ts +0 -40
  777. package/src/app/shared/colors.utils.d.ts +0 -3
  778. package/src/app/shared/file/base64-image-reader.d.ts +0 -18
  779. package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -15
  780. package/src/app/shared/material/badge/badge-icon.module.d.ts +0 -2
  781. package/src/app/shared/material/badge/badge-icon.test.d.ts +0 -2
  782. package/src/app/shared/material/testing/material.testing.module.d.ts +0 -2
  783. package/src/app/shared/pipes/properties.pipe.d.ts +0 -7
  784. package/src/app/shared/services/storage.utils.d.ts +0 -13
  785. package/src/app/social/list/user-events.table.d.ts +0 -59
  786. package/src/app/social/services/errors.d.ts +0 -4
  787. package/src/app/social/services/model/user-event.model.d.ts +0 -29
  788. package/src/app/social/services/social.fragments.d.ts +0 -4
  789. package/src/app/social/services/user-event.service.d.ts +0 -82
  790. package/src/app/vendor.d.ts +0 -4
  791. package/src/assets/manifest.sumaris.json +0 -17
  792. package/sumaris-net.ngx-components.d.ts +0 -16
  793. package/sumaris-net.ngx-components.metadata.json +0 -1
@@ -0,0 +1,92 @@
1
+ var Software_1, Configuration_1;
2
+ import { __decorate } from "tslib";
3
+ import { Entity, EntityUtils } from './entity.model';
4
+ import { Department } from './department.model';
5
+ import { fromDateISOString, toDateISOString } from '../../../shared/dates';
6
+ import { isNotNil } from '../../../shared/functions';
7
+ import { EntityClass } from './entity.decorators';
8
+ // @dynamic
9
+ let Software = Software_1 = class Software extends Entity {
10
+ constructor(__typename) {
11
+ super(__typename || Software_1.TYPENAME);
12
+ }
13
+ asObject(options) {
14
+ const target = super.asObject(options);
15
+ target.creationDate = toDateISOString(this.creationDate);
16
+ target.properties = this.properties;
17
+ return target;
18
+ }
19
+ fromObject(source) {
20
+ super.fromObject(source);
21
+ this.label = source.label;
22
+ this.name = source.name;
23
+ this.description = source.description;
24
+ this.comments = source.comments;
25
+ this.creationDate = fromDateISOString(source.creationDate);
26
+ this.statusId = source.statusId;
27
+ if (source.properties && Array.isArray(source.properties)) {
28
+ this.properties = EntityUtils.getPropertyArrayAsObject(source.properties);
29
+ }
30
+ else {
31
+ this.properties = { ...source.properties };
32
+ }
33
+ }
34
+ };
35
+ Software = Software_1 = __decorate([
36
+ EntityClass({ typename: 'SoftwareVO' })
37
+ ], Software);
38
+ export { Software };
39
+ // @dynamic
40
+ let Configuration = Configuration_1 = class Configuration extends Software {
41
+ constructor() {
42
+ super(Configuration_1.TYPENAME);
43
+ }
44
+ clone() {
45
+ return this.copy(new Configuration_1());
46
+ }
47
+ copy(target) {
48
+ target.fromObject(this);
49
+ return target;
50
+ }
51
+ asObject(options) {
52
+ const target = super.asObject(options);
53
+ target.partners = this.partners && this.partners.map(p => p.asObject(options)) || undefined;
54
+ return target;
55
+ }
56
+ fromObject(source) {
57
+ super.fromObject(source);
58
+ this.smallLogo = source.smallLogo;
59
+ this.largeLogo = source.largeLogo;
60
+ this.backgroundImages = source.backgroundImages;
61
+ this.partners = source.partners && source.partners.map(Department.fromObject) || undefined;
62
+ }
63
+ getPropertyAsBoolean(definition) {
64
+ const value = this.getProperty(definition);
65
+ return isNotNil(value) ? (value && value !== 'false') : undefined;
66
+ }
67
+ getPropertyAsInt(definition) {
68
+ const value = this.getProperty(definition);
69
+ return isNotNil(value) ? parseInt(value) : undefined;
70
+ }
71
+ getPropertyAsNumbers(definition) {
72
+ const value = this.getProperty(definition);
73
+ if (typeof value === 'string')
74
+ return value.split(',').map(parseFloat) || undefined;
75
+ return isNotNil(value) ? [parseFloat(value)] : undefined;
76
+ }
77
+ getPropertyAsStrings(definition) {
78
+ const value = this.getProperty(definition);
79
+ return value && value.split(',') || undefined;
80
+ }
81
+ getProperty(definition) {
82
+ return isNotNil(this.properties[definition.key]) ? this.properties[definition.key] : (definition.defaultValue || undefined);
83
+ }
84
+ hasProperty(definition) {
85
+ return isNotNil(this.properties[definition.key]);
86
+ }
87
+ };
88
+ Configuration = Configuration_1 = __decorate([
89
+ EntityClass({ typename: 'ConfigurationVO' })
90
+ ], Configuration);
91
+ export { Configuration };
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBQyxNQUFNLEVBQXlCLFdBQVcsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDekUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxXQUFXO0FBRVgsSUFBYSxRQUFRLGdCQUFyQixNQUFhLFFBR1gsU0FBUSxNQUFpQjtJQWF6QixZQUFZLFVBQW1CO1FBQzdCLEtBQUssQ0FBQyxVQUFVLElBQUksVUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBK0I7UUFDdEMsTUFBTSxNQUFNLEdBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBVztRQUNwQixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFD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RmllbGREZWZpbml0aW9ufSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0VudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zLCBFbnRpdHlVdGlscywgSUVudGl0eX0gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtEZXBhcnRtZW50fSBmcm9tICcuL2RlcGFydG1lbnQubW9kZWwnO1xuaW1wb3J0IHtQcm9wZXJ0aWVzTWFwfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtpc05vdE5pbH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VudGl0eUNsYXNzfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdTb2Z0d2FyZVZPJ30pXG5leHBvcnQgY2xhc3MgU29mdHdhcmU8XG4gIFQgZXh0ZW5kcyBTb2Z0d2FyZTxhbnk+ID0gU29mdHdhcmU8YW55PlxuICA+XG4gIGV4dGVuZHMgRW50aXR5PFQsIG51bWJlcj5cbiAgaW1wbGVtZW50cyBJRW50aXR5PFQsIG51bWJlcj4ge1xuXG4gc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gU29mdHdhcmU7XG5cbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjb21tZW50czogc3RyaW5nO1xuICBjcmVhdGlvbkRhdGU6IERhdGUgfCBNb21lbnQ7XG4gIHN0YXR1c0lkOiBudW1iZXI7XG4gIHByb3BlcnRpZXM6IFByb3BlcnRpZXNNYXA7XG5cbiAgY29uc3RydWN0b3IoX190eXBlbmFtZT86IHN0cmluZykge1xuICAgIHN1cGVyKF9fdHlwZW5hbWUgfHwgU29mdHdhcmUuVFlQRU5BTUUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0aW9ucz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBzdXBlci5hc09iamVjdChvcHRpb25zKTtcbiAgICB0YXJnZXQuY3JlYXRpb25EYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMuY3JlYXRpb25EYXRlKTtcbiAgICB0YXJnZXQucHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmxhYmVsID0gc291cmNlLmxhYmVsO1xuICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBzb3VyY2UuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jb21tZW50cyA9IHNvdXJjZS5jb21tZW50cztcbiAgICB0aGlzLmNyZWF0aW9uRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS5jcmVhdGlvbkRhdGUpO1xuICAgIHRoaXMuc3RhdHVzSWQgPSBzb3VyY2Uuc3RhdHVzSWQ7XG5cbiAgICBpZiAoc291cmNlLnByb3BlcnRpZXMgJiYgQXJyYXkuaXNBcnJheShzb3VyY2UucHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMucHJvcGVydGllcyA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QXJyYXlBc09iamVjdChzb3VyY2UucHJvcGVydGllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcGVydGllcyA9IHsuLi5zb3VyY2UucHJvcGVydGllc307XG4gICAgfVxuICB9XG59XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3Moe3R5cGVuYW1lOiAnQ29uZmlndXJhdGlvblZPJ30pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbiBleHRlbmRzIFNvZnR3YXJlPENvbmZpZ3VyYXRpb24+IHtcblxuICBzdGF0aWMgZnJvbU9iamVjdDogKHNvdXJjZTogYW55LCBvcHRzPzogYW55KSA9PiBDb25maWd1cmF0aW9uO1xuXG4gIHNtYWxsTG9nbzogc3RyaW5nO1xuICBsYXJnZUxvZ286IHN0cmluZztcbiAgYmFja2dyb3VuZEltYWdlczogc3RyaW5nW107XG4gIHBhcnRuZXJzOiBEZXBhcnRtZW50W107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoQ29uZmlndXJhdGlvbi5UWVBFTkFNRSk7XG4gIH1cblxuICBjbG9uZSgpOiBDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb3B5KG5ldyBDb25maWd1cmF0aW9uKCkpO1xuICB9XG5cbiAgY29weSh0YXJnZXQ6IENvbmZpZ3VyYXRpb24pOiBDb25maWd1cmF0aW9uIHtcbiAgICB0YXJnZXQuZnJvbU9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXNPYmplY3Qob3B0aW9ucz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBzdXBlci5hc09iamVjdChvcHRpb25zKTtcbiAgICB0YXJnZXQucGFydG5lcnMgPSB0aGlzLnBhcnRuZXJzICYmIHRoaXMucGFydG5lcnMubWFwKHAgPT4gcC5hc09iamVjdChvcHRpb25zKSkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHRoaXMuc21hbGxMb2dvID0gc291cmNlLnNtYWxsTG9nbztcbiAgICB0aGlzLmxhcmdlTG9nbyA9IHNvdXJjZS5sYXJnZUxvZ287XG4gICAgdGhpcy5iYWNrZ3JvdW5kSW1hZ2VzID0gc291cmNlLmJhY2tncm91bmRJbWFnZXM7XG4gICAgdGhpcy5wYXJ0bmVycyA9IHNvdXJjZS5wYXJ0bmVycyAmJiBzb3VyY2UucGFydG5lcnMubWFwKERlcGFydG1lbnQuZnJvbU9iamVjdCkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0Jvb2xlYW4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gKHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNJbnQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24pO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzTnVtYmVycyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNTdHJpbmdzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24pO1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5PFQgPSBzdHJpbmc+KGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBUIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5wcm9wZXJ0aWVzW2RlZmluaXRpb24ua2V5XSkgPyB0aGlzLnByb3BlcnRpZXNbZGVmaW5pdGlvbi5rZXldIDogKGRlZmluaXRpb24uZGVmYXVsdFZhbHVlIHx8IHVuZGVmaW5lZCk7XG4gIH1cblxuICBoYXNQcm9wZXJ0eTxUID0gc3RyaW5nPihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMucHJvcGVydGllc1tkZWZpbml0aW9uLmtleV0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ var Department_1;
2
+ import { __decorate } from "tslib";
3
+ import { BaseReferential } from './referential.model';
4
+ import { EntityClass } from './entity.decorators';
5
+ // @dynamic
6
+ let Department = Department_1 = class Department extends BaseReferential {
7
+ constructor() {
8
+ super(Department_1.TYPENAME);
9
+ this.entityName = Department_1.ENTITY_NAME;
10
+ }
11
+ fromObject(source) {
12
+ super.fromObject(source);
13
+ this.entityName = source.entityName || Department_1.ENTITY_NAME;
14
+ this.logo = source.logo;
15
+ this.siteUrl = source.siteUrl;
16
+ delete this.entityName; // not need
17
+ }
18
+ };
19
+ Department.ENTITY_NAME = 'Department';
20
+ Department = Department_1 = __decorate([
21
+ EntityClass({ typename: 'DepartmentVO' })
22
+ ], Department);
23
+ export { Department };
24
+ export function departmentToString(obj) {
25
+ return obj && obj.id && (obj.name) || undefined;
26
+ }
27
+ export function departmentsToString(data, separator) {
28
+ return (data || []).map(departmentToString).join(separator || ', ');
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwYXJ0bWVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxXQUFXO0FBRVgsSUFBYSxVQUFVLGtCQUF2QixNQUFhLFVBQVcsU0FBUSxlQUEyQjtJQVF6RDtRQUNFLEtBQUssQ0FBQyxZQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFVLENBQUMsV0FBVyxDQUFDO0lBQzNDLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBVztRQUNwQixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxZQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVztJQUNyQyxDQUFDO0NBQ0YsQ0FBQTtBQWxCUSxzQkFBVyxHQUFHLFlBQVksQ0FBQztBQUZ2QixVQUFVO0lBRHRCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUMsQ0FBQztHQUMzQixVQUFVLENBb0J0QjtTQXBCWSxVQUFVO0FBc0J2QixNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBZTtJQUNoRCxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQWtCLEVBQUUsU0FBa0I7SUFDeEUsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jhc2VSZWZlcmVudGlhbH0gZnJvbSAnLi9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge0VudGl0eUNsYXNzfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdEZXBhcnRtZW50Vk8nfSlcbmV4cG9ydCBjbGFzcyBEZXBhcnRtZW50IGV4dGVuZHMgQmFzZVJlZmVyZW50aWFsPERlcGFydG1lbnQ+IHtcblxuICBzdGF0aWMgRU5USVRZX05BTUUgPSAnRGVwYXJ0bWVudCc7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IERlcGFydG1lbnQ7XG5cbiAgbG9nbzogc3RyaW5nO1xuICBzaXRlVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRGVwYXJ0bWVudC5UWVBFTkFNRSk7XG4gICAgdGhpcy5lbnRpdHlOYW1lID0gRGVwYXJ0bWVudC5FTlRJVFlfTkFNRTtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5lbnRpdHlOYW1lID0gc291cmNlLmVudGl0eU5hbWUgfHwgRGVwYXJ0bWVudC5FTlRJVFlfTkFNRTtcbiAgICB0aGlzLmxvZ28gPSBzb3VyY2UubG9nbztcbiAgICB0aGlzLnNpdGVVcmwgPSBzb3VyY2Uuc2l0ZVVybDtcbiAgICBkZWxldGUgdGhpcy5lbnRpdHlOYW1lOyAvLyBub3QgbmVlZFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXBhcnRtZW50VG9TdHJpbmcob2JqOiBEZXBhcnRtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouaWQgJiYgKG9iai5uYW1lKSB8fCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXBhcnRtZW50c1RvU3RyaW5nKGRhdGE6IERlcGFydG1lbnRbXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChkYXRhIHx8IFtdKS5tYXAoZGVwYXJ0bWVudFRvU3RyaW5nKS5qb2luKHNlcGFyYXRvciB8fCAnLCAnKTtcbn1cbiJdfQ==
@@ -0,0 +1,97 @@
1
+ import { environment } from '../../../../environments/environment';
2
+ import { Entity } from './entity.model';
3
+ import { removeEnd } from '../../../shared/functions';
4
+ export class EntityClasses {
5
+ static register(typename, entityClass) {
6
+ // Convert to extract entityName
7
+ const entityName = removeEnd(typename, 'VO');
8
+ // DEBUG
9
+ //console.debug('[entity-classes] Detected entity class ' + entityName);
10
+ // Add to map
11
+ EntityClasses.CLASSES_BY_NAME.set(entityName, entityClass);
12
+ }
13
+ static get(entityName) {
14
+ const entityClass = EntityClasses.CLASSES_BY_NAME.get(entityName);
15
+ if (!entityClass) {
16
+ throw new Error('Cannot found entity class \'' + entityName + '\'. Make sure it exists and has the @EntityClass decorator.');
17
+ }
18
+ return entityClass;
19
+ }
20
+ static fromObject(value, opts) {
21
+ if (!value)
22
+ return value;
23
+ const entityName = (opts && opts.entityName) || removeEnd(value.__typename || opts?.typename, 'VO');
24
+ if (!entityName)
25
+ throw new Error('Missing one of \'value.__typename\', \'opts.entityName\', or \'opts.typename\'.');
26
+ const entityClass = EntityClasses.get(entityName);
27
+ if (typeof entityClass.fromObject !== 'function') {
28
+ throw new Error('Cannot found the static function \'' + entityName + '.fromObject()\'. Make sure this function has been declared and the entity class has the @EntityClass decorator');
29
+ }
30
+ return entityClass.fromObject(value, opts);
31
+ }
32
+ }
33
+ EntityClasses.CLASSES_BY_NAME = new Map();
34
+ // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
35
+ export function EntityClass(opts) {
36
+ // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
37
+ return function (constructor) {
38
+ // Make sure the class extends Entity
39
+ if (!environment.production) {
40
+ const obj = new constructor();
41
+ if (!(obj instanceof Entity)) {
42
+ throw new Error(`Class ${constructor.name} must extends <<Entity>> to be able to use @FromObject!`);
43
+ }
44
+ }
45
+ const clazz = constructor;
46
+ const typename = opts.typename || `${constructor.name}VO`;
47
+ // Define static field TYPENAME
48
+ clazz.TYPENAME = typename;
49
+ // Define static fromObject()
50
+ if (opts.fromObjectReuseStrategy === 'clone') {
51
+ clazz.fromObject = function (source, opts) {
52
+ if (!source)
53
+ return undefined;
54
+ if (source instanceof constructor)
55
+ return source.clone(opts);
56
+ const target = new constructor();
57
+ target.fromObject(source, opts);
58
+ return target;
59
+ };
60
+ clazz.asObject = function (source, opts) {
61
+ if (!source)
62
+ return undefined;
63
+ if (source instanceof constructor)
64
+ return source.asObject(opts);
65
+ return Object.assign({}, source);
66
+ };
67
+ }
68
+ else {
69
+ clazz.fromObject = function (source, opts) {
70
+ if (!source)
71
+ return undefined;
72
+ if (source instanceof constructor) {
73
+ // DEBUG
74
+ //console.debug('@EntityClass() fromObject() => will recycle existing object: ', source);
75
+ return source;
76
+ }
77
+ const target = new constructor();
78
+ target.fromObject(source, opts);
79
+ return target;
80
+ };
81
+ clazz.asObject = function (source, opts) {
82
+ if (!source)
83
+ return undefined;
84
+ if (source instanceof constructor) {
85
+ return source.asObject(opts);
86
+ }
87
+ // DEBUG
88
+ //console.debug('@EntityClass() asObject() => will recycle existing object: ', source);
89
+ return source;
90
+ };
91
+ }
92
+ // Register the entity class
93
+ EntityClasses.register(typename, constructor);
94
+ return constructor;
95
+ };
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdEQsTUFBTSxPQUFPLGFBQWE7SUFHeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFnQixFQUFFLFdBQXdCO1FBQ3hELGdDQUFnQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLFFBQVE7UUFDUix3RUFBd0U7UUFFeEUsYUFBYTtRQUNiLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBc0IsVUFBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixHQUFHLFVBQVUsR0FBRyw2REFBNkQsQ0FBQyxDQUFDO1NBQzlIO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQXNCLEtBQVUsRUFBRSxJQUlsRDtRQUNDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJ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SUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQzlCLElBQUksTUFBTSxZQUFZLFdBQVcsRUFBRTtvQkFDakMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxRQUFRO2dCQUNSLHVGQUF1RjtnQkFDdkYsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDO1NBQ0g7UUFFRCw0QkFBNEI7UUFDNUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFOUMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IHJlbW92ZUVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5kZWNsYXJlIHR5cGUgQ29uc3RydWN0b3IgPSBuZXcoLi4uYXJnczogYW55W10pID0+IGFueTtcblxuZXhwb3J0IGNsYXNzIEVudGl0eUNsYXNzZXMge1xuICBzdGF0aWMgQ0xBU1NFU19CWV9OQU1FID0gbmV3IE1hcDxzdHJpbmcsIENvbnN0cnVjdG9yPigpO1xuXG4gIHN0YXRpYyByZWdpc3Rlcih0eXBlbmFtZTogc3RyaW5nLCBlbnRpdHlDbGFzczogQ29uc3RydWN0b3IpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGV4dHJhY3QgZW50aXR5TmFtZVxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSByZW1vdmVFbmQodHlwZW5hbWUsICdWTycpO1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbZW50aXR5LWNsYXNzZXNdIERldGVjdGVkIGVudGl0eSBjbGFzcyAnICsgZW50aXR5TmFtZSk7XG5cbiAgICAvLyBBZGQgdG8gbWFwXG4gICAgRW50aXR5Q2xhc3Nlcy5DTEFTU0VTX0JZX05BTUUuc2V0KGVudGl0eU5hbWUsIGVudGl0eUNsYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5TmFtZTogc3RyaW5nKTogQ29uc3RydWN0b3Ige1xuICAgIGNvbnN0IGVudGl0eUNsYXNzID0gRW50aXR5Q2xhc3Nlcy5DTEFTU0VTX0JZX05BTUUuZ2V0KGVudGl0eU5hbWUpO1xuICAgIGlmICghZW50aXR5Q2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZvdW5kIGVudGl0eSBjbGFzcyBcXCcnICsgZW50aXR5TmFtZSArICdcXCcuIE1ha2Ugc3VyZSBpdCBleGlzdHMgYW5kIGhhcyB0aGUgQEVudGl0eUNsYXNzIGRlY29yYXRvci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudGl0eUNsYXNzO1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIEVudGl0eTxUPj4odmFsdWU6IGFueSwgb3B0cz86IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgdHlwZW5hbWU/OiBzdHJpbmc7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCBlbnRpdHlOYW1lID0gKG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lKSB8fCByZW1vdmVFbmQodmFsdWUuX190eXBlbmFtZSB8fCBvcHRzPy50eXBlbmFtZSwgJ1ZPJyk7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb25lIG9mIFxcJ3ZhbHVlLl9fdHlwZW5hbWVcXCcsIFxcJ29wdHMuZW50aXR5TmFtZVxcJywgb3IgXFwnb3B0cy50eXBlbmFtZVxcJy4nKTtcbiAgICBjb25zdCBlbnRpdHlDbGFzcyA9IEVudGl0eUNsYXNzZXMuZ2V0KGVudGl0eU5hbWUpIGFzIGFueTtcbiAgICBpZiAodHlwZW9mIGVudGl0eUNsYXNzLmZyb21PYmplY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZvdW5kIHRoZSBzdGF0aWMgZnVuY3Rpb24gXFwnJyArIGVudGl0eU5hbWUgKyAnLmZyb21PYmplY3QoKVxcJy4gTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHRoZSBlbnRpdHkgY2xhc3MgaGFzIHRoZSBARW50aXR5Q2xhc3MgZGVjb3JhdG9yJyk7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlDbGFzcy5mcm9tT2JqZWN0KHZhbHVlLCBvcHRzKSBhcyBUO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIEVudGl0eUNsYXNzKG9wdHM6IHtcbiAgdHlwZW5hbWU6IHN0cmluZztcbiAgZnJvbU9iamVjdFJldXNlU3RyYXRlZ3k/OiAnZGVmYXVsdCcgfCAnY2xvbmUnO1xufSkge1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oY29uc3RydWN0b3I6IFQpIHtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2xhc3MgZXh0ZW5kcyBFbnRpdHlcbiAgICBpZiAoIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRW50aXR5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzICR7Y29uc3RydWN0b3IubmFtZX0gbXVzdCBleHRlbmRzIDw8RW50aXR5Pj4gdG8gYmUgYWJsZSB0byB1c2UgQEZyb21PYmplY3QhYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhenogPSAoY29uc3RydWN0b3IgYXMgYW55KVxuICAgIGNvbnN0IHR5cGVuYW1lID0gb3B0cy50eXBlbmFtZSB8fCBgJHtjb25zdHJ1Y3Rvci5uYW1lfVZPYDtcblxuICAgIC8vIERlZmluZSBzdGF0aWMgZmllbGQgVFlQRU5BTUVcbiAgICBjbGF6ei5UWVBFTkFNRSA9IHR5cGVuYW1lO1xuXG4gICAgLy8gRGVmaW5lIHN0YXRpYyBmcm9tT2JqZWN0KClcbiAgICBpZiAob3B0cy5mcm9tT2JqZWN0UmV1c2VTdHJhdGVneSA9PT0gJ2Nsb25lJykge1xuXG4gICAgICBjbGF6ei5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oc291cmNlOiBhbnksIG9wdHM/OiBhbnkpOiBUIHtcbiAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcikgcmV0dXJuIChzb3VyY2UgYXMgYW55KS5jbG9uZShvcHRzKSBhcyBUO1xuICAgICAgICBjb25zdCB0YXJnZXQ6IGFueSA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgICB0YXJnZXQuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIFQ7XG4gICAgICB9O1xuICAgICAgY2xhenouYXNPYmplY3QgPSBmdW5jdGlvbihzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHJldHVybiBzb3VyY2UuYXNPYmplY3Qob3B0cyk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjbGF6ei5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oc291cmNlOiBhbnksIG9wdHM/OiBhbnkpOiBUIHtcbiAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdARW50aXR5Q2xhc3MoKSBmcm9tT2JqZWN0KCkgPT4gd2lsbCByZWN5Y2xlIGV4aXN0aW5nIG9iamVjdDogJywgc291cmNlKTtcbiAgICAgICAgICByZXR1cm4gc291cmNlIGFzIFQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBuZXcgY29uc3RydWN0b3IoKTtcbiAgICAgICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBUO1xuICAgICAgfTtcblxuICAgICAgY2xhenouYXNPYmplY3QgPSBmdW5jdGlvbihzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnQEVudGl0eUNsYXNzKCkgYXNPYmplY3QoKSA9PiB3aWxsIHJlY3ljbGUgZXhpc3Rpbmcgb2JqZWN0OiAnLCBzb3VyY2UpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgZW50aXR5IGNsYXNzXG4gICAgRW50aXR5Q2xhc3Nlcy5yZWdpc3Rlcih0eXBlbmFtZSwgY29uc3RydWN0b3IpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19
@@ -0,0 +1,228 @@
1
+ import { getPropertyByPath, isEmptyArray, isNil, isNilOrBlank, isNotNil, joinPropertiesPath } from '../../../shared/functions';
2
+ import { fromDateISOString, toDateISOString } from '../../../shared/dates';
3
+ export function entityToString(obj, properties) {
4
+ return obj && obj.id && joinPropertiesPath(obj, properties || ['name']) || undefined;
5
+ }
6
+ //@dynamic
7
+ export class Entity {
8
+ constructor(__typename) {
9
+ this.id = null;
10
+ this.updateDate = null;
11
+ this.__typename = __typename || null;
12
+ }
13
+ clone(opts) {
14
+ const target = new this.constructor();
15
+ this.copy(target, opts);
16
+ return target;
17
+ }
18
+ copy(target, opts) {
19
+ target.fromObject(this.asObject(opts), opts);
20
+ }
21
+ asObject(opts) {
22
+ const target = Object.assign({}, this); //= {...this};
23
+ if (!opts || opts.keepTypename !== true)
24
+ delete target.__typename;
25
+ if (target.id == null || (opts && opts.keepLocalId === false && target.id < 0))
26
+ delete target.id;
27
+ target.updateDate = toDateISOString(this.updateDate);
28
+ return target;
29
+ }
30
+ fromObject(source, opts) {
31
+ this.id = (source.id || source.id === 0) ? source.id : undefined;
32
+ this.updateDate = fromDateISOString(source.updateDate);
33
+ this.__typename = source.__typename || this.__typename; // Keep original type (can be set in constructor)
34
+ }
35
+ equals(other) {
36
+ return other && this.id === other.id;
37
+ }
38
+ }
39
+ /**
40
+ * @deprecated use standard instanceof instead
41
+ * @param obj
42
+ * @param constructor
43
+ */
44
+ export function isInstanceOf(obj, constructor) {
45
+ if (!obj)
46
+ return false;
47
+ return obj instanceof constructor;
48
+ }
49
+ // @dynamic
50
+ export class EntityUtils {
51
+ // Check that the object has a NOT nil attribute (ID by default)
52
+ static isEntity(obj) {
53
+ return isNotNil(obj.__typename) && (typeof obj.fromObject === 'function') && (typeof obj.asObject === 'function');
54
+ }
55
+ // Check that the object has a NOT nil attribute (ID by default)
56
+ static isNotEmpty(obj, checkedAttribute) {
57
+ return !!obj && obj[checkedAttribute] !== null && obj[checkedAttribute] !== undefined;
58
+ }
59
+ static isEmpty(obj, checkedAttribute) {
60
+ return !obj || obj[checkedAttribute] === null || obj[checkedAttribute] === undefined;
61
+ }
62
+ static equals(o1, o2, checkAttribute) {
63
+ checkAttribute = checkAttribute || 'id';
64
+ return (o1 === o2) || (isNil(o1) && isNil(o2)) || (o1 && o2 && o1[checkAttribute] === o2[checkAttribute]);
65
+ }
66
+ static getArrayAsMap(source) {
67
+ return (source || []).reduce((res, item) => {
68
+ res[item.key] = item.value;
69
+ return res;
70
+ }, {});
71
+ }
72
+ static getMapAsArray(source) {
73
+ if (Array.isArray(source))
74
+ return source;
75
+ return Object.getOwnPropertyNames(source || {})
76
+ .map(key => ({
77
+ key,
78
+ value: source[key]
79
+ }));
80
+ }
81
+ static getPropertyArrayAsObject(source) {
82
+ return (source || []).reduce((res, item) => {
83
+ res[item.key] = item.value;
84
+ return res;
85
+ }, {});
86
+ }
87
+ static copyIdAndUpdateDate(source, target) {
88
+ if (!source)
89
+ return;
90
+ // Update (id and updateDate)
91
+ target.id = isNotNil(source.id) ? source.id : target.id;
92
+ target.updateDate = fromDateISOString(source.updateDate) || target.updateDate;
93
+ // Update creation Date, if exists
94
+ if (source['creationDate']) {
95
+ target['creationDate'] = fromDateISOString(source['creationDate']);
96
+ }
97
+ }
98
+ static async fillLocalIds(items, sequenceFactory) {
99
+ const newItems = (items || []).filter(item => isNil(item.id) || item.id === 0);
100
+ if (isEmptyArray(newItems))
101
+ return;
102
+ // Get the sequence
103
+ let currentId = await sequenceFactory(newItems[0], newItems.length) + 1;
104
+ // Take the min (sequence, id), in case the sequence is corrupted
105
+ currentId = items.filter(item => isNotNil(item.id) && item.id < 0).reduce((res, item) => Math.min(res, item.id), currentId);
106
+ newItems.forEach(item => item.id = --currentId);
107
+ }
108
+ static cleanIdAndUpdateDate(source) {
109
+ if (!source)
110
+ return; // Skip
111
+ source.id = null;
112
+ source.updateDate = null;
113
+ }
114
+ static cleanIdsAndUpdateDates(items) {
115
+ (items || []).forEach(EntityUtils.cleanIdAndUpdateDate);
116
+ }
117
+ static sort(data, sortBy, sortDirection) {
118
+ if (!data || data.length <= 1 || !sortBy)
119
+ return data;
120
+ return data.sort(this.sortComparator(sortBy, sortDirection));
121
+ }
122
+ static sortComparator(sortBy, sortDirection) {
123
+ const after = (!sortDirection || sortDirection === 'asc') ? 1 : -1;
124
+ const property = sortBy || 'id';
125
+ return (a, b) => {
126
+ const valueA = EntityUtils.getPropertyByPath(a, property);
127
+ const valueB = EntityUtils.getPropertyByPath(b, property);
128
+ return EntityUtils.compare(valueA, valueB, after);
129
+ };
130
+ }
131
+ static compare(value1, value2, direction, checkAttribute) {
132
+ checkAttribute = checkAttribute || 'id';
133
+ if (EntityUtils.isNotEmpty(value1, checkAttribute) && EntityUtils.isNotEmpty(value2, checkAttribute)) {
134
+ return EntityUtils.equals(value1, value2, checkAttribute) ? 0 : (value1[checkAttribute] > value2[checkAttribute] ? direction : (-1 * direction));
135
+ }
136
+ return value1 === value2 ? 0 : (value1 > value2 ? direction : (-1 * direction));
137
+ }
138
+ static compareValue(value1, value2, direction) {
139
+ return value1 === value2 ? 0 : (value1 > value2 ? direction : (-1 * direction));
140
+ }
141
+ static filter(data, searchAttribute, searchText) {
142
+ const filterFn = this.searchTextFilter(searchAttribute, searchText);
143
+ return data.filter(filterFn);
144
+ }
145
+ static searchTextFilter(searchAttribute, searchText) {
146
+ if (isNilOrBlank(searchAttribute) || isNilOrBlank(searchText))
147
+ return undefined; // filter not need
148
+ const searchRegexp = searchText
149
+ // Escape special characters
150
+ .replace(/[-\/\\^$+.()|[\]{}]/g, '\\$&')
151
+ // Interpret * as any text
152
+ .replace(/[*]+/g, '.*')
153
+ // Interpret ? as one character
154
+ .replace(/[?]/g, '.');
155
+ if (searchRegexp === '.*')
156
+ return undefined; // filter not need
157
+ const flags = 'i'; // don't use global regex search
158
+ const asPrefixPattern = '^' + searchRegexp;
159
+ const anyMatchPattern = '^.*' + searchRegexp;
160
+ // Only one search attributes
161
+ if (typeof searchAttribute === 'string') {
162
+ const isSimplePath = !searchAttribute || searchAttribute.indexOf('.') === -1;
163
+ const searchAsPrefix = searchAttribute.toLowerCase().endsWith('label') || searchAttribute.toLowerCase().endsWith('code');
164
+ const regexp = new RegExp(searchAsPrefix && asPrefixPattern || anyMatchPattern, flags);
165
+ if (isSimplePath) {
166
+ return a => regexp.test(a[searchAttribute]);
167
+ }
168
+ else {
169
+ return a => regexp.test(EntityUtils.getPropertyByPath(a, searchAttribute));
170
+ }
171
+ }
172
+ // many search attributes
173
+ else {
174
+ const regexps = searchAttribute.map(path => {
175
+ const searchAsPrefix = path.toLowerCase().endsWith('label') || path.toLowerCase().endsWith('code');
176
+ return new RegExp(searchAsPrefix && asPrefixPattern || anyMatchPattern, flags);
177
+ });
178
+ return a => searchAttribute.findIndex((path, index) => regexps[index].test(EntityUtils.getPropertyByPath(a, path))) !== -1;
179
+ }
180
+ }
181
+ /**
182
+ * Transform a batch entity tree into a array list. This method keep links parent/children.
183
+ *
184
+ * Method used to find batch without id (e.g. before local storage)
185
+ *
186
+ * @param source
187
+ */
188
+ static treeToArray(source) {
189
+ if (!source)
190
+ return null;
191
+ return (source.children || []).reduce((res, batch) => {
192
+ batch.parent = source;
193
+ return res.concat(this.treeToArray(batch)); // recursive call
194
+ }, [source]);
195
+ }
196
+ static listOfTreeToArray(sources) {
197
+ if (!sources || !sources.length)
198
+ return null;
199
+ return sources.reduce((res, source) => res.concat(this.treeToArray(source)), []);
200
+ }
201
+ /**
202
+ * Fill parent attribute, of all children found in the tree
203
+ *
204
+ * @param source
205
+ */
206
+ static treeFillParent(source) {
207
+ if (!source)
208
+ return null;
209
+ (source.children || []).forEach(child => {
210
+ child.parent = source;
211
+ this.treeFillParent(child); // Loop
212
+ });
213
+ }
214
+ static isLocal(entity) {
215
+ return entity && (isNotNil(entity.id) && +entity.id < 0);
216
+ }
217
+ static isRemote(entity) {
218
+ return entity && !EntityUtils.isLocal(entity);
219
+ }
220
+ static isLocalId(id) {
221
+ return isNotNil(id) && +id < 0;
222
+ }
223
+ static isRemoteId(id) {
224
+ return isNotNil(id) && +id >= 0;
225
+ }
226
+ }
227
+ EntityUtils.getPropertyByPath = getPropertyByPath;
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJN0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTzNFLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBc0IsRUFBRSxVQUFxQjtJQUMxRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUN2RixDQUFDO0FBaUNELFVBQVU7QUFDVixNQUFNLE9BQWdCLE1BQU07SUFjMUIsWUFBWSxVQUFtQjtRQUovQixPQUFFLEdBQU8sSUFBSSxDQUFDO1FBQ2QsZUFBVSxHQUFXLElBQUksQ0FBQztRQUl4QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFjO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUssSUFBSSxDQUFDLFdBQW1CLEVBQU8sQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQVMsRUFBRSxJQUFjO1FBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lB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QUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQTRDO1FBQzFELE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFVO1FBQ3pCLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFVO1FBQzFCLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDOztBQXBMTSw2QkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge2dldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBqb2luUHJvcGVydGllc1BhdGh9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRmlsdGVyRm4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgT2JqZWN0TWFwLCBPYmplY3RNYXBFbnRyeSwgUHJvcGVydGllc0FycmF5LCBQcm9wZXJ0aWVzTWFwIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFN0b3JlT2JqZWN0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2xvbmVhYmxlPFQ+IHtcbiAgY2xvbmUoKTogVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVRvU3RyaW5nKG9iajogRW50aXR5PGFueT4gfCBhbnksIHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmogJiYgb2JqLmlkICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHByb3BlcnRpZXMgfHwgWyduYW1lJ10pIHx8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBc09iamVjdE9wdGlvbnMge1xuICBtaW5pZnk/OiBib29sZWFuO1xuICBrZWVwVHlwZW5hbWU/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAga2VlcExvY2FsSWQ/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5PFQsXG4gIElEID0gbnVtYmVyLFxuICBBTyBleHRlbmRzIEVudGl0eUFzT2JqZWN0T3B0aW9ucyA9IEVudGl0eUFzT2JqZWN0T3B0aW9ucyxcbiAgRk8gPSBhbnlcbiAgPlxuICBleHRlbmRzIENsb25lYWJsZTxUPiB7XG4gIGlkOiBJRDtcbiAgdXBkYXRlRGF0ZTogTW9tZW50O1xuICBfX3R5cGVuYW1lOiBzdHJpbmc7XG4gIGVxdWFscyhvdGhlcjogVCk6IGJvb2xlYW47XG4gIGNsb25lKG9wdHM/OiBBTyAmIEZPKTogVDtcbiAgY29weSh0YXJnZXQ6IFQsIG9wdHM/OiBBTyAmIEZPKTtcbiAgYXNPYmplY3Qob3B0cz86IEFPKTogYW55O1xuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogRk8pO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVRyZWVJdGVtRW50aXR5PFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIElEID0gbnVtYmVyXG4gID4ge1xuICBwYXJlbnRJZDogSUQ7XG4gIHBhcmVudDogVDtcbiAgY2hpbGRyZW46IFRbXTtcbn1cblxuLy9AZHluYW1pY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eTxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRCwgQU8sIEZPPixcbiAgSUQgPSBudW1iZXIsXG4gIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLFxuICBGTyA9IGFueT5cbiAgaW1wbGVtZW50cyBJRW50aXR5PFQsIElELCBBTywgRk8+IHtcblxuICAvLyBUaGUgR3JhcGhRTCB0eXBlbmFtZSAoaW5qZWN0ZWQgYnkgQEVudGl0eUNsYXNzKCkpXG4gIHN0YXRpYyBUWVBFTkFNRTogc3RyaW5nO1xuXG4gIGlkOiBJRCA9IG51bGw7XG4gIHVwZGF0ZURhdGU6IE1vbWVudCA9IG51bGw7XG4gIF9fdHlwZW5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfX3R5cGVuYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fX3R5cGVuYW1lID0gX190eXBlbmFtZSB8fCBudWxsO1xuICB9XG5cbiAgY2xvbmUob3B0cz86IEFPICYgRk8pOiBUIHtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KSgpIGFzIFQ7XG4gICAgdGhpcy5jb3B5KHRhcmdldCwgb3B0cyk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGNvcHkodGFyZ2V0OiBULCBvcHRzPzogQU8gJiBGTykge1xuICAgIHRhcmdldC5mcm9tT2JqZWN0KHRoaXMuYXNPYmplY3Qob3B0cyksIG9wdHMpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IEFPKTogU3RvcmVPYmplY3Qge1xuICAgIGNvbnN0IHRhcmdldDogYW55ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcyk7IC8vPSB7Li4udGhpc307XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMua2VlcFR5cGVuYW1lICE9PSB0cnVlKSBkZWxldGUgdGFyZ2V0Ll9fdHlwZW5hbWU7XG4gICAgaWYgKHRhcmdldC5pZCA9PSBudWxsIHx8IChvcHRzICYmIG9wdHMua2VlcExvY2FsSWQgPT09IGZhbHNlICYmIHRhcmdldC5pZCA8IDApKSBkZWxldGUgdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMudXBkYXRlRGF0ZSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBGTykge1xuICAgIHRoaXMuaWQgPSAoc291cmNlLmlkIHx8IHNvdXJjZS5pZCA9PT0gMCkgPyBzb3VyY2UuaWQgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy51cGRhdGVEYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLnVwZGF0ZURhdGUpO1xuICAgIHRoaXMuX190eXBlbmFtZSA9IHNvdXJjZS5fX3R5cGVuYW1lIHx8IHRoaXMuX190eXBlbmFtZTsgLy8gS2VlcCBvcmlnaW5hbCB0eXBlIChjYW4gYmUgc2V0IGluIGNvbnN0cnVjdG9yKVxuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMuaWQgPT09IG90aGVyLmlkO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHN0YW5kYXJkIGluc3RhbmNlb2YgaW5zdGVhZFxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbmNlT2Y8VD4ob2JqOiBhbnksIGNvbnN0cnVjdG9yOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogb2JqIGlzIFQge1xuICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcjtcbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlVdGlscyB7XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IGhhcyBhIE5PVCBuaWwgYXR0cmlidXRlIChJRCBieSBkZWZhdWx0KVxuICBzdGF0aWMgaXNFbnRpdHk8VCBleHRlbmRzIElFbnRpdHk8YW55Pj4ob2JqOiBUfGFueSk6IG9iaiBpcyBUIHtcbiAgICByZXR1cm4gaXNOb3ROaWwob2JqLl9fdHlwZW5hbWUpICYmICh0eXBlb2Ygb2JqLmZyb21PYmplY3QgPT09ICdmdW5jdGlvbicpICYmICh0eXBlb2Ygb2JqLmFzT2JqZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBOT1QgbmlsIGF0dHJpYnV0ZSAoSUQgYnkgZGVmYXVsdClcbiAgc3RhdGljIGlzTm90RW1wdHk8VCBleHRlbmRzIElFbnRpdHk8YW55PiB8IGFueT4ob2JqOiBULCBjaGVja2VkQXR0cmlidXRlOiBrZXlvZiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtjaGVja2VkQXR0cmlidXRlXSAhPT0gbnVsbCAmJiBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBpc0VtcHR5PFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG9iajogVCwgY2hlY2tlZEF0dHJpYnV0ZToga2V5b2YgVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhb2JqIHx8IG9ialtjaGVja2VkQXR0cmlidXRlXSA9PT0gbnVsbCB8fCBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHM8VCBleHRlbmRzIElFbnRpdHk8YW55PiB8IGFueT4obzE6IFQsIG8yOiBULCBjaGVja0F0dHJpYnV0ZT86IGtleW9mIFQpOiBib29sZWFuIHtcbiAgICBjaGVja0F0dHJpYnV0ZSA9IGNoZWNrQXR0cmlidXRlIHx8ICdpZCcgYXMga2V5b2YgVDtcbiAgICByZXR1cm4gKG8xID09PSBvMikgfHwgKGlzTmlsKG8xKSAmJiBpc05pbChvMikpICB8fCAobzEgJiYgbzIgJiYgbzFbY2hlY2tBdHRyaWJ1dGVdID09PSBvMltjaGVja0F0dHJpYnV0ZV0pO1xuICB9XG5cbiAgc3RhdGljIGdldFByb3BlcnR5QnlQYXRoID0gZ2V0UHJvcGVydHlCeVBhdGg7XG5cbiAgc3RhdGljIGdldEFycmF5QXNNYXA8VCA9IGFueT4oc291cmNlPzogT2JqZWN0TWFwRW50cnk8VD5bXSk6IE9iamVjdE1hcDxUPiB7XG4gICAgcmV0dXJuIChzb3VyY2UgfHwgW10pLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICByZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc3RhdGljIGdldE1hcEFzQXJyYXk8VCA9IGFueT4oc291cmNlPzogT2JqZWN0TWFwPFQ+KTogT2JqZWN0TWFwRW50cnk8VD5bXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlIHx8IHt9KVxuICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWU6IHNvdXJjZVtrZXldXG4gICAgICAgIH0pKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eUFycmF5QXNPYmplY3Qoc291cmNlPzogUHJvcGVydGllc0FycmF5KTogUHJvcGVydGllc01hcCB7XG4gICAgcmV0dXJuIChzb3VyY2UgfHwgW10pLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICByZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc3RhdGljIGNvcHlJZEFuZFVwZGF0ZURhdGU8VCBleHRlbmRzIEVudGl0eTxhbnksIGFueSwgYW55Pj4oc291cmNlOiBULCB0YXJnZXQ6IFQpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgLy8gVXBkYXRlIChpZCBhbmQgdXBkYXRlRGF0ZSlcbiAgICB0YXJnZXQuaWQgPSBpc05vdE5pbChzb3VyY2UuaWQpID8gc291cmNlLmlkIDogdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLnVwZGF0ZURhdGUpIHx8IHRhcmdldC51cGRhdGVEYXRlO1xuXG4gICAgLy8gVXBkYXRlIGNyZWF0aW9uIERhdGUsIGlmIGV4aXN0c1xuICAgIGlmIChzb3VyY2VbJ2NyZWF0aW9uRGF0ZSddKSB7XG4gICAgICB0YXJnZXRbJ2NyZWF0aW9uRGF0ZSddID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlWydjcmVhdGlvbkRhdGUnXSk7XG4gICAgfVxuICB9XG5cblxuICBzdGF0aWMgYXN5bmMgZmlsbExvY2FsSWRzPFQgZXh0ZW5kcyBJRW50aXR5PFQ+PihpdGVtczogVFtdLCBzZXF1ZW5jZUZhY3Rvcnk6IChmaXJzdEVudGl0eTogVCwgaW5jcmVtZW50U2l6ZTogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlcj4pIHtcbiAgICBjb25zdCBuZXdJdGVtcyA9IChpdGVtcyB8fCBbXSkuZmlsdGVyKGl0ZW0gPT4gaXNOaWwoaXRlbS5pZCkgfHwgaXRlbS5pZCA9PT0gMCk7XG4gICAgaWYgKGlzRW1wdHlBcnJheShuZXdJdGVtcykpIHJldHVybjtcbiAgICAvLyBHZXQgdGhlIHNlcXVlbmNlXG4gICAgbGV0IGN1cnJlbnRJZCA9IGF3YWl0IHNlcXVlbmNlRmFjdG9yeShuZXdJdGVtc1swXSwgbmV3SXRlbXMubGVuZ3RoKSArIDE7XG4gICAgLy8gVGFrZSB0aGUgbWluIChzZXF1ZW5jZSwgaWQpLCBpbiBjYXNlIHRoZSBzZXF1ZW5jZSBpcyBjb3JydXB0ZWRcbiAgICBjdXJyZW50SWQgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpc05vdE5pbChpdGVtLmlkKSAmJiBpdGVtLmlkIDwgMCkucmVkdWNlKChyZXMsIGl0ZW0pID0+IE1hdGgubWluKHJlcywgaXRlbS5pZCksIGN1cnJlbnRJZCk7XG4gICAgbmV3SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaWQgPSAtLWN1cnJlbnRJZCk7XG4gIH1cblxuICBzdGF0aWMgY2xlYW5JZEFuZFVwZGF0ZURhdGU8VCBleHRlbmRzIElFbnRpdHk8VD4+KHNvdXJjZTogVCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47IC8vIFNraXBcbiAgICBzb3VyY2UuaWQgPSBudWxsO1xuICAgIHNvdXJjZS51cGRhdGVEYXRlID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhbklkc0FuZFVwZGF0ZURhdGVzPFQgZXh0ZW5kcyBJRW50aXR5PFQ+PihpdGVtczogVFtdKSB7XG4gICAgKGl0ZW1zIHx8IFtdKS5mb3JFYWNoKEVudGl0eVV0aWxzLmNsZWFuSWRBbmRVcGRhdGVEYXRlKTtcbiAgfVxuXG4gIHN0YXRpYyBzb3J0PFQgZXh0ZW5kcyBJRW50aXR5PFQ+IHwgYW55PihkYXRhOiBUW10sIHNvcnRCeT86IHN0cmluZywgc29ydERpcmVjdGlvbj86IHN0cmluZyk6IFRbXSB7XG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoIDw9IDEgfHwgIXNvcnRCeSkgcmV0dXJuIGRhdGE7XG4gICAgcmV0dXJuIGRhdGEuc29ydCh0aGlzLnNvcnRDb21wYXJhdG9yKHNvcnRCeSwgc29ydERpcmVjdGlvbikpO1xuICB9XG5cbiAgc3RhdGljIHNvcnRDb21wYXJhdG9yPFQgZXh0ZW5kcyBJRW50aXR5PFQ+IHwgYW55Pihzb3J0Qnk/OiBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBzdHJpbmcpOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBhZnRlciA9ICghc29ydERpcmVjdGlvbiB8fCBzb3J0RGlyZWN0aW9uID09PSAnYXNjJykgPyAxIDogLTE7XG4gICAgY29uc3QgcHJvcGVydHkgPSBzb3J0QnkgfHwgJ2lkJztcbiAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQSA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGEsIHByb3BlcnR5KTtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGIsIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBFbnRpdHlVdGlscy5jb21wYXJlKHZhbHVlQSwgdmFsdWVCLCBhZnRlcik7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlPFQgZXh0ZW5kcyBJRW50aXR5PGFueT4+KHZhbHVlMTogVCwgdmFsdWUyOiBULCBkaXJlY3Rpb246IDEgfCAtMSwgY2hlY2tBdHRyaWJ1dGU/OiBrZXlvZiBUKTogbnVtYmVyIHtcbiAgICBjaGVja0F0dHJpYnV0ZSA9IGNoZWNrQXR0cmlidXRlIHx8ICdpZCc7XG4gICAgaWYgKEVudGl0eVV0aWxzLmlzTm90RW1wdHkodmFsdWUxLCBjaGVja0F0dHJpYnV0ZSkgJiYgRW50aXR5VXRpbHMuaXNOb3RFbXB0eSh2YWx1ZTIsIGNoZWNrQXR0cmlidXRlKSkge1xuICAgICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyh2YWx1ZTEsIHZhbHVlMiwgY2hlY2tBdHRyaWJ1dGUpID8gMCA6ICh2YWx1ZTFbY2hlY2tBdHRyaWJ1dGVdID4gdmFsdWUyW2NoZWNrQXR0cmlidXRlXSA/IGRpcmVjdGlvbiA6ICgtMSAqIGRpcmVjdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTIgPyAwIDogKHZhbHVlMSA+IHZhbHVlMiA/IGRpcmVjdGlvbiA6ICgtMSAqIGRpcmVjdGlvbikpO1xuICB9XG5cbiAgc3RhdGljIGNvbXBhcmVWYWx1ZTxUPih2YWx1ZTE6IFQsIHZhbHVlMjogVCwgZGlyZWN0aW9uOiAxIHwgLTEpOiBudW1iZXIge1xuICAgIHJldHVybiB2YWx1ZTEgPT09IHZhbHVlMiA/IDAgOiAodmFsdWUxID4gdmFsdWUyID8gZGlyZWN0aW9uIDogKC0xICogZGlyZWN0aW9uKSk7XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyPFQgZXh0ZW5kcyBJRW50aXR5PFQ+IHwgYW55PihkYXRhOiBUW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nKTogVFtdIHtcbiAgICBjb25zdCBmaWx0ZXJGbiA9IHRoaXMuc2VhcmNoVGV4dEZpbHRlcihzZWFyY2hBdHRyaWJ1dGUsIHNlYXJjaFRleHQpO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihmaWx0ZXJGbik7XG4gIH1cblxuICBzdGF0aWMgc2VhcmNoVGV4dEZpbHRlcjxUIGV4dGVuZHMgSUVudGl0eTxUPiB8IGFueT4oc2VhcmNoQXR0cmlidXRlOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nKTogRmlsdGVyRm48VD4ge1xuICAgIGlmIChpc05pbE9yQmxhbmsoc2VhcmNoQXR0cmlidXRlKSB8fCBpc05pbE9yQmxhbmsoc2VhcmNoVGV4dCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIGZpbHRlciBub3QgbmVlZFxuXG4gICAgY29uc3Qgc2VhcmNoUmVnZXhwID0gc2VhcmNoVGV4dFxuICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgICAgLnJlcGxhY2UoL1stXFwvXFxcXF4kKy4oKXxbXFxde31dL2csICdcXFxcJCYnKVxuICAgICAgLy8gSW50ZXJwcmV0ICogYXMgYW55IHRleHRcbiAgICAgIC5yZXBsYWNlKC9bKl0rL2csICcuKicpXG4gICAgICAvLyBJbnRlcnByZXQgPyBhcyBvbmUgY2hhcmFjdGVyXG4gICAgICAucmVwbGFjZSgvWz9dL2csICcuJyk7XG4gICAgaWYgKHNlYXJjaFJlZ2V4cCA9PT0gJy4qJykgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZmlsdGVyIG5vdCBuZWVkXG5cbiAgICBjb25zdCBmbGFncyA9ICdpJzsgLy8gZG9uJ3QgdXNlIGdsb2JhbCByZWdleCBzZWFyY2hcbiAgICBjb25zdCBhc1ByZWZpeFBhdHRlcm4gPSAnXicgKyBzZWFyY2hSZWdleHA7XG4gICAgY29uc3QgYW55TWF0Y2hQYXR0ZXJuID0gJ14uKicgKyBzZWFyY2hSZWdleHA7XG5cbiAgICAvLyBPbmx5IG9uZSBzZWFyY2ggYXR0cmlidXRlc1xuICAgIGlmICh0eXBlb2Ygc2VhcmNoQXR0cmlidXRlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaXNTaW1wbGVQYXRoID0gIXNlYXJjaEF0dHJpYnV0ZSB8fCBzZWFyY2hBdHRyaWJ1dGUuaW5kZXhPZignLicpID09PSAtMTtcbiAgICAgIGNvbnN0IHNlYXJjaEFzUHJlZml4ID0gIHNlYXJjaEF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdsYWJlbCcpIHx8IHNlYXJjaEF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdjb2RlJyk7XG4gICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKHNlYXJjaEFzUHJlZml4ICYmIGFzUHJlZml4UGF0dGVybiB8fCBhbnlNYXRjaFBhdHRlcm4sIGZsYWdzKTtcbiAgICAgIGlmIChpc1NpbXBsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGEgPT4gcmVnZXhwLnRlc3QoIGFbc2VhcmNoQXR0cmlidXRlXSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEgPT4gcmVnZXhwLnRlc3QoRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlCeVBhdGgoYSwgc2VhcmNoQXR0cmlidXRlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFueSBzZWFyY2ggYXR0cmlidXRlc1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcmVnZXhwcyA9IHNlYXJjaEF0dHJpYnV0ZS5tYXAocGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEFzUHJlZml4ID0gIHBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnbGFiZWwnKSB8fCBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2NvZGUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoIHNlYXJjaEFzUHJlZml4ICYmIGFzUHJlZml4UGF0dGVybiB8fCBhbnlNYXRjaFBhdHRlcm4sIGZsYWdzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGEgPT4gc2VhcmNoQXR0cmlidXRlLmZpbmRJbmRleCgocGF0aCwgaW5kZXgpID0+IHJlZ2V4cHNbaW5kZXhdLnRlc3QoRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCkpKSAhPT0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIGJhdGNoIGVudGl0eSB0cmVlIGludG8gYSBhcnJheSBsaXN0LiBUaGlzIG1ldGhvZCBrZWVwIGxpbmtzIHBhcmVudC9jaGlsZHJlbi5cbiAgICpcbiAgICogTWV0aG9kIHVzZWQgdG8gZmluZCBiYXRjaCB3aXRob3V0IGlkIChlLmcuIGJlZm9yZSBsb2NhbCBzdG9yYWdlKVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZVRvQXJyYXk8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihzb3VyY2U6IFQpOiBUW10ge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKChyZXMsIGJhdGNoKSA9PiB7XG4gICAgICBiYXRjaC5wYXJlbnQgPSBzb3VyY2U7XG4gICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLnRyZWVUb0FycmF5KGJhdGNoKSk7IC8vIHJlY3Vyc2l2ZSBjYWxsXG4gICAgfSwgW3NvdXJjZV0pO1xuICB9XG5cbiAgc3RhdGljIGxpc3RPZlRyZWVUb0FycmF5PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlczogVFtdKTogVFtdIHtcbiAgICBpZiAoIXNvdXJjZXMgfHwgIXNvdXJjZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc291cmNlcy5yZWR1Y2UoKHJlcywgc291cmNlKSA9PiByZXMuY29uY2F0KHRoaXMudHJlZVRvQXJyYXk8VD4oc291cmNlKSksIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWxsIHBhcmVudCBhdHRyaWJ1dGUsIG9mIGFsbCBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZUZpbGxQYXJlbnQ8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihzb3VyY2U6IFQpOiBUW10ge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gbnVsbDtcbiAgICAoc291cmNlLmNoaWxkcmVuIHx8IFtdKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGNoaWxkLnBhcmVudCA9IHNvdXJjZTtcbiAgICAgIHRoaXMudHJlZUZpbGxQYXJlbnQoY2hpbGQpOyAvLyBMb29wXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgaXNMb2NhbChlbnRpdHk6IElFbnRpdHk8YW55LCBhbnk+IHwgRW50aXR5PGFueSwgYW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRpdHkgJiYgKGlzTm90TmlsKGVudGl0eS5pZCkgJiYgK2VudGl0eS5pZCA8IDApO1xuICB9XG5cbiAgc3RhdGljIGlzUmVtb3RlKGVudGl0eTogSUVudGl0eTxhbnksIGFueT4gfCBFbnRpdHk8YW55LCBhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudGl0eSAmJiAhRW50aXR5VXRpbHMuaXNMb2NhbChlbnRpdHkpO1xuICB9XG5cbiAgc3RhdGljIGlzTG9jYWxJZChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKGlkKSAmJiAraWQgPCAwO1xuICB9XG5cbiAgc3RhdGljIGlzUmVtb3RlSWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbChpZCkgJiYgK2lkID49IDA7XG4gIH1cblxufVxuIl19