@delon/abc 15.2.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/auto-focus/auto-focus.directive.d.ts +1 -1
  2. package/avatar-list/avatar-list-item.component.d.ts +1 -1
  3. package/avatar-list/avatar-list.component.d.ts +1 -1
  4. package/count-down/count-down.component.d.ts +1 -1
  5. package/date-picker/range.directive.d.ts +1 -1
  6. package/down-file/down-file.directive.d.ts +1 -1
  7. package/ellipsis/ellipsis.component.d.ts +1 -1
  8. package/error-collect/error-collect.component.d.ts +1 -1
  9. package/esm2022/auto-focus/auto-focus.directive.mjs +51 -0
  10. package/esm2022/auto-focus/auto-focus.module.mjs +18 -0
  11. package/esm2022/avatar-list/avatar-list-item.component.mjs +27 -0
  12. package/esm2022/avatar-list/avatar-list.component.mjs +89 -0
  13. package/esm2022/avatar-list/avatar-list.module.mjs +23 -0
  14. package/esm2022/count-down/count-down.component.mjs +46 -0
  15. package/esm2022/count-down/count-down.module.mjs +21 -0
  16. package/esm2022/date-picker/date-picker.module.mjs +23 -0
  17. package/esm2022/date-picker/range-shortcut.component.mjs +41 -0
  18. package/esm2022/date-picker/range.directive.mjs +174 -0
  19. package/esm2022/down-file/down-file.directive.mjs +115 -0
  20. package/esm2022/down-file/down-file.module.mjs +21 -0
  21. package/esm2022/ellipsis/ellipsis.component.mjs +233 -0
  22. package/esm2022/ellipsis/ellipsis.module.mjs +22 -0
  23. package/esm2022/error-collect/error-collect.component.mjs +122 -0
  24. package/esm2022/error-collect/error-collect.module.mjs +21 -0
  25. package/esm2022/exception/exception.component.mjs +109 -0
  26. package/esm2022/exception/exception.module.mjs +24 -0
  27. package/esm2022/footer-toolbar/footer-toolbar.component.mjs +45 -0
  28. package/esm2022/footer-toolbar/footer-toolbar.module.mjs +22 -0
  29. package/esm2022/full-content/full-content-toggle.directive.mjs +25 -0
  30. package/esm2022/full-content/full-content.component.mjs +140 -0
  31. package/esm2022/full-content/full-content.module.mjs +21 -0
  32. package/esm2022/full-content/full-content.service.mjs +23 -0
  33. package/esm2022/global-footer/global-footer-item.component.mjs +31 -0
  34. package/esm2022/global-footer/global-footer.component.mjs +73 -0
  35. package/esm2022/global-footer/global-footer.module.mjs +22 -0
  36. package/esm2022/hotkey/hotkey.directive.mjs +37 -0
  37. package/esm2022/hotkey/hotkey.module.mjs +18 -0
  38. package/esm2022/let/let.directive.mjs +38 -0
  39. package/esm2022/let/let.module.mjs +18 -0
  40. package/esm2022/loading/loading.component.mjs +27 -0
  41. package/esm2022/loading/loading.module.mjs +24 -0
  42. package/esm2022/loading/loading.service.mjs +91 -0
  43. package/esm2022/lodop/lodop.module.mjs +13 -0
  44. package/esm2022/lodop/lodop.service.mjs +223 -0
  45. package/esm2022/media/media.component.mjs +118 -0
  46. package/esm2022/media/media.module.mjs +20 -0
  47. package/esm2022/media/media.service.mjs +47 -0
  48. package/esm2022/notice-icon/notice-icon-tab.component.mjs +35 -0
  49. package/esm2022/notice-icon/notice-icon.component.mjs +90 -0
  50. package/esm2022/notice-icon/notice-icon.module.mjs +59 -0
  51. package/esm2022/observers/observer-size.mjs +119 -0
  52. package/esm2022/onboarding/onboarding.component.mjs +135 -0
  53. package/esm2022/onboarding/onboarding.module.mjs +27 -0
  54. package/esm2022/onboarding/onboarding.service.mjs +186 -0
  55. package/esm2022/page-header/page-header.component.mjs +247 -0
  56. package/esm2022/page-header/page-header.module.mjs +25 -0
  57. package/esm2022/pdf/pdf.component.mjs +474 -0
  58. package/{esm2020 → esm2022}/pdf/pdf.config.mjs +2 -2
  59. package/esm2022/pdf/pdf.module.mjs +21 -0
  60. package/esm2022/qr/qr.component.mjs +137 -0
  61. package/esm2022/qr/qr.module.mjs +20 -0
  62. package/esm2022/quick-menu/quick-menu.component.mjs +90 -0
  63. package/esm2022/quick-menu/quick-menu.module.mjs +22 -0
  64. package/esm2022/result/result.component.mjs +61 -0
  65. package/esm2022/result/result.module.mjs +22 -0
  66. package/esm2022/reuse-tab/reuse-tab-context-menu.component.mjs +77 -0
  67. package/esm2022/reuse-tab/reuse-tab-context.component.mjs +34 -0
  68. package/esm2022/reuse-tab/reuse-tab-context.directive.mjs +36 -0
  69. package/esm2022/reuse-tab/reuse-tab-context.service.mjs +56 -0
  70. package/esm2022/reuse-tab/reuse-tab.component.mjs +368 -0
  71. package/esm2022/reuse-tab/reuse-tab.module.mjs +50 -0
  72. package/esm2022/reuse-tab/reuse-tab.service.mjs +559 -0
  73. package/esm2022/se/se-container.component.mjs +174 -0
  74. package/esm2022/se/se.component.mjs +235 -0
  75. package/esm2022/se/se.module.mjs +24 -0
  76. package/esm2022/sg/sg-container.component.mjs +53 -0
  77. package/esm2022/sg/sg.component.mjs +68 -0
  78. package/esm2022/sg/sg.module.mjs +21 -0
  79. package/esm2022/st/st-column-source.mjs +493 -0
  80. package/esm2022/st/st-data-source.mjs +480 -0
  81. package/esm2022/st/st-export.mjs +90 -0
  82. package/{esm2020 → esm2022}/st/st-filter.component.mjs +8 -7
  83. package/esm2022/st/st-row.directive.mjs +47 -0
  84. package/esm2022/st/st-widget-host.directive.mjs +32 -0
  85. package/esm2022/st/st-widget.mjs +27 -0
  86. package/esm2022/st/st.component.mjs +1004 -0
  87. package/esm2022/st/st.module.mjs +97 -0
  88. package/esm2022/sv/sv-container.component.mjs +127 -0
  89. package/esm2022/sv/sv-value.component.mjs +45 -0
  90. package/esm2022/sv/sv.component.mjs +120 -0
  91. package/esm2022/sv/sv.module.mjs +26 -0
  92. package/esm2022/tag-select/tag-select.component.mjs +64 -0
  93. package/esm2022/tag-select/tag-select.module.mjs +22 -0
  94. package/esm2022/xlsx/xlsx.directive.mjs +28 -0
  95. package/esm2022/xlsx/xlsx.module.mjs +20 -0
  96. package/esm2022/xlsx/xlsx.service.mjs +129 -0
  97. package/esm2022/zip/zip.module.mjs +16 -0
  98. package/esm2022/zip/zip.service.mjs +117 -0
  99. package/exception/exception.component.d.ts +1 -1
  100. package/{fesm2015 → fesm2022}/auto-focus.mjs +7 -7
  101. package/{fesm2015 → fesm2022}/auto-focus.mjs.map +1 -1
  102. package/{fesm2020 → fesm2022}/avatar-list.mjs +10 -10
  103. package/fesm2022/avatar-list.mjs.map +1 -0
  104. package/{fesm2020 → fesm2022}/chart-observer-size.mjs +10 -10
  105. package/fesm2022/chart-observer-size.mjs.map +1 -0
  106. package/{fesm2020 → fesm2022}/count-down.mjs +7 -7
  107. package/fesm2022/count-down.mjs.map +1 -0
  108. package/{fesm2020 → fesm2022}/date-picker.mjs +14 -13
  109. package/fesm2022/date-picker.mjs.map +1 -0
  110. package/{fesm2020 → fesm2022}/down-file.mjs +8 -8
  111. package/fesm2022/down-file.mjs.map +1 -0
  112. package/{fesm2020 → fesm2022}/ellipsis.mjs +7 -7
  113. package/fesm2022/ellipsis.mjs.map +1 -0
  114. package/{fesm2020 → fesm2022}/error-collect.mjs +9 -9
  115. package/fesm2022/error-collect.mjs.map +1 -0
  116. package/{fesm2020 → fesm2022}/exception.mjs +7 -7
  117. package/fesm2022/exception.mjs.map +1 -0
  118. package/{fesm2020 → fesm2022}/footer-toolbar.mjs +7 -7
  119. package/fesm2022/footer-toolbar.mjs.map +1 -0
  120. package/{fesm2020 → fesm2022}/full-content.mjs +13 -13
  121. package/fesm2022/full-content.mjs.map +1 -0
  122. package/{fesm2020 → fesm2022}/global-footer.mjs +10 -10
  123. package/fesm2022/global-footer.mjs.map +1 -0
  124. package/{fesm2020 → fesm2022}/hotkey.mjs +7 -7
  125. package/{fesm2015 → fesm2022}/hotkey.mjs.map +1 -1
  126. package/{fesm2020 → fesm2022}/let.mjs +9 -8
  127. package/fesm2022/let.mjs.map +1 -0
  128. package/{fesm2020 → fesm2022}/loading.mjs +10 -11
  129. package/fesm2022/loading.mjs.map +1 -0
  130. package/{fesm2020 → fesm2022}/lodop.mjs +7 -7
  131. package/{fesm2020 → fesm2022}/lodop.mjs.map +1 -1
  132. package/{fesm2020 → fesm2022}/media.mjs +10 -10
  133. package/fesm2022/media.mjs.map +1 -0
  134. package/fesm2022/notice-icon.mjs +180 -0
  135. package/fesm2022/notice-icon.mjs.map +1 -0
  136. package/{fesm2020 → fesm2022}/onboarding.mjs +10 -11
  137. package/{fesm2020 → fesm2022}/onboarding.mjs.map +1 -1
  138. package/{fesm2020 → fesm2022}/page-header.mjs +7 -7
  139. package/{fesm2015 → fesm2022}/page-header.mjs.map +1 -1
  140. package/{fesm2020 → fesm2022}/pdf.mjs +10 -10
  141. package/fesm2022/pdf.mjs.map +1 -0
  142. package/{fesm2015 → fesm2022}/qr.mjs +7 -7
  143. package/{fesm2020 → fesm2022}/qr.mjs.map +1 -1
  144. package/{fesm2020 → fesm2022}/quick-menu.mjs +7 -7
  145. package/fesm2022/quick-menu.mjs.map +1 -0
  146. package/{fesm2020 → fesm2022}/result.mjs +7 -7
  147. package/{fesm2020 → fesm2022}/result.mjs.map +1 -1
  148. package/{fesm2020 → fesm2022}/reuse-tab.mjs +31 -31
  149. package/{fesm2015 → fesm2022}/reuse-tab.mjs.map +1 -1
  150. package/{fesm2020 → fesm2022}/se.mjs +15 -15
  151. package/fesm2022/se.mjs.map +1 -0
  152. package/{fesm2020 → fesm2022}/sg.mjs +10 -10
  153. package/fesm2022/sg.mjs.map +1 -0
  154. package/{fesm2020 → fesm2022}/st.mjs +72 -72
  155. package/fesm2022/st.mjs.map +1 -0
  156. package/{fesm2020 → fesm2022}/sv.mjs +20 -20
  157. package/fesm2022/sv.mjs.map +1 -0
  158. package/{fesm2020 → fesm2022}/tag-select.mjs +7 -7
  159. package/fesm2022/tag-select.mjs.map +1 -0
  160. package/{fesm2020 → fesm2022}/xlsx.mjs +10 -10
  161. package/fesm2022/xlsx.mjs.map +1 -0
  162. package/{fesm2020 → fesm2022}/zip.mjs +7 -7
  163. package/{fesm2015 → fesm2022}/zip.mjs.map +1 -1
  164. package/footer-toolbar/footer-toolbar.component.d.ts +1 -1
  165. package/full-content/full-content.component.d.ts +1 -1
  166. package/global-footer/global-footer-item.component.d.ts +1 -1
  167. package/global-footer/global-footer.component.d.ts +1 -1
  168. package/hotkey/hotkey.directive.d.ts +1 -1
  169. package/let/let.directive.d.ts +1 -1
  170. package/loading/style/index.less +1 -4
  171. package/media/media.component.d.ts +1 -1
  172. package/notice-icon/notice-icon-tab.component.d.ts +1 -1
  173. package/notice-icon/notice-icon.component.d.ts +1 -1
  174. package/onboarding/style/index.less +1 -4
  175. package/package.json +106 -176
  176. package/page-header/page-header.component.d.ts +1 -1
  177. package/pdf/pdf.component.d.ts +1 -1
  178. package/qr/qr.component.d.ts +1 -1
  179. package/quick-menu/quick-menu.component.d.ts +1 -1
  180. package/result/result.component.d.ts +1 -1
  181. package/reuse-tab/reuse-tab-context-menu.component.d.ts +1 -1
  182. package/reuse-tab/reuse-tab-context.component.d.ts +1 -1
  183. package/reuse-tab/reuse-tab-context.directive.d.ts +1 -1
  184. package/reuse-tab/reuse-tab.component.d.ts +1 -1
  185. package/se/se-container.component.d.ts +1 -1
  186. package/se/se.component.d.ts +1 -1
  187. package/sg/sg-container.component.d.ts +1 -1
  188. package/sg/sg.component.d.ts +1 -1
  189. package/st/st-filter.component.d.ts +1 -1
  190. package/st/st-row.directive.d.ts +1 -1
  191. package/st/st-widget-host.directive.d.ts +1 -1
  192. package/st/st.component.d.ts +9 -5
  193. package/st/style/index.less +6 -2
  194. package/sv/sv-container.component.d.ts +1 -1
  195. package/sv/sv-value.component.d.ts +1 -1
  196. package/sv/sv.component.d.ts +1 -1
  197. package/tag-select/tag-select.component.d.ts +1 -1
  198. package/xlsx/xlsx.directive.d.ts +1 -1
  199. package/esm2020/auto-focus/auto-focus.directive.mjs +0 -50
  200. package/esm2020/auto-focus/auto-focus.module.mjs +0 -17
  201. package/esm2020/avatar-list/avatar-list-item.component.mjs +0 -26
  202. package/esm2020/avatar-list/avatar-list.component.mjs +0 -88
  203. package/esm2020/avatar-list/avatar-list.module.mjs +0 -22
  204. package/esm2020/count-down/count-down.component.mjs +0 -45
  205. package/esm2020/count-down/count-down.module.mjs +0 -20
  206. package/esm2020/date-picker/date-picker.module.mjs +0 -22
  207. package/esm2020/date-picker/range-shortcut.component.mjs +0 -40
  208. package/esm2020/date-picker/range.directive.mjs +0 -172
  209. package/esm2020/down-file/down-file.directive.mjs +0 -114
  210. package/esm2020/down-file/down-file.module.mjs +0 -20
  211. package/esm2020/ellipsis/ellipsis.component.mjs +0 -232
  212. package/esm2020/ellipsis/ellipsis.module.mjs +0 -21
  213. package/esm2020/error-collect/error-collect.component.mjs +0 -121
  214. package/esm2020/error-collect/error-collect.module.mjs +0 -20
  215. package/esm2020/exception/exception.component.mjs +0 -108
  216. package/esm2020/exception/exception.module.mjs +0 -23
  217. package/esm2020/footer-toolbar/footer-toolbar.component.mjs +0 -44
  218. package/esm2020/footer-toolbar/footer-toolbar.module.mjs +0 -21
  219. package/esm2020/full-content/full-content-toggle.directive.mjs +0 -24
  220. package/esm2020/full-content/full-content.component.mjs +0 -139
  221. package/esm2020/full-content/full-content.module.mjs +0 -20
  222. package/esm2020/full-content/full-content.service.mjs +0 -22
  223. package/esm2020/global-footer/global-footer-item.component.mjs +0 -30
  224. package/esm2020/global-footer/global-footer.component.mjs +0 -72
  225. package/esm2020/global-footer/global-footer.module.mjs +0 -21
  226. package/esm2020/hotkey/hotkey.directive.mjs +0 -36
  227. package/esm2020/hotkey/hotkey.module.mjs +0 -17
  228. package/esm2020/let/let.directive.mjs +0 -36
  229. package/esm2020/let/let.module.mjs +0 -17
  230. package/esm2020/loading/loading.component.mjs +0 -26
  231. package/esm2020/loading/loading.module.mjs +0 -24
  232. package/esm2020/loading/loading.service.mjs +0 -90
  233. package/esm2020/lodop/lodop.module.mjs +0 -12
  234. package/esm2020/lodop/lodop.service.mjs +0 -222
  235. package/esm2020/media/media.component.mjs +0 -117
  236. package/esm2020/media/media.module.mjs +0 -19
  237. package/esm2020/media/media.service.mjs +0 -46
  238. package/esm2020/notice-icon/notice-icon-tab.component.mjs +0 -34
  239. package/esm2020/notice-icon/notice-icon.component.mjs +0 -89
  240. package/esm2020/notice-icon/notice-icon.module.mjs +0 -58
  241. package/esm2020/observers/observer-size.mjs +0 -116
  242. package/esm2020/onboarding/onboarding.component.mjs +0 -134
  243. package/esm2020/onboarding/onboarding.module.mjs +0 -27
  244. package/esm2020/onboarding/onboarding.service.mjs +0 -185
  245. package/esm2020/page-header/page-header.component.mjs +0 -246
  246. package/esm2020/page-header/page-header.module.mjs +0 -24
  247. package/esm2020/pdf/pdf.component.mjs +0 -473
  248. package/esm2020/pdf/pdf.module.mjs +0 -20
  249. package/esm2020/qr/qr.component.mjs +0 -136
  250. package/esm2020/qr/qr.module.mjs +0 -19
  251. package/esm2020/quick-menu/quick-menu.component.mjs +0 -89
  252. package/esm2020/quick-menu/quick-menu.module.mjs +0 -21
  253. package/esm2020/result/result.component.mjs +0 -60
  254. package/esm2020/result/result.module.mjs +0 -21
  255. package/esm2020/reuse-tab/reuse-tab-context-menu.component.mjs +0 -76
  256. package/esm2020/reuse-tab/reuse-tab-context.component.mjs +0 -33
  257. package/esm2020/reuse-tab/reuse-tab-context.directive.mjs +0 -35
  258. package/esm2020/reuse-tab/reuse-tab-context.service.mjs +0 -55
  259. package/esm2020/reuse-tab/reuse-tab.component.mjs +0 -367
  260. package/esm2020/reuse-tab/reuse-tab.module.mjs +0 -49
  261. package/esm2020/reuse-tab/reuse-tab.service.mjs +0 -558
  262. package/esm2020/se/se-container.component.mjs +0 -172
  263. package/esm2020/se/se.component.mjs +0 -234
  264. package/esm2020/se/se.module.mjs +0 -23
  265. package/esm2020/sg/sg-container.component.mjs +0 -52
  266. package/esm2020/sg/sg.component.mjs +0 -67
  267. package/esm2020/sg/sg.module.mjs +0 -20
  268. package/esm2020/st/st-column-source.mjs +0 -492
  269. package/esm2020/st/st-data-source.mjs +0 -479
  270. package/esm2020/st/st-export.mjs +0 -89
  271. package/esm2020/st/st-row.directive.mjs +0 -45
  272. package/esm2020/st/st-widget-host.directive.mjs +0 -31
  273. package/esm2020/st/st-widget.mjs +0 -26
  274. package/esm2020/st/st.component.mjs +0 -1002
  275. package/esm2020/st/st.module.mjs +0 -96
  276. package/esm2020/sv/sv-container.component.mjs +0 -125
  277. package/esm2020/sv/sv-value.component.mjs +0 -44
  278. package/esm2020/sv/sv.component.mjs +0 -119
  279. package/esm2020/sv/sv.module.mjs +0 -25
  280. package/esm2020/tag-select/tag-select.component.mjs +0 -63
  281. package/esm2020/tag-select/tag-select.module.mjs +0 -21
  282. package/esm2020/xlsx/xlsx.directive.mjs +0 -27
  283. package/esm2020/xlsx/xlsx.module.mjs +0 -19
  284. package/esm2020/xlsx/xlsx.service.mjs +0 -128
  285. package/esm2020/zip/zip.module.mjs +0 -15
  286. package/esm2020/zip/zip.service.mjs +0 -116
  287. package/fesm2015/avatar-list.mjs +0 -139
  288. package/fesm2015/avatar-list.mjs.map +0 -1
  289. package/fesm2015/chart-observer-size.mjs +0 -124
  290. package/fesm2015/chart-observer-size.mjs.map +0 -1
  291. package/fesm2015/count-down.mjs +0 -69
  292. package/fesm2015/count-down.mjs.map +0 -1
  293. package/fesm2015/date-picker.mjs +0 -236
  294. package/fesm2015/date-picker.mjs.map +0 -1
  295. package/fesm2015/down-file.mjs +0 -141
  296. package/fesm2015/down-file.mjs.map +0 -1
  297. package/fesm2015/ellipsis.mjs +0 -258
  298. package/fesm2015/ellipsis.mjs.map +0 -1
  299. package/fesm2015/error-collect.mjs +0 -147
  300. package/fesm2015/error-collect.mjs.map +0 -1
  301. package/fesm2015/exception.mjs +0 -138
  302. package/fesm2015/exception.mjs.map +0 -1
  303. package/fesm2015/footer-toolbar.mjs +0 -70
  304. package/fesm2015/footer-toolbar.mjs.map +0 -1
  305. package/fesm2015/full-content.mjs +0 -202
  306. package/fesm2015/full-content.mjs.map +0 -1
  307. package/fesm2015/global-footer.mjs +0 -126
  308. package/fesm2015/global-footer.mjs.map +0 -1
  309. package/fesm2015/hotkey.mjs +0 -57
  310. package/fesm2015/let.mjs +0 -59
  311. package/fesm2015/let.mjs.map +0 -1
  312. package/fesm2015/loading.mjs +0 -142
  313. package/fesm2015/loading.mjs.map +0 -1
  314. package/fesm2015/lodop.mjs +0 -232
  315. package/fesm2015/lodop.mjs.map +0 -1
  316. package/fesm2015/media.mjs +0 -180
  317. package/fesm2015/media.mjs.map +0 -1
  318. package/fesm2015/notice-icon.mjs +0 -180
  319. package/fesm2015/notice-icon.mjs.map +0 -1
  320. package/fesm2015/onboarding.mjs +0 -336
  321. package/fesm2015/onboarding.mjs.map +0 -1
  322. package/fesm2015/page-header.mjs +0 -276
  323. package/fesm2015/pdf.mjs +0 -516
  324. package/fesm2015/pdf.mjs.map +0 -1
  325. package/fesm2015/qr.mjs.map +0 -1
  326. package/fesm2015/quick-menu.mjs +0 -114
  327. package/fesm2015/quick-menu.mjs.map +0 -1
  328. package/fesm2015/result.mjs +0 -88
  329. package/fesm2015/result.mjs.map +0 -1
  330. package/fesm2015/reuse-tab.mjs +0 -1217
  331. package/fesm2015/se.mjs +0 -444
  332. package/fesm2015/se.mjs.map +0 -1
  333. package/fesm2015/sg.mjs +0 -139
  334. package/fesm2015/sg.mjs.map +0 -1
  335. package/fesm2015/st.mjs +0 -2526
  336. package/fesm2015/st.mjs.map +0 -1
  337. package/fesm2015/sv.mjs +0 -308
  338. package/fesm2015/sv.mjs.map +0 -1
  339. package/fesm2015/tag-select.mjs +0 -91
  340. package/fesm2015/tag-select.mjs.map +0 -1
  341. package/fesm2015/xlsx.mjs +0 -172
  342. package/fesm2015/xlsx.mjs.map +0 -1
  343. package/fesm2015/zip.mjs +0 -136
  344. package/fesm2020/abc.mjs +0 -7
  345. package/fesm2020/abc.mjs.map +0 -1
  346. package/fesm2020/auto-focus.mjs +0 -71
  347. package/fesm2020/auto-focus.mjs.map +0 -1
  348. package/fesm2020/avatar-list.mjs.map +0 -1
  349. package/fesm2020/chart-observer-size.mjs.map +0 -1
  350. package/fesm2020/count-down.mjs.map +0 -1
  351. package/fesm2020/date-picker.mjs.map +0 -1
  352. package/fesm2020/down-file.mjs.map +0 -1
  353. package/fesm2020/ellipsis.mjs.map +0 -1
  354. package/fesm2020/error-collect.mjs.map +0 -1
  355. package/fesm2020/exception.mjs.map +0 -1
  356. package/fesm2020/footer-toolbar.mjs.map +0 -1
  357. package/fesm2020/full-content.mjs.map +0 -1
  358. package/fesm2020/global-footer.mjs.map +0 -1
  359. package/fesm2020/hotkey.mjs.map +0 -1
  360. package/fesm2020/let.mjs.map +0 -1
  361. package/fesm2020/loading.mjs.map +0 -1
  362. package/fesm2020/media.mjs.map +0 -1
  363. package/fesm2020/notice-icon.mjs +0 -180
  364. package/fesm2020/notice-icon.mjs.map +0 -1
  365. package/fesm2020/page-header.mjs.map +0 -1
  366. package/fesm2020/pdf.mjs.map +0 -1
  367. package/fesm2020/qr.mjs +0 -171
  368. package/fesm2020/quick-menu.mjs.map +0 -1
  369. package/fesm2020/reuse-tab.mjs.map +0 -1
  370. package/fesm2020/se.mjs.map +0 -1
  371. package/fesm2020/sg.mjs.map +0 -1
  372. package/fesm2020/st.mjs.map +0 -1
  373. package/fesm2020/sv.mjs.map +0 -1
  374. package/fesm2020/tag-select.mjs.map +0 -1
  375. package/fesm2020/xlsx.mjs.map +0 -1
  376. package/fesm2020/zip.mjs.map +0 -1
  377. /package/{esm2020 → esm2022}/abc.mjs +0 -0
  378. /package/{esm2020 → esm2022}/auto-focus/auto-focus.mjs +0 -0
  379. /package/{esm2020 → esm2022}/auto-focus/index.mjs +0 -0
  380. /package/{esm2020 → esm2022}/avatar-list/avatar-list.mjs +0 -0
  381. /package/{esm2020 → esm2022}/avatar-list/public_api.mjs +0 -0
  382. /package/{esm2020 → esm2022}/count-down/count-down.mjs +0 -0
  383. /package/{esm2020 → esm2022}/count-down/public_api.mjs +0 -0
  384. /package/{esm2020 → esm2022}/date-picker/date-picker.mjs +0 -0
  385. /package/{esm2020 → esm2022}/date-picker/public_api.mjs +0 -0
  386. /package/{esm2020 → esm2022}/down-file/down-file.mjs +0 -0
  387. /package/{esm2020 → esm2022}/down-file/public_api.mjs +0 -0
  388. /package/{esm2020 → esm2022}/ellipsis/ellipsis.mjs +0 -0
  389. /package/{esm2020 → esm2022}/ellipsis/public_api.mjs +0 -0
  390. /package/{esm2020 → esm2022}/error-collect/error-collect.mjs +0 -0
  391. /package/{esm2020 → esm2022}/error-collect/public_api.mjs +0 -0
  392. /package/{esm2020 → esm2022}/exception/exception.mjs +0 -0
  393. /package/{esm2020 → esm2022}/exception/public_api.mjs +0 -0
  394. /package/{esm2020 → esm2022}/footer-toolbar/footer-toolbar.mjs +0 -0
  395. /package/{esm2020 → esm2022}/footer-toolbar/public_api.mjs +0 -0
  396. /package/{esm2020 → esm2022}/full-content/full-content.mjs +0 -0
  397. /package/{esm2020 → esm2022}/full-content/public_api.mjs +0 -0
  398. /package/{esm2020 → esm2022}/global-footer/global-footer.mjs +0 -0
  399. /package/{esm2020 → esm2022}/global-footer/global-footer.types.mjs +0 -0
  400. /package/{esm2020 → esm2022}/global-footer/public_api.mjs +0 -0
  401. /package/{esm2020 → esm2022}/hotkey/hotkey.mjs +0 -0
  402. /package/{esm2020 → esm2022}/hotkey/public_api.mjs +0 -0
  403. /package/{esm2020 → esm2022}/let/index.mjs +0 -0
  404. /package/{esm2020 → esm2022}/let/let.mjs +0 -0
  405. /package/{esm2020 → esm2022}/loading/loading.mjs +0 -0
  406. /package/{esm2020 → esm2022}/loading/loading.types.mjs +0 -0
  407. /package/{esm2020 → esm2022}/loading/public_api.mjs +0 -0
  408. /package/{esm2020 → esm2022}/lodop/lodop.mjs +0 -0
  409. /package/{esm2020 → esm2022}/lodop/lodop.types.mjs +0 -0
  410. /package/{esm2020 → esm2022}/lodop/public_api.mjs +0 -0
  411. /package/{esm2020 → esm2022}/media/media.mjs +0 -0
  412. /package/{esm2020 → esm2022}/media/public_api.mjs +0 -0
  413. /package/{esm2020 → esm2022}/notice-icon/notice-icon.mjs +0 -0
  414. /package/{esm2020 → esm2022}/notice-icon/notice-icon.types.mjs +0 -0
  415. /package/{esm2020 → esm2022}/notice-icon/public_api.mjs +0 -0
  416. /package/{esm2020 → esm2022}/observers/chart-observer-size.mjs +0 -0
  417. /package/{esm2020 → esm2022}/observers/public-api.mjs +0 -0
  418. /package/{esm2020 → esm2022}/onboarding/onboarding.mjs +0 -0
  419. /package/{esm2020 → esm2022}/onboarding/onboarding.types.mjs +0 -0
  420. /package/{esm2020 → esm2022}/onboarding/public_api.mjs +0 -0
  421. /package/{esm2020 → esm2022}/page-header/page-header.mjs +0 -0
  422. /package/{esm2020 → esm2022}/page-header/public_api.mjs +0 -0
  423. /package/{esm2020 → esm2022}/pdf/pdf.mjs +0 -0
  424. /package/{esm2020 → esm2022}/pdf/pdf.types.mjs +0 -0
  425. /package/{esm2020 → esm2022}/pdf/public_api.mjs +0 -0
  426. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  427. /package/{esm2020 → esm2022}/qr/public_api.mjs +0 -0
  428. /package/{esm2020 → esm2022}/qr/qr.config.mjs +0 -0
  429. /package/{esm2020 → esm2022}/qr/qr.mjs +0 -0
  430. /package/{esm2020 → esm2022}/qr/qr.types.mjs +0 -0
  431. /package/{esm2020 → esm2022}/quick-menu/public_api.mjs +0 -0
  432. /package/{esm2020 → esm2022}/quick-menu/quick-menu.mjs +0 -0
  433. /package/{esm2020 → esm2022}/result/public_api.mjs +0 -0
  434. /package/{esm2020 → esm2022}/result/result.mjs +0 -0
  435. /package/{esm2020 → esm2022}/reuse-tab/lifecycle_hooks.mjs +0 -0
  436. /package/{esm2020 → esm2022}/reuse-tab/public_api.mjs +0 -0
  437. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.interfaces.mjs +0 -0
  438. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.mjs +0 -0
  439. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.state.mjs +0 -0
  440. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.strategy.mjs +0 -0
  441. /package/{esm2020 → esm2022}/se/public_api.mjs +0 -0
  442. /package/{esm2020 → esm2022}/se/se.mjs +0 -0
  443. /package/{esm2020 → esm2022}/se/se.types.mjs +0 -0
  444. /package/{esm2020 → esm2022}/sg/public_api.mjs +0 -0
  445. /package/{esm2020 → esm2022}/sg/sg.mjs +0 -0
  446. /package/{esm2020 → esm2022}/st/public_api.mjs +0 -0
  447. /package/{esm2020 → esm2022}/st/st.config.mjs +0 -0
  448. /package/{esm2020 → esm2022}/st/st.interfaces.mjs +0 -0
  449. /package/{esm2020 → esm2022}/st/st.mjs +0 -0
  450. /package/{esm2020 → esm2022}/st/st.types.mjs +0 -0
  451. /package/{esm2020 → esm2022}/sv/public_api.mjs +0 -0
  452. /package/{esm2020 → esm2022}/sv/sv.mjs +0 -0
  453. /package/{esm2020 → esm2022}/tag-select/public_api.mjs +0 -0
  454. /package/{esm2020 → esm2022}/tag-select/tag-select.mjs +0 -0
  455. /package/{esm2020 → esm2022}/xlsx/public_api.mjs +0 -0
  456. /package/{esm2020 → esm2022}/xlsx/xlsx.mjs +0 -0
  457. /package/{esm2020 → esm2022}/xlsx/xlsx.types.mjs +0 -0
  458. /package/{esm2020 → esm2022}/zip/public_api.mjs +0 -0
  459. /package/{esm2020 → esm2022}/zip/zip.mjs +0 -0
  460. /package/{esm2020 → esm2022}/zip/zip.types.mjs +0 -0
  461. /package/{fesm2015 → fesm2022}/abc.mjs +0 -0
  462. /package/{fesm2015 → fesm2022}/abc.mjs.map +0 -0
@@ -0,0 +1,480 @@
1
+ import { HttpParams } from '@angular/common/http';
2
+ import { Host, Injectable } from '@angular/core';
3
+ import { of, map } from 'rxjs';
4
+ import { deepCopy, deepGet } from '@delon/util/other';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@delon/theme";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@delon/util/format";
9
+ import * as i4 from "@angular/platform-browser";
10
+ class STDataSource {
11
+ constructor(http, datePipe, ynPipe, numberPipe, currencySrv, dom) {
12
+ this.http = http;
13
+ this.datePipe = datePipe;
14
+ this.ynPipe = ynPipe;
15
+ this.numberPipe = numberPipe;
16
+ this.currencySrv = currencySrv;
17
+ this.dom = dom;
18
+ this.sortTick = 0;
19
+ }
20
+ setCog(val) {
21
+ this.cog = val;
22
+ }
23
+ process(options) {
24
+ let data$;
25
+ let isRemote = false;
26
+ const { data, res, total, page, pi, ps, paginator, columns } = options;
27
+ let retTotal;
28
+ let retPs;
29
+ let retList;
30
+ let retPi;
31
+ let rawData;
32
+ let showPage = page.show;
33
+ if (typeof data === 'string') {
34
+ isRemote = true;
35
+ data$ = this.getByRemote(data, options).pipe(map(result => {
36
+ rawData = result;
37
+ let ret;
38
+ if (Array.isArray(result)) {
39
+ ret = result;
40
+ retTotal = ret.length;
41
+ retPs = retTotal;
42
+ showPage = false;
43
+ }
44
+ else {
45
+ const reName = res.reName;
46
+ if (typeof reName === 'function') {
47
+ const fnRes = reName(result, { pi, ps, total });
48
+ ret = fnRes.list;
49
+ retTotal = fnRes.total;
50
+ }
51
+ else {
52
+ // list
53
+ ret = deepGet(result, reName.list, []);
54
+ if (ret == null || !Array.isArray(ret)) {
55
+ ret = [];
56
+ }
57
+ // total
58
+ const resultTotal = reName.total && deepGet(result, reName.total, null);
59
+ retTotal = resultTotal == null ? total || 0 : +resultTotal;
60
+ }
61
+ }
62
+ return deepCopy(ret);
63
+ }));
64
+ }
65
+ else if (Array.isArray(data)) {
66
+ data$ = of(data);
67
+ }
68
+ else {
69
+ // a cold observable
70
+ data$ = data;
71
+ }
72
+ if (!isRemote) {
73
+ data$ = data$.pipe(
74
+ // sort
75
+ map((result) => {
76
+ rawData = result;
77
+ let copyResult = deepCopy(result);
78
+ const sorterFn = this.getSorterFn(columns);
79
+ if (sorterFn) {
80
+ copyResult = copyResult.sort(sorterFn);
81
+ }
82
+ return copyResult;
83
+ }),
84
+ // filter
85
+ map((result) => {
86
+ columns
87
+ .filter(w => w.filter)
88
+ .forEach(c => {
89
+ const filter = c.filter;
90
+ const values = this.getFilteredData(filter);
91
+ if (values.length === 0)
92
+ return;
93
+ const onFilter = filter.fn;
94
+ if (typeof onFilter !== 'function') {
95
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
96
+ console.warn(`[st] Muse provide the fn function in filter`);
97
+ }
98
+ return;
99
+ }
100
+ result = result.filter(record => values.some(v => onFilter(v, record)));
101
+ });
102
+ return result;
103
+ }),
104
+ // paging
105
+ map((result) => {
106
+ if (paginator && page.front) {
107
+ const maxPageIndex = Math.ceil(result.length / ps);
108
+ retPi = Math.max(1, pi > maxPageIndex ? maxPageIndex : pi);
109
+ retTotal = result.length;
110
+ if (page.show === true) {
111
+ return result.slice((retPi - 1) * ps, retPi * ps);
112
+ }
113
+ }
114
+ return result;
115
+ }));
116
+ }
117
+ // pre-process
118
+ if (typeof res.process === 'function') {
119
+ data$ = data$.pipe(map(result => res.process(result, rawData)));
120
+ }
121
+ data$ = data$.pipe(map(result => this.optimizeData({ result, columns, rowClassName: options.rowClassName })));
122
+ return data$.pipe(map(result => {
123
+ retList = result;
124
+ const realTotal = retTotal || total;
125
+ const realPs = retPs || ps;
126
+ return {
127
+ pi: retPi,
128
+ ps: retPs,
129
+ total: retTotal,
130
+ list: retList,
131
+ statistical: this.genStatistical(columns, retList, rawData),
132
+ pageShow: typeof showPage === 'undefined' ? realTotal > realPs : showPage
133
+ };
134
+ }));
135
+ }
136
+ get(item, col, idx) {
137
+ try {
138
+ const safeHtml = col.safeType === 'safeHtml';
139
+ if (col.format) {
140
+ const formatRes = col.format(item, col, idx) || '';
141
+ return {
142
+ text: formatRes,
143
+ _text: safeHtml ? this.dom.bypassSecurityTrustHtml(formatRes) : formatRes,
144
+ org: formatRes,
145
+ safeType: col.safeType
146
+ };
147
+ }
148
+ const value = deepGet(item, col.index, col.default);
149
+ let text = value;
150
+ let color;
151
+ switch (col.type) {
152
+ case 'no':
153
+ text = this.getNoIndex(item, col, idx);
154
+ break;
155
+ case 'img':
156
+ text = value ? `<img src="${value}" class="img">` : '';
157
+ break;
158
+ case 'number':
159
+ text = this.numberPipe.transform(value, col.numberDigits);
160
+ break;
161
+ case 'currency':
162
+ text = this.currencySrv.format(value, col.currency?.format);
163
+ break;
164
+ case 'date':
165
+ text = value === col.default ? col.default : this.datePipe.transform(value, col.dateFormat);
166
+ break;
167
+ case 'yn':
168
+ text = this.ynPipe.transform(value === col.yn.truth, col.yn.yes, col.yn.no, col.yn.mode, false);
169
+ break;
170
+ case 'enum':
171
+ text = col.enum[value];
172
+ break;
173
+ case 'tag':
174
+ case 'badge':
175
+ const data = col.type === 'tag' ? col.tag : col.badge;
176
+ if (data && data[text]) {
177
+ const dataItem = data[text];
178
+ text = dataItem.text;
179
+ color = dataItem.color;
180
+ }
181
+ else {
182
+ text = '';
183
+ }
184
+ break;
185
+ }
186
+ if (text == null)
187
+ text = '';
188
+ return {
189
+ text,
190
+ _text: safeHtml ? this.dom.bypassSecurityTrustHtml(text) : text,
191
+ org: value,
192
+ color,
193
+ safeType: col.safeType,
194
+ buttons: []
195
+ };
196
+ }
197
+ catch (ex) {
198
+ const text = `INVALID DATA`;
199
+ console.error(`Failed to get data`, item, col, ex);
200
+ return { text, _text: text, org: text, buttons: [], safeType: 'text' };
201
+ }
202
+ }
203
+ getByRemote(url, options) {
204
+ const { req, page, paginator, pi, ps, singleSort, multiSort, columns } = options;
205
+ const method = (req.method || 'GET').toUpperCase();
206
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
207
+ let params = {};
208
+ const reName = req.reName;
209
+ if (paginator) {
210
+ if (req.type === 'page') {
211
+ params = {
212
+ [reName.pi]: page.zeroIndexed ? pi - 1 : pi,
213
+ [reName.ps]: ps
214
+ };
215
+ }
216
+ else {
217
+ params = {
218
+ [reName.skip]: (pi - 1) * ps,
219
+ [reName.limit]: ps
220
+ };
221
+ }
222
+ }
223
+ params = {
224
+ ...params,
225
+ ...req.params,
226
+ ...this.getReqSortMap(singleSort, multiSort, columns),
227
+ ...this.getReqFilterMap(columns)
228
+ };
229
+ if (options.req.ignoreParamNull == true) {
230
+ Object.keys(params).forEach(key => {
231
+ if (params[key] == null)
232
+ delete params[key];
233
+ });
234
+ }
235
+ let reqOptions = {
236
+ params,
237
+ body: req.body,
238
+ headers: req.headers
239
+ };
240
+ if (method === 'POST' && req.allInBody === true) {
241
+ reqOptions = {
242
+ body: { ...req.body, ...params },
243
+ headers: req.headers
244
+ };
245
+ }
246
+ if (typeof req.process === 'function') {
247
+ reqOptions = req.process(reqOptions);
248
+ }
249
+ if (!(reqOptions.params instanceof HttpParams)) {
250
+ reqOptions.params = new HttpParams({ fromObject: reqOptions.params });
251
+ }
252
+ if (typeof options.customRequest === 'function') {
253
+ return options.customRequest({ method, url, options: reqOptions });
254
+ }
255
+ return this.http.request(method, url, reqOptions);
256
+ }
257
+ optimizeData(options) {
258
+ const { result, columns, rowClassName } = options;
259
+ for (let i = 0, len = result.length; i < len; i++) {
260
+ result[i]._values = columns.map(c => {
261
+ if (Array.isArray(c.buttons) && c.buttons.length > 0) {
262
+ return { buttons: this.genButtons(c.buttons, result[i], c), _text: '' };
263
+ }
264
+ return this.get(result[i], c, i);
265
+ });
266
+ result[i]._rowClassName = [rowClassName ? rowClassName(result[i], i) : null, result[i].className]
267
+ .filter(w => !!w)
268
+ .join(' ');
269
+ }
270
+ return result;
271
+ }
272
+ getNoIndex(item, col, idx) {
273
+ return typeof col.noIndex === 'function' ? col.noIndex(item, col, idx) : col.noIndex + idx;
274
+ }
275
+ genButtons(_btns, item, col) {
276
+ const fn = (btns) => {
277
+ return deepCopy(btns).filter(btn => {
278
+ const result = typeof btn.iif === 'function' ? btn.iif(item, btn, col) : true;
279
+ const isRenderDisabled = btn.iifBehavior === 'disabled';
280
+ btn._result = result;
281
+ btn._disabled = !result && isRenderDisabled;
282
+ if (btn.children?.length) {
283
+ btn.children = fn(btn.children);
284
+ }
285
+ return result || isRenderDisabled;
286
+ });
287
+ };
288
+ const res = fn(_btns);
289
+ const fnText = (btns) => {
290
+ for (const btn of btns) {
291
+ btn._text = typeof btn.text === 'function' ? btn.text(item, btn) : btn.text || '';
292
+ if (btn.children?.length) {
293
+ btn.children = fnText(btn.children);
294
+ }
295
+ }
296
+ return btns;
297
+ };
298
+ return this.fixMaxMultiple(fnText(res), col);
299
+ }
300
+ fixMaxMultiple(btns, col) {
301
+ const curCog = col.maxMultipleButton;
302
+ const btnSize = btns.length;
303
+ if (curCog == null || btnSize <= 0)
304
+ return btns;
305
+ const cog = {
306
+ ...this.cog.maxMultipleButton,
307
+ ...(typeof curCog === 'number' ? { count: curCog } : curCog)
308
+ };
309
+ if (cog.count >= btnSize)
310
+ return btns;
311
+ const newBtns = btns.slice(0, cog.count);
312
+ newBtns.push({ _text: cog.text, children: btns.slice(cog.count) });
313
+ return newBtns;
314
+ }
315
+ // #region sort
316
+ getValidSort(columns) {
317
+ return columns.filter(item => item._sort && item._sort.enabled && item._sort.default).map(item => item._sort);
318
+ }
319
+ getSorterFn(columns) {
320
+ const sortList = this.getValidSort(columns);
321
+ if (sortList.length === 0) {
322
+ return;
323
+ }
324
+ const sortItem = sortList[0];
325
+ if (sortItem.compare === null) {
326
+ return;
327
+ }
328
+ if (typeof sortItem.compare !== 'function') {
329
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
330
+ console.warn(`[st] Muse provide the compare function in sort`);
331
+ }
332
+ return;
333
+ }
334
+ return (a, b) => {
335
+ const result = sortItem.compare(a, b);
336
+ if (result !== 0) {
337
+ return sortItem.default === 'descend' ? -result : result;
338
+ }
339
+ return 0;
340
+ };
341
+ }
342
+ get nextSortTick() {
343
+ return ++this.sortTick;
344
+ }
345
+ getReqSortMap(singleSort, multiSort, columns) {
346
+ let ret = {};
347
+ const sortList = this.getValidSort(columns);
348
+ if (multiSort) {
349
+ const ms = {
350
+ key: 'sort',
351
+ separator: '-',
352
+ nameSeparator: '.',
353
+ keepEmptyKey: true,
354
+ arrayParam: false,
355
+ ...multiSort
356
+ };
357
+ const sortMap = sortList
358
+ .sort((a, b) => a.tick - b.tick)
359
+ .map(item => item.key + ms.nameSeparator + ((item.reName || {})[item.default] || item.default));
360
+ ret = { [ms.key]: ms.arrayParam ? sortMap : sortMap.join(ms.separator) };
361
+ return sortMap.length === 0 && ms.keepEmptyKey === false ? {} : ret;
362
+ }
363
+ if (sortList.length === 0)
364
+ return ret;
365
+ const mapData = sortList[0];
366
+ let sortFiled = mapData.key;
367
+ let sortValue = (sortList[0].reName || {})[mapData.default] || mapData.default;
368
+ if (singleSort) {
369
+ sortValue = sortFiled + (singleSort.nameSeparator || '.') + sortValue;
370
+ sortFiled = singleSort.key || 'sort';
371
+ }
372
+ ret[sortFiled] = sortValue;
373
+ return ret;
374
+ }
375
+ // #endregion
376
+ // #region filter
377
+ getFilteredData(filter) {
378
+ return filter.type === 'default' ? filter.menus.filter(f => f.checked === true) : filter.menus.slice(0, 1);
379
+ }
380
+ getReqFilterMap(columns) {
381
+ let ret = {};
382
+ columns
383
+ .filter(w => w.filter && w.filter.default === true)
384
+ .forEach(col => {
385
+ const filter = col.filter;
386
+ const values = this.getFilteredData(filter);
387
+ let obj = {};
388
+ if (filter.reName) {
389
+ obj = filter.reName(filter.menus, col);
390
+ }
391
+ else {
392
+ obj[filter.key] = values.map(i => i.value).join(',');
393
+ }
394
+ ret = { ...ret, ...obj };
395
+ });
396
+ return ret;
397
+ }
398
+ // #endregion
399
+ // #region statistical
400
+ genStatistical(columns, list, rawData) {
401
+ const res = {};
402
+ columns.forEach((col, index) => {
403
+ res[col.key || col.indexKey || index] =
404
+ col.statistical == null ? {} : this.getStatistical(col, index, list, rawData);
405
+ });
406
+ return res;
407
+ }
408
+ getStatistical(col, index, list, rawData) {
409
+ const val = col.statistical;
410
+ const item = {
411
+ digits: 2,
412
+ currency: undefined,
413
+ ...(typeof val === 'string' ? { type: val } : val)
414
+ };
415
+ let res = { value: 0 };
416
+ let currency = false;
417
+ if (typeof item.type === 'function') {
418
+ res = item.type(this.getValues(index, list), col, list, rawData);
419
+ currency = true;
420
+ }
421
+ else {
422
+ switch (item.type) {
423
+ case 'count':
424
+ res.value = list.length;
425
+ break;
426
+ case 'distinctCount':
427
+ res.value = this.getValues(index, list).filter((value, idx, self) => self.indexOf(value) === idx).length;
428
+ break;
429
+ case 'sum':
430
+ res.value = this.toFixed(this.getSum(index, list), item.digits);
431
+ currency = true;
432
+ break;
433
+ case 'average':
434
+ res.value = this.toFixed(this.getSum(index, list) / list.length, item.digits);
435
+ currency = true;
436
+ break;
437
+ case 'max':
438
+ res.value = Math.max(...this.getValues(index, list));
439
+ currency = true;
440
+ break;
441
+ case 'min':
442
+ res.value = Math.min(...this.getValues(index, list));
443
+ currency = true;
444
+ break;
445
+ }
446
+ }
447
+ if (item.currency === true || (item.currency == null && currency === true)) {
448
+ res.text = this.currencySrv.format(res.value, col.currency?.format);
449
+ }
450
+ else {
451
+ res.text = String(res.value);
452
+ }
453
+ return res;
454
+ }
455
+ toFixed(val, digits) {
456
+ if (isNaN(val) || !isFinite(val)) {
457
+ return 0;
458
+ }
459
+ return parseFloat(val.toFixed(digits));
460
+ }
461
+ getValues(index, list) {
462
+ return list.map(i => i._values[index].org).map(i => (i === '' || i == null ? 0 : i));
463
+ }
464
+ getSum(index, list) {
465
+ return this.getValues(index, list).reduce((p, i) => (p += parseFloat(String(i))), 0);
466
+ }
467
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: STDataSource, deps: [{ token: i1._HttpClient }, { token: i1.DatePipe, host: true }, { token: i1.YNPipe, host: true }, { token: i2.DecimalPipe, host: true }, { token: i3.CurrencyService }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
468
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: STDataSource }); }
469
+ }
470
+ export { STDataSource };
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: STDataSource, decorators: [{
472
+ type: Injectable
473
+ }], ctorParameters: function () { return [{ type: i1._HttpClient }, { type: i1.DatePipe, decorators: [{
474
+ type: Host
475
+ }] }, { type: i1.YNPipe, decorators: [{
476
+ type: Host
477
+ }] }, { type: i2.DecimalPipe, decorators: [{
478
+ type: Host
479
+ }] }, { type: i3.CurrencyService }, { type: i4.DomSanitizer }]; } });
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hYmMvc3Qvc3QtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQTBEdEQsTUFDYSxZQUFZO0lBSXZCLFlBQ1UsSUFBaUIsRUFDVCxRQUFrQixFQUNsQixNQUFjLEVBQ2QsVUFBdUIsRUFDL0IsV0FBNEIsRUFDNUIsR0FBaUI7UUFMakIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNULGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQWE7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFSbkIsYUFBUSxHQUFHLENBQUMsQ0FBQztJQVNsQixDQUFDO0lBRUosTUFBTSxDQUFDLEdBQWtCO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBNEI7UUFDbEMsSUFBSSxLQUEyQixDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN2RSxJQUFJLFFBQWdCLENB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QUk7OzBCQUNKLElBQUk7OzBCQUNKLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSG9zdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERhdGVQaXBlLCBZTlBpcGUsIF9IdHRwQ2xpZW50IH0gZnJvbSAnQGRlbG9uL3RoZW1lJztcbmltcG9ydCB0eXBlIHsgQWxhaW5TVENvbmZpZyB9IGZyb20gJ0BkZWxvbi91dGlsL2NvbmZpZyc7XG5pbXBvcnQgeyBDdXJyZW5jeVNlcnZpY2UgfSBmcm9tICdAZGVsb24vdXRpbC9mb3JtYXQnO1xuaW1wb3J0IHsgZGVlcENvcHksIGRlZXBHZXQgfSBmcm9tICdAZGVsb24vdXRpbC9vdGhlcic7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7XG4gIFNUQ29sdW1uLFxuICBTVENvbHVtbkZpbHRlcixcbiAgU1RDb2x1bW5GaWx0ZXJNZW51LFxuICBTVENvbHVtbk1heE11bHRpcGxlQnV0dG9uLFxuICBTVEN1c3RvbVJlcXVlc3RPcHRpb25zLFxuICBTVERhdGEsXG4gIFNUTXVsdGlTb3J0LFxuICBTVE11bHRpU29ydFJlc3VsdFR5cGUsXG4gIFNUUGFnZSxcbiAgU1RSZXEsXG4gIFNUUmVxUmVOYW1lVHlwZSxcbiAgU1RSZXF1ZXN0T3B0aW9ucyxcbiAgU1RSZXMsXG4gIFNUUm93Q2xhc3NOYW1lLFxuICBTVFNpbmdsZVNvcnQsXG4gIFNUU29ydE1hcCxcbiAgU1RTdGF0aXN0aWNhbCxcbiAgU1RTdGF0aXN0aWNhbFJlc3VsdCxcbiAgU1RTdGF0aXN0aWNhbFJlc3VsdHMsXG4gIFNUU3RhdGlzdGljYWxUeXBlXG59IGZyb20gJy4vc3QuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBfU1RDb2x1bW4sIF9TVENvbHVtbkJ1dHRvbiwgX1NURGF0YVZhbHVlIH0gZnJvbSAnLi9zdC50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1REYXRhU291cmNlT3B0aW9ucyB7XG4gIHBpOiBudW1iZXI7XG4gIHBzOiBudW1iZXI7XG4gIHBhZ2luYXRvcjogYm9vbGVhbjtcbiAgZGF0YTogc3RyaW5nIHwgU1REYXRhW10gfCBPYnNlcnZhYmxlPFNURGF0YVtdPjtcbiAgdG90YWw6IG51bWJlcjtcbiAgcmVxOiBTVFJlcTtcbiAgcmVzOiBTVFJlcztcbiAgcGFnZTogU1RQYWdlO1xuICBjb2x1bW5zOiBfU1RDb2x1bW5bXTtcbiAgc2luZ2xlU29ydD86IFNUU2luZ2xlU29ydCB8IG51bGw7XG4gIG11bHRpU29ydD86IFNUTXVsdGlTb3J0O1xuICByb3dDbGFzc05hbWU/OiBTVFJvd0NsYXNzTmFtZSB8IG51bGw7XG4gIGN1c3RvbVJlcXVlc3Q/OiAob3B0aW9uczogU1RDdXN0b21SZXF1ZXN0T3B0aW9ucykgPT4gT2JzZXJ2YWJsZTxOelNhZmVBbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNURGF0YVNvdXJjZVJlc3VsdCB7XG4gIC8qKiDmmK/lkKbpnIDopoHmmL7npLrliIbpobXlmaggKi9cbiAgcGFnZVNob3c6IGJvb2xlYW47XG4gIC8qKiDmlrAgYHBpYO+8jOiLpei/lOWbniBgdW5kZWZpbmVkYCDooajnpLrnlKjmiLflj5fmjqcgKi9cbiAgcGk6IG51bWJlcjtcbiAgLyoqIOaWsCBgcHNg77yM6Iul6L+U5ZueIGB1bmRlZmluZWRgIOihqOekuueUqOaIt+WPl+aOpyAqL1xuICBwczogbnVtYmVyO1xuICAvKiog5pawIGB0b3RhbGDvvIzoi6Xov5Tlm54gYHVuZGVmaW5lZGAg6KGo56S655So5oi35Y+X5o6nICovXG4gIHRvdGFsOiBudW1iZXI7XG4gIC8qKiDmlbDmja4gKi9cbiAgbGlzdDogU1REYXRhW107XG4gIC8qKiDnu5/orqHmlbDmja4gKi9cbiAgc3RhdGlzdGljYWw6IFNUU3RhdGlzdGljYWxSZXN1bHRzO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU1REYXRhU291cmNlIHtcbiAgcHJpdmF0ZSBjb2chOiBBbGFpblNUQ29uZmlnO1xuICBwcml2YXRlIHNvcnRUaWNrID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IF9IdHRwQ2xpZW50LFxuICAgIEBIb3N0KCkgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgQEhvc3QoKSBwcml2YXRlIHluUGlwZTogWU5QaXBlLFxuICAgIEBIb3N0KCkgcHJpdmF0ZSBudW1iZXJQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIGN1cnJlbmN5U3J2OiBDdXJyZW5jeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb206IERvbVNhbml0aXplclxuICApIHt9XG5cbiAgc2V0Q29nKHZhbDogQWxhaW5TVENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuY29nID0gdmFsO1xuICB9XG5cbiAgcHJvY2VzcyhvcHRpb25zOiBTVERhdGFTb3VyY2VPcHRpb25zKTogT2JzZXJ2YWJsZTxTVERhdGFTb3VyY2VSZXN1bHQ+IHtcbiAgICBsZXQgZGF0YSQ6IE9ic2VydmFibGU8U1REYXRhW10+O1xuICAgIGxldCBpc1JlbW90ZSA9IGZhbHNlO1xuICAgIGNvbnN0IHsgZGF0YSwgcmVzLCB0b3RhbCwgcGFnZSwgcGksIHBzLCBwYWdpbmF0b3IsIGNvbHVtbnMgfSA9IG9wdGlvbnM7XG4gICAgbGV0IHJldFRvdGFsOiBudW1iZXI7XG4gICAgbGV0IHJldFBzOiBudW1iZXI7XG4gICAgbGV0IHJldExpc3Q6IFNURGF0YVtdO1xuICAgIGxldCByZXRQaTogbnVtYmVyO1xuICAgIGxldCByYXdEYXRhOiBOelNhZmVBbnk7XG4gICAgbGV0IHNob3dQYWdlID0gcGFnZS5zaG93O1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaXNSZW1vdGUgPSB0cnVlO1xuICAgICAgZGF0YSQgPSB0aGlzLmdldEJ5UmVtb3RlKGRhdGEsIG9wdGlvbnMpLnBpcGUoXG4gICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgIHJhd0RhdGEgPSByZXN1bHQ7XG4gICAgICAgICAgbGV0IHJldDogU1REYXRhW107XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0ID0gcmVzdWx0O1xuICAgICAgICAgICAgcmV0VG90YWwgPSByZXQubGVuZ3RoO1xuICAgICAgICAgICAgcmV0UHMgPSByZXRUb3RhbDtcbiAgICAgICAgICAgIHNob3dQYWdlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlTmFtZSA9IHJlcy5yZU5hbWUhO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZU5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29uc3QgZm5SZXMgPSByZU5hbWUocmVzdWx0LCB7IHBpLCBwcywgdG90YWwgfSk7XG4gICAgICAgICAgICAgIHJldCA9IGZuUmVzLmxpc3Q7XG4gICAgICAgICAgICAgIHJldFRvdGFsID0gZm5SZXMudG90YWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBsaXN0XG4gICAgICAgICAgICAgIHJldCA9IGRlZXBHZXQocmVzdWx0LCByZU5hbWUubGlzdCBhcyBzdHJpbmdbXSwgW10pO1xuICAgICAgICAgICAgICBpZiAocmV0ID09IG51bGwgfHwgIUFycmF5LmlzQXJyYXkocmV0KSkge1xuICAgICAgICAgICAgICAgIHJldCA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIHRvdGFsXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFRvdGFsID0gcmVOYW1lLnRvdGFsICYmIGRlZXBHZXQocmVzdWx0LCByZU5hbWUudG90YWwgYXMgc3RyaW5nW10sIG51bGwpO1xuICAgICAgICAgICAgICByZXRUb3RhbCA9IHJlc3VsdFRvdGFsID09IG51bGwgPyB0b3RhbCB8fCAwIDogK3Jlc3VsdFRvdGFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGVlcENvcHkocmV0KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhJCA9IG9mKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhIGNvbGQgb2JzZXJ2YWJsZVxuICAgICAgZGF0YSQgPSBkYXRhO1xuICAgIH1cblxuICAgIGlmICghaXNSZW1vdGUpIHtcbiAgICAgIGRhdGEkID0gZGF0YSQucGlwZShcbiAgICAgICAgLy8gc29ydFxuICAgICAgICBtYXAoKHJlc3VsdDogU1REYXRhW10pID0+IHtcbiAgICAgICAgICByYXdEYXRhID0gcmVzdWx0O1xuICAgICAgICAgIGxldCBjb3B5UmVzdWx0ID0gZGVlcENvcHkocmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBzb3J0ZXJGbiA9IHRoaXMuZ2V0U29ydGVyRm4oY29sdW1ucyBhcyBfU1RDb2x1bW5bXSk7XG4gICAgICAgICAgaWYgKHNvcnRlckZuKSB7XG4gICAgICAgICAgICBjb3B5UmVzdWx0ID0gY29weVJlc3VsdC5zb3J0KHNvcnRlckZuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvcHlSZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgbWFwKChyZXN1bHQ6IFNURGF0YVtdKSA9PiB7XG4gICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcih3ID0+IHcuZmlsdGVyKVxuICAgICAgICAgICAgLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGMuZmlsdGVyITtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZERhdGEoZmlsdGVyKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgICAgY29uc3Qgb25GaWx0ZXIgPSBmaWx0ZXIuZm47XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25GaWx0ZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFtzdF0gTXVzZSBwcm92aWRlIHRoZSBmbiBmdW5jdGlvbiBpbiBmaWx0ZXJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIocmVjb3JkID0+IHZhbHVlcy5zb21lKHYgPT4gb25GaWx0ZXIodiwgcmVjb3JkKSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgICAgIC8vIHBhZ2luZ1xuICAgICAgICBtYXAoKHJlc3VsdDogU1REYXRhW10pID0+IHtcbiAgICAgICAgICBpZiAocGFnaW5hdG9yICYmIHBhZ2UuZnJvbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFBhZ2VJbmRleCA9IE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gcHMpO1xuICAgICAgICAgICAgcmV0UGkgPSBNYXRoLm1heCgxLCBwaSA+IG1heFBhZ2VJbmRleCA/IG1heFBhZ2VJbmRleCA6IHBpKTtcbiAgICAgICAgICAgIHJldFRvdGFsID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChwYWdlLnNob3cgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgocmV0UGkgLSAxKSAqIHBzLCByZXRQaSAqIHBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcHJlLXByb2Nlc3NcbiAgICBpZiAodHlwZW9mIHJlcy5wcm9jZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkYXRhJCA9IGRhdGEkLnBpcGUobWFwKHJlc3VsdCA9PiByZXMucHJvY2VzcyEocmVzdWx0LCByYXdEYXRhKSkpO1xuICAgIH1cblxuICAgIGRhdGEkID0gZGF0YSQucGlwZShtYXAocmVzdWx0ID0+IHRoaXMub3B0aW1pemVEYXRhKHsgcmVzdWx0LCBjb2x1bW5zLCByb3dDbGFzc05hbWU6IG9wdGlvbnMucm93Q2xhc3NOYW1lIH0pKSk7XG5cbiAgICByZXR1cm4gZGF0YSQucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXRMaXN0ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCByZWFsVG90YWwgPSByZXRUb3RhbCB8fCB0b3RhbDtcbiAgICAgICAgY29uc3QgcmVhbFBzID0gcmV0UHMgfHwgcHM7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwaTogcmV0UGksXG4gICAgICAgICAgcHM6IHJldFBzLFxuICAgICAgICAgIHRvdGFsOiByZXRUb3RhbCxcbiAgICAgICAgICBsaXN0OiByZXRMaXN0LFxuICAgICAgICAgIHN0YXRpc3RpY2FsOiB0aGlzLmdlblN0YXRpc3RpY2FsKGNvbHVtbnMgYXMgX1NUQ29sdW1uW10sIHJldExpc3QsIHJhd0RhdGEpLFxuICAgICAgICAgIHBhZ2VTaG93OiB0eXBlb2Ygc2hvd1BhZ2UgPT09ICd1bmRlZmluZWQnID8gcmVhbFRvdGFsID4gcmVhbFBzIDogc2hvd1BhZ2VcbiAgICAgICAgfSBhcyBTVERhdGFTb3VyY2VSZXN1bHQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldChpdGVtOiBTVERhdGEsIGNvbDogX1NUQ29sdW1uLCBpZHg6IG51bWJlcik6IF9TVERhdGFWYWx1ZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhZmVIdG1sID0gY29sLnNhZmVUeXBlID09PSAnc2FmZUh0bWwnO1xuICAgICAgaWYgKGNvbC5mb3JtYXQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0UmVzID0gY29sLmZvcm1hdChpdGVtLCBjb2wsIGlkeCkgfHwgJyc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogZm9ybWF0UmVzLFxuICAgICAgICAgIF90ZXh0OiBzYWZlSHRtbCA/IHRoaXMuZG9tLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGZvcm1hdFJlcykgOiBmb3JtYXRSZXMsXG4gICAgICAgICAgb3JnOiBmb3JtYXRSZXMsXG4gICAgICAgICAgc2FmZVR5cGU6IGNvbC5zYWZlVHlwZSFcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBkZWVwR2V0KGl0ZW0sIGNvbC5pbmRleCBhcyBzdHJpbmdbXSwgY29sLmRlZmF1bHQpO1xuXG4gICAgICBsZXQgdGV4dCA9IHZhbHVlO1xuICAgICAgbGV0IGNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBzd2l0Y2ggKGNvbC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ25vJzpcbiAgICAgICAgICB0ZXh0ID0gdGhpcy5nZXROb0luZGV4KGl0ZW0sIGNvbCwgaWR4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW1nJzpcbiAgICAgICAgICB0ZXh0ID0gdmFsdWUgPyBgPGltZyBzcmM9XCIke3ZhbHVlfVwiIGNsYXNzPVwiaW1nXCI+YCA6ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHRleHQgPSB0aGlzLm51bWJlclBpcGUudHJhbnNmb3JtKHZhbHVlLCBjb2wubnVtYmVyRGlnaXRzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICAgIHRleHQgPSB0aGlzLmN1cnJlbmN5U3J2LmZvcm1hdCh2YWx1ZSwgY29sLmN1cnJlbmN5Py5mb3JtYXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICB0ZXh0ID0gdmFsdWUgPT09IGNvbC5kZWZhdWx0ID8gY29sLmRlZmF1bHQgOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgY29sLmRhdGVGb3JtYXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5bic6XG4gICAgICAgICAgdGV4dCA9IHRoaXMueW5QaXBlLnRyYW5zZm9ybSh2YWx1ZSA9PT0gY29sLnluIS50cnV0aCwgY29sLnluIS55ZXMhLCBjb2wueW4hLm5vISwgY29sLnluIS5tb2RlISwgZmFsc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICB0ZXh0ID0gY29sLmVudW0hW3ZhbHVlXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGFnJzpcbiAgICAgICAgY2FzZSAnYmFkZ2UnOlxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBjb2wudHlwZSA9PT0gJ3RhZycgPyBjb2wudGFnIDogY29sLmJhZGdlO1xuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGFbdGV4dF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFJdGVtID0gZGF0YVt0ZXh0XTtcbiAgICAgICAgICAgIHRleHQgPSBkYXRhSXRlbS50ZXh0O1xuICAgICAgICAgICAgY29sb3IgPSBkYXRhSXRlbS5jb2xvcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHRleHQgPSAnJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQsXG4gICAgICAgIF90ZXh0OiBzYWZlSHRtbCA/IHRoaXMuZG9tLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRleHQpIDogdGV4dCxcbiAgICAgICAgb3JnOiB2YWx1ZSxcbiAgICAgICAgY29sb3IsXG4gICAgICAgIHNhZmVUeXBlOiBjb2wuc2FmZVR5cGUhLFxuICAgICAgICBidXR0b25zOiBbXVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc3QgdGV4dCA9IGBJTlZBTElEIERBVEFgO1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGdldCBkYXRhYCwgaXRlbSwgY29sLCBleCk7XG4gICAgICByZXR1cm4geyB0ZXh0LCBfdGV4dDogdGV4dCwgb3JnOiB0ZXh0LCBidXR0b25zOiBbXSwgc2FmZVR5cGU6ICd0ZXh0JyB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnlSZW1vdGUodXJsOiBzdHJpbmcsIG9wdGlvbnM6IFNURGF0YVNvdXJjZU9wdGlvbnMpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBjb25zdCB7IHJlcSwgcGFnZSwgcGFnaW5hdG9yLCBwaSwgcHMsIHNpbmdsZVNvcnQsIG11bHRpU29ydCwgY29sdW1ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBtZXRob2QgPSAocmVxLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGxldCBwYXJhbXM6IHsgW3BhcmFtOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnN0IHJlTmFtZSA9IHJlcS5yZU5hbWUgYXMgU1RSZXFSZU5hbWVUeXBlO1xuICAgIGlmIChwYWdpbmF0b3IpIHtcbiAgICAgIGlmIChyZXEudHlwZSA9PT0gJ3BhZ2UnKSB7XG4gICAgICAgIHBhcmFtcyA9IHtcbiAgICAgICAgICBbcmVOYW1lLnBpIGFzIHN0cmluZ106IHBhZ2UuemVyb0luZGV4ZWQgPyBwaSAtIDEgOiBwaSxcbiAgICAgICAgICBbcmVOYW1lLnBzIGFzIHN0cmluZ106IHBzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMgPSB7XG4gICAgICAgICAgW3JlTmFtZS5za2lwIGFzIHN0cmluZ106IChwaSAtIDEpICogcHMsXG4gICAgICAgICAgW3JlTmFtZS5saW1pdCBhcyBzdHJpbmddOiBwc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJhbXMgPSB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi5yZXEucGFyYW1zLFxuICAgICAgLi4udGhpcy5nZXRSZXFTb3J0TWFwKHNpbmdsZVNvcnQsIG11bHRpU29ydCwgY29sdW1ucyksXG4gICAgICAuLi50aGlzLmdldFJlcUZpbHRlck1hcChjb2x1bW5zKVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMucmVxLmlnbm9yZVBhcmFtTnVsbCA9PSB0cnVlKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHBhcmFtc1trZXldID09IG51bGwpIGRlbGV0ZSBwYXJhbXNba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCByZXFPcHRpb25zOiBTVFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgcGFyYW1zLFxuICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgIH07XG4gICAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnICYmIHJlcS5hbGxJbkJvZHkgPT09IHRydWUpIHtcbiAgICAgIHJlcU9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHk6IHsgLi4ucmVxLmJvZHksIC4uLnBhcmFtcyB9LFxuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXEucHJvY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxT3B0aW9ucyA9IHJlcS5wcm9jZXNzKHJlcU9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIShyZXFPcHRpb25zLnBhcmFtcyBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpKSB7XG4gICAgICByZXFPcHRpb25zLnBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHsgZnJvbU9iamVjdDogcmVxT3B0aW9ucy5wYXJhbXMgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jdXN0b21SZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jdXN0b21SZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIG9wdGlvbnM6IHJlcU9wdGlvbnMgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChtZXRob2QsIHVybCwgcmVxT3B0aW9ucyk7XG4gIH1cblxuICBvcHRpbWl6ZURhdGEob3B0aW9uczogeyBjb2x1bW5zOiBfU1RDb2x1bW5bXTsgcmVzdWx0OiBTVERhdGFbXTsgcm93Q2xhc3NOYW1lPzogU1RSb3dDbGFzc05hbWUgfCBudWxsIH0pOiBTVERhdGFbXSB7XG4gICAgY29uc3QgeyByZXN1bHQsIGNvbHVtbnMsIHJvd0NsYXNzTmFtZSB9ID0gb3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0uX3ZhbHVlcyA9IGNvbHVtbnMubWFwKGMgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjLmJ1dHRvbnMpICYmIGMuYnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYnV0dG9uczogdGhpcy5nZW5CdXR0b25zKGMuYnV0dG9ucywgcmVzdWx0W2ldLCBjKSwgX3RleHQ6ICcnIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXQocmVzdWx0W2ldLCBjLCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0W2ldLl9yb3dDbGFzc05hbWUgPSBbcm93Q2xhc3NOYW1lID8gcm93Q2xhc3NOYW1lKHJlc3VsdFtpXSwgaSkgOiBudWxsLCByZXN1bHRbaV0uY2xhc3NOYW1lXVxuICAgICAgICAuZmlsdGVyKHcgPT4gISF3KVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0Tm9JbmRleChpdGVtOiBTVERhdGEsIGNvbDogX1NUQ29sdW1uLCBpZHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb2wubm9JbmRleCA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5ub0luZGV4KGl0ZW0sIGNvbCwgaWR4KSA6IGNvbC5ub0luZGV4ISArIGlkeDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuQnV0dG9ucyhfYnRuczogX1NUQ29sdW1uQnV0dG9uW10sIGl0ZW06IFNURGF0YSwgY29sOiBTVENvbHVtbik6IF9TVENvbHVtbkJ1dHRvbltdIHtcbiAgICBjb25zdCBmbiA9IChidG5zOiBfU1RDb2x1bW5CdXR0b25bXSk6IF9TVENvbHVtbkJ1dHRvbltdID0+IHtcbiAgICAgIHJldHVybiBkZWVwQ29weShidG5zKS5maWx0ZXIoYnRuID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIGJ0bi5paWYgPT09ICdmdW5jdGlvbicgPyBidG4uaWlmKGl0ZW0sIGJ0biwgY29sKSA6IHRydWU7XG4gICAgICAgIGNvbnN0IGlzUmVuZGVyRGlzYWJsZWQgPSBidG4uaWlmQmVoYXZpb3IgPT09ICdkaXNhYmxlZCc7XG4gICAgICAgIGJ0bi5fcmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICBidG4uX2Rpc2FibGVkID0gIXJlc3VsdCAmJiBpc1JlbmRlckRpc2FibGVkO1xuICAgICAgICBpZiAoYnRuLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBidG4uY2hpbGRyZW4gPSBmbihidG4uY2hpbGRyZW4hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0IHx8IGlzUmVuZGVyRGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzID0gZm4oX2J0bnMpO1xuXG4gICAgY29uc3QgZm5UZXh0ID0gKGJ0bnM6IF9TVENvbHVtbkJ1dHRvbltdKTogX1NUQ29sdW1uQnV0dG9uW10gPT4ge1xuICAgICAgZm9yIChjb25zdCBidG4gb2YgYnRucykge1xuICAgICAgICBidG4uX3RleHQgPSB0eXBlb2YgYnRuLnRleHQgPT09ICdmdW5jdGlvbicgPyBidG4udGV4dChpdGVtLCBidG4pIDogYnRuLnRleHQgfHwgJyc7XG4gICAgICAgIGlmIChidG4uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGJ0bi5jaGlsZHJlbiA9IGZuVGV4dChidG4uY2hpbGRyZW4hKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJ0bnM7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmZpeE1heE11bHRpcGxlKGZuVGV4dChyZXMpLCBjb2wpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhNYXhNdWx0aXBsZShidG5zOiBfU1RDb2x1bW5CdXR0b25bXSwgY29sOiBTVENvbHVtbik6IF9TVENvbHVtbkJ1dHRvbltdIHtcbiAgICBjb25zdCBjdXJDb2cgPSBjb2wubWF4TXVsdGlwbGVCdXR0b247XG4gICAgY29uc3QgYnRuU2l6ZSA9IGJ0bnMubGVuZ3RoO1xuICAgIGlmIChjdXJDb2cgPT0gbnVsbCB8fCBidG5TaXplIDw9IDApIHJldHVybiBidG5zO1xuXG4gICAgY29uc3QgY29nOiBTVENvbHVtbk1heE11bHRpcGxlQnV0dG9uID0ge1xuICAgICAgLi4udGhpcy5jb2cubWF4TXVsdGlwbGVCdXR0b24sXG4gICAgICAuLi4odHlwZW9mIGN1ckNvZyA9PT0gJ251bWJlcicgPyB7IGNvdW50OiBjdXJDb2cgfSA6IGN1ckNvZylcbiAgICB9O1xuXG4gICAgaWYgKGNvZy5jb3VudCEgPj0gYnRuU2l6ZSkgcmV0dXJuIGJ0bnM7XG5cbiAgICBjb25zdCBuZXdCdG5zOiBfU1RDb2x1bW5CdXR0b25bXSA9IGJ0bnMuc2xpY2UoMCwgY29nLmNvdW50KTtcbiAgICBuZXdCdG5zLnB1c2goeyBfdGV4dDogY29nLnRleHQsIGNoaWxkcmVuOiBidG5zLnNsaWNlKGNvZy5jb3VudCkgfSk7XG4gICAgcmV0dXJuIG5ld0J0bnM7XG4gIH1cblxuICAvLyAjcmVnaW9uIHNvcnRcblxuICBwcml2YXRlIGdldFZhbGlkU29ydChjb2x1bW5zOiBfU1RDb2x1bW5bXSk6IFNUU29ydE1hcFtdIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLl9zb3J0ICYmIGl0ZW0uX3NvcnQuZW5hYmxlZCAmJiBpdGVtLl9zb3J0LmRlZmF1bHQpLm1hcChpdGVtID0+IGl0ZW0uX3NvcnQhKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydGVyRm4oY29sdW1uczogX1NUQ29sdW1uW10pOiAoKGE6IFNURGF0YSwgYjogU1REYXRhKSA9PiBudW1iZXIpIHwgdm9pZCB7XG4gICAgY29uc3Qgc29ydExpc3QgPSB0aGlzLmdldFZhbGlkU29ydChjb2x1bW5zKTtcbiAgICBpZiAoc29ydExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNvcnRJdGVtID0gc29ydExpc3RbMF07XG4gICAgaWYgKHNvcnRJdGVtLmNvbXBhcmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzb3J0SXRlbS5jb21wYXJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3N0XSBNdXNlIHByb3ZpZGUgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaW4gc29ydGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiAoYTogU1REYXRhLCBiOiBTVERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNvcnRJdGVtLmNvbXBhcmUhKGEsIGIpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gc29ydEl0ZW0uZGVmYXVsdCA9PT0gJ2Rlc2NlbmQnID8gLXJlc3VsdCA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gIH1cblxuICBnZXQgbmV4dFNvcnRUaWNrKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICsrdGhpcy5zb3J0VGljaztcbiAgfVxuXG4gIGdldFJlcVNvcnRNYXAoXG4gICAgc2luZ2xlU29ydDogU1RTaW5nbGVTb3J0IHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgICBtdWx0aVNvcnQ6IFNUTXVsdGlTb3J0IHwgdW5kZWZpbmVkLFxuICAgIGNvbHVtbnM6IF9TVENvbHVtbltdXG4gICk6IFNUTXVsdGlTb3J0UmVzdWx0VHlwZSB7XG4gICAgbGV0IHJldDogU1RNdWx0aVNvcnRSZXN1bHRUeXBlID0ge307XG4gICAgY29uc3Qgc29ydExpc3QgPSB0aGlzLmdldFZhbGlkU29ydChjb2x1bW5zKTtcblxuICAgIGlmIChtdWx0aVNvcnQpIHtcbiAgICAgIGNvbnN0IG1zOiBTVE11bHRpU29ydCA9IHtcbiAgICAgICAga2V5OiAnc29ydCcsXG4gICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICBuYW1lU2VwYXJhdG9yOiAnLicsXG4gICAgICAgIGtlZXBFbXB0eUtleTogdHJ1ZSxcbiAgICAgICAgYXJyYXlQYXJhbTogZmFsc2UsXG4gICAgICAgIC4uLm11bHRpU29ydFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc29ydE1hcCA9IHNvcnRMaXN0XG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpY2sgLSBiLnRpY2spXG4gICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLmtleSEgKyBtcy5uYW1lU2VwYXJhdG9yICsgKChpdGVtLnJlTmFtZSB8fCB7fSlbaXRlbS5kZWZhdWx0IV0gfHwgaXRlbS5kZWZhdWx0KSk7XG5cbiAgICAgIHJldCA9IHsgW21zLmtleSFdOiBtcy5hcnJheVBhcmFtID8gc29ydE1hcCA6IHNvcnRNYXAuam9pbihtcy5zZXBhcmF0b3IpIH07XG5cbiAgICAgIHJldHVybiBzb3J0TWFwLmxlbmd0aCA9PT0gMCAmJiBtcy5rZWVwRW1wdHlLZXkgPT09IGZhbHNlID8ge30gOiByZXQ7XG4gICAgfVxuXG4gICAgaWYgKHNvcnRMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcblxuICAgIGNvbnN0IG1hcERhdGEgPSBzb3J0TGlzdFswXTtcbiAgICBsZXQgc29ydEZpbGVkID0gbWFwRGF0YS5rZXk7XG4gICAgbGV0IHNvcnRWYWx1ZSA9IChzb3J0TGlzdFswXS5yZU5hbWUgfHwge30pW21hcERhdGEuZGVmYXVsdCFdIHx8IG1hcERhdGEuZGVmYXVsdDtcbiAgICBpZiAoc2luZ2xlU29ydCkge1xuICAgICAgc29ydFZhbHVlID0gc29ydEZpbGVkICsgKHNpbmdsZVNvcnQubmFtZVNlcGFyYXRvciB8fCAnLicpICsgc29ydFZhbHVlO1xuICAgICAgc29ydEZpbGVkID0gc2luZ2xlU29ydC5rZXkgfHwgJ3NvcnQnO1xuICAgIH1cbiAgICByZXRbc29ydEZpbGVkIGFzIHN0cmluZ10gPSBzb3J0VmFsdWUgYXMgc3RyaW5nO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBmaWx0ZXJcblxuICBwcml2YXRlIGdldEZpbHRlcmVkRGF0YShmaWx0ZXI6IFNUQ29sdW1uRmlsdGVyKTogU1RDb2x1bW5GaWx0ZXJNZW51W10ge1xuICAgIHJldHVybiBmaWx0ZXIudHlwZSA9PT0gJ2RlZmF1bHQnID8gZmlsdGVyLm1lbnVzIS5maWx0ZXIoZiA9PiBmLmNoZWNrZWQgPT09IHRydWUpIDogZmlsdGVyLm1lbnVzIS5zbGljZSgwLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxRmlsdGVyTWFwKGNvbHVtbnM6IF9TVENvbHVtbltdKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgbGV0IHJldCA9IHt9O1xuICAgIGNvbHVtbnNcbiAgICAgIC5maWx0ZXIodyA9PiB3LmZpbHRlciAmJiB3LmZpbHRlci5kZWZhdWx0ID09PSB0cnVlKVxuICAgICAgLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gY29sLmZpbHRlciE7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0RmlsdGVyZWREYXRhKGZpbHRlcik7XG4gICAgICAgIGxldCBvYmo6IHsgW2tleTogc3RyaW5nXTogTnpTYWZlQW55IH0gPSB7fTtcbiAgICAgICAgaWYgKGZpbHRlci5yZU5hbWUpIHtcbiAgICAgICAgICBvYmogPSBmaWx0ZXIucmVOYW1lIShmaWx0ZXIubWVudXMhLCBjb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtmaWx0ZXIua2V5IV0gPSB2YWx1ZXMubWFwKGkgPT4gaS52YWx1ZSkuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldCA9IHsgLi4ucmV0LCAuLi5vYmogfTtcbiAgICAgIH0pO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBzdGF0aXN0aWNhbFxuXG4gIHByaXZhdGUgZ2VuU3RhdGlzdGljYWwoY29sdW1uczogX1NUQ29sdW1uW10sIGxpc3Q6IFNURGF0YVtdLCByYXdEYXRhOiBOelNhZmVBbnkpOiBTVFN0YXRpc3RpY2FsUmVzdWx0cyB7XG4gICAgY29uc3QgcmVzOiB7IFtrZXk6IHN0cmluZ106IE56U2FmZUFueSB9ID0ge307XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICByZXNbY29sLmtleSB8fCBjb2wuaW5kZXhLZXkgfHwgaW5kZXhdID1cbiAgICAgICAgY29sLnN0YXRpc3RpY2FsID09IG51bGwgPyB7fSA6IHRoaXMuZ2V0U3RhdGlzdGljYWwoY29sLCBpbmRleCwgbGlzdCwgcmF3RGF0YSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdGlzdGljYWwoY29sOiBfU1RDb2x1bW4sIGluZGV4OiBudW1iZXIsIGxpc3Q6IFNURGF0YVtdLCByYXdEYXRhOiBOelNhZmVBbnkpOiBTVFN0YXRpc3RpY2FsUmVzdWx0IHtcbiAgICBjb25zdCB2YWwgPSBjb2wuc3RhdGlzdGljYWw7XG4gICAgY29uc3QgaXRlbTogU1RTdGF0aXN0aWNhbCA9IHtcbiAgICAgIGRpZ2l0czogMixcbiAgICAgIGN1cnJlbmN5OiB1bmRlZmluZWQsXG4gICAgICAuLi4odHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB7IHR5cGU6IHZhbCBhcyBTVFN0YXRpc3RpY2FsVHlwZSB9IDogKHZhbCBhcyBTVFN0YXRpc3RpY2FsKSlcbiAgICB9O1xuICAgIGxldCByZXM6IFNUU3RhdGlzdGljYWxSZXN1bHQgPSB7IHZhbHVlOiAwIH07XG4gICAgbGV0IGN1cnJlbmN5ID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcyA9IGl0ZW0udHlwZSh0aGlzLmdldFZhbHVlcyhpbmRleCwgbGlzdCksIGNvbCwgbGlzdCwgcmF3RGF0YSk7XG4gICAgICBjdXJyZW5jeSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvdW50JzpcbiAgICAgICAgICByZXMudmFsdWUgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGlzdGluY3RDb3VudCc6XG4gICAgICAgICAgcmVzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZXMoaW5kZXgsIGxpc3QpLmZpbHRlcigodmFsdWUsIGlkeCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaWR4KS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1bSc6XG4gICAgICAgICAgcmVzLnZhbHVlID0gdGhpcy50b0ZpeGVkKHRoaXMuZ2V0U3VtKGluZGV4LCBsaXN0KSwgaXRlbS5kaWdpdHMhKTtcbiAgICAgICAgICBjdXJyZW5jeSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2ZXJhZ2UnOlxuICAgICAgICAgIHJlcy52YWx1ZSA9IHRoaXMudG9GaXhlZCh0aGlzLmdldFN1bShpbmRleCwgbGlzdCkgLyBsaXN0Lmxlbmd0aCwgaXRlbS5kaWdpdHMhKTtcbiAgICAgICAgICBjdXJyZW5jeSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgcmVzLnZhbHVlID0gTWF0aC5tYXgoLi4udGhpcy5nZXRWYWx1ZXMoaW5kZXgsIGxpc3QpKTtcbiAgICAgICAgICBjdXJyZW5jeSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgcmVzLnZhbHVlID0gTWF0aC5taW4oLi4udGhpcy5nZXRWYWx1ZXMoaW5kZXgsIGxpc3QpKTtcbiAgICAgICAgICBjdXJyZW5jeSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdGVtLmN1cnJlbmN5ID09PSB0cnVlIHx8IChpdGVtLmN1cnJlbmN5ID09IG51bGwgJiYgY3VycmVuY3kgPT09IHRydWUpKSB7XG4gICAgICByZXMudGV4dCA9IHRoaXMuY3VycmVuY3lTcnYuZm9ybWF0KHJlcy52YWx1ZSwgY29sLmN1cnJlbmN5Py5mb3JtYXQpIGFzIHN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnRleHQgPSBTdHJpbmcocmVzLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgdG9GaXhlZCh2YWw6IG51bWJlciwgZGlnaXRzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChpc05hTih2YWwpIHx8ICFpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsLnRvRml4ZWQoZGlnaXRzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlcyhpbmRleDogbnVtYmVyLCBsaXN0OiBTVERhdGFbXSk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoaSA9PiBpLl92YWx1ZXNbaW5kZXhdLm9yZykubWFwKGkgPT4gKGkgPT09ICcnIHx8IGkgPT0gbnVsbCA/IDAgOiBpKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN1bShpbmRleDogbnVtYmVyLCBsaXN0OiBTVERhdGFbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVzKGluZGV4LCBsaXN0KS5yZWR1Y2UoKHAsIGkpID0+IChwICs9IHBhcnNlRmxvYXQoU3RyaW5nKGkpKSksIDApO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuIl19