@alauda-fe/dynamic-plugin-shared 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/README.md +7 -0
  2. package/array-form-table/base-string-map-form.component.d.ts +22 -0
  3. package/array-form-table/form/component.d.ts +106 -0
  4. package/array-form-table/form/index.d.ts +2 -0
  5. package/array-form-table/index.d.ts +10 -0
  6. package/array-form-table/key-value-form/component.d.ts +38 -0
  7. package/array-form-table/key-value-table/component.d.ts +9 -0
  8. package/array-form-table/string-array-form/component.d.ts +41 -0
  9. package/assets/images/abnormal.svg +1 -0
  10. package/assets/images/dark/disconnected.svg +1 -0
  11. package/assets/images/dark/license-abnormal.svg +1 -0
  12. package/assets/images/dark/network-abnormal.svg +1 -0
  13. package/assets/images/dark/no-data.svg +1 -0
  14. package/assets/images/dark/no-message.svg +1 -0
  15. package/assets/images/dark/no-permission.svg +1 -0
  16. package/assets/images/dark/no_realtime_alarm.svg +1 -0
  17. package/assets/images/dark/not-deployed.svg +1 -0
  18. package/assets/images/dark/not-found.svg +1 -0
  19. package/assets/images/dark/not-supported.svg +1 -0
  20. package/assets/images/dark/system-abnormal.svg +1 -0
  21. package/assets/images/light/disconnected.svg +1 -0
  22. package/assets/images/light/license-abnormal.svg +1 -0
  23. package/assets/images/light/network-abnormal.svg +1 -0
  24. package/assets/images/light/no-data.svg +1 -0
  25. package/assets/images/light/no-message.svg +1 -0
  26. package/assets/images/light/no-permission.svg +1 -0
  27. package/assets/images/light/no_realtime_alarm.svg +1 -0
  28. package/assets/images/light/not-deployed.svg +1 -0
  29. package/assets/images/light/not-found.svg +1 -0
  30. package/assets/images/light/not-supported.svg +1 -0
  31. package/assets/images/light/system-abnormal.svg +1 -0
  32. package/assets/images/no-data.png +0 -0
  33. package/async-data/async-data-loader.d.ts +31 -0
  34. package/async-data/error-page/component.d.ts +30 -0
  35. package/async-data/index.d.ts +13 -0
  36. package/async-data/page-state/component.d.ts +21 -0
  37. package/async-data/types.d.ts +29 -0
  38. package/code-editor/code-display-dialog/component.d.ts +17 -0
  39. package/code-editor/code-editor-configs.d.ts +19 -0
  40. package/code-editor/index.d.ts +10 -0
  41. package/code-editor/k8s-yaml-display-dialog/component.d.ts +16 -0
  42. package/code-editor/resource-yaml-display/component.d.ts +21 -0
  43. package/components/card-section/card-section.component.d.ts +9 -0
  44. package/components/confirm-delete/confirm-delete.component.d.ts +57 -0
  45. package/components/confirm-delete/utils.d.ts +25 -0
  46. package/components/current-time/component.d.ts +14 -0
  47. package/components/custom-columns-setting/component.d.ts +16 -0
  48. package/components/custom-columns-setting/index.d.ts +1 -0
  49. package/components/date-range-picker/component.d.ts +55 -0
  50. package/components/date-range-picker/index.d.ts +3 -0
  51. package/components/date-range-picker/type.d.ts +36 -0
  52. package/components/date-range-picker/util.d.ts +11 -0
  53. package/components/disabled-container/disabled-container.component.d.ts +21 -0
  54. package/components/disabled-container/index.d.ts +7 -0
  55. package/components/field-set/column/component.d.ts +10 -0
  56. package/components/field-set/group/component.d.ts +6 -0
  57. package/components/field-set/index.d.ts +7 -0
  58. package/components/field-set/item/component.d.ts +13 -0
  59. package/components/foldable-block/component.d.ts +17 -0
  60. package/components/foldable-item-in-table/component.d.ts +21 -0
  61. package/components/help-document/component.d.ts +29 -0
  62. package/components/help-document/directive.d.ts +20 -0
  63. package/components/help-document/index.d.ts +8 -0
  64. package/components/help-document/service.d.ts +20 -0
  65. package/components/index.d.ts +31 -0
  66. package/components/loading-mask/loading-mask.component.d.ts +13 -0
  67. package/components/page-guard/component/component.d.ts +40 -0
  68. package/components/page-guard/component/helper-directives.d.ts +17 -0
  69. package/components/page-guard/component/page-guard.type.d.ts +86 -0
  70. package/components/page-guard/index.d.ts +12 -0
  71. package/components/password-input/component.d.ts +39 -0
  72. package/components/pod-status/component.d.ts +25 -0
  73. package/components/pod-status/index.d.ts +3 -0
  74. package/components/pod-status/status.d.ts +4 -0
  75. package/components/pod-status/typings.d.ts +16 -0
  76. package/components/relative-time/component.d.ts +15 -0
  77. package/components/resource-label/component.d.ts +25 -0
  78. package/components/resource-multi-select/component.d.ts +41 -0
  79. package/components/resource-multi-select/util.d.ts +10 -0
  80. package/components/search-panel/component.d.ts +16 -0
  81. package/components/search-panel/helper.directive.d.ts +5 -0
  82. package/components/search-panel/search-item/component.d.ts +7 -0
  83. package/components/select-prefix-label/directive.d.ts +17 -0
  84. package/components/status-icon/status-icon.component.d.ts +16 -0
  85. package/components/tags-label/component.d.ts +56 -0
  86. package/components/terminating-tag/component.d.ts +7 -0
  87. package/components/text-ellipsis/component.d.ts +9 -0
  88. package/components/text-tooltip/directive.d.ts +21 -0
  89. package/components/text-with-url/component.d.ts +12 -0
  90. package/components/upload-file/component.d.ts +32 -0
  91. package/components/zero-state/zero-state.component.d.ts +16 -0
  92. package/constants/common.d.ts +64 -0
  93. package/constants/index.d.ts +6 -0
  94. package/constants/k8s.d.ts +12 -0
  95. package/constants/patterns.d.ts +124 -0
  96. package/constants/resource-definitions.d.ts +414 -0
  97. package/constants/status-icons.d.ts +34 -0
  98. package/constants/timezones.d.ts +6 -0
  99. package/directives/aui-code-editor.directive.d.ts +13 -0
  100. package/directives/click-outside.directive.d.ts +12 -0
  101. package/directives/declare.directive.d.ts +8 -0
  102. package/directives/disabled.directive.d.ts +28 -0
  103. package/directives/effect-directive/coerce-number.directive.d.ts +8 -0
  104. package/directives/effect-directive/e2e-attribute-binding.directive.d.ts +10 -0
  105. package/directives/effect-directive/event.directive.d.ts +47 -0
  106. package/directives/effect-directive/index.d.ts +12 -0
  107. package/directives/effect-directive/min-max.directive.d.ts +30 -0
  108. package/directives/effect-directive/trim.directive.d.ts +7 -0
  109. package/directives/effect-directive/validators.directive.d.ts +12 -0
  110. package/directives/feature-gate.directive.d.ts +31 -0
  111. package/directives/index.d.ts +12 -0
  112. package/directives/last-form-item.directive.d.ts +8 -0
  113. package/directives/readonly-field.directive.d.ts +39 -0
  114. package/directives/resize.directive.d.ts +17 -0
  115. package/directives/scroll-border-observer.directive.d.ts +23 -0
  116. package/directives/scroll-to-first-invalid.directive.d.ts +24 -0
  117. package/directives/value-trace.directive.d.ts +27 -0
  118. package/esm2022/alauda-fe-dynamic-plugin-shared.mjs +5 -0
  119. package/esm2022/array-form-table/base-string-map-form.component.mjs +92 -0
  120. package/esm2022/array-form-table/form/component.mjs +266 -0
  121. package/esm2022/array-form-table/form/index.mjs +12 -0
  122. package/esm2022/array-form-table/index.mjs +11 -0
  123. package/esm2022/array-form-table/key-value-form/component.mjs +135 -0
  124. package/esm2022/array-form-table/key-value-table/component.mjs +24 -0
  125. package/esm2022/array-form-table/string-array-form/component.mjs +168 -0
  126. package/esm2022/async-data/async-data-loader.mjs +63 -0
  127. package/esm2022/async-data/error-page/component.mjs +54 -0
  128. package/esm2022/async-data/index.mjs +18 -0
  129. package/esm2022/async-data/page-state/component.mjs +62 -0
  130. package/esm2022/async-data/types.mjs +6 -0
  131. package/esm2022/code-editor/code-display-dialog/component.mjs +35 -0
  132. package/esm2022/code-editor/code-editor-configs.mjs +66 -0
  133. package/esm2022/code-editor/index.mjs +11 -0
  134. package/esm2022/code-editor/k8s-yaml-display-dialog/component.mjs +26 -0
  135. package/esm2022/code-editor/resource-yaml-display/component.mjs +67 -0
  136. package/esm2022/components/card-section/card-section.component.mjs +24 -0
  137. package/esm2022/components/confirm-delete/confirm-delete.component.mjs +192 -0
  138. package/esm2022/components/confirm-delete/utils.mjs +8 -0
  139. package/esm2022/components/current-time/component.mjs +39 -0
  140. package/esm2022/components/custom-columns-setting/component.mjs +75 -0
  141. package/esm2022/components/custom-columns-setting/index.mjs +2 -0
  142. package/esm2022/components/date-range-picker/component.mjs +215 -0
  143. package/esm2022/components/date-range-picker/index.mjs +4 -0
  144. package/esm2022/components/date-range-picker/type.mjs +2 -0
  145. package/esm2022/components/date-range-picker/util.mjs +57 -0
  146. package/esm2022/components/disabled-container/disabled-container.component.mjs +81 -0
  147. package/esm2022/components/disabled-container/index.mjs +8 -0
  148. package/esm2022/components/field-set/column/component.mjs +25 -0
  149. package/esm2022/components/field-set/group/component.mjs +16 -0
  150. package/esm2022/components/field-set/index.mjs +14 -0
  151. package/esm2022/components/field-set/item/component.mjs +41 -0
  152. package/esm2022/components/foldable-block/component.mjs +60 -0
  153. package/esm2022/components/foldable-item-in-table/component.mjs +56 -0
  154. package/esm2022/components/help-document/component.mjs +69 -0
  155. package/esm2022/components/help-document/directive.mjs +70 -0
  156. package/esm2022/components/help-document/index.mjs +9 -0
  157. package/esm2022/components/help-document/service.mjs +43 -0
  158. package/esm2022/components/index.mjs +32 -0
  159. package/esm2022/components/loading-mask/loading-mask.component.mjs +35 -0
  160. package/esm2022/components/page-guard/component/component.mjs +101 -0
  161. package/esm2022/components/page-guard/component/helper-directives.mjs +51 -0
  162. package/esm2022/components/page-guard/component/page-guard.type.mjs +82 -0
  163. package/esm2022/components/page-guard/index.mjs +19 -0
  164. package/esm2022/components/password-input/component.mjs +143 -0
  165. package/esm2022/components/pod-status/component.mjs +49 -0
  166. package/esm2022/components/pod-status/index.mjs +4 -0
  167. package/esm2022/components/pod-status/status.mjs +84 -0
  168. package/esm2022/components/pod-status/typings.mjs +19 -0
  169. package/esm2022/components/relative-time/component.mjs +58 -0
  170. package/esm2022/components/resource-label/component.mjs +100 -0
  171. package/esm2022/components/resource-multi-select/component.mjs +152 -0
  172. package/esm2022/components/resource-multi-select/util.mjs +24 -0
  173. package/esm2022/components/search-panel/component.mjs +51 -0
  174. package/esm2022/components/search-panel/helper.directive.mjs +14 -0
  175. package/esm2022/components/search-panel/search-item/component.mjs +15 -0
  176. package/esm2022/components/select-prefix-label/directive.mjs +89 -0
  177. package/esm2022/components/status-icon/status-icon.component.mjs +56 -0
  178. package/esm2022/components/tags-label/component.mjs +224 -0
  179. package/esm2022/components/terminating-tag/component.mjs +16 -0
  180. package/esm2022/components/text-ellipsis/component.mjs +28 -0
  181. package/esm2022/components/text-tooltip/directive.mjs +71 -0
  182. package/esm2022/components/text-with-url/component.mjs +40 -0
  183. package/esm2022/components/upload-file/component.mjs +95 -0
  184. package/esm2022/components/zero-state/zero-state.component.mjs +51 -0
  185. package/esm2022/constants/common.mjs +86 -0
  186. package/esm2022/constants/index.mjs +7 -0
  187. package/esm2022/constants/k8s.mjs +13 -0
  188. package/esm2022/constants/patterns.mjs +142 -0
  189. package/esm2022/constants/resource-definitions.mjs +424 -0
  190. package/esm2022/constants/status-icons.mjs +65 -0
  191. package/esm2022/constants/timezones.mjs +234 -0
  192. package/esm2022/directives/aui-code-editor.directive.mjs +30 -0
  193. package/esm2022/directives/click-outside.directive.mjs +49 -0
  194. package/esm2022/directives/declare.directive.mjs +27 -0
  195. package/esm2022/directives/disabled.directive.mjs +76 -0
  196. package/esm2022/directives/effect-directive/coerce-number.directive.mjs +54 -0
  197. package/esm2022/directives/effect-directive/e2e-attribute-binding.directive.mjs +57 -0
  198. package/esm2022/directives/effect-directive/event.directive.mjs +129 -0
  199. package/esm2022/directives/effect-directive/index.mjs +21 -0
  200. package/esm2022/directives/effect-directive/min-max.directive.mjs +107 -0
  201. package/esm2022/directives/effect-directive/trim.directive.mjs +40 -0
  202. package/esm2022/directives/effect-directive/validators.directive.mjs +43 -0
  203. package/esm2022/directives/feature-gate.directive.mjs +90 -0
  204. package/esm2022/directives/index.mjs +13 -0
  205. package/esm2022/directives/last-form-item.directive.mjs +18 -0
  206. package/esm2022/directives/readonly-field.directive.mjs +145 -0
  207. package/esm2022/directives/resize.directive.mjs +39 -0
  208. package/esm2022/directives/scroll-border-observer.directive.mjs +77 -0
  209. package/esm2022/directives/scroll-to-first-invalid.directive.mjs +126 -0
  210. package/esm2022/directives/value-trace.directive.mjs +61 -0
  211. package/esm2022/form/base-form-container.mjs +126 -0
  212. package/esm2022/form/base-nested-form-control.mjs +190 -0
  213. package/esm2022/form/errors-mapper/base-errors-mapper.mjs +41 -0
  214. package/esm2022/form/errors-mapper/default-errors-mapper.service.mjs +65 -0
  215. package/esm2022/form/errors-mapper/errors-mapper-component/component.mjs +53 -0
  216. package/esm2022/form/errors-mapper/errors-mapper.directive.mjs +109 -0
  217. package/esm2022/form/errors-mapper/index.mjs +10 -0
  218. package/esm2022/form/errors-mapper/types.mjs +2 -0
  219. package/esm2022/form/index.mjs +6 -0
  220. package/esm2022/form/utils.mjs +61 -0
  221. package/esm2022/form/validators/async-function-validator.directive.mjs +49 -0
  222. package/esm2022/form/validators/dns1123-subdomain.mjs +42 -0
  223. package/esm2022/form/validators/function-validator.directive.mjs +49 -0
  224. package/esm2022/form/validators/index.mjs +10 -0
  225. package/esm2022/form/validators/maxlength-minlength-validator.directive.mjs +71 -0
  226. package/esm2022/form/validators/not-be-validator.directive.mjs +56 -0
  227. package/esm2022/form/validators/one-of-validator.directive.mjs +57 -0
  228. package/esm2022/form/validators/resource-limit.mjs +79 -0
  229. package/esm2022/form/validators/strong-password/index.mjs +4 -0
  230. package/esm2022/form/validators/strong-password/strong-password-tooltip/component.mjs +15 -0
  231. package/esm2022/form/validators/strong-password/strong-password-validator.directive.mjs +171 -0
  232. package/esm2022/form/validators/strong-password/strong-password-validator.module.mjs +36 -0
  233. package/esm2022/form/validators/utils.mjs +155 -0
  234. package/esm2022/index.mjs +15 -0
  235. package/esm2022/k8s-resource-list/footer/component.mjs +156 -0
  236. package/esm2022/k8s-resource-list/index.mjs +18 -0
  237. package/esm2022/k8s-resource-list/k8s-resource-list.mjs +224 -0
  238. package/esm2022/k8s-resource-list/k8s-resource-paged-list.mjs +174 -0
  239. package/esm2022/k8s-resource-list/types.mjs +11 -0
  240. package/esm2022/k8s-resource-list/utils.mjs +84 -0
  241. package/esm2022/k8s-shared/constants.mjs +53 -0
  242. package/esm2022/k8s-shared/index.mjs +12 -0
  243. package/esm2022/k8s-shared/k8s-resource-translate-key.pipe.mjs +31 -0
  244. package/esm2022/k8s-shared/k8s-shared-util.service.mjs +152 -0
  245. package/esm2022/k8s-shared/resource-mark/component.mjs +54 -0
  246. package/esm2022/k8s-shared/resource-mark/util.mjs +137 -0
  247. package/esm2022/k8s-shared/update-description-dialog/component.mjs +66 -0
  248. package/esm2022/k8s-shared/update-display-name-dialog/component.mjs +59 -0
  249. package/esm2022/k8s-shared/update-key-value-dialog/component.mjs +76 -0
  250. package/esm2022/page-deactivate/deactivate.directive.mjs +50 -0
  251. package/esm2022/page-deactivate/deactivate.guard.mjs +41 -0
  252. package/esm2022/page-deactivate/deactivate.service.mjs +78 -0
  253. package/esm2022/page-deactivate/index.mjs +4 -0
  254. package/esm2022/pipes/calc.pipe.mjs +21 -0
  255. package/esm2022/pipes/cron-human-readable.pipe.mjs +30 -0
  256. package/esm2022/pipes/crontab-next.pipe.mjs +67 -0
  257. package/esm2022/pipes/duration.pipe.mjs +51 -0
  258. package/esm2022/pipes/field-not-available.pipe.mjs +25 -0
  259. package/esm2022/pipes/img-header.pipe.mjs +18 -0
  260. package/esm2022/pipes/img-theme.pipe.mjs +38 -0
  261. package/esm2022/pipes/index.mjs +19 -0
  262. package/esm2022/pipes/keyvalue.pipe.mjs +20 -0
  263. package/esm2022/pipes/marked.pipe.mjs +18 -0
  264. package/esm2022/pipes/minimum-format.pipe.mjs +25 -0
  265. package/esm2022/pipes/page-env.pipe.mjs +69 -0
  266. package/esm2022/pipes/parse-json-translate.pipe.mjs +28 -0
  267. package/esm2022/pipes/parse-json.pipe.mjs +22 -0
  268. package/esm2022/pipes/pure.pipe.mjs +26 -0
  269. package/esm2022/pipes/safe.pipe.mjs +49 -0
  270. package/esm2022/pipes/sanitize.pipe.mjs +31 -0
  271. package/esm2022/pipes/time.pipe.mjs +113 -0
  272. package/esm2022/pipes/timezone-display.pipe.mjs +21 -0
  273. package/esm2022/services/form-row-duplicate/form-row-duplicate.service.mjs +280 -0
  274. package/esm2022/services/index.mjs +4 -0
  275. package/esm2022/services/on-resize.service.mjs +52 -0
  276. package/esm2022/services/yaml-util.service.mjs +99 -0
  277. package/esm2022/types/common.mjs +6 -0
  278. package/esm2022/types/helpers.mjs +12 -0
  279. package/esm2022/types/index.mjs +9 -0
  280. package/esm2022/types/k8s/core.mjs +2 -0
  281. package/esm2022/types/k8s/crd.mjs +57 -0
  282. package/esm2022/types/k8s/index.mjs +4 -0
  283. package/esm2022/types/k8s/raw.mjs +77 -0
  284. package/esm2022/types/schema.mjs +2 -0
  285. package/esm2022/utils/browser.mjs +21 -0
  286. package/esm2022/utils/cache-store.mjs +83 -0
  287. package/esm2022/utils/color-helpers.mjs +6 -0
  288. package/esm2022/utils/common.mjs +315 -0
  289. package/esm2022/utils/cron-util.mjs +44 -0
  290. package/esm2022/utils/decorators.mjs +137 -0
  291. package/esm2022/utils/disabled-state.mjs +47 -0
  292. package/esm2022/utils/format-number.mjs +227 -0
  293. package/esm2022/utils/index.mjs +24 -0
  294. package/esm2022/utils/local-storage-constants.mjs +2 -0
  295. package/esm2022/utils/node.mjs +18 -0
  296. package/esm2022/utils/observable.mjs +32 -0
  297. package/esm2022/utils/operators.mjs +38 -0
  298. package/esm2022/utils/request-pool.mjs +37 -0
  299. package/esm2022/utils/resources.mjs +66 -0
  300. package/esm2022/utils/router.mjs +20 -0
  301. package/esm2022/utils/sort-fn.mjs +7 -0
  302. package/esm2022/utils/tree.mjs +79 -0
  303. package/esm2022/utils/unit.mjs +191 -0
  304. package/esm2022/utils/version.mjs +76 -0
  305. package/esm2022/utils/with-load-state.mjs +21 -0
  306. package/esm2022/utils/workload.mjs +183 -0
  307. package/esm2022/utils/workspace.mjs +59 -0
  308. package/esm2022/utils/yaml.mjs +54 -0
  309. package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs +11151 -0
  310. package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs.map +1 -0
  311. package/form/base-form-container.d.ts +41 -0
  312. package/form/base-nested-form-control.d.ts +58 -0
  313. package/form/errors-mapper/base-errors-mapper.d.ts +13 -0
  314. package/form/errors-mapper/default-errors-mapper.service.d.ts +10 -0
  315. package/form/errors-mapper/errors-mapper-component/component.d.ts +19 -0
  316. package/form/errors-mapper/errors-mapper.directive.d.ts +39 -0
  317. package/form/errors-mapper/index.d.ts +6 -0
  318. package/form/errors-mapper/types.d.ts +16 -0
  319. package/form/index.d.ts +5 -0
  320. package/form/utils.d.ts +40 -0
  321. package/form/validators/async-function-validator.directive.d.ts +11 -0
  322. package/form/validators/dns1123-subdomain.d.ts +28 -0
  323. package/form/validators/function-validator.directive.d.ts +11 -0
  324. package/form/validators/index.d.ts +9 -0
  325. package/form/validators/maxlength-minlength-validator.directive.d.ts +20 -0
  326. package/form/validators/not-be-validator.directive.d.ts +12 -0
  327. package/form/validators/one-of-validator.directive.d.ts +12 -0
  328. package/form/validators/resource-limit.d.ts +17 -0
  329. package/form/validators/strong-password/index.d.ts +3 -0
  330. package/form/validators/strong-password/strong-password-tooltip/component.d.ts +6 -0
  331. package/form/validators/strong-password/strong-password-validator.directive.d.ts +34 -0
  332. package/form/validators/strong-password/strong-password-validator.module.d.ts +12 -0
  333. package/form/validators/utils.d.ts +67 -0
  334. package/index.d.ts +14 -0
  335. package/k8s-resource-list/footer/component.d.ts +42 -0
  336. package/k8s-resource-list/index.d.ts +13 -0
  337. package/k8s-resource-list/k8s-resource-list.d.ts +42 -0
  338. package/k8s-resource-list/k8s-resource-paged-list.d.ts +61 -0
  339. package/k8s-resource-list/types.d.ts +70 -0
  340. package/k8s-resource-list/utils.d.ts +19 -0
  341. package/k8s-shared/constants.d.ts +7 -0
  342. package/k8s-shared/index.d.ts +11 -0
  343. package/k8s-shared/k8s-resource-translate-key.pipe.d.ts +9 -0
  344. package/k8s-shared/k8s-shared-util.service.d.ts +48 -0
  345. package/k8s-shared/resource-mark/component.d.ts +16 -0
  346. package/k8s-shared/resource-mark/util.d.ts +2 -0
  347. package/k8s-shared/update-description-dialog/component.d.ts +33 -0
  348. package/k8s-shared/update-display-name-dialog/component.d.ts +27 -0
  349. package/k8s-shared/update-key-value-dialog/component.d.ts +38 -0
  350. package/package.json +56 -0
  351. package/page-deactivate/deactivate.directive.d.ts +18 -0
  352. package/page-deactivate/deactivate.guard.d.ts +13 -0
  353. package/page-deactivate/deactivate.service.d.ts +28 -0
  354. package/page-deactivate/index.d.ts +3 -0
  355. package/pipes/calc.pipe.d.ts +11 -0
  356. package/pipes/cron-human-readable.pipe.d.ts +9 -0
  357. package/pipes/crontab-next.pipe.d.ts +18 -0
  358. package/pipes/duration.pipe.d.ts +10 -0
  359. package/pipes/field-not-available.pipe.d.ts +13 -0
  360. package/pipes/img-header.pipe.d.ts +7 -0
  361. package/pipes/img-theme.pipe.d.ts +13 -0
  362. package/pipes/index.d.ts +18 -0
  363. package/pipes/keyvalue.pipe.d.ts +9 -0
  364. package/pipes/marked.pipe.d.ts +8 -0
  365. package/pipes/minimum-format.pipe.d.ts +10 -0
  366. package/pipes/page-env.pipe.d.ts +34 -0
  367. package/pipes/parse-json-translate.pipe.d.ts +8 -0
  368. package/pipes/parse-json.pipe.d.ts +7 -0
  369. package/pipes/pure.pipe.d.ts +17 -0
  370. package/pipes/safe.pipe.d.ts +10 -0
  371. package/pipes/sanitize.pipe.d.ts +10 -0
  372. package/pipes/time.pipe.d.ts +40 -0
  373. package/pipes/timezone-display.pipe.d.ts +10 -0
  374. package/services/form-row-duplicate/form-row-duplicate.service.d.ts +45 -0
  375. package/services/index.d.ts +3 -0
  376. package/services/on-resize.service.d.ts +20 -0
  377. package/services/yaml-util.service.d.ts +20 -0
  378. package/styles/ansi-color.scss +131 -0
  379. package/styles/global.scss +904 -0
  380. package/styles/lib.scss +1 -0
  381. package/styles/markdown-body.scss +107 -0
  382. package/styles/mixins.scss +710 -0
  383. package/styles/var.scss +30 -0
  384. package/types/common.d.ts +42 -0
  385. package/types/helpers.d.ts +35 -0
  386. package/types/index.d.ts +8 -0
  387. package/types/k8s/core.d.ts +100 -0
  388. package/types/k8s/crd.d.ts +497 -0
  389. package/types/k8s/index.d.ts +3 -0
  390. package/types/k8s/raw.d.ts +860 -0
  391. package/types/schema.d.ts +14 -0
  392. package/utils/browser.d.ts +4 -0
  393. package/utils/cache-store.d.ts +35 -0
  394. package/utils/color-helpers.d.ts +4 -0
  395. package/utils/common.d.ts +64 -0
  396. package/utils/cron-util.d.ts +8 -0
  397. package/utils/decorators.d.ts +14 -0
  398. package/utils/disabled-state.d.ts +20 -0
  399. package/utils/format-number.d.ts +11 -0
  400. package/utils/index.d.ts +23 -0
  401. package/utils/local-storage-constants.d.ts +1 -0
  402. package/utils/node.d.ts +8 -0
  403. package/utils/observable.d.ts +5 -0
  404. package/utils/operators.d.ts +22 -0
  405. package/utils/request-pool.d.ts +12 -0
  406. package/utils/resources.d.ts +19 -0
  407. package/utils/router.d.ts +3 -0
  408. package/utils/sort-fn.d.ts +2 -0
  409. package/utils/tree.d.ts +16 -0
  410. package/utils/unit.d.ts +21 -0
  411. package/utils/version.d.ts +39 -0
  412. package/utils/with-load-state.d.ts +11 -0
  413. package/utils/workload.d.ts +66 -0
  414. package/utils/workspace.d.ts +28 -0
  415. package/utils/yaml.d.ts +11 -0
@@ -0,0 +1,156 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ /**
3
+ * @packageDocumentation
4
+ * @module k8s-resource-list
5
+ */
6
+ import { BackTopComponent, IconComponent } from '@alauda/ui';
7
+ import { TranslatePipe, TranslateService } from '@alauda-fe/dynamic-plugin-sdk';
8
+ import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
9
+ import { ChangeDetectionStrategy, Component, ContentChild, Directive, Input, TemplateRef, Injector, } from '@angular/core';
10
+ import { Observable, combineLatest, concat, debounceTime, distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil, takeWhile, } from 'rxjs';
11
+ import { ScrollBorderObserverDirective } from '../../directives';
12
+ import { ObservableInput, publishRef } from '../../utils';
13
+ import { LoadAction } from '../types';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@alauda-fe/dynamic-plugin-sdk";
16
+ export class K8sListFooterNoDataDirective {
17
+ constructor(templateRef) {
18
+ this.templateRef = templateRef;
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterNoDataDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: K8sListFooterNoDataDirective, isStandalone: true, selector: "[aclK8sListFooterNoData]", ngImport: i0 }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterNoDataDirective, decorators: [{
24
+ type: Directive,
25
+ args: [{
26
+ selector: '[aclK8sListFooterNoData]',
27
+ standalone: true,
28
+ }]
29
+ }], ctorParameters: () => [{ type: i0.TemplateRef }] });
30
+ export class K8sListFooterLoadingErrorDirective {
31
+ constructor(templateRef) {
32
+ this.templateRef = templateRef;
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterLoadingErrorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
35
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: K8sListFooterLoadingErrorDirective, isStandalone: true, selector: "[aclK8sListFooterLoadingError]", ngImport: i0 }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterLoadingErrorDirective, decorators: [{
38
+ type: Directive,
39
+ args: [{
40
+ selector: '[aclK8sListFooterLoadingError]',
41
+ standalone: true,
42
+ }]
43
+ }], ctorParameters: () => [{ type: i0.TemplateRef }] });
44
+ export class K8SResourceListFooterComponent extends ScrollBorderObserverDirective {
45
+ constructor(injector, translate) {
46
+ super(injector);
47
+ this.translate = translate;
48
+ this.autoLoad = true;
49
+ this.backTop = true;
50
+ this.bottomDistance = 60;
51
+ this.window = window;
52
+ this.option = this.autoLoad ? '' : false;
53
+ }
54
+ ngOnInit() {
55
+ super.ngOnInit();
56
+ this.loadingErrorCode$ = this.list.loadingError$.pipe(map(loadingError => loadingError && 'code' in loadingError && loadingError.code), distinctUntilChanged(), publishRef());
57
+ this.isEmptyList$ = combineLatest([
58
+ this.list.items$.pipe(map(items => items.length)),
59
+ this.list.hasMore$,
60
+ this.list.loading$,
61
+ this.list.loadingError$,
62
+ ]).pipe(map(([length, hasMore, loading, loadingError]) => !(length || hasMore || loading || loadingError)), distinctUntilChanged(), publishRef());
63
+ this.noDataHint$ = combineLatest([
64
+ this.list.rawResponse$,
65
+ this.resourceName$,
66
+ this.resourceNameTranslated$,
67
+ this.translate.locale$,
68
+ ]).pipe(filter(([res]) => !!res), map(([{ kind }, resourceName, resourceNameTranslated]) => {
69
+ if (resourceNameTranslated) {
70
+ return this.translate.get('no_named_data_hint', {
71
+ name: resourceNameTranslated,
72
+ });
73
+ }
74
+ if (resourceName || (kind?.endsWith('List') && kind.length > 4)) {
75
+ return this.translate.get('no_named_data_hint', {
76
+ name: this.translate.get(resourceName ||
77
+ kind.slice(0, kind.lastIndexOf('List')).toLowerCase()),
78
+ });
79
+ }
80
+ return this.translate.get('no_data');
81
+ }));
82
+ const viewEl = this.scrollEl === window
83
+ ? document.documentElement
84
+ : this.scrollEl;
85
+ // 当数据不够一屏时自动加载更多
86
+ const autoLoadOneScreen$ = this.list.loadState$.pipe(map(state => state.rawResponse), filter(res => !!res), debounceTime(50), takeWhile(res => {
87
+ return ((!!res.metadata?.continue &&
88
+ viewEl.scrollHeight - viewEl.clientHeight < this.bottomDistance) ||
89
+ (this.firstScrollLoad &&
90
+ (this.list.snapshot.items?.length || 0) < this.firstScrollLoad));
91
+ }));
92
+ this.list.loadState$
93
+ .pipe(filter(state => state.action === LoadAction.Reload), startWith(null), switchMap(() => concat(autoLoadOneScreen$, this.scrollBottomBorder)),
94
+ // list.rawResponse$ 会处理好 loading 等状态时的 loadMore 请求,但有错误时主要主动停止
95
+ filter(() => !this.list.snapshot.loadingError), takeUntil(this.destroy$$))
96
+ .subscribe(() => {
97
+ this.list.loadMore();
98
+ });
99
+ }
100
+ retry() {
101
+ this.list.items$.pipe(take(1)).subscribe(items => {
102
+ if (items.length > 0) {
103
+ this.list.loadMore();
104
+ }
105
+ else {
106
+ this.list.reload();
107
+ }
108
+ });
109
+ }
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8SResourceListFooterComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: K8SResourceListFooterComponent, isStandalone: true, selector: "acl-k8s-resource-list-footer", inputs: { list: "list", autoLoad: "autoLoad", backTop: "backTop", bottomDistance: "bottomDistance", resourceNameTranslated: "resourceNameTranslated", firstScrollLoad: "firstScrollLoad", resourceName: "resourceName" }, queries: [{ propertyName: "noDataTemplate", first: true, predicate: K8sListFooterNoDataDirective, descendants: true, read: TemplateRef }, { propertyName: "loadingErrorTemplate", first: true, predicate: K8sListFooterLoadingErrorDirective, descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"isEmptyList$ | async\"\n class=\"empty-placeholder\"\n>\n <ng-container *ngIf=\"noDataTemplate\">\n <ng-template *ngTemplateOutlet=\"noDataTemplate\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!noDataTemplate\">\n {{ noDataHint$ | async }}\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"!(isEmptyList$ | async)\">\n <div\n class=\"table-placeholder\"\n *ngIf=\"list.loadingError$ | async\"\n >\n @if (loadingErrorTemplate) {\n <ng-template *ngTemplateOutlet=\"loadingErrorTemplate\"></ng-template>\n } @else {\n <ng-container *ngIf=\"![410, 403].includes(loadingErrorCode$ | async)\">\n <span\n >{{ 'error_loading_data' | translate }},{{\n 'please' | translate\n }}</span\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"retry()\"\n >\n {{ ('retry' | translate).toLowerCase() }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 410\">\n <span>\n {{ 'list_data_has_expired' | translate }}, {{ 'please' | translate }}\n </span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.reload()\"\n >\n {{ 'refresh' | translate }}\n </button>\n <span>{{ 'or' | translate }}</span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'continue_load' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 403\">\n <span>\n {{ 'no_permission_description' | translate }}\n </span>\n </ng-container>\n }\n </div>\n\n <ng-container *ngIf=\"!(list.loadingError$ | async)\">\n <ng-container\n *ngIf=\"{\n loading: list.loading$ | async,\n loadMore:\n !autoLoad && !(list.loading$ | async) && list.hasMore$ | async,\n } as meta\"\n >\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loading\"\n >\n <aui-icon icon=\"spinner\"></aui-icon>\n <span>{{ 'loading_please_wait' | translate }}</span>\n </div>\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loadMore\"\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'load_more' | translate }}\n </button>\n </div>\n <div\n class=\"table-last-row--empty\"\n *ngIf=\"!meta.loadMore && !meta.loading\"\n >\n <div class=\"table-last-row--empty-inner\"></div>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<aui-back-top\n *ngIf=\"backTop\"\n [target]=\"window\"\n></aui-back-top>\n", styles: [":host::ng-deep{position:sticky;left:0;display:flex;justify-content:center;align-items:center;z-index:1;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-help-text))}:host::ng-deep .empty-placeholder,:host::ng-deep .table-placeholder{flex:1}:host::ng-deep .table-last-row--empty{height:var(--aui-border-radius-l);background-color:rgb(var(--aui-color-n-9));position:relative;margin-top:-3px;flex:1}:host::ng-deep .table-last-row--empty-inner{background-color:rgb(var(--aui-color-n-10));height:var(--aui-border-radius-l);border:1px solid rgb(var(--aui-color-n-8));border-top:0;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}:host::ng-deep .table-placeholder{box-sizing:border-box;display:flex;justify-content:center;align-items:center;padding:15px 10px;min-height:60px;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-placeholder-text));background-color:rgb(var(--aui-color-n-10));border:solid 1px rgb(var(--aui-color-n-8));border-radius:var(--aui-border-radius-l);position:sticky;left:0}:host::ng-deep .table-placeholder>aui-icon:first-child{margin-right:var(--aui-spacing-m)}:host::ng-deep .aui-table .aui-table__row+.table-placeholder{border-top-left-radius:0;border-top-right-radius:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: BackTopComponent, selector: "aui-back-top", inputs: ["visibilityHeight", "position", "target"], outputs: ["click"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
112
+ }
113
+ __decorate([
114
+ ObservableInput(),
115
+ __metadata("design:type", Observable)
116
+ ], K8SResourceListFooterComponent.prototype, "resourceNameTranslated$", void 0);
117
+ __decorate([
118
+ ObservableInput(),
119
+ __metadata("design:type", Observable)
120
+ ], K8SResourceListFooterComponent.prototype, "resourceName$", void 0);
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8SResourceListFooterComponent, decorators: [{
122
+ type: Component,
123
+ args: [{ selector: 'acl-k8s-resource-list-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
124
+ NgIf,
125
+ NgTemplateOutlet,
126
+ AsyncPipe,
127
+ TranslatePipe,
128
+ IconComponent,
129
+ BackTopComponent,
130
+ ], template: "<div\n *ngIf=\"isEmptyList$ | async\"\n class=\"empty-placeholder\"\n>\n <ng-container *ngIf=\"noDataTemplate\">\n <ng-template *ngTemplateOutlet=\"noDataTemplate\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!noDataTemplate\">\n {{ noDataHint$ | async }}\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"!(isEmptyList$ | async)\">\n <div\n class=\"table-placeholder\"\n *ngIf=\"list.loadingError$ | async\"\n >\n @if (loadingErrorTemplate) {\n <ng-template *ngTemplateOutlet=\"loadingErrorTemplate\"></ng-template>\n } @else {\n <ng-container *ngIf=\"![410, 403].includes(loadingErrorCode$ | async)\">\n <span\n >{{ 'error_loading_data' | translate }},{{\n 'please' | translate\n }}</span\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"retry()\"\n >\n {{ ('retry' | translate).toLowerCase() }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 410\">\n <span>\n {{ 'list_data_has_expired' | translate }}, {{ 'please' | translate }}\n </span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.reload()\"\n >\n {{ 'refresh' | translate }}\n </button>\n <span>{{ 'or' | translate }}</span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'continue_load' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 403\">\n <span>\n {{ 'no_permission_description' | translate }}\n </span>\n </ng-container>\n }\n </div>\n\n <ng-container *ngIf=\"!(list.loadingError$ | async)\">\n <ng-container\n *ngIf=\"{\n loading: list.loading$ | async,\n loadMore:\n !autoLoad && !(list.loading$ | async) && list.hasMore$ | async,\n } as meta\"\n >\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loading\"\n >\n <aui-icon icon=\"spinner\"></aui-icon>\n <span>{{ 'loading_please_wait' | translate }}</span>\n </div>\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loadMore\"\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'load_more' | translate }}\n </button>\n </div>\n <div\n class=\"table-last-row--empty\"\n *ngIf=\"!meta.loadMore && !meta.loading\"\n >\n <div class=\"table-last-row--empty-inner\"></div>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<aui-back-top\n *ngIf=\"backTop\"\n [target]=\"window\"\n></aui-back-top>\n", styles: [":host::ng-deep{position:sticky;left:0;display:flex;justify-content:center;align-items:center;z-index:1;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-help-text))}:host::ng-deep .empty-placeholder,:host::ng-deep .table-placeholder{flex:1}:host::ng-deep .table-last-row--empty{height:var(--aui-border-radius-l);background-color:rgb(var(--aui-color-n-9));position:relative;margin-top:-3px;flex:1}:host::ng-deep .table-last-row--empty-inner{background-color:rgb(var(--aui-color-n-10));height:var(--aui-border-radius-l);border:1px solid rgb(var(--aui-color-n-8));border-top:0;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}:host::ng-deep .table-placeholder{box-sizing:border-box;display:flex;justify-content:center;align-items:center;padding:15px 10px;min-height:60px;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-placeholder-text));background-color:rgb(var(--aui-color-n-10));border:solid 1px rgb(var(--aui-color-n-8));border-radius:var(--aui-border-radius-l);position:sticky;left:0}:host::ng-deep .table-placeholder>aui-icon:first-child{margin-right:var(--aui-spacing-m)}:host::ng-deep .aui-table .aui-table__row+.table-placeholder{border-top-left-radius:0;border-top-right-radius:0}\n"] }]
131
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.TranslateService }], propDecorators: { list: [{
132
+ type: Input
133
+ }], autoLoad: [{
134
+ type: Input
135
+ }], backTop: [{
136
+ type: Input
137
+ }], bottomDistance: [{
138
+ type: Input
139
+ }], resourceNameTranslated: [{
140
+ type: Input
141
+ }], firstScrollLoad: [{
142
+ type: Input
143
+ }], resourceNameTranslated$: [], resourceName: [{
144
+ type: Input
145
+ }], resourceName$: [], noDataTemplate: [{
146
+ type: ContentChild,
147
+ args: [K8sListFooterNoDataDirective, {
148
+ read: TemplateRef,
149
+ }]
150
+ }], loadingErrorTemplate: [{
151
+ type: ContentChild,
152
+ args: [K8sListFooterLoadingErrorDirective, {
153
+ read: TemplateRef,
154
+ }]
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL2s4cy1yZXNvdXJjZS1saXN0L2Zvb3Rlci9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvazhzLXJlc291cmNlLWxpc3QvZm9vdGVyL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxLQUFLLEVBR0wsV0FBVyxFQUNYLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsVUFBVSxFQUNWLGFBQWEsRUFDYixNQUFNLEVBQ04sWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFvQixNQUFNLFVBQVUsQ0FBQzs7O0FBTXhELE1BQU0sT0FBTyw0QkFBNEI7SUFDdkMsWUFBbUIsV0FBNkI7UUFBN0IsZ0JBQVcs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QyxXQUFXLG9FQUlMLGtDQUFrQywyQkFDeEMsV0FBVyxvRENoR3JCLHcxRkF5R0EsMjhDRDNDSSxJQUFJLDZGQUNKLGdCQUFnQiwrSUFDaEIsU0FBUyx5Q0FDVCxhQUFhLGtEQUNiLGFBQWEsNEpBQ2IsZ0JBQWdCOztBQWdCbEI7SUFEQyxlQUFlLEVBQUU7OEJBQ08sVUFBVTsrRUFBUztBQUs1QztJQURDLGVBQWUsRUFBRTs4QkFDSCxVQUFVO3FFQUFTOzJGQWxCdkIsOEJBQThCO2tCQWYxQyxTQUFTOytCQUNFLDhCQUE4QixjQUc1QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGdCQUFnQjtxQkFDakI7NEdBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR04sdUJBQXVCLE1BRWQsWUFBWTtzQkFBcEIsS0FBSztnQkFHTixhQUFhLE1BS2IsY0FBYztzQkFIYixZQUFZO3VCQUFDLDRCQUE0QixFQUFFO3dCQUMxQyxJQUFJLEVBQUUsV0FBVztxQkFDbEI7Z0JBTUQsb0JBQW9CO3NCQUhuQixZQUFZO3VCQUFDLGtDQUFrQyxFQUFFO3dCQUNoRCxJQUFJLEVBQUUsV0FBVztxQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBrOHMtcmVzb3VyY2UtbGlzdFxuICovXG5cbmltcG9ydCB7IEJhY2tUb3BDb21wb25lbnQsIEljb25Db21wb25lbnQgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAYWxhdWRhLWZlL2R5bmFtaWMtcGx1Z2luLXNkayc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIEluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGNvbmNhdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRha2VXaGlsZSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjcm9sbEJvcmRlck9ic2VydmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBLdWJlcm5ldGVzUmVzb3VyY2UsIEt1YmVybmV0ZXNSZXNvdXJjZUxpc3QgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIHB1Ymxpc2hSZWYgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBMb2FkQWN0aW9uLCBTdHJlYW1MaXN0TG9hZGVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsSzhzTGlzdEZvb3Rlck5vRGF0YV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBLOHNMaXN0Rm9vdGVyTm9EYXRhRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsSzhzTGlzdEZvb3RlckxvYWRpbmdFcnJvcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBLOHNMaXN0Rm9vdGVyTG9hZGluZ0Vycm9yRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtazhzLXJlc291cmNlLWxpc3QtZm9vdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlcy5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEFzeW5jUGlwZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgQmFja1RvcENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSzhTUmVzb3VyY2VMaXN0Rm9vdGVyQ29tcG9uZW50XG4gIGV4dGVuZHMgU2Nyb2xsQm9yZGVyT2JzZXJ2ZXJEaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSBsaXN0OiBTdHJlYW1MaXN0TG9hZGVyPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3QsIEt1YmVybmV0ZXNSZXNvdXJjZT47XG5cbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSBiYWNrVG9wID0gdHJ1ZTtcbiAgQElucHV0KCkgYm90dG9tRGlzdGFuY2UgPSA2MDtcbiAgQElucHV0KCkgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZDogc3RyaW5nO1xuICBASW5wdXQoKSBmaXJzdFNjcm9sbExvYWQ6IG51bWJlcjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBASW5wdXQoKSByZXNvdXJjZU5hbWU6IHN0cmluZztcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVzb3VyY2VOYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIEBDb250ZW50Q2hpbGQoSzhzTGlzdEZvb3Rlck5vRGF0YURpcmVjdGl2ZSwge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICB9KVxuICBub0RhdGFUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKEs4c0xpc3RGb290ZXJMb2FkaW5nRXJyb3JEaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgfSlcbiAgbG9hZGluZ0Vycm9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgaXNFbXB0eUxpc3QkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBub0RhdGFIaW50JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBsb2FkaW5nRXJyb3JDb2RlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIHdpbmRvdyA9IHdpbmRvdztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLm9wdGlvbiA9IHRoaXMuYXV0b0xvYWQgPyAnJyA6IGZhbHNlO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMubG9hZGluZ0Vycm9yQ29kZSQgPSB0aGlzLmxpc3QubG9hZGluZ0Vycm9yJC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICBsb2FkaW5nRXJyb3IgPT5cbiAgICAgICAgICBsb2FkaW5nRXJyb3IgJiYgJ2NvZGUnIGluIGxvYWRpbmdFcnJvciAmJiBsb2FkaW5nRXJyb3IuY29kZSxcbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG5cbiAgICB0aGlzLmlzRW1wdHlMaXN0JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5saXN0Lml0ZW1zJC5waXBlKG1hcChpdGVtcyA9PiBpdGVtcy5sZW5ndGgpKSxcbiAgICAgIHRoaXMubGlzdC5oYXNNb3JlJCxcbiAgICAgIHRoaXMubGlzdC5sb2FkaW5nJCxcbiAgICAgIHRoaXMubGlzdC5sb2FkaW5nRXJyb3IkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbbGVuZ3RoLCBoYXNNb3JlLCBsb2FkaW5nLCBsb2FkaW5nRXJyb3JdKSA9PlxuICAgICAgICAgICEobGVuZ3RoIHx8IGhhc01vcmUgfHwgbG9hZGluZyB8fCBsb2FkaW5nRXJyb3IpLFxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMubm9EYXRhSGludCQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubGlzdC5yYXdSZXNwb25zZSQsXG4gICAgICB0aGlzLnJlc291cmNlTmFtZSQsXG4gICAgICB0aGlzLnJlc291cmNlTmFtZVRyYW5zbGF0ZWQkLFxuICAgICAgdGhpcy50cmFuc2xhdGUubG9jYWxlJCxcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKChbcmVzXSkgPT4gISFyZXMpLFxuICAgICAgbWFwKChbeyBraW5kIH0sIHJlc291cmNlTmFtZSwgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZF0pID0+IHtcbiAgICAgICAgaWYgKHJlc291cmNlTmFtZVRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdub19uYW1lZF9kYXRhX2hpbnQnLCB7XG4gICAgICAgICAgICBuYW1lOiByZXNvdXJjZU5hbWVUcmFuc2xhdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlTmFtZSB8fCAoa2luZD8uZW5kc1dpdGgoJ0xpc3QnKSAmJiBraW5kLmxlbmd0aCA+IDQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnbm9fbmFtZWRfZGF0YV9oaW50Jywge1xuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGUuZ2V0KFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWUgfHxcbiAgICAgICAgICAgICAgICBraW5kLnNsaWNlKDAsIGtpbmQubGFzdEluZGV4T2YoJ0xpc3QnKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnbm9fZGF0YScpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHZpZXdFbCA9XG4gICAgICB0aGlzLnNjcm9sbEVsID09PSB3aW5kb3dcbiAgICAgICAgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICAgICAgOiAodGhpcy5zY3JvbGxFbCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAvLyDlvZPmlbDmja7kuI3lpJ/kuIDlsY/ml7boh6rliqjliqDovb3mm7TlpJpcbiAgICBjb25zdCBhdXRvTG9hZE9uZVNjcmVlbiQgPSB0aGlzLmxpc3QubG9hZFN0YXRlJC5waXBlKFxuICAgICAgbWFwKHN0YXRlID0+IHN0YXRlLnJhd1Jlc3BvbnNlKSxcbiAgICAgIGZpbHRlcihyZXMgPT4gISFyZXMpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgIHRha2VXaGlsZShyZXMgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICghIXJlcy5tZXRhZGF0YT8uY29udGludWUgJiZcbiAgICAgICAgICAgIHZpZXdFbC5zY3JvbGxIZWlnaHQgLSB2aWV3RWwuY2xpZW50SGVpZ2h0IDwgdGhpcy5ib3R0b21EaXN0YW5jZSkgfHxcbiAgICAgICAgICAodGhpcy5maXJzdFNjcm9sbExvYWQgJiZcbiAgICAgICAgICAgICh0aGlzLmxpc3Quc25hcHNob3QuaXRlbXM/Lmxlbmd0aCB8fCAwKSA8IHRoaXMuZmlyc3RTY3JvbGxMb2FkKVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgICB0aGlzLmxpc3QubG9hZFN0YXRlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5hY3Rpb24gPT09IExvYWRBY3Rpb24uUmVsb2FkKSxcbiAgICAgICAgc3RhcnRXaXRoKG51bGwgYXMgdm9pZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBjb25jYXQoYXV0b0xvYWRPbmVTY3JlZW4kLCB0aGlzLnNjcm9sbEJvdHRvbUJvcmRlcikpLFxuICAgICAgICAvLyBsaXN0LnJhd1Jlc3BvbnNlJCDkvJrlpITnkIblpb0gbG9hZGluZyDnrYnnirbmgIHml7bnmoQgbG9hZE1vcmUg6K+35rGC77yM5L2G5pyJ6ZSZ6K+v5pe25Li76KaB5Li75Yqo5YGc5q2iXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5saXN0LnNuYXBzaG90LmxvYWRpbmdFcnJvciksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmxvYWRNb3JlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHJldHJ5KCkge1xuICAgIHRoaXMubGlzdC5pdGVtcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5saXN0LmxvYWRNb3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJpc0VtcHR5TGlzdCQgfCBhc3luY1wiXG4gIGNsYXNzPVwiZW1wdHktcGxhY2Vob2xkZXJcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhVGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RhdGFUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vRGF0YVRlbXBsYXRlXCI+XG4gICAge3sgbm9EYXRhSGludCQgfCBhc3luYyB9fVxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0VtcHR5TGlzdCQgfCBhc3luYylcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwidGFibGUtcGxhY2Vob2xkZXJcIlxuICAgICpuZ0lmPVwibGlzdC5sb2FkaW5nRXJyb3IkIHwgYXN5bmNcIlxuICA+XG4gICAgQGlmIChsb2FkaW5nRXJyb3JUZW1wbGF0ZSkge1xuICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0Vycm9yVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFbNDEwLCA0MDNdLmluY2x1ZGVzKGxvYWRpbmdFcnJvckNvZGUkIHwgYXN5bmMpXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgPnt7ICdlcnJvcl9sb2FkaW5nX2RhdGEnIHwgdHJhbnNsYXRlIH19LHt7XG4gICAgICAgICAgICAncGxlYXNlJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGF1aS1idXR0b249XCJ0ZXh0XCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIChjbGljayk9XCJyZXRyeSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICgncmV0cnknIHwgdHJhbnNsYXRlKS50b0xvd2VyQ2FzZSgpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIobG9hZGluZ0Vycm9yQ29kZSQgfCBhc3luYykgPT09IDQxMFwiPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnbGlzdF9kYXRhX2hhc19leHBpcmVkJyB8IHRyYW5zbGF0ZSB9fSwge3sgJ3BsZWFzZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImxpc3QucmVsb2FkKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ3JlZnJlc2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3Bhbj57eyAnb3InIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImxpc3QubG9hZE1vcmUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnY29udGludWVfbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nRXJyb3JDb2RlJCB8IGFzeW5jKSA9PT0gNDAzXCI+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHt7ICdub19wZXJtaXNzaW9uX2Rlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGxpc3QubG9hZGluZ0Vycm9yJCB8IGFzeW5jKVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwie1xuICAgICAgICBsb2FkaW5nOiBsaXN0LmxvYWRpbmckIHwgYXN5bmMsXG4gICAgICAgIGxvYWRNb3JlOlxuICAgICAgICAgICFhdXRvTG9hZCAmJiAhKGxpc3QubG9hZGluZyQgfCBhc3luYykgJiYgbGlzdC5oYXNNb3JlJCB8IGFzeW5jLFxuICAgICAgfSBhcyBtZXRhXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGFibGUtcGxhY2Vob2xkZXJcIlxuICAgICAgICAqbmdJZj1cIm1ldGEubG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxhdWktaWNvbiBpY29uPVwic3Bpbm5lclwiPjwvYXVpLWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdsb2FkaW5nX3BsZWFzZV93YWl0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRhYmxlLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgKm5nSWY9XCJtZXRhLmxvYWRNb3JlXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGF1aS1idXR0b249XCJ0ZXh0XCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIChjbGljayk9XCJsaXN0LmxvYWRNb3JlKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ2xvYWRfbW9yZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0YWJsZS1sYXN0LXJvdy0tZW1wdHlcIlxuICAgICAgICAqbmdJZj1cIiFtZXRhLmxvYWRNb3JlICYmICFtZXRhLmxvYWRpbmdcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbGFzdC1yb3ctLWVtcHR5LWlubmVyXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPGF1aS1iYWNrLXRvcFxuICAqbmdJZj1cImJhY2tUb3BcIlxuICBbdGFyZ2V0XT1cIndpbmRvd1wiXG4+PC9hdWktYmFjay10b3A+XG4iXX0=
@@ -0,0 +1,18 @@
1
+ /**
2
+ * [[include:k8s-resource-list/README.md]]
3
+ * @module k8s-resource-list
4
+ * @preferred
5
+ */
6
+ /** imports */
7
+ import { K8SResourceListFooterComponent, K8sListFooterNoDataDirective, K8sListFooterLoadingErrorDirective, } from './footer/component';
8
+ export * from './footer/component';
9
+ export * from './k8s-resource-list';
10
+ export * from './types';
11
+ export * from './utils';
12
+ export * from './k8s-resource-paged-list';
13
+ export const K8S_RESOURCE_LIST_MODULE = [
14
+ K8SResourceListFooterComponent,
15
+ K8sListFooterNoDataDirective,
16
+ K8sListFooterLoadingErrorDirective,
17
+ ];
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvazhzLXJlc291cmNlLWxpc3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWM7QUFDZCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLDRCQUE0QixFQUM1QixrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFFeEIsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0Qyw4QkFBOEI7SUFDOUIsNEJBQTRCO0lBQzVCLGtDQUFrQztDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBbW2luY2x1ZGU6azhzLXJlc291cmNlLWxpc3QvUkVBRE1FLm1kXV1cbiAqIEBtb2R1bGUgazhzLXJlc291cmNlLWxpc3RcbiAqIEBwcmVmZXJyZWRcbiAqL1xuLyoqIGltcG9ydHMgKi9cbmltcG9ydCB7XG4gIEs4U1Jlc291cmNlTGlzdEZvb3RlckNvbXBvbmVudCxcbiAgSzhzTGlzdEZvb3Rlck5vRGF0YURpcmVjdGl2ZSxcbiAgSzhzTGlzdEZvb3RlckxvYWRpbmdFcnJvckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi9mb290ZXIvY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9mb290ZXIvY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vazhzLXJlc291cmNlLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi9rOHMtcmVzb3VyY2UtcGFnZWQtbGlzdCc7XG5cbmV4cG9ydCBjb25zdCBLOFNfUkVTT1VSQ0VfTElTVF9NT0RVTEUgPSBbXG4gIEs4U1Jlc291cmNlTGlzdEZvb3RlckNvbXBvbmVudCxcbiAgSzhzTGlzdEZvb3Rlck5vRGF0YURpcmVjdGl2ZSxcbiAgSzhzTGlzdEZvb3RlckxvYWRpbmdFcnJvckRpcmVjdGl2ZSxcbl0gYXMgY29uc3Q7XG4iXX0=
@@ -0,0 +1,224 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * @module k8s-resource-list
4
+ */
5
+ import { WatchEvent } from '@alauda-fe/dynamic-plugin-sdk';
6
+ import { EMPTY, Subject, merge, of, catchError, distinctUntilChanged, exhaustMap, filter, map, scan, startWith, switchMap, takeUntil, tap, finalize, ReplaySubject, } from 'rxjs';
7
+ import { DOWNGRADE_WATCH_ENABLED } from '../constants';
8
+ import { publishRef } from '../utils';
9
+ import { LoadAction, } from './types';
10
+ import { extractListParamsFromRoute, normalizeParams } from './utils';
11
+ export class K8SResourceList {
12
+ constructor({ fetcher, fetchParams$, activatedRoute, limit = 20, polling = 0, watcher, insertFn = defaultInsert, }) {
13
+ this.reloadAction$$ = new Subject();
14
+ this.loadMoreAction$$ = new Subject();
15
+ this.itemsScanner$$ = new Subject();
16
+ this.destroy$$ = new Subject();
17
+ this.bypassItems$ = new ReplaySubject(1);
18
+ this.snapshot = {};
19
+ this.insertFn = insertFn;
20
+ this.queryParams$ = (fetchParams$ ||
21
+ (activatedRoute
22
+ ? extractListParamsFromRoute(activatedRoute)
23
+ : of(null))).pipe(publishRef());
24
+ const validPolling = (polling && watcher && DOWNGRADE_WATCH_ENABLED) || (polling && !watcher)
25
+ ? polling
26
+ : 0;
27
+ this.loadState$ = this.buildLoadStateStream({
28
+ queryParams$: this.queryParams$,
29
+ fetcher,
30
+ limit,
31
+ polling: validPolling,
32
+ });
33
+ this.insertFn = insertFn;
34
+ this.initStreams(validPolling ? null : watcher);
35
+ }
36
+ reload(silent = false) {
37
+ this.reloadAction$$.next(silent);
38
+ }
39
+ loadMore() {
40
+ this.loadMoreAction$$.next();
41
+ }
42
+ scanItems(scanner) {
43
+ this.itemsScanner$$.next(scanner);
44
+ }
45
+ destroy() {
46
+ this.destroy$$.next();
47
+ this.destroy$$.complete();
48
+ }
49
+ create(resource) {
50
+ this.scanItems(this._create(resource));
51
+ }
52
+ update(resource) {
53
+ this.scanItems(this._update(resource));
54
+ }
55
+ delete(resource) {
56
+ if (!resource) {
57
+ return;
58
+ }
59
+ this.scanItems(this._delete(resource));
60
+ }
61
+ _create(resource) {
62
+ return (items) => {
63
+ if (!resource.metadata.name
64
+ .toLowerCase()
65
+ .includes(this.snapshot.queryParams?.keyword?.toLowerCase() ??
66
+ '')) {
67
+ return items;
68
+ }
69
+ return this.insertFn(items, resource, this.snapshot.hasMore);
70
+ };
71
+ }
72
+ _update(resource) {
73
+ return (items) => items.map(item => item.metadata.uid === resource.metadata.uid ? resource : item);
74
+ }
75
+ _delete({ metadata: { uid } }) {
76
+ return (items) => items.filter(item => item.metadata.uid !== uid);
77
+ }
78
+ buildLoadStateStream({ queryParams$, fetcher, polling, limit, }) {
79
+ const load$ = merge(queryParams$.pipe(map(queryParams => () => ({ queryParams, action: LoadAction.Reload }))), this.reloadAction$$.pipe(map(silent => (prev) => ({
80
+ ...prev,
81
+ action: silent ? LoadAction.SilentReload : LoadAction.Reload,
82
+ })))).pipe(scan((acc, scanner) => scanner(acc), {}), tap(({ action, queryParams }) => {
83
+ if (action === LoadAction.Reload) {
84
+ this.snapshot = {
85
+ queryParams,
86
+ };
87
+ this.bypassItems$.next(null);
88
+ }
89
+ }));
90
+ return load$.pipe(switchMap(({ action: leadAction, queryParams }) => this.loadMoreAction$$.pipe(filter(() => this.snapshot.hasMore), map(() => true), startWith(false), exhaustMap(loadMore => {
91
+ if (this.timer) {
92
+ window.clearTimeout(this.timer);
93
+ }
94
+ const token = this.snapshot.continueToken;
95
+ const hasMore = this.snapshot.hasMore;
96
+ const currLength = this.snapshot.items?.length ?? limit;
97
+ const action = loadMore ? LoadAction.LoadMore : leadAction;
98
+ return fetcher(normalizeParams({
99
+ limit: `${action === LoadAction.SilentReload
100
+ ? hasMore
101
+ ? currLength
102
+ : 0
103
+ : limit}`,
104
+ continue: action === LoadAction.LoadMore ? token : '',
105
+ ...queryParams,
106
+ })).pipe(map(rawResponse => ({ rawResponse, loadingError: null })), catchError((err) => of({
107
+ loadingError: action === LoadAction.SilentReload ? null : err,
108
+ })), tap(res => {
109
+ if (polling && !res.loadingError) {
110
+ this.timer = window.setTimeout(() => {
111
+ this.reload(true);
112
+ }, polling);
113
+ }
114
+ }), map(state => ({
115
+ ...state,
116
+ action,
117
+ })), startWith({
118
+ action,
119
+ loading: true,
120
+ }));
121
+ }))), map(state => ({
122
+ action: LoadAction.LoadMore,
123
+ rawResponse: null,
124
+ loading: false,
125
+ loadingError: null,
126
+ ...state,
127
+ })), tap(state => {
128
+ this.snapshot.rawResponse = state.rawResponse;
129
+ this.snapshot.loadingError = state.loadingError;
130
+ this.snapshot.loading =
131
+ state.loading && state.action !== LoadAction.SilentReload;
132
+ this.snapshot.continueToken = this.extractContinueTokenFromState(state);
133
+ this.snapshot.hasMore = !!this.snapshot.continueToken;
134
+ }), finalize(() => {
135
+ this.snapshot = {};
136
+ this.bypassItems$.next(null);
137
+ if (this.timer) {
138
+ window.clearTimeout(this.timer);
139
+ }
140
+ }), takeUntil(this.destroy$$), publishRef());
141
+ }
142
+ extractContinueTokenFromState({ rawResponse, loadingError, }) {
143
+ if (rawResponse) {
144
+ return rawResponse.metadata?.continue ?? '';
145
+ }
146
+ if (loadingError && 'code' in loadingError && loadingError.code === 410) {
147
+ return loadingError.metadata?.continue;
148
+ }
149
+ return this.snapshot.continueToken;
150
+ }
151
+ initStreams(watcher) {
152
+ this.rawResponse$ = this.loadState$.pipe(map(data => data.rawResponse), distinctUntilChanged(), publishRef());
153
+ this.loading$ = this.loadState$.pipe(map(({ loading, action }) => loading && action !== LoadAction.SilentReload), distinctUntilChanged(), publishRef());
154
+ this.loadingError$ = this.loadState$.pipe(map(state => state.loadingError), distinctUntilChanged(), publishRef());
155
+ this.continueToken$ = this.loadState$.pipe(filter(({ loading }) => !loading), switchMap(({ rawResponse, loadingError: err }) => {
156
+ if (rawResponse) {
157
+ return of(rawResponse.metadata?.continue ?? '');
158
+ }
159
+ if (err && 'code' in err && err.code === 410) {
160
+ return of(err.metadata?.continue);
161
+ }
162
+ return EMPTY;
163
+ }), distinctUntilChanged(), publishRef());
164
+ this.hasMore$ = this.continueToken$.pipe(map(token => !!token), distinctUntilChanged(), publishRef());
165
+ this.items$ = merge(this.loadState$.pipe(map(state => (items) => {
166
+ const newItems = state.rawResponse
167
+ ? (state.rawResponse.items ?? [])
168
+ : null;
169
+ if (state.action === LoadAction.Reload) {
170
+ return newItems ?? [];
171
+ }
172
+ if (state.action === LoadAction.SilentReload) {
173
+ return newItems ?? items;
174
+ }
175
+ if (state.action === LoadAction.LoadMore) {
176
+ return newItems ? [...items, ...newItems] : items;
177
+ }
178
+ return items;
179
+ })), this.itemsScanner$$, watcher ? this.buildWatcher(watcher) : EMPTY).pipe(scan((acc, scanner) => scanner(acc), []), tap(items => {
180
+ this.snapshot.items = items;
181
+ this.bypassItems$.next(items);
182
+ }), takeUntil(this.destroy$$), publishRef());
183
+ }
184
+ buildWatcher(watcher) {
185
+ return this.rawResponse$.pipe(filter(res => !!res), distinctUntilChanged((a, b) => a.metadata?.resourceVersion === b.metadata?.resourceVersion), switchMap(list => watcher(list.metadata?.resourceVersion, this.snapshot.queryParams).pipe(catchError(() => {
186
+ this.reload(true);
187
+ return EMPTY;
188
+ }))), switchMap(({ type, object: resource }) => {
189
+ switch (type) {
190
+ case WatchEvent.Added: {
191
+ return of(this._create(resource));
192
+ }
193
+ case WatchEvent.Modified: {
194
+ return of(this._update(resource));
195
+ }
196
+ case WatchEvent.Deleted: {
197
+ return of(this._delete(resource));
198
+ }
199
+ default: {
200
+ return EMPTY;
201
+ }
202
+ }
203
+ }));
204
+ }
205
+ }
206
+ function defaultInsert(items, res, hasMore) {
207
+ for (let i = 0; i < items.length; i++) {
208
+ const compare = resourceCompare(res, items[i]);
209
+ if (compare === 0) {
210
+ return items.map((item, index) => (index === i ? res : item));
211
+ }
212
+ if (compare < 0) {
213
+ return [...items.slice(0, i), res, ...items.slice(i)];
214
+ }
215
+ }
216
+ return hasMore ? items : [...items, res];
217
+ }
218
+ function resourceCompare(a, b) {
219
+ const nsCompare = a.metadata.namespace?.localeCompare(b.metadata.namespace) ?? 0;
220
+ return nsCompare === 0
221
+ ? a.metadata.name.localeCompare(b.metadata.name)
222
+ : nsCompare;
223
+ }
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiazhzLXJlc291cmNlLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvazhzLXJlc291cmNlLWxpc3QvazhzLXJlc291cmNlLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFDTCxLQUFLLEVBRUwsT0FBTyxFQUNQLEtBQUssRUFDTCxFQUFFLEVBQ0YsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0osU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILFFBQVEsRUFDUixhQUFhLEdBQ2QsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV0QyxPQUFPLEVBTUwsVUFBVSxHQUtYLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEUsTUFBTSxPQUFPLGVBQWU7SUE4QjFCLFlBQVksRUFDVixPQUFPLEVBQ1AsWUFBWSxFQUNaLGNBQWMsRUFDZCxLQUFLLEdBQUcsRUFBRSxFQUNWLE9BQU8sR0FBRyxDQUFDLEVBQ1gsT0FBTyxFQUNQLFFBQVEsR0FBRyxhQUFhLEdBQzZCO1FBaEN0QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBQ2hELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWWpE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Q0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDbkUsTUFBTSxTQUFTLEdBQ2IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxLQUFLLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoRCxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBrOHMtcmVzb3VyY2UtbGlzdFxuICovXG5cbmltcG9ydCB7IFdhdGNoRXZlbnQgfSBmcm9tICdAYWxhdWRhLWZlL2R5bmFtaWMtcGx1Z2luLXNkayc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIEVNUFRZLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBtZXJnZSxcbiAgb2YsXG4gIGNhdGNoRXJyb3IsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBleGhhdXN0TWFwLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2NhbixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICBmaW5hbGl6ZSxcbiAgUmVwbGF5U3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERPV05HUkFERV9XQVRDSF9FTkFCTEVEIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEt1YmVybmV0ZXNSZXNvdXJjZSxcbiAgS3ViZXJuZXRlc1Jlc291cmNlTGlzdCxcbiAgUmVzb3VyY2VMaXN0UGFyYW1zLFxuICBTdGF0dXMsXG4gIFN0cmluZ01hcCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcHVibGlzaFJlZiB9IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgQ29uZmlnV2l0aFBhcmFtcyxcbiAgQ29uZmlnV2l0aFJvdXRlLFxuICBJbnNlcnRGbixcbiAgSXRlbXNTY2FubmVyLFxuICBMaXN0UGFyYW1zLFxuICBMb2FkQWN0aW9uLFxuICBMb2FkU25hcHNob3QsXG4gIExvYWRTdGF0ZSxcbiAgU3RyZWFtTGlzdExvYWRlcixcbiAgV2F0Y2hlcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBleHRyYWN0TGlzdFBhcmFtc0Zyb21Sb3V0ZSwgbm9ybWFsaXplUGFyYW1zIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBLOFNSZXNvdXJjZUxpc3Q8XG4gIFIgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2UgPSBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIFEgZXh0ZW5kcyBvYmplY3QgPSBSZXNvdXJjZUxpc3RQYXJhbXMsXG4gIFAgZXh0ZW5kcyBRICYgTGlzdFBhcmFtcyA9IFEgJiBMaXN0UGFyYW1zLFxuPiBpbXBsZW1lbnRzIFN0cmVhbUxpc3RMb2FkZXI8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxSPiwgUj5cbntcbiAgcHJpdmF0ZSByZWFkb25seSByZWxvYWRBY3Rpb24kJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZE1vcmVBY3Rpb24kJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNTY2FubmVyJCQgPSBuZXcgU3ViamVjdDxJdGVtc1NjYW5uZXI8Uj4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnNlcnRGbjogSW5zZXJ0Rm48Uj47XG5cbiAgbG9hZFN0YXRlJDogT2JzZXJ2YWJsZTxMb2FkU3RhdGU8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxSPj4+O1xuXG4gIHF1ZXJ5UGFyYW1zJDogT2JzZXJ2YWJsZTxRPjtcbiAgcmF3UmVzcG9uc2UkOiBPYnNlcnZhYmxlPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3Q8Uj4+O1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbG9hZGluZ0Vycm9yJDogT2JzZXJ2YWJsZTxIdHRwRXJyb3JSZXNwb25zZSB8IFN0YXR1cz47XG4gIGhhc01vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBjb250aW51ZVRva2VuJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBpdGVtcyQ6IE9ic2VydmFibGU8UltdPjtcbiAgYnlwYXNzSXRlbXMkID0gbmV3IFJlcGxheVN1YmplY3Q8UltdPigxKTtcblxuICB0aW1lcjogbnVtYmVyO1xuXG4gIHNuYXBzaG90OiBMb2FkU25hcHNob3Q8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxSPiwgUiwgUT4gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcih7IGZldGNoZXIsIGFjdGl2YXRlZFJvdXRlIH06IENvbmZpZ1dpdGhSb3V0ZTxSLCBRLCBQPik7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5pZmllZC1zaWduYXR1cmVzXG4gIGNvbnN0cnVjdG9yKHsgZmV0Y2hlciwgZmV0Y2hQYXJhbXMkIH06IENvbmZpZ1dpdGhQYXJhbXM8UiwgUSwgUD4pO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmV0Y2hlcixcbiAgICBmZXRjaFBhcmFtcyQsXG4gICAgYWN0aXZhdGVkUm91dGUsXG4gICAgbGltaXQgPSAyMCxcbiAgICBwb2xsaW5nID0gMCxcbiAgICB3YXRjaGVyLFxuICAgIGluc2VydEZuID0gZGVmYXVsdEluc2VydCxcbiAgfTogQ29uZmlnV2l0aFJvdXRlPFIsIFEsIFA+ICYgQ29uZmlnV2l0aFBhcmFtczxSLCBRLCBQPikge1xuICAgIHRoaXMuaW5zZXJ0Rm4gPSBpbnNlcnRGbjtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMkID0gKFxuICAgICAgKGZldGNoUGFyYW1zJCB8fFxuICAgICAgICAoYWN0aXZhdGVkUm91dGVcbiAgICAgICAgICA/IGV4dHJhY3RMaXN0UGFyYW1zRnJvbVJvdXRlKGFjdGl2YXRlZFJvdXRlKVxuICAgICAgICAgIDogb2YobnVsbCkpKSBhcyBPYnNlcnZhYmxlPFE+XG4gICAgKS5waXBlKHB1Ymxpc2hSZWYoKSk7XG5cbiAgICBjb25zdCB2YWxpZFBvbGxpbmcgPVxuICAgICAgKHBvbGxpbmcgJiYgd2F0Y2hlciAmJiBET1dOR1JBREVfV0FUQ0hfRU5BQkxFRCkgfHwgKHBvbGxpbmcgJiYgIXdhdGNoZXIpXG4gICAgICAgID8gcG9sbGluZ1xuICAgICAgICA6IDA7XG5cbiAgICB0aGlzLmxvYWRTdGF0ZSQgPSB0aGlzLmJ1aWxkTG9hZFN0YXRlU3RyZWFtKHtcbiAgICAgIHF1ZXJ5UGFyYW1zJDogdGhpcy5xdWVyeVBhcmFtcyQsXG4gICAgICBmZXRjaGVyLFxuICAgICAgbGltaXQsXG4gICAgICBwb2xsaW5nOiB2YWxpZFBvbGxpbmcsXG4gICAgfSk7XG5cbiAgICB0aGlzLmluc2VydEZuID0gaW5zZXJ0Rm47XG5cbiAgICB0aGlzLmluaXRTdHJlYW1zKHZhbGlkUG9sbGluZyA/IG51bGwgOiB3YXRjaGVyKTtcbiAgfVxuXG4gIHJlbG9hZChzaWxlbnQgPSBmYWxzZSkge1xuICAgIHRoaXMucmVsb2FkQWN0aW9uJCQubmV4dChzaWxlbnQpO1xuICB9XG5cbiAgbG9hZE1vcmUoKSB7XG4gICAgdGhpcy5sb2FkTW9yZUFjdGlvbiQkLm5leHQoKTtcbiAgfVxuXG4gIHNjYW5JdGVtcyhzY2FubmVyOiBJdGVtc1NjYW5uZXI8Uj4pIHtcbiAgICB0aGlzLml0ZW1zU2Nhbm5lciQkLm5leHQoc2Nhbm5lcik7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY3JlYXRlKHJlc291cmNlOiBSKSB7XG4gICAgdGhpcy5zY2FuSXRlbXModGhpcy5fY3JlYXRlKHJlc291cmNlKSk7XG4gIH1cblxuICB1cGRhdGUocmVzb3VyY2U6IFIpIHtcbiAgICB0aGlzLnNjYW5JdGVtcyh0aGlzLl91cGRhdGUocmVzb3VyY2UpKTtcbiAgfVxuXG4gIGRlbGV0ZShyZXNvdXJjZT86IFIpIHtcbiAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Nhbkl0ZW1zKHRoaXMuX2RlbGV0ZShyZXNvdXJjZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlKHJlc291cmNlOiBSKSB7XG4gICAgcmV0dXJuIChpdGVtczogUltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFyZXNvdXJjZS5tZXRhZGF0YS5uYW1lXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoXG4gICAgICAgICAgICAodGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyBhcyBTdHJpbmdNYXApPy5rZXl3b3JkPy50b0xvd2VyQ2FzZSgpID8/XG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRGbihpdGVtcywgcmVzb3VyY2UsIHRoaXMuc25hcHNob3QuaGFzTW9yZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZShyZXNvdXJjZTogUikge1xuICAgIHJldHVybiAoaXRlbXM6IFJbXSkgPT5cbiAgICAgIGl0ZW1zLm1hcChpdGVtID0+XG4gICAgICAgIGl0ZW0ubWV0YWRhdGEudWlkID09PSByZXNvdXJjZS5tZXRhZGF0YS51aWQgPyByZXNvdXJjZSA6IGl0ZW0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVsZXRlKHsgbWV0YWRhdGE6IHsgdWlkIH0gfTogUikge1xuICAgIHJldHVybiAoaXRlbXM6IFJbXSkgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5tZXRhZGF0YS51aWQgIT09IHVpZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9hZFN0YXRlU3RyZWFtKHtcbiAgICBxdWVyeVBhcmFtcyQsXG4gICAgZmV0Y2hlcixcbiAgICBwb2xsaW5nLFxuICAgIGxpbWl0LFxuICB9OiB7XG4gICAgcXVlcnlQYXJhbXMkOiBPYnNlcnZhYmxlPFE+O1xuICAgIGZldGNoZXI6IChwOiBQKSA9PiBPYnNlcnZhYmxlPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3Q8Uj4+O1xuICAgIHBvbGxpbmc6IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9KSB7XG4gICAgY29uc3QgbG9hZCQgPSBtZXJnZShcbiAgICAgIHF1ZXJ5UGFyYW1zJC5waXBlKFxuICAgICAgICBtYXAocXVlcnlQYXJhbXMgPT4gKCkgPT4gKHsgcXVlcnlQYXJhbXMsIGFjdGlvbjogTG9hZEFjdGlvbi5SZWxvYWQgfSkpLFxuICAgICAgKSxcbiAgICAgIHRoaXMucmVsb2FkQWN0aW9uJCQucGlwZShcbiAgICAgICAgbWFwKHNpbGVudCA9PiAocHJldjogeyBxdWVyeVBhcmFtcz86IFA7IGFjdGlvbj86IExvYWRBY3Rpb24gfSkgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGFjdGlvbjogc2lsZW50ID8gTG9hZEFjdGlvbi5TaWxlbnRSZWxvYWQgOiBMb2FkQWN0aW9uLlJlbG9hZCxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICApLnBpcGUoXG4gICAgICBzY2FuKFxuICAgICAgICAoYWNjLCBzY2FubmVyKSA9PiBzY2FubmVyKGFjYyksXG4gICAgICAgIHt9IGFzIHsgcXVlcnlQYXJhbXM/OiBQOyBhY3Rpb24/OiBMb2FkQWN0aW9uIH0sXG4gICAgICApLFxuICAgICAgdGFwKCh7IGFjdGlvbiwgcXVlcnlQYXJhbXMgfSkgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uID09PSBMb2FkQWN0aW9uLlJlbG9hZCkge1xuICAgICAgICAgIHRoaXMuc25hcHNob3QgPSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYnlwYXNzSXRlbXMkLm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gbG9hZCQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeyBhY3Rpb246IGxlYWRBY3Rpb24sIHF1ZXJ5UGFyYW1zIH0pID0+XG4gICAgICAgIHRoaXMubG9hZE1vcmVBY3Rpb24kJC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnNuYXBzaG90Lmhhc01vcmUpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgICAgIGV4aGF1c3RNYXAobG9hZE1vcmUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5zbmFwc2hvdC5jb250aW51ZVRva2VuO1xuICAgICAgICAgICAgY29uc3QgaGFzTW9yZSA9IHRoaXMuc25hcHNob3QuaGFzTW9yZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJMZW5ndGggPSB0aGlzLnNuYXBzaG90Lml0ZW1zPy5sZW5ndGggPz8gbGltaXQ7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBsb2FkTW9yZSA/IExvYWRBY3Rpb24uTG9hZE1vcmUgOiBsZWFkQWN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXIoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbGltaXQ6IGAke1xuICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSBMb2FkQWN0aW9uLlNpbGVudFJlbG9hZFxuICAgICAgICAgICAgICAgICAgICA/IGhhc01vcmVcbiAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICAgICAgOiBsaW1pdFxuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBhY3Rpb24gPT09IExvYWRBY3Rpb24uTG9hZE1vcmUgPyB0b2tlbiA6ICcnLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICB9KSBhcyBQLFxuICAgICAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgICBtYXAocmF3UmVzcG9uc2UgPT4gKHsgcmF3UmVzcG9uc2UsIGxvYWRpbmdFcnJvcjogbnVsbCBhcyBhbnkgfSkpLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IFN0YXR1cyB8IEh0dHBFcnJvclJlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgIG9mKHtcbiAgICAgICAgICAgICAgICAgIGxvYWRpbmdFcnJvcjogYWN0aW9uID09PSBMb2FkQWN0aW9uLlNpbGVudFJlbG9hZCA/IG51bGwgOiBlcnIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwb2xsaW5nICYmICFyZXMubG9hZGluZ0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIH0sIHBvbGxpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcChzdGF0ZSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICBzdGFydFdpdGgoe1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgbWFwKHN0YXRlID0+ICh7XG4gICAgICAgIGFjdGlvbjogTG9hZEFjdGlvbi5Mb2FkTW9yZSxcbiAgICAgICAgcmF3UmVzcG9uc2U6IG51bGwsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkaW5nRXJyb3I6IG51bGwsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgfSkpLFxuICAgICAgdGFwKHN0YXRlID0+IHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5yYXdSZXNwb25zZSA9IHN0YXRlLnJhd1Jlc3BvbnNlO1xuICAgICAgICB0aGlzLnNuYXBzaG90LmxvYWRpbmdFcnJvciA9IHN0YXRlLmxvYWRpbmdFcnJvcjtcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5sb2FkaW5nID1cbiAgICAgICAgICBzdGF0ZS5sb2FkaW5nICYmIHN0YXRlLmFjdGlvbiAhPT0gTG9hZEFjdGlvbi5TaWxlbnRSZWxvYWQ7XG4gICAgICAgIHRoaXMuc25hcHNob3QuY29udGludWVUb2tlbiA9IHRoaXMuZXh0cmFjdENvbnRpbnVlVG9rZW5Gcm9tU3RhdGUoc3RhdGUpO1xuICAgICAgICB0aGlzLnNuYXBzaG90Lmhhc01vcmUgPSAhIXRoaXMuc25hcHNob3QuY29udGludWVUb2tlbjtcbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNuYXBzaG90ID0ge307XG4gICAgICAgIHRoaXMuYnlwYXNzSXRlbXMkLm5leHQobnVsbCk7XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCQpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RDb250aW51ZVRva2VuRnJvbVN0YXRlKHtcbiAgICByYXdSZXNwb25zZSxcbiAgICBsb2FkaW5nRXJyb3IsXG4gIH06IExvYWRTdGF0ZTxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PFI+Pikge1xuICAgIGlmIChyYXdSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJhd1Jlc3BvbnNlLm1ldGFkYXRhPy5jb250aW51ZSA/PyAnJztcbiAgICB9XG5cbiAgICBpZiAobG9hZGluZ0Vycm9yICYmICdjb2RlJyBpbiBsb2FkaW5nRXJyb3IgJiYgbG9hZGluZ0Vycm9yLmNvZGUgPT09IDQxMCkge1xuICAgICAgcmV0dXJuIGxvYWRpbmdFcnJvci5tZXRhZGF0YT8uY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc25hcHNob3QuY29udGludWVUb2tlbjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0cmVhbXMod2F0Y2hlcjogV2F0Y2hlcjxSLCBRPikge1xuICAgIHRoaXMucmF3UmVzcG9uc2UkID0gdGhpcy5sb2FkU3RhdGUkLnBpcGUoXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhLnJhd1Jlc3BvbnNlKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmxvYWRTdGF0ZSQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKHsgbG9hZGluZywgYWN0aW9uIH0pID0+IGxvYWRpbmcgJiYgYWN0aW9uICE9PSBMb2FkQWN0aW9uLlNpbGVudFJlbG9hZCxcbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG5cbiAgICB0aGlzLmxvYWRpbmdFcnJvciQgPSB0aGlzLmxvYWRTdGF0ZSQucGlwZShcbiAgICAgIG1hcChzdGF0ZSA9PiBzdGF0ZS5sb2FkaW5nRXJyb3IpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy5jb250aW51ZVRva2VuJCA9IHRoaXMubG9hZFN0YXRlJC5waXBlKFxuICAgICAgZmlsdGVyKCh7IGxvYWRpbmcgfSkgPT4gIWxvYWRpbmcpLFxuICAgICAgc3dpdGNoTWFwKCh7IHJhd1Jlc3BvbnNlLCBsb2FkaW5nRXJyb3I6IGVyciB9KSA9PiB7XG4gICAgICAgIGlmIChyYXdSZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybiBvZihyYXdSZXNwb25zZS5tZXRhZGF0YT8uY29udGludWUgPz8gJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgJiYgJ2NvZGUnIGluIGVyciAmJiBlcnIuY29kZSA9PT0gNDEwKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGVyci5tZXRhZGF0YT8uY29udGludWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy5oYXNNb3JlJCA9IHRoaXMuY29udGludWVUb2tlbiQucGlwZShcbiAgICAgIG1hcCh0b2tlbiA9PiAhIXRva2VuKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbXMkID0gbWVyZ2UoXG4gICAgICB0aGlzLmxvYWRTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKHN0YXRlID0+IChpdGVtczogUltdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBzdGF0ZS5yYXdSZXNwb25zZVxuICAgICAgICAgICAgPyAoc3RhdGUucmF3UmVzcG9uc2UuaXRlbXMgPz8gW10pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PT0gTG9hZEFjdGlvbi5SZWxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtcyA/PyBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PT0gTG9hZEFjdGlvbi5TaWxlbnRSZWxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtcyA/PyBpdGVtcztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PT0gTG9hZEFjdGlvbi5Mb2FkTW9yZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW1zID8gWy4uLml0ZW1zLCAuLi5uZXdJdGVtc10gOiBpdGVtcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0aGlzLml0ZW1zU2Nhbm5lciQkLFxuICAgICAgd2F0Y2hlciA/IHRoaXMuYnVpbGRXYXRjaGVyKHdhdGNoZXIpIDogRU1QVFksXG4gICAgKS5waXBlKFxuICAgICAgc2NhbjxJdGVtc1NjYW5uZXI8Uj4sIFJbXT4oKGFjYywgc2Nhbm5lcikgPT4gc2Nhbm5lcihhY2MpLCBbXSksXG4gICAgICB0YXAoaXRlbXMgPT4ge1xuICAgICAgICB0aGlzLnNuYXBzaG90Lml0ZW1zID0gaXRlbXM7XG4gICAgICAgIHRoaXMuYnlwYXNzSXRlbXMkLm5leHQoaXRlbXMpO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCQpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkV2F0Y2hlcih3YXRjaGVyOiBXYXRjaGVyPFIsIFE+KSB7XG4gICAgcmV0dXJuIHRoaXMucmF3UmVzcG9uc2UkLnBpcGUoXG4gICAgICBmaWx0ZXIocmVzID0+ICEhcmVzKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAoYSwgYikgPT4gYS5tZXRhZGF0YT8ucmVzb3VyY2VWZXJzaW9uID09PSBiLm1ldGFkYXRhPy5yZXNvdXJjZVZlcnNpb24sXG4gICAgICApLFxuICAgICAgc3dpdGNoTWFwKGxpc3QgPT5cbiAgICAgICAgd2F0Y2hlcihsaXN0Lm1ldGFkYXRhPy5yZXNvdXJjZVZlcnNpb24sIHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBzd2l0Y2hNYXAoKHsgdHlwZSwgb2JqZWN0OiByZXNvdXJjZSB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgV2F0Y2hFdmVudC5BZGRlZDoge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NyZWF0ZShyZXNvdXJjZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFdhdGNoRXZlbnQuTW9kaWZpZWQ6IHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl91cGRhdGUocmVzb3VyY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBXYXRjaEV2ZW50LkRlbGV0ZWQ6IHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9kZWxldGUocmVzb3VyY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0SW5zZXJ0PFQgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2U+KFxuICBpdGVtczogVFtdLFxuICByZXM6IFQsXG4gIGhhc01vcmU6IGJvb2xlYW4sXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbXBhcmUgPSByZXNvdXJjZUNvbXBhcmUocmVzLCBpdGVtc1tpXSk7XG4gICAgaWYgKGNvbXBhcmUgPT09IDApIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoaW5kZXggPT09IGkgPyByZXMgOiBpdGVtKSk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlIDwgMCkge1xuICAgICAgcmV0dXJuIFsuLi5pdGVtcy5zbGljZSgwLCBpKSwgcmVzLCAuLi5pdGVtcy5zbGljZShpKV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc01vcmUgPyBpdGVtcyA6IFsuLi5pdGVtcywgcmVzXTtcbn1cblxuZnVuY3Rpb24gcmVzb3VyY2VDb21wYXJlKGE6IEt1YmVybmV0ZXNSZXNvdXJjZSwgYjogS3ViZXJuZXRlc1Jlc291cmNlKSB7XG4gIGNvbnN0IG5zQ29tcGFyZSA9XG4gICAgYS5tZXRhZGF0YS5uYW1lc3BhY2U/LmxvY2FsZUNvbXBhcmUoYi5tZXRhZGF0YS5uYW1lc3BhY2UpID8/IDA7XG4gIHJldHVybiBuc0NvbXBhcmUgPT09IDBcbiAgICA/IGEubWV0YWRhdGEubmFtZS5sb2NhbGVDb21wYXJlKGIubWV0YWRhdGEubmFtZSlcbiAgICA6IG5zQ29tcGFyZTtcbn1cbiJdfQ==