@alfresco/adf-content-services 8.1.0-15972188736 → 8.1.0-15979090800

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 (408) hide show
  1. package/esm2022/adf-content-services.mjs +5 -0
  2. package/esm2022/lib/agent/index.mjs +18 -0
  3. package/esm2022/lib/agent/public-api.mjs +18 -0
  4. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  5. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  6. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  7. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
  8. package/esm2022/lib/api-factories/index.mjs +18 -0
  9. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  10. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  11. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +77 -0
  12. package/esm2022/lib/aspect-list/aspect-list.component.mjs +139 -0
  13. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  14. package/esm2022/lib/aspect-list/index.mjs +18 -0
  15. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  16. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  17. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  18. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  19. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  20. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  21. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +166 -0
  22. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  23. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +65 -0
  24. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  25. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  26. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  27. package/esm2022/lib/category/categories-management/categories-management.component.mjs +308 -0
  28. package/esm2022/lib/category/category.module.mjs +33 -0
  29. package/esm2022/lib/category/index.mjs +18 -0
  30. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  31. package/esm2022/lib/category/public-api.mjs +23 -0
  32. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  33. package/esm2022/lib/category/services/category.service.mjs +159 -0
  34. package/esm2022/lib/common/events/file.event.mjs +46 -0
  35. package/esm2022/lib/common/index.mjs +18 -0
  36. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  37. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  38. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  39. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  40. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  41. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  42. package/esm2022/lib/common/models/file.model.mjs +53 -0
  43. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  44. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  45. package/esm2022/lib/common/public-api.mjs +37 -0
  46. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  47. package/esm2022/lib/common/services/content.service.mjs +180 -0
  48. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  49. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  50. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  51. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  52. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  53. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  54. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  55. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  56. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +54 -0
  57. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +490 -0
  58. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +128 -0
  59. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  60. package/esm2022/lib/content-metadata/index.mjs +18 -0
  61. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  62. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  63. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  64. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  65. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  66. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  67. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  68. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  74. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  75. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  76. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  77. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  78. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  79. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  80. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  81. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  82. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  83. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  84. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  85. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +617 -0
  86. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  87. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  88. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +205 -0
  89. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  90. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  91. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  92. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  93. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  94. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +287 -0
  95. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  96. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  97. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  98. package/esm2022/lib/content-node-share/index.mjs +18 -0
  99. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  100. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  101. package/esm2022/lib/content-type/content-type-dialog.component.mjs +57 -0
  102. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  103. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  104. package/esm2022/lib/content-type/index.mjs +20 -0
  105. package/esm2022/lib/content.module.mjs +277 -0
  106. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +51 -0
  107. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  108. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  109. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  110. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  111. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  112. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +146 -0
  113. package/esm2022/lib/dialogs/index.mjs +18 -0
  114. package/esm2022/lib/dialogs/library/library.dialog.mjs +224 -0
  115. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +115 -0
  116. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  117. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  118. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  119. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  120. package/esm2022/lib/directives/index.mjs +18 -0
  121. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  122. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  123. package/esm2022/lib/directives/node-counter.directive.mjs +59 -0
  124. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  125. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  126. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  127. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  128. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  129. package/esm2022/lib/directives/public-api.mjs +28 -0
  130. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  131. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  132. package/esm2022/lib/document-list/components/document-list.component.mjs +963 -0
  133. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  134. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +42 -0
  135. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  136. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +131 -0
  137. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +91 -0
  138. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +86 -0
  139. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +118 -0
  140. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  141. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  142. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  143. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  144. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  145. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  146. package/esm2022/lib/document-list/document-list.module.mjs +75 -0
  147. package/esm2022/lib/document-list/index.mjs +18 -0
  148. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  149. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  150. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  151. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  152. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  153. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  154. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  155. package/esm2022/lib/document-list/public-api.mjs +47 -0
  156. package/esm2022/lib/document-list/services/custom-resources.service.mjs +378 -0
  157. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  158. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  159. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  160. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  161. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  162. package/esm2022/lib/group/index.mjs +18 -0
  163. package/esm2022/lib/group/public-api.mjs +18 -0
  164. package/esm2022/lib/group/services/group.service.mjs +84 -0
  165. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  166. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  167. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  168. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  169. package/esm2022/lib/interfaces/index.mjs +18 -0
  170. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  171. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  172. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  173. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  174. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  175. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  176. package/esm2022/lib/legal-hold/index.mjs +18 -0
  177. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  178. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  179. package/esm2022/lib/material.module.mjs +183 -0
  180. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  181. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  182. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  183. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  184. package/esm2022/lib/mock/index.mjs +18 -0
  185. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  186. package/esm2022/lib/mock/public-api.mjs +27 -0
  187. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  188. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  189. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  190. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  191. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  192. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  193. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  194. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  195. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +74 -0
  196. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  197. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  198. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  199. package/esm2022/lib/node-comments/index.mjs +18 -0
  200. package/esm2022/lib/node-comments/node-comments.component.mjs +44 -0
  201. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  202. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  203. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  204. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  205. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +123 -0
  206. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +102 -0
  207. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +69 -0
  208. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  209. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  210. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  211. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +102 -0
  212. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +87 -0
  213. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  214. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  215. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  216. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  217. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +111 -0
  218. package/esm2022/lib/permission-manager/index.mjs +18 -0
  219. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  220. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  221. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  222. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  223. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  224. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  225. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  226. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  227. package/esm2022/lib/pipes/index.mjs +18 -0
  228. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  229. package/esm2022/lib/pipes/public-api.mjs +19 -0
  230. package/esm2022/lib/prediction/index.mjs +18 -0
  231. package/esm2022/lib/prediction/public-api.mjs +18 -0
  232. package/esm2022/lib/prediction/services/index.mjs +18 -0
  233. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  234. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  235. package/esm2022/lib/search/components/index.mjs +43 -0
  236. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  237. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  238. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +158 -0
  239. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  240. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +169 -0
  241. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +46 -0
  242. package/esm2022/lib/search/components/search-control.component.mjs +180 -0
  243. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  244. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  245. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  246. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +196 -0
  247. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  248. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  249. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  250. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +223 -0
  251. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  252. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +132 -0
  253. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  254. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +45 -0
  255. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +80 -0
  256. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  257. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +154 -0
  258. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  259. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +104 -0
  260. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +109 -0
  261. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  262. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +63 -0
  263. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +43 -0
  264. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +109 -0
  265. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  266. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +122 -0
  267. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  268. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  269. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +63 -0
  270. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  271. package/esm2022/lib/search/components/search-form/search-form.component.mjs +52 -0
  272. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  273. package/esm2022/lib/search/components/search-input/search-input.component.mjs +108 -0
  274. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  275. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +163 -0
  276. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  277. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +154 -0
  278. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  279. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  280. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  281. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  282. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  283. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  284. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  285. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  286. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  287. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +145 -0
  288. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  289. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +119 -0
  290. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  291. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  292. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  293. package/esm2022/lib/search/components/search-text/search-text.component.mjs +134 -0
  294. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  295. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  296. package/esm2022/lib/search/components/search.component.mjs +152 -0
  297. package/esm2022/lib/search/forms/index.mjs +19 -0
  298. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  299. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  300. package/esm2022/lib/search/index.mjs +18 -0
  301. package/esm2022/lib/search/mocks/index.mjs +18 -0
  302. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  303. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  304. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  305. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  306. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  307. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  308. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  309. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  310. package/esm2022/lib/search/models/index.mjs +34 -0
  311. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  312. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  313. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  315. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  316. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  318. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  319. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  321. package/esm2022/lib/search/public-api.mjs +24 -0
  322. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  323. package/esm2022/lib/search/search.module.mjs +192 -0
  324. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  325. package/esm2022/lib/search/services/index.mjs +24 -0
  326. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  327. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  328. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  329. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  330. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  331. package/esm2022/lib/search/services/search.service.mjs +89 -0
  332. package/esm2022/lib/search-ai/index.mjs +18 -0
  333. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  334. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  335. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  336. package/esm2022/lib/security/index.mjs +18 -0
  337. package/esm2022/lib/security/public-api.mjs +18 -0
  338. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  339. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  340. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  341. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
  342. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  343. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  344. package/esm2022/lib/services/index.mjs +18 -0
  345. package/esm2022/lib/services/public-api.mjs +18 -0
  346. package/esm2022/lib/tag/index.mjs +18 -0
  347. package/esm2022/lib/tag/public-api.mjs +24 -0
  348. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  349. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +114 -0
  350. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  351. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  352. package/esm2022/lib/tag/tag.module.mjs +37 -0
  353. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  354. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +370 -0
  355. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  356. package/esm2022/lib/tree/components/tree.component.mjs +312 -0
  357. package/esm2022/lib/tree/index.mjs +18 -0
  358. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  359. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  360. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  361. package/esm2022/lib/tree/public-api.mjs +23 -0
  362. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  363. package/esm2022/lib/tree/tree.module.mjs +33 -0
  364. package/esm2022/lib/tree-view/components/tree-view.component.mjs +75 -0
  365. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  366. package/esm2022/lib/tree-view/index.mjs +18 -0
  367. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  368. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  369. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  370. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  371. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  372. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +190 -0
  373. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +92 -0
  374. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  375. package/esm2022/lib/upload/components/upload-button.component.mjs +133 -0
  376. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  377. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  378. package/esm2022/lib/upload/components/upload-version-button.component.mjs +54 -0
  379. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  380. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  381. package/esm2022/lib/upload/index.mjs +18 -0
  382. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  383. package/esm2022/lib/upload/public-api.mjs +29 -0
  384. package/esm2022/lib/upload/upload.module.mjs +72 -0
  385. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  386. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  387. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  388. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  389. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  390. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  391. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  392. package/esm2022/lib/version-manager/index.mjs +18 -0
  393. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  394. package/esm2022/lib/version-manager/version-comparison.component.mjs +42 -0
  395. package/esm2022/lib/version-manager/version-list.component.mjs +215 -0
  396. package/esm2022/lib/version-manager/version-manager.component.mjs +145 -0
  397. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  398. package/esm2022/lib/version-manager/version-upload.component.mjs +154 -0
  399. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  400. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +408 -0
  401. package/esm2022/lib/viewer/index.mjs +18 -0
  402. package/esm2022/lib/viewer/public-api.mjs +19 -0
  403. package/esm2022/public-api.mjs +56 -0
  404. package/fesm2022/adf-content-services.mjs +761 -744
  405. package/fesm2022/adf-content-services.mjs.map +1 -1
  406. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  407. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  408. package/package.json +5 -3
@@ -0,0 +1,270 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { Injectable } from '@angular/core';
18
+ import { ContentApi, RenditionsApi, VersionsApi } from '@alfresco/js-api';
19
+ import { TranslationService, ViewUtilService } from '@alfresco/adf-core';
20
+ import { AlfrescoApiService } from '../../services/alfresco-api.service';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "../../services/alfresco-api.service";
23
+ import * as i2 from "@alfresco/adf-core";
24
+ export class RenditionService {
25
+ static { this.TARGET = '_new'; }
26
+ /**
27
+ * Content groups based on categorization of files that can be viewed in the web browser. This
28
+ * implementation or grouping is tied to the definition the ng component: ViewerRenderComponent
29
+ */
30
+ static { this.ContentGroup = {
31
+ IMAGE: 'image',
32
+ MEDIA: 'media',
33
+ PDF: 'pdf',
34
+ TEXT: 'text'
35
+ }; }
36
+ /**
37
+ * The name of the rendition with the media subtitles in the supported format
38
+ */
39
+ static { this.SUBTITLES_RENDITION_NAME = 'webvtt'; }
40
+ get renditionsApi() {
41
+ this._renditionsApi = this._renditionsApi ?? new RenditionsApi(this.apiService.getInstance());
42
+ return this._renditionsApi;
43
+ }
44
+ get contentApi() {
45
+ this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance());
46
+ return this._contentApi;
47
+ }
48
+ get versionsApi() {
49
+ this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());
50
+ return this._versionsApi;
51
+ }
52
+ constructor(apiService, translateService, viewUtilsService) {
53
+ this.apiService = apiService;
54
+ this.translateService = translateService;
55
+ this.viewUtilsService = viewUtilsService;
56
+ /**
57
+ * Based on ViewerRenderComponent Implementation, this value is used to determine how many times we try
58
+ * to get the rendition of a file for preview, or printing.
59
+ */
60
+ this.maxRetries = 5;
61
+ /**
62
+ * Timeout used for setInterval.
63
+ */
64
+ this.TRY_TIMEOUT = 10000;
65
+ this.DEFAULT_RENDITION = 'imgpreview';
66
+ }
67
+ getRenditionUrl(nodeId, type, renditionExists) {
68
+ return renditionExists && type !== RenditionService.ContentGroup.IMAGE
69
+ ? this.contentApi.getRenditionUrl(nodeId, RenditionService.ContentGroup.PDF)
70
+ : this.contentApi.getContentUrl(nodeId, false);
71
+ }
72
+ async waitRendition(nodeId, renditionId, retries) {
73
+ if (this.maxRetries > retries) {
74
+ const rendition = await this.renditionsApi.getRendition(nodeId, renditionId);
75
+ const status = rendition.entry.status.toString();
76
+ if (status === 'CREATED') {
77
+ return rendition;
78
+ }
79
+ else {
80
+ retries += 1;
81
+ await this.wait(1000);
82
+ return this.waitRendition(nodeId, renditionId, retries);
83
+ }
84
+ }
85
+ return Promise.resolve(null);
86
+ }
87
+ wait(ms) {
88
+ return new Promise((resolve) => setTimeout(resolve, ms));
89
+ }
90
+ async getRendition(nodeId, renditionId) {
91
+ const renditionPaging = await this.renditionsApi.listRenditions(nodeId);
92
+ let rendition = renditionPaging.list.entries.find((renditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);
93
+ if (rendition) {
94
+ const status = rendition.entry.status.toString();
95
+ if (status === 'NOT_CREATED') {
96
+ try {
97
+ await this.renditionsApi.createRendition(nodeId, { id: renditionId });
98
+ rendition = await this.waitRendition(nodeId, renditionId, 0);
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ }
105
+ return new Promise((resolve) => resolve(rendition));
106
+ }
107
+ async getNodeRendition(nodeId, versionId) {
108
+ try {
109
+ return versionId ? await this.resolveNodeRendition(nodeId, 'pdf', versionId) : await this.resolveNodeRendition(nodeId, 'pdf');
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ }
115
+ async resolveNodeRendition(nodeId, renditionId, versionId) {
116
+ renditionId = renditionId.toLowerCase();
117
+ const supportedRendition = versionId
118
+ ? await this.versionsApi.listVersionRenditions(nodeId, versionId)
119
+ : await this.renditionsApi.listRenditions(nodeId);
120
+ let rendition = this.findRenditionById(supportedRendition, renditionId);
121
+ if (!rendition) {
122
+ renditionId = this.DEFAULT_RENDITION;
123
+ rendition = this.findRenditionById(supportedRendition, this.DEFAULT_RENDITION);
124
+ }
125
+ if (rendition) {
126
+ const status = rendition.entry.status.toString();
127
+ const mimeType = rendition.entry.content.mimeType;
128
+ if (status === 'NOT_CREATED') {
129
+ return { url: await this.requestCreateRendition(nodeId, renditionId, versionId), mimeType };
130
+ }
131
+ else {
132
+ return { url: await this.handleNodeRendition(nodeId, renditionId, versionId), mimeType };
133
+ }
134
+ }
135
+ return null;
136
+ }
137
+ async requestCreateRendition(nodeId, renditionId, versionId) {
138
+ try {
139
+ if (versionId) {
140
+ await this.versionsApi.createVersionRendition(nodeId, versionId, { id: renditionId });
141
+ }
142
+ else {
143
+ await this.renditionsApi.createRendition(nodeId, { id: renditionId });
144
+ }
145
+ try {
146
+ return versionId ? await this.waitNodeRendition(nodeId, renditionId, versionId) : await this.waitNodeRendition(nodeId, renditionId);
147
+ }
148
+ catch (e) {
149
+ return null;
150
+ }
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ }
156
+ findRenditionById(supportedRendition, renditionId) {
157
+ return supportedRendition.list.entries.find((renditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);
158
+ }
159
+ async waitNodeRendition(nodeId, renditionId, versionId) {
160
+ let currentRetry = 0;
161
+ return new Promise((resolve, reject) => {
162
+ const intervalId = setInterval(() => {
163
+ currentRetry++;
164
+ if (this.maxRetries >= currentRetry) {
165
+ if (versionId) {
166
+ this.versionsApi.getVersionRendition(nodeId, versionId, renditionId).then((rendition) => {
167
+ const status = rendition.entry.status.toString();
168
+ if (status === 'CREATED') {
169
+ clearInterval(intervalId);
170
+ return resolve(this.handleNodeRendition(nodeId, rendition.entry.content.mimeType, versionId));
171
+ }
172
+ }, () => reject(new Error('Error geting version rendition')));
173
+ }
174
+ else {
175
+ this.renditionsApi.getRendition(nodeId, renditionId).then((rendition) => {
176
+ const status = rendition.entry.status.toString();
177
+ if (status === 'CREATED') {
178
+ clearInterval(intervalId);
179
+ return resolve(this.handleNodeRendition(nodeId, renditionId, versionId));
180
+ }
181
+ }, () => reject(new Error('Error getting rendition')));
182
+ }
183
+ }
184
+ else {
185
+ clearInterval(intervalId);
186
+ return reject(new Error('Error getting rendition'));
187
+ }
188
+ }, this.TRY_TIMEOUT);
189
+ });
190
+ }
191
+ async handleNodeRendition(nodeId, renditionId, versionId) {
192
+ return versionId
193
+ ? this.contentApi.getVersionRenditionUrl(nodeId, versionId, renditionId)
194
+ : this.contentApi.getRenditionUrl(nodeId, renditionId);
195
+ }
196
+ async generateMediaTracksRendition(nodeId) {
197
+ return this.isRenditionAvailable(nodeId, RenditionService.SUBTITLES_RENDITION_NAME)
198
+ .then((value) => {
199
+ const tracks = [];
200
+ if (value) {
201
+ tracks.push({
202
+ kind: 'subtitles',
203
+ src: this.contentApi.getRenditionUrl(nodeId, RenditionService.SUBTITLES_RENDITION_NAME),
204
+ label: this.translateService.instant('ADF_VIEWER.SUBTITLES')
205
+ });
206
+ }
207
+ return tracks;
208
+ })
209
+ .catch(() => []);
210
+ }
211
+ async isRenditionAvailable(nodeId, renditionId) {
212
+ const renditionPaging = await this.renditionsApi.listRenditions(nodeId);
213
+ const rendition = renditionPaging.list.entries.find((renditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);
214
+ return rendition?.entry?.status?.toString() === 'CREATED' || false;
215
+ }
216
+ /**
217
+ * This method takes a url to trigger the print dialog against, and the type of artifact that it
218
+ * is.
219
+ * This URL should be one that can be rendered in the browser, for example PDF, Image, or Text
220
+ *
221
+ * @param url url to print
222
+ * @param type type of the rendition
223
+ */
224
+ printFile(url, type) {
225
+ const pwa = window.open(url, RenditionService.TARGET);
226
+ if (pwa) {
227
+ pwa.onload = () => {
228
+ pwa.print();
229
+ if (type === RenditionService.ContentGroup.IMAGE) {
230
+ // Because of the way chrome focus and close image window vs. pdf preview window
231
+ setTimeout(() => {
232
+ pwa.close();
233
+ }, 500);
234
+ }
235
+ };
236
+ }
237
+ }
238
+ /**
239
+ * Launch the File Print dialog from anywhere other than the preview service, which resolves the
240
+ * rendition of the object that can be printed from a web browser.
241
+ * These are: images, PDF files, or PDF rendition of files.
242
+ * We also force PDF rendition for TEXT type objects, otherwise the default URL is to download.
243
+ * TODO there are different TEXT type objects, (HTML, plaintext, xml, etc. we should determine how these are handled)
244
+ *
245
+ * @param objectId object it
246
+ * @param mimeType mime type
247
+ */
248
+ printFileGeneric(objectId, mimeType) {
249
+ const nodeId = objectId;
250
+ const type = this.viewUtilsService.getViewerTypeByMimeType(mimeType);
251
+ this.getRendition(nodeId, RenditionService.ContentGroup.PDF)
252
+ .then((value) => {
253
+ const url = this.getRenditionUrl(nodeId, type, !!value);
254
+ const printType = type === RenditionService.ContentGroup.PDF || type === RenditionService.ContentGroup.TEXT
255
+ ? RenditionService.ContentGroup.PDF
256
+ : type;
257
+ this.printFile(url, printType);
258
+ })
259
+ .catch(() => { });
260
+ }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RenditionService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.TranslationService }, { token: i2.ViewUtilService }], target: i0.ɵɵFactoryTarget.Injectable }); }
262
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RenditionService, providedIn: 'root' }); }
263
+ }
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RenditionService, decorators: [{
265
+ type: Injectable,
266
+ args: [{
267
+ providedIn: 'root'
268
+ }]
269
+ }], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.TranslationService }, { type: i2.ViewUtilService }] });
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGl0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2NvbW1vbi9zZXJ2aWNlcy9yZW5kaXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQW1DLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQVMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFLekUsTUFBTSxPQUFPLGdCQUFnQjthQUNsQixXQUFNLEdBQUcsTUFBTSxBQUFULENBQVU7SUFFdkI7OztPQUdHO2FBQ0ksaUJBQVksR0FBRztRQUNsQixLQUFLLEVBQUUsT0FBTztRQUNkLEtBQUssRUFBRSxPQUFPO1FBQ2QsR0FBRyxFQUFFLEtBQUs7UUFDVixJQUFJLEVBQUUsTUFBTTtLQUNmLEFBTGtCLENBS2pCO0lBRUY7O09BRUc7YUFDSSw2QkFBd0IsR0FBRyxRQUFRLEFBQVgsQ0FBWTtJQWMzQyxJQUFJLGFBQWE7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBR0QsSUFBSSxVQUFVO1FBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFF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QUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQzthQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsTUFBTSxTQUFTLEdBQ1gsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJO2dCQUNyRixDQUFDLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUc7Z0JBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQzsrR0FqUlEsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGYixNQUFNOzs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250ZW50QXBpLCBSZW5kaXRpb25FbnRyeSwgUmVuZGl0aW9uUGFnaW5nLCBSZW5kaXRpb25zQXBpLCBWZXJzaW9uc0FwaSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgVHJhY2ssIFRyYW5zbGF0aW9uU2VydmljZSwgVmlld1V0aWxTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kaXRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgVEFSR0VUID0gJ19uZXcnO1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCBncm91cHMgYmFzZWQgb24gY2F0ZWdvcml6YXRpb24gb2YgZmlsZXMgdGhhdCBjYW4gYmUgdmlld2VkIGluIHRoZSB3ZWIgYnJvd3Nlci4gVGhpc1xuICAgICAqIGltcGxlbWVudGF0aW9uIG9yIGdyb3VwaW5nIGlzIHRpZWQgdG8gdGhlIGRlZmluaXRpb24gdGhlIG5nIGNvbXBvbmVudDogVmlld2VyUmVuZGVyQ29tcG9uZW50XG4gICAgICovXG4gICAgc3RhdGljIENvbnRlbnRHcm91cCA9IHtcbiAgICAgICAgSU1BR0U6ICdpbWFnZScsXG4gICAgICAgIE1FRElBOiAnbWVkaWEnLFxuICAgICAgICBQREY6ICdwZGYnLFxuICAgICAgICBURVhUOiAndGV4dCdcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHJlbmRpdGlvbiB3aXRoIHRoZSBtZWRpYSBzdWJ0aXRsZXMgaW4gdGhlIHN1cHBvcnRlZCBmb3JtYXRcbiAgICAgKi9cbiAgICBzdGF0aWMgU1VCVElUTEVTX1JFTkRJVElPTl9OQU1FID0gJ3dlYnZ0dCc7XG5cbiAgICAvKipcbiAgICAgKiBCYXNlZCBvbiBWaWV3ZXJSZW5kZXJDb21wb25lbnQgSW1wbGVtZW50YXRpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IG1hbnkgdGltZXMgd2UgdHJ5XG4gICAgICogdG8gZ2V0IHRoZSByZW5kaXRpb24gb2YgYSBmaWxlIGZvciBwcmV2aWV3LCBvciBwcmludGluZy5cbiAgICAgKi9cbiAgICBtYXhSZXRyaWVzID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRpbWVvdXQgdXNlZCBmb3Igc2V0SW50ZXJ2YWwuXG4gICAgICovXG4gICAgcHJpdmF0ZSBUUllfVElNRU9VVDogbnVtYmVyID0gMTAwMDA7XG5cbiAgICBfcmVuZGl0aW9uc0FwaTogUmVuZGl0aW9uc0FwaTtcbiAgICBnZXQgcmVuZGl0aW9uc0FwaSgpOiBSZW5kaXRpb25zQXBpIHtcbiAgICAgICAgdGhpcy5fcmVuZGl0aW9uc0FwaSA9IHRoaXMuX3JlbmRpdGlvbnNBcGkgPz8gbmV3IFJlbmRpdGlvbnNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGl0aW9uc0FwaTtcbiAgICB9XG5cbiAgICBfY29udGVudEFwaTogQ29udGVudEFwaTtcbiAgICBnZXQgY29udGVudEFwaSgpOiBDb250ZW50QXBpIHtcbiAgICAgICAgdGhpcy5fY29udGVudEFwaSA9IHRoaXMuX2NvbnRlbnRBcGkgPz8gbmV3IENvbnRlbnRBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudEFwaTtcbiAgICB9XG5cbiAgICBfdmVyc2lvbnNBcGk6IFZlcnNpb25zQXBpO1xuICAgIHByaXZhdGUgREVGQVVMVF9SRU5ESVRJT046IHN0cmluZyA9ICdpbWdwcmV2aWV3JztcblxuICAgIGdldCB2ZXJzaW9uc0FwaSgpOiBWZXJzaW9uc0FwaSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25zQXBpID0gdGhpcy5fdmVyc2lvbnNBcGkgPz8gbmV3IFZlcnNpb25zQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb25zQXBpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSwgcHJpdmF0ZSB2aWV3VXRpbHNTZXJ2aWNlOiBWaWV3VXRpbFNlcnZpY2UpIHt9XG5cbiAgICBnZXRSZW5kaXRpb25Vcmwobm9kZUlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgcmVuZGl0aW9uRXhpc3RzOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHJlbmRpdGlvbkV4aXN0cyAmJiB0eXBlICE9PSBSZW5kaXRpb25TZXJ2aWNlLkNvbnRlbnRHcm91cC5JTUFHRVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRBcGkuZ2V0UmVuZGl0aW9uVXJsKG5vZGVJZCwgUmVuZGl0aW9uU2VydmljZS5Db250ZW50R3JvdXAuUERGKVxuICAgICAgICAgICAgOiB0aGlzLmNvbnRlbnRBcGkuZ2V0Q29udGVudFVybChub2RlSWQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHdhaXRSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcsIHJldHJpZXM6IG51bWJlcik6IFByb21pc2U8UmVuZGl0aW9uRW50cnk+IHtcbiAgICAgICAgaWYgKHRoaXMubWF4UmV0cmllcyA+IHJldHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRpdGlvbiA9IGF3YWl0IHRoaXMucmVuZGl0aW9uc0FwaS5nZXRSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCk7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZW5kaXRpb24uZW50cnkuc3RhdHVzLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdDUkVBVEVEJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kaXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHJpZXMgKz0gMTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLndhaXQoMTAwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFJlbmRpdGlvbihub2RlSWQsIHJlbmRpdGlvbklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3YWl0KG1zOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlbmRpdGlvbkVudHJ5PiB7XG4gICAgICAgIGNvbnN0IHJlbmRpdGlvblBhZ2luZzogUmVuZGl0aW9uUGFnaW5nID0gYXdhaXQgdGhpcy5yZW5kaXRpb25zQXBpLmxpc3RSZW5kaXRpb25zKG5vZGVJZCk7XG4gICAgICAgIGxldCByZW5kaXRpb246IFJlbmRpdGlvbkVudHJ5ID0gcmVuZGl0aW9uUGFnaW5nLmxpc3QuZW50cmllcy5maW5kKFxuICAgICAgICAgICAgKHJlbmRpdGlvbkVudHJ5OiBSZW5kaXRpb25FbnRyeSkgPT4gcmVuZGl0aW9uRW50cnkuZW50cnkuaWQudG9Mb3dlckNhc2UoKSA9PT0gcmVuZGl0aW9uSWRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmVuZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZW5kaXRpb24uZW50cnkuc3RhdHVzLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdOT1RfQ1JFQVRFRCcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRpdGlvbnNBcGkuY3JlYXRlUmVuZGl0aW9uKG5vZGVJZCwgeyBpZDogcmVuZGl0aW9uSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRpdGlvbiA9IGF3YWl0IHRoaXMud2FpdFJlbmRpdGlvbihub2RlSWQsIHJlbmRpdGlvbklkLCAwKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSZW5kaXRpb25FbnRyeT4oKHJlc29sdmUpID0+IHJlc29sdmUocmVuZGl0aW9uKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Tm9kZVJlbmRpdGlvbihub2RlSWQ6IHN0cmluZywgdmVyc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTx7IHVybDogc3RyaW5nOyBtaW1lVHlwZTogc3RyaW5nIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uSWQgPyBhd2FpdCB0aGlzLnJlc29sdmVOb2RlUmVuZGl0aW9uKG5vZGVJZCwgJ3BkZicsIHZlcnNpb25JZCkgOiBhd2FpdCB0aGlzLnJlc29sdmVOb2RlUmVuZGl0aW9uKG5vZGVJZCwgJ3BkZicpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlTm9kZVJlbmRpdGlvbihub2RlSWQ6IHN0cmluZywgcmVuZGl0aW9uSWQ6IHN0cmluZywgdmVyc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTx7IHVybDogc3RyaW5nOyBtaW1lVHlwZTogc3RyaW5nIH0+IHtcbiAgICAgICAgcmVuZGl0aW9uSWQgPSByZW5kaXRpb25JZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFJlbmRpdGlvbjogUmVuZGl0aW9uUGFnaW5nID0gdmVyc2lvbklkXG4gICAgICAgICAgICA/IGF3YWl0IHRoaXMudmVyc2lvbnNBcGkubGlzdFZlcnNpb25SZW5kaXRpb25zKG5vZGVJZCwgdmVyc2lvbklkKVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnJlbmRpdGlvbnNBcGkubGlzdFJlbmRpdGlvbnMobm9kZUlkKTtcblxuICAgICAgICBsZXQgcmVuZGl0aW9uID0gdGhpcy5maW5kUmVuZGl0aW9uQnlJZChzdXBwb3J0ZWRSZW5kaXRpb24sIHJlbmRpdGlvbklkKTtcbiAgICAgICAgaWYgKCFyZW5kaXRpb24pIHtcbiAgICAgICAgICAgIHJlbmRpdGlvbklkID0gdGhpcy5ERUZBVUxUX1JFTkRJVElPTjtcbiAgICAgICAgICAgIHJlbmRpdGlvbiA9IHRoaXMuZmluZFJlbmRpdGlvbkJ5SWQoc3VwcG9ydGVkUmVuZGl0aW9uLCB0aGlzLkRFRkFVTFRfUkVORElUSU9OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1czogc3RyaW5nID0gcmVuZGl0aW9uLmVudHJ5LnN0YXR1cy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgbWltZVR5cGU6IHN0cmluZyA9IHJlbmRpdGlvbi5lbnRyeS5jb250ZW50Lm1pbWVUeXBlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnTk9UX0NSRUFURUQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiBhd2FpdCB0aGlzLnJlcXVlc3RDcmVhdGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSwgbWltZVR5cGUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiBhd2FpdCB0aGlzLmhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSwgbWltZVR5cGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVxdWVzdENyZWF0ZVJlbmRpdGlvbihub2RlSWQ6IHN0cmluZywgcmVuZGl0aW9uSWQ6IHN0cmluZywgdmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyc2lvbnNBcGkuY3JlYXRlVmVyc2lvblJlbmRpdGlvbihub2RlSWQsIHZlcnNpb25JZCwgeyBpZDogcmVuZGl0aW9uSWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGl0aW9uc0FwaS5jcmVhdGVSZW5kaXRpb24obm9kZUlkLCB7IGlkOiByZW5kaXRpb25JZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25JZCA/IGF3YWl0IHRoaXMud2FpdE5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSA6IGF3YWl0IHRoaXMud2FpdE5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRSZW5kaXRpb25CeUlkKHN1cHBvcnRlZFJlbmRpdGlvbjogUmVuZGl0aW9uUGFnaW5nLCByZW5kaXRpb25JZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRSZW5kaXRpb24ubGlzdC5lbnRyaWVzLmZpbmQoKHJlbmRpdGlvbkVudHJ5OiBSZW5kaXRpb25FbnRyeSkgPT4gcmVuZGl0aW9uRW50cnkuZW50cnkuaWQudG9Mb3dlckNhc2UoKSA9PT0gcmVuZGl0aW9uSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd2FpdE5vZGVSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcsIHZlcnNpb25JZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBjdXJyZW50UmV0cnk6IG51bWJlciA9IDA7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJldHJ5Kys7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4UmV0cmllcyA+PSBjdXJyZW50UmV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJzaW9uc0FwaS5nZXRWZXJzaW9uUmVuZGl0aW9uKG5vZGVJZCwgdmVyc2lvbklkLCByZW5kaXRpb25JZCkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuZGl0aW9uOiBSZW5kaXRpb25FbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXM6IHN0cmluZyA9IHJlbmRpdGlvbi5lbnRyeS5zdGF0dXMudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnQ1JFQVRFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb24uZW50cnkuY29udGVudC5taW1lVHlwZSwgdmVyc2lvbklkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGdldGluZyB2ZXJzaW9uIHJlbmRpdGlvbicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGl0aW9uc0FwaS5nZXRSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuZGl0aW9uOiBSZW5kaXRpb25FbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXM6IHN0cmluZyA9IHJlbmRpdGlvbi5lbnRyeS5zdGF0dXMudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnQ1JFQVRFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGdldHRpbmcgcmVuZGl0aW9uJykpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGdldHRpbmcgcmVuZGl0aW9uJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMuVFJZX1RJTUVPVVQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcsIHZlcnNpb25JZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uSWRcbiAgICAgICAgICAgID8gdGhpcy5jb250ZW50QXBpLmdldFZlcnNpb25SZW5kaXRpb25Vcmwobm9kZUlkLCB2ZXJzaW9uSWQsIHJlbmRpdGlvbklkKVxuICAgICAgICAgICAgOiB0aGlzLmNvbnRlbnRBcGkuZ2V0UmVuZGl0aW9uVXJsKG5vZGVJZCwgcmVuZGl0aW9uSWQpO1xuICAgIH1cblxuICAgIGFzeW5jIGdlbmVyYXRlTWVkaWFUcmFja3NSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYWNrW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZW5kaXRpb25BdmFpbGFibGUobm9kZUlkLCBSZW5kaXRpb25TZXJ2aWNlLlNVQlRJVExFU19SRU5ESVRJT05fTkFNRSlcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cmFja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAnc3VidGl0bGVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5jb250ZW50QXBpLmdldFJlbmRpdGlvblVybChub2RlSWQsIFJlbmRpdGlvblNlcnZpY2UuU1VCVElUTEVTX1JFTkRJVElPTl9OQU1FKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQURGX1ZJRVdFUi5TVUJUSVRMRVMnKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNrcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaXNSZW5kaXRpb25BdmFpbGFibGUobm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgcmVuZGl0aW9uUGFnaW5nOiBSZW5kaXRpb25QYWdpbmcgPSBhd2FpdCB0aGlzLnJlbmRpdGlvbnNBcGkubGlzdFJlbmRpdGlvbnMobm9kZUlkKTtcbiAgICAgICAgY29uc3QgcmVuZGl0aW9uOiBSZW5kaXRpb25FbnRyeSA9IHJlbmRpdGlvblBhZ2luZy5saXN0LmVudHJpZXMuZmluZChcbiAgICAgICAgICAgIChyZW5kaXRpb25FbnRyeTogUmVuZGl0aW9uRW50cnkpID0+IHJlbmRpdGlvbkVudHJ5LmVudHJ5LmlkLnRvTG93ZXJDYXNlKCkgPT09IHJlbmRpdGlvbklkXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlbmRpdGlvbj8uZW50cnk/LnN0YXR1cz8udG9TdHJpbmcoKSA9PT0gJ0NSRUFURUQnIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHRha2VzIGEgdXJsIHRvIHRyaWdnZXIgdGhlIHByaW50IGRpYWxvZyBhZ2FpbnN0LCBhbmQgdGhlIHR5cGUgb2YgYXJ0aWZhY3QgdGhhdCBpdFxuICAgICAqIGlzLlxuICAgICAqIFRoaXMgVVJMIHNob3VsZCBiZSBvbmUgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlIFBERiwgSW1hZ2UsIG9yIFRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgdXJsIHRvIHByaW50XG4gICAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgcmVuZGl0aW9uXG4gICAgICovXG4gICAgcHJpbnRGaWxlKHVybDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHdhID0gd2luZG93Lm9wZW4odXJsLCBSZW5kaXRpb25TZXJ2aWNlLlRBUkdFVCk7XG4gICAgICAgIGlmIChwd2EpIHtcbiAgICAgICAgICAgIHB3YS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHdhLnByaW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFJlbmRpdGlvblNlcnZpY2UuQ29udGVudEdyb3VwLklNQUdFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHdheSBjaHJvbWUgZm9jdXMgYW5kIGNsb3NlIGltYWdlIHdpbmRvdyB2cy4gcGRmIHByZXZpZXcgd2luZG93XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHdhLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExhdW5jaCB0aGUgRmlsZSBQcmludCBkaWFsb2cgZnJvbSBhbnl3aGVyZSBvdGhlciB0aGFuIHRoZSBwcmV2aWV3IHNlcnZpY2UsIHdoaWNoIHJlc29sdmVzIHRoZVxuICAgICAqIHJlbmRpdGlvbiBvZiB0aGUgb2JqZWN0IHRoYXQgY2FuIGJlIHByaW50ZWQgZnJvbSBhIHdlYiBicm93c2VyLlxuICAgICAqIFRoZXNlIGFyZTogaW1hZ2VzLCBQREYgZmlsZXMsIG9yIFBERiByZW5kaXRpb24gb2YgZmlsZXMuXG4gICAgICogV2UgYWxzbyBmb3JjZSBQREYgcmVuZGl0aW9uIGZvciBURVhUIHR5cGUgb2JqZWN0cywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IFVSTCBpcyB0byBkb3dubG9hZC5cbiAgICAgKiBUT0RPIHRoZXJlIGFyZSBkaWZmZXJlbnQgVEVYVCB0eXBlIG9iamVjdHMsIChIVE1MLCBwbGFpbnRleHQsIHhtbCwgZXRjLiB3ZSBzaG91bGQgZGV0ZXJtaW5lIGhvdyB0aGVzZSBhcmUgaGFuZGxlZClcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3RJZCBvYmplY3QgaXRcbiAgICAgKiBAcGFyYW0gbWltZVR5cGUgbWltZSB0eXBlXG4gICAgICovXG4gICAgcHJpbnRGaWxlR2VuZXJpYyhvYmplY3RJZDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IG9iamVjdElkO1xuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSB0aGlzLnZpZXdVdGlsc1NlcnZpY2UuZ2V0Vmlld2VyVHlwZUJ5TWltZVR5cGUobWltZVR5cGUpO1xuXG4gICAgICAgIHRoaXMuZ2V0UmVuZGl0aW9uKG5vZGVJZCwgUmVuZGl0aW9uU2VydmljZS5Db250ZW50R3JvdXAuUERGKVxuICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsOiBzdHJpbmcgPSB0aGlzLmdldFJlbmRpdGlvblVybChub2RlSWQsIHR5cGUsICEhdmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW50VHlwZSA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFJlbmRpdGlvblNlcnZpY2UuQ29udGVudEdyb3VwLlBERiB8fCB0eXBlID09PSBSZW5kaXRpb25TZXJ2aWNlLkNvbnRlbnRHcm91cC5URVhUXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFJlbmRpdGlvblNlcnZpY2UuQ29udGVudEdyb3VwLlBERlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRGaWxlKHVybCwgcHJpbnRUeXBlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,206 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { NodesApi, PreferencesApi } from '@alfresco/js-api';
18
+ import { inject, Injectable, InjectionToken } from '@angular/core';
19
+ import { of, from, ReplaySubject, throwError } from 'rxjs';
20
+ import { catchError, concatMap, first, map, switchMap, take, tap } from 'rxjs/operators';
21
+ import { AlfrescoApiService } from '../../services/alfresco-api.service';
22
+ import { AuthenticationService } from '@alfresco/adf-core';
23
+ import * as i0 from "@angular/core";
24
+ import * as i1 from "../../services/alfresco-api.service";
25
+ import * as i2 from "@alfresco/adf-core";
26
+ export const SAVED_SEARCHES_SERVICE_PREFERENCES = new InjectionToken('SAVED_SEARCHES_SERVICE_PREFERENCES');
27
+ export class SavedSearchesService {
28
+ get nodesApi() {
29
+ this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());
30
+ return this._nodesApi;
31
+ }
32
+ get preferencesApi() {
33
+ if (this.preferencesService) {
34
+ this._preferencesApi = this.preferencesService;
35
+ return this._preferencesApi;
36
+ }
37
+ this._preferencesApi = this._preferencesApi ?? new PreferencesApi(this.apiService.getInstance());
38
+ return this._preferencesApi;
39
+ }
40
+ constructor(apiService, authService) {
41
+ this.apiService = apiService;
42
+ this.authService = authService;
43
+ this.preferencesService = inject(SAVED_SEARCHES_SERVICE_PREFERENCES, { optional: true });
44
+ this.savedSearches$ = new ReplaySubject(1);
45
+ }
46
+ init() {
47
+ this.fetchSavedSearches();
48
+ }
49
+ /**
50
+ * Gets a list of saved searches by user.
51
+ *
52
+ * @returns SavedSearch list containing user saved searches
53
+ */
54
+ getSavedSearches() {
55
+ const savedSearchesMigrated = localStorage.getItem(this.getLocalStorageKey()) ?? '';
56
+ if (savedSearchesMigrated === 'true') {
57
+ return from(this.preferencesApi.getPreference('-me-', 'saved-searches')).pipe(map((preference) => JSON.parse(preference.entry.value)), catchError(() => of([])));
58
+ }
59
+ else {
60
+ return this.getSavedSearchesNodeId().pipe(take(1), concatMap(() => {
61
+ if (this.savedSearchFileNodeId !== '') {
62
+ return this.migrateSavedSearches();
63
+ }
64
+ else {
65
+ return from(this.preferencesApi.getPreference('-me-', 'saved-searches')).pipe(map((preference) => JSON.parse(preference.entry.value)), catchError(() => of([])));
66
+ }
67
+ }));
68
+ }
69
+ }
70
+ /**
71
+ * Saves a new search into state and updates state. If there are less than 5 searches,
72
+ * it will be pushed on first place, if more it will be pushed to 6th place.
73
+ *
74
+ * @param newSaveSearch object { name: string, description: string, encodedUrl: string }
75
+ * @returns NodeEntry
76
+ */
77
+ saveSearch(newSaveSearch) {
78
+ return this.getSavedSearches().pipe(take(1), switchMap((savedSearches) => {
79
+ let updatedSavedSearches = [];
80
+ if (savedSearches.length < 5) {
81
+ updatedSavedSearches = [{ ...newSaveSearch, order: 0 }, ...savedSearches];
82
+ }
83
+ else {
84
+ const firstFiveSearches = savedSearches.slice(0, 5);
85
+ const restOfSearches = savedSearches.slice(5);
86
+ updatedSavedSearches = [...firstFiveSearches, { ...newSaveSearch, order: 5 }, ...restOfSearches];
87
+ }
88
+ updatedSavedSearches = updatedSavedSearches.map((search, index) => ({
89
+ ...search,
90
+ order: index
91
+ }));
92
+ return from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSavedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)), tap(() => this.savedSearches$.next(updatedSavedSearches)));
93
+ }), catchError((error) => {
94
+ console.error('Error saving new search:', error);
95
+ return throwError(() => error);
96
+ }));
97
+ }
98
+ /**
99
+ * Replace Save Search with new one and also updates the state.
100
+ *
101
+ * @param updatedSavedSearch - updated Save Search
102
+ * @returns NodeEntry
103
+ */
104
+ editSavedSearch(updatedSavedSearch) {
105
+ let previousSavedSearches;
106
+ return this.savedSearches$.pipe(take(1), map((savedSearches) => {
107
+ previousSavedSearches = [...savedSearches];
108
+ return savedSearches.map((search) => (search.order === updatedSavedSearch.order ? updatedSavedSearch : search));
109
+ }), tap((updatedSearches) => {
110
+ this.savedSearches$.next(updatedSearches);
111
+ }), switchMap((updatedSearches) => from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)))), catchError((error) => {
112
+ this.savedSearches$.next(previousSavedSearches);
113
+ return throwError(() => error);
114
+ }));
115
+ }
116
+ /**
117
+ * Deletes Save Search and update state.
118
+ *
119
+ * @param deletedSavedSearch - Save Search to delete
120
+ * @returns NodeEntry
121
+ */
122
+ deleteSavedSearch(deletedSavedSearch) {
123
+ let previousSavedSearchesOrder;
124
+ return this.savedSearches$.pipe(take(1), map((savedSearches) => {
125
+ previousSavedSearchesOrder = [...savedSearches];
126
+ const updatedSearches = savedSearches.filter((search) => search.order !== deletedSavedSearch.order);
127
+ return updatedSearches.map((search, index) => ({
128
+ ...search,
129
+ order: index
130
+ }));
131
+ }), tap((updatedSearches) => {
132
+ this.savedSearches$.next(updatedSearches);
133
+ }), switchMap((updatedSearches) => from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)))), catchError((error) => {
134
+ this.savedSearches$.next(previousSavedSearchesOrder);
135
+ return throwError(() => error);
136
+ }));
137
+ }
138
+ /**
139
+ * Reorders saved search place
140
+ *
141
+ * @param previousIndex - previous index of saved search
142
+ * @param currentIndex - new index of saved search
143
+ */
144
+ changeOrder(previousIndex, currentIndex) {
145
+ let previousSavedSearchesOrder;
146
+ this.savedSearches$
147
+ .pipe(take(1), map((savedSearches) => {
148
+ previousSavedSearchesOrder = [...savedSearches];
149
+ const [movedSearch] = savedSearches.splice(previousIndex, 1);
150
+ savedSearches.splice(currentIndex, 0, movedSearch);
151
+ return savedSearches.map((search, index) => ({
152
+ ...search,
153
+ order: index
154
+ }));
155
+ }), tap((savedSearches) => this.savedSearches$.next(savedSearches)), switchMap((updatedSearches) => from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)))), catchError((error) => {
156
+ this.savedSearches$.next(previousSavedSearchesOrder);
157
+ return throwError(() => error);
158
+ }))
159
+ .subscribe();
160
+ }
161
+ getSavedSearchesNodeId() {
162
+ return from(this.nodesApi.getNode('-my-', { relativePath: 'config.json' })).pipe(first(), concatMap((configNode) => {
163
+ this.savedSearchFileNodeId = configNode.entry.id;
164
+ return configNode.entry.id;
165
+ }), catchError((error) => {
166
+ const errorStatusCode = JSON.parse(error.message).error.statusCode;
167
+ if (errorStatusCode === 404) {
168
+ localStorage.setItem(this.getLocalStorageKey(), 'true');
169
+ return '';
170
+ }
171
+ else {
172
+ return throwError(() => error);
173
+ }
174
+ }));
175
+ }
176
+ async mapFileContentToSavedSearches(blob) {
177
+ return blob
178
+ .text()
179
+ .then((content) => (content ? JSON.parse(content) : []))
180
+ .catch(() => []);
181
+ }
182
+ getLocalStorageKey() {
183
+ return `saved-searches-${this.authService.getUsername()}-migrated`;
184
+ }
185
+ fetchSavedSearches() {
186
+ this.getSavedSearches()
187
+ .pipe(take(1))
188
+ .subscribe((searches) => this.savedSearches$.next(searches));
189
+ }
190
+ migrateSavedSearches() {
191
+ return from(this.nodesApi.getNodeContent(this.savedSearchFileNodeId).then((content) => this.mapFileContentToSavedSearches(content))).pipe(tap((savedSearches) => {
192
+ this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(savedSearches));
193
+ localStorage.setItem(this.getLocalStorageKey(), 'true');
194
+ this.nodesApi.deleteNode(this.savedSearchFileNodeId, { permanent: true });
195
+ }));
196
+ }
197
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedSearchesService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
198
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedSearchesService, providedIn: 'root' }); }
199
+ }
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedSearchesService, decorators: [{
201
+ type: Injectable,
202
+ args: [{
203
+ providedIn: 'root'
204
+ }]
205
+ }], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.AuthenticationService }] });
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtc2VhcmNoZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29tbW9uL3NlcnZpY2VzL3NhdmVkLXNlYXJjaGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBYSxjQUFjLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBTzNELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLElBQUksY0FBYyxDQUFxQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBSy9JLE1BQU0sT0FBTyxvQkFBb0I7SUFNN0IsSUFBSSxRQUFRO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFD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QUUsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQTdPUSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzs0RkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBOb2Rlc0FwaSwgTm9kZUVudHJ5LCBQcmVmZXJlbmNlc0FwaSwgQ29udGVudEZpZWxkc1F1ZXJ5LCBQcmVmZXJlbmNlRW50cnkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tLCBSZXBsYXlTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGZpcnN0LCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxmcmVzY28tYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2F2ZWRTZWFyY2ggfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NhdmVkLXNlYXJjaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBTYXZlZFNlYXJjaGVzUHJlZmVyZW5jZXNBcGlTZXJ2aWNlIHtcbiAgICBnZXRQcmVmZXJlbmNlOiAocGVyc29uSWQ6IHN0cmluZywgcHJlZmVyZW5jZU5hbWU6IHN0cmluZywgb3B0cz86IENvbnRlbnRGaWVsZHNRdWVyeSkgPT4gUHJvbWlzZTxQcmVmZXJlbmNlRW50cnk+IHwgT2JzZXJ2YWJsZTxQcmVmZXJlbmNlRW50cnk+O1xuICAgIHVwZGF0ZVByZWZlcmVuY2U6IChwZXJzb25JZDogc3RyaW5nLCBwcmVmZXJlbmNlTmFtZTogc3RyaW5nLCBwcmVmZXJlbmNlVmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTxQcmVmZXJlbmNlRW50cnk+IHwgT2JzZXJ2YWJsZTxQcmVmZXJlbmNlRW50cnk+O1xufVxuXG5leHBvcnQgY29uc3QgU0FWRURfU0VBUkNIRVNfU0VSVklDRV9QUkVGRVJFTkNFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTYXZlZFNlYXJjaGVzUHJlZmVyZW5jZXNBcGlTZXJ2aWNlPignU0FWRURfU0VBUkNIRVNfU0VSVklDRV9QUkVGRVJFTkNFUycpO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkU2VhcmNoZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHNhdmVkU2VhcmNoRmlsZU5vZGVJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBwcml2YXRlIF9wcmVmZXJlbmNlc0FwaTogU2F2ZWRTZWFyY2hlc1ByZWZlcmVuY2VzQXBpU2VydmljZTtcbiAgICBwcml2YXRlIHByZWZlcmVuY2VzU2VydmljZSA9IGluamVjdChTQVZFRF9TRUFSQ0hFU19TRVJWSUNFX1BSRUZFUkVOQ0VTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgZ2V0IG5vZGVzQXBpKCk6IE5vZGVzQXBpIHtcbiAgICAgICAgdGhpcy5fbm9kZXNBcGkgPSB0aGlzLl9ub2Rlc0FwaSA/PyBuZXcgTm9kZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuXG4gICAgZ2V0IHByZWZlcmVuY2VzQXBpKCk6IFNhdmVkU2VhcmNoZXNQcmVmZXJlbmNlc0FwaVNlcnZpY2Uge1xuICAgICAgICBpZiAodGhpcy5wcmVmZXJlbmNlc1NlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzQXBpID0gdGhpcy5wcmVmZXJlbmNlc1NlcnZpY2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNBcGk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlc0FwaSA9IHRoaXMuX3ByZWZlcmVuY2VzQXBpID8/IG5ldyBQcmVmZXJlbmNlc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc0FwaTtcbiAgICB9XG5cbiAgICByZWFkb25seSBzYXZlZFNlYXJjaGVzJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFNhdmVkU2VhcmNoW10+KDEpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcGlTZXJ2aWNlOiBBbGZyZXNjb0FwaVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge31cblxuICAgIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmV0Y2hTYXZlZFNlYXJjaGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGxpc3Qgb2Ygc2F2ZWQgc2VhcmNoZXMgYnkgdXNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFNhdmVkU2VhcmNoIGxpc3QgY29udGFpbmluZyB1c2VyIHNhdmVkIHNlYXJjaGVzXG4gICAgICovXG4gICAgZ2V0U2F2ZWRTZWFyY2hlcygpOiBPYnNlcnZhYmxlPFNhdmVkU2VhcmNoW10+IHtcbiAgICAgICAgY29uc3Qgc2F2ZWRTZWFyY2hlc01pZ3JhdGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXkoKSkgPz8gJyc7XG4gICAgICAgIGlmIChzYXZlZFNlYXJjaGVzTWlncmF0ZWQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5wcmVmZXJlbmNlc0FwaS5nZXRQcmVmZXJlbmNlKCctbWUtJywgJ3NhdmVkLXNlYXJjaGVzJykpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTYXZlZFNlYXJjaGVzTm9kZUlkKCkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNhdmVkU2VhcmNoRmlsZU5vZGVJZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1pZ3JhdGVTYXZlZFNlYXJjaGVzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLmdldFByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHByZWZlcmVuY2UpID0+IEpTT04ucGFyc2UocHJlZmVyZW5jZS5lbnRyeS52YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgYSBuZXcgc2VhcmNoIGludG8gc3RhdGUgYW5kIHVwZGF0ZXMgc3RhdGUuIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gNSBzZWFyY2hlcyxcbiAgICAgKiBpdCB3aWxsIGJlIHB1c2hlZCBvbiBmaXJzdCBwbGFjZSwgaWYgbW9yZSBpdCB3aWxsIGJlIHB1c2hlZCB0byA2dGggcGxhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U2F2ZVNlYXJjaCBvYmplY3QgeyBuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGVuY29kZWRVcmw6IHN0cmluZyB9XG4gICAgICogQHJldHVybnMgTm9kZUVudHJ5XG4gICAgICovXG4gICAgc2F2ZVNlYXJjaChuZXdTYXZlU2VhcmNoOiBQaWNrPFNhdmVkU2VhcmNoLCAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2VuY29kZWRVcmwnPik6IE9ic2VydmFibGU8Tm9kZUVudHJ5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNhdmVkU2VhcmNoZXMoKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoc2F2ZWRTZWFyY2hlczogU2F2ZWRTZWFyY2hbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkU2F2ZWRTZWFyY2hlczogU2F2ZWRTZWFyY2hbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNhdmVkU2VhcmNoZXMubGVuZ3RoIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkU2F2ZWRTZWFyY2hlcyA9IFt7IC4uLm5ld1NhdmVTZWFyY2gsIG9yZGVyOiAwIH0sIC4uLnNhdmVkU2VhcmNoZXNdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Rml2ZVNlYXJjaGVzID0gc2F2ZWRTZWFyY2hlcy5zbGljZSgwLCA1KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdE9mU2VhcmNoZXMgPSBzYXZlZFNlYXJjaGVzLnNsaWNlKDUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRTYXZlZFNlYXJjaGVzID0gWy4uLmZpcnN0Rml2ZVNlYXJjaGVzLCB7IC4uLm5ld1NhdmVTZWFyY2gsIG9yZGVyOiA1IH0sIC4uLnJlc3RPZlNlYXJjaGVzXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVkU2F2ZWRTZWFyY2hlcyA9IHVwZGF0ZWRTYXZlZFNlYXJjaGVzLm1hcCgoc2VhcmNoLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogaW5kZXhcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLnVwZGF0ZVByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkU2F2ZWRTZWFyY2hlcykpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHByZWZlcmVuY2UpID0+IEpTT04ucGFyc2UocHJlZmVyZW5jZS5lbnRyeS52YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zYXZlZFNlYXJjaGVzJC5uZXh0KHVwZGF0ZWRTYXZlZFNlYXJjaGVzKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBuZXcgc2VhcmNoOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgU2F2ZSBTZWFyY2ggd2l0aCBuZXcgb25lIGFuZCBhbHNvIHVwZGF0ZXMgdGhlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVwZGF0ZWRTYXZlZFNlYXJjaCAtIHVwZGF0ZWQgU2F2ZSBTZWFyY2hcbiAgICAgKiBAcmV0dXJucyBOb2RlRW50cnlcbiAgICAgKi9cbiAgICBlZGl0U2F2ZWRTZWFyY2godXBkYXRlZFNhdmVkU2VhcmNoOiBTYXZlZFNlYXJjaCk6IE9ic2VydmFibGU8Tm9kZUVudHJ5PiB7XG4gICAgICAgIGxldCBwcmV2aW91c1NhdmVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW107XG4gICAgICAgIHJldHVybiB0aGlzLnNhdmVkU2VhcmNoZXMkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKChzYXZlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTYXZlZFNlYXJjaGVzID0gWy4uLnNhdmVkU2VhcmNoZXNdO1xuICAgICAgICAgICAgICAgIHJldHVybiBzYXZlZFNlYXJjaGVzLm1hcCgoc2VhcmNoKSA9PiAoc2VhcmNoLm9yZGVyID09PSB1cGRhdGVkU2F2ZWRTZWFyY2gub3JkZXIgPyB1cGRhdGVkU2F2ZWRTZWFyY2ggOiBzZWFyY2gpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQodXBkYXRlZFNlYXJjaGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+XG4gICAgICAgICAgICAgICAgZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLnVwZGF0ZVByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkU2VhcmNoZXMpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRTZWFyY2hlcyQubmV4dChwcmV2aW91c1NhdmVkU2VhcmNoZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBTYXZlIFNlYXJjaCBhbmQgdXBkYXRlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGV0ZWRTYXZlZFNlYXJjaCAtIFNhdmUgU2VhcmNoIHRvIGRlbGV0ZVxuICAgICAqIEByZXR1cm5zIE5vZGVFbnRyeVxuICAgICAqL1xuICAgIGRlbGV0ZVNhdmVkU2VhcmNoKGRlbGV0ZWRTYXZlZFNlYXJjaDogU2F2ZWRTZWFyY2gpOiBPYnNlcnZhYmxlPE5vZGVFbnRyeT4ge1xuICAgICAgICBsZXQgcHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXI6IFNhdmVkU2VhcmNoW107XG4gICAgICAgIHJldHVybiB0aGlzLnNhdmVkU2VhcmNoZXMkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKChzYXZlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXIgPSBbLi4uc2F2ZWRTZWFyY2hlc107XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFNlYXJjaGVzID0gc2F2ZWRTZWFyY2hlcy5maWx0ZXIoKHNlYXJjaCkgPT4gc2VhcmNoLm9yZGVyICE9PSBkZWxldGVkU2F2ZWRTZWFyY2gub3JkZXIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkU2VhcmNoZXMubWFwKChzZWFyY2gsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQodXBkYXRlZFNlYXJjaGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+XG4gICAgICAgICAgICAgICAgZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLnVwZGF0ZVByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkU2VhcmNoZXMpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRTZWFyY2hlcyQubmV4dChwcmV2aW91c1NhdmVkU2VhcmNoZXNPcmRlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW9yZGVycyBzYXZlZCBzZWFyY2ggcGxhY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0luZGV4IC0gcHJldmlvdXMgaW5kZXggb2Ygc2F2ZWQgc2VhcmNoXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCAtIG5ldyBpbmRleCBvZiBzYXZlZCBzZWFyY2hcbiAgICAgKi9cbiAgICBjaGFuZ2VPcmRlcihwcmV2aW91c0luZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBwcmV2aW91c1NhdmVkU2VhcmNoZXNPcmRlcjogU2F2ZWRTZWFyY2hbXTtcbiAgICAgICAgdGhpcy5zYXZlZFNlYXJjaGVzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKHNhdmVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXIgPSBbLi4uc2F2ZWRTZWFyY2hlc107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFttb3ZlZFNlYXJjaF0gPSBzYXZlZFNlYXJjaGVzLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgc2F2ZWRTZWFyY2hlcy5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBtb3ZlZFNlYXJjaCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlZFNlYXJjaGVzLm1hcCgoc2VhcmNoLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKChzYXZlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PiB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQoc2F2ZWRTZWFyY2hlcykpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgodXBkYXRlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PlxuICAgICAgICAgICAgICAgICAgICBmcm9tKHRoaXMucHJlZmVyZW5jZXNBcGkudXBkYXRlUHJlZmVyZW5jZSgnLW1lLScsICdzYXZlZC1zZWFyY2hlcycsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRTZWFyY2hlcykpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQocHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhdmVkU2VhcmNoZXNOb2RlSWQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5ub2Rlc0FwaS5nZXROb2RlKCctbXktJywgeyByZWxhdGl2ZVBhdGg6ICdjb25maWcuanNvbicgfSkpLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgY29uY2F0TWFwKChjb25maWdOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlZFNlYXJjaEZpbGVOb2RlSWQgPSBjb25maWdOb2RlLmVudHJ5LmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdOb2RlLmVudHJ5LmlkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yU3RhdHVzQ29kZSA9IEpTT04ucGFyc2UoZXJyb3IubWVzc2FnZSkuZXJyb3Iuc3RhdHVzQ29kZTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JTdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXkoKSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFwRmlsZUNvbnRlbnRUb1NhdmVkU2VhcmNoZXMoYmxvYjogQmxvYik6IFByb21pc2U8QXJyYXk8U2F2ZWRTZWFyY2g+PiB7XG4gICAgICAgIHJldHVybiBibG9iXG4gICAgICAgICAgICAudGV4dCgpXG4gICAgICAgICAgICAudGhlbigoY29udGVudCkgPT4gKGNvbnRlbnQgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDogW10pKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHNhdmVkLXNlYXJjaGVzLSR7dGhpcy5hdXRoU2VydmljZS5nZXRVc2VybmFtZSgpfS1taWdyYXRlZGA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmZXRjaFNhdmVkU2VhcmNoZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U2F2ZWRTZWFyY2hlcygpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoZXMpID0+IHRoaXMuc2F2ZWRTZWFyY2hlcyQubmV4dChzZWFyY2hlcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWlncmF0ZVNhdmVkU2VhcmNoZXMoKTogT2JzZXJ2YWJsZTxTYXZlZFNlYXJjaFtdPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMubm9kZXNBcGkuZ2V0Tm9kZUNvbnRlbnQodGhpcy5zYXZlZFNlYXJjaEZpbGVOb2RlSWQpLnRoZW4oKGNvbnRlbnQpID0+IHRoaXMubWFwRmlsZUNvbnRlbnRUb1NhdmVkU2VhcmNoZXMoY29udGVudCkpKS5waXBlKFxuICAgICAgICAgICAgdGFwKChzYXZlZFNlYXJjaGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJlbmNlc0FwaS51cGRhdGVQcmVmZXJlbmNlKCctbWUtJywgJ3NhdmVkLXNlYXJjaGVzJywgSlNPTi5zdHJpbmdpZnkoc2F2ZWRTZWFyY2hlcykpO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0TG9jYWxTdG9yYWdlS2V5KCksICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5kZWxldGVOb2RlKHRoaXMuc2F2ZWRTZWFyY2hGaWxlTm9kZUlkLCB7IHBlcm1hbmVudDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19