obsidian-dev-utils 65.0.0 → 66.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 (402) hide show
  1. package/CHANGELOG.md +36 -8
  2. package/dist/dev/main.js +4892 -4807
  3. package/dist/lib/cjs/async-events.cjs +15 -18
  4. package/dist/lib/cjs/async-events.d.cts +19 -19
  5. package/dist/lib/cjs/async.cjs +1 -1
  6. package/dist/lib/cjs/async.d.cts +9 -8
  7. package/dist/lib/cjs/function.cjs +1 -1
  8. package/dist/lib/cjs/function.d.cts +43 -3
  9. package/dist/lib/cjs/library.cjs +1 -1
  10. package/dist/lib/cjs/obsidian/@types/dataview/typings/obsidian-ex.d.cts +1 -1
  11. package/dist/lib/cjs/obsidian/async-with-notice.cjs +1 -1
  12. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +2 -2
  13. package/dist/lib/cjs/obsidian/{plugin/components → components}/abort-signal-component.cjs +4 -4
  14. package/dist/lib/cjs/obsidian/{plugin/components → components}/abort-signal-component.d.cts +2 -2
  15. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +201 -0
  16. package/dist/lib/{esm/obsidian/components/all-windows-event-handler.d.mts → cjs/obsidian/components/all-windows-event-component.d.cts} +6 -7
  17. package/dist/lib/cjs/obsidian/components/async-component.cjs +3 -2
  18. package/dist/lib/cjs/obsidian/components/async-component.d.cts +2 -1
  19. package/dist/lib/cjs/obsidian/{plugin/components → components}/async-error-handler-component.cjs +5 -5
  20. package/dist/lib/cjs/obsidian/{plugin/components → components}/async-error-handler-component.d.cts +2 -2
  21. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +3 -2
  22. package/dist/lib/cjs/obsidian/components/async-events-component.d.cts +2 -1
  23. package/dist/lib/cjs/obsidian/{plugin/components → components}/console-debug-component.cjs +4 -4
  24. package/dist/lib/cjs/obsidian/{plugin/components → components}/console-debug-component.d.cts +2 -2
  25. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +160 -0
  26. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +34 -0
  27. package/dist/lib/cjs/obsidian/{plugin/components → components}/i18n-component.cjs +4 -4
  28. package/dist/lib/cjs/obsidian/{plugin/components → components}/i18n-component.d.cts +2 -2
  29. package/dist/lib/cjs/obsidian/components/index.cjs +40 -7
  30. package/dist/lib/cjs/obsidian/components/index.d.cts +13 -2
  31. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +185 -0
  32. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +47 -0
  33. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +172 -0
  34. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +41 -0
  35. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +197 -0
  36. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +113 -0
  37. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-context-component.cjs +6 -6
  38. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-context-component.d.cts +2 -2
  39. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-notice-component.cjs +3 -2
  40. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-notice-component.d.cts +2 -2
  41. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +534 -0
  42. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-settings-component.d.cts +6 -21
  43. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-settings-tab-component.cjs +3 -2
  44. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-settings-tab-component.d.cts +5 -5
  45. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.cjs +20 -16
  46. package/dist/lib/cjs/obsidian/dataview.cjs +1 -1
  47. package/dist/lib/cjs/obsidian/dataview.d.cts +1 -1
  48. package/dist/lib/cjs/obsidian/index.cjs +7 -4
  49. package/dist/lib/cjs/obsidian/index.d.cts +2 -1
  50. package/dist/lib/cjs/obsidian/loop.cjs +1 -1
  51. package/dist/lib/cjs/obsidian/loop.d.cts +2 -2
  52. package/dist/lib/cjs/obsidian/markdown.cjs +13 -7
  53. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -50
  54. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -35
  55. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -1
  56. package/dist/lib/cjs/obsidian/modals/prompt.d.cts +1 -1
  57. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -1
  58. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -1
  59. package/dist/lib/cjs/obsidian/path-settings.cjs +239 -0
  60. package/dist/lib/cjs/obsidian/plugin/index.cjs +1 -7
  61. package/dist/lib/cjs/obsidian/plugin/index.d.cts +0 -2
  62. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +4 -4
  63. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +5 -5
  64. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +40 -34
  65. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +16 -13
  66. package/dist/lib/cjs/obsidian/queue.cjs +1 -1
  67. package/dist/lib/cjs/obsidian/queue.d.cts +2 -2
  68. package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +19 -12
  69. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +209 -0
  70. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/checkbox-component.d.cts +1 -1
  71. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +356 -0
  72. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/code-highlighter-component.d.cts +1 -1
  73. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-component.cjs +3 -3
  74. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-time-component.cjs +3 -3
  75. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/email-component.cjs +2 -2
  76. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/file-component.cjs +2 -2
  77. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/index.cjs +1 -1
  78. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/month-component.cjs +3 -3
  79. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +241 -0
  80. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-dropdown-component.d.cts +1 -1
  81. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-email-component.cjs +2 -2
  82. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-file-component.cjs +3 -3
  83. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +254 -0
  84. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-text-component.d.cts +1 -1
  85. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/number-component.cjs +2 -2
  86. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/password-component.cjs +2 -2
  87. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/setting-component-wrapper.cjs +4 -4
  88. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/telephone-component.cjs +2 -2
  89. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/text-based-component.cjs +1 -1
  90. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/time-component.cjs +2 -2
  91. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +210 -0
  92. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/tri-state-checkbox-component.d.cts +1 -1
  93. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +247 -0
  94. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-dropdown-component.d.cts +1 -1
  95. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +249 -0
  96. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-multiple-dropdown-component.d.cts +1 -1
  97. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-range-text-component.cjs +1 -1
  98. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +224 -0
  99. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-text-component.d.cts +2 -2
  100. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/url-component.cjs +2 -2
  101. package/dist/lib/cjs/obsidian/setting-components/validator-component.cjs +226 -0
  102. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/validator-component.d.cts +1 -1
  103. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.cjs +1 -1
  104. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/week-component.cjs +3 -3
  105. package/dist/lib/cjs/obsidian/setting-ex.cjs +21 -21
  106. package/dist/lib/cjs/obsidian/setting-ex.d.cts +20 -20
  107. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +1 -1
  108. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +2 -2
  109. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +2 -1
  110. package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +2 -2
  111. package/dist/lib/cjs/type.cjs +1 -1
  112. package/dist/lib/esm/async-events.d.mts +19 -19
  113. package/dist/lib/esm/async-events.mjs +15 -18
  114. package/dist/lib/esm/async.d.mts +9 -8
  115. package/dist/lib/esm/async.mjs +1 -1
  116. package/dist/lib/esm/function.d.mts +43 -3
  117. package/dist/lib/esm/function.mjs +1 -1
  118. package/dist/lib/esm/library.mjs +1 -1
  119. package/dist/lib/esm/obsidian/@types/dataview/typings/obsidian-ex.d.mts +1 -1
  120. package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
  121. package/dist/lib/esm/obsidian/async-with-notice.mjs +1 -1
  122. package/dist/lib/esm/obsidian/{plugin/components → components}/abort-signal-component.d.mts +2 -2
  123. package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +59 -0
  124. package/dist/lib/{cjs/obsidian/components/all-windows-event-handler.d.cts → esm/obsidian/components/all-windows-event-component.d.mts} +6 -7
  125. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +93 -0
  126. package/dist/lib/esm/obsidian/components/async-component.d.mts +2 -1
  127. package/dist/lib/esm/obsidian/components/async-component.mjs +3 -2
  128. package/dist/lib/esm/obsidian/{plugin/components → components}/async-error-handler-component.d.mts +2 -2
  129. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +62 -0
  130. package/dist/lib/esm/obsidian/components/async-events-component.d.mts +2 -1
  131. package/dist/lib/esm/obsidian/components/async-events-component.mjs +3 -2
  132. package/dist/lib/esm/obsidian/{plugin/components → components}/console-debug-component.d.mts +2 -2
  133. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +56 -0
  134. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +34 -0
  135. package/dist/lib/esm/obsidian/components/disposable-component.mjs +50 -0
  136. package/dist/lib/esm/obsidian/{plugin/components → components}/i18n-component.d.mts +2 -2
  137. package/dist/lib/esm/obsidian/components/i18n-component.mjs +53 -0
  138. package/dist/lib/esm/obsidian/components/index.d.mts +13 -2
  139. package/dist/lib/esm/obsidian/components/index.mjs +27 -5
  140. package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +47 -0
  141. package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +76 -0
  142. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +41 -0
  143. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +64 -0
  144. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +113 -0
  145. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +87 -0
  146. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-context-component.d.mts +2 -2
  147. package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +61 -0
  148. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-notice-component.d.mts +2 -2
  149. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +58 -0
  150. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-settings-component.d.mts +6 -21
  151. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +433 -0
  152. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-settings-tab-component.d.mts +5 -5
  153. package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +50 -0
  154. package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.mjs +20 -16
  155. package/dist/lib/esm/obsidian/dataview.d.mts +1 -1
  156. package/dist/lib/esm/obsidian/dataview.mjs +1 -1
  157. package/dist/lib/esm/obsidian/index.d.mts +2 -1
  158. package/dist/lib/esm/obsidian/index.mjs +5 -3
  159. package/dist/lib/esm/obsidian/loop.d.mts +2 -2
  160. package/dist/lib/esm/obsidian/loop.mjs +1 -1
  161. package/dist/lib/esm/obsidian/markdown.mjs +13 -7
  162. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -35
  163. package/dist/lib/esm/obsidian/menu-event-registrar.mjs +1 -42
  164. package/dist/lib/esm/obsidian/modals/prompt.d.mts +1 -1
  165. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -1
  166. package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
  167. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -1
  168. package/dist/lib/esm/obsidian/path-settings.mjs +135 -0
  169. package/dist/lib/esm/obsidian/plugin/index.d.mts +0 -2
  170. package/dist/lib/esm/obsidian/plugin/index.mjs +1 -5
  171. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +5 -5
  172. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +4 -4
  173. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +16 -13
  174. package/dist/lib/esm/obsidian/plugin/plugin.mjs +40 -34
  175. package/dist/lib/esm/obsidian/queue.d.mts +2 -2
  176. package/dist/lib/esm/obsidian/queue.mjs +1 -1
  177. package/dist/lib/esm/obsidian/rename-delete-handler.mjs +22 -12
  178. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/checkbox-component.d.mts +1 -1
  179. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +101 -0
  180. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/code-highlighter-component.d.mts +1 -1
  181. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +254 -0
  182. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +62 -0
  183. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +62 -0
  184. package/dist/lib/esm/obsidian/setting-components/email-component.mjs +72 -0
  185. package/dist/lib/esm/obsidian/setting-components/file-component.mjs +66 -0
  186. package/dist/lib/esm/obsidian/setting-components/index.mjs +78 -0
  187. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +70 -0
  188. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-dropdown-component.d.mts +1 -1
  189. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +136 -0
  190. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +59 -0
  191. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +68 -0
  192. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-text-component.d.mts +1 -1
  193. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +149 -0
  194. package/dist/lib/esm/obsidian/setting-components/number-component.mjs +82 -0
  195. package/dist/lib/esm/obsidian/setting-components/password-component.mjs +58 -0
  196. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +45 -0
  197. package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +72 -0
  198. package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +58 -0
  199. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +67 -0
  200. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/tri-state-checkbox-component.d.mts +1 -1
  201. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +102 -0
  202. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-dropdown-component.d.mts +1 -1
  203. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +142 -0
  204. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-multiple-dropdown-component.d.mts +1 -1
  205. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +141 -0
  206. package/dist/lib/esm/obsidian/setting-components/typed-range-text-component.mjs +60 -0
  207. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-text-component.d.mts +2 -2
  208. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +119 -0
  209. package/dist/lib/esm/obsidian/setting-components/url-component.mjs +72 -0
  210. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/validator-component.d.mts +1 -1
  211. package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +127 -0
  212. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +70 -0
  213. package/dist/lib/esm/obsidian/setting-ex.d.mts +20 -20
  214. package/dist/lib/esm/obsidian/setting-ex.mjs +21 -21
  215. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +2 -2
  216. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
  217. package/dist/lib/esm/script-utils/linters/eslint-config.d.mts +2 -2
  218. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +2 -1
  219. package/dist/lib/esm/type.mjs +1 -1
  220. package/obsidian/Components/abort-signal-component/package.json +6 -0
  221. package/obsidian/Components/{all-windows-event-handler → all-windows-event-component}/package.json +3 -3
  222. package/obsidian/Components/async-error-handler-component/package.json +6 -0
  223. package/obsidian/Components/console-debug-component/package.json +6 -0
  224. package/obsidian/Components/disposable-component/package.json +6 -0
  225. package/obsidian/Components/i18n-component/package.json +6 -0
  226. package/obsidian/Components/layout-ready-component/package.json +6 -0
  227. package/obsidian/Components/menu-event-registrar-component/package.json +6 -0
  228. package/obsidian/Components/monkey-around-component/package.json +6 -0
  229. package/obsidian/Components/plugin-context-component/package.json +6 -0
  230. package/obsidian/Components/plugin-notice-component/package.json +6 -0
  231. package/obsidian/Components/plugin-settings-component/package.json +6 -0
  232. package/obsidian/Components/plugin-settings-tab-component/package.json +6 -0
  233. package/obsidian/path-settings/package.json +6 -0
  234. package/obsidian/setting-components/checkbox-component/package.json +6 -0
  235. package/obsidian/setting-components/code-highlighter-component/package.json +6 -0
  236. package/obsidian/setting-components/date-component/package.json +6 -0
  237. package/obsidian/setting-components/date-time-component/package.json +6 -0
  238. package/obsidian/setting-components/email-component/package.json +6 -0
  239. package/obsidian/setting-components/file-component/package.json +6 -0
  240. package/obsidian/setting-components/index/package.json +6 -0
  241. package/obsidian/setting-components/month-component/package.json +6 -0
  242. package/obsidian/setting-components/multiple-dropdown-component/package.json +6 -0
  243. package/obsidian/setting-components/multiple-email-component/package.json +6 -0
  244. package/obsidian/setting-components/multiple-file-component/package.json +6 -0
  245. package/obsidian/setting-components/multiple-text-component/package.json +6 -0
  246. package/obsidian/setting-components/number-component/package.json +6 -0
  247. package/obsidian/setting-components/package.json +6 -0
  248. package/obsidian/setting-components/password-component/package.json +6 -0
  249. package/obsidian/setting-components/setting-component-wrapper/package.json +6 -0
  250. package/obsidian/setting-components/telephone-component/package.json +6 -0
  251. package/obsidian/setting-components/text-based-component/package.json +6 -0
  252. package/obsidian/setting-components/time-component/package.json +6 -0
  253. package/obsidian/setting-components/tri-state-checkbox-component/package.json +6 -0
  254. package/obsidian/setting-components/typed-dropdown-component/package.json +6 -0
  255. package/obsidian/setting-components/typed-multiple-dropdown-component/package.json +6 -0
  256. package/obsidian/setting-components/typed-range-text-component/package.json +6 -0
  257. package/obsidian/setting-components/typed-text-component/package.json +6 -0
  258. package/obsidian/setting-components/url-component/package.json +6 -0
  259. package/obsidian/setting-components/validator-component/package.json +6 -0
  260. package/obsidian/setting-components/value-component-with-change-tracking/package.json +6 -0
  261. package/obsidian/setting-components/week-component/package.json +6 -0
  262. package/package.json +23 -43
  263. package/dist/lib/cjs/obsidian/components/all-windows-event-handler.cjs +0 -196
  264. package/dist/lib/cjs/obsidian/components/setting-components/checkbox-component.cjs +0 -209
  265. package/dist/lib/cjs/obsidian/components/setting-components/code-highlighter-component.cjs +0 -356
  266. package/dist/lib/cjs/obsidian/components/setting-components/multiple-dropdown-component.cjs +0 -241
  267. package/dist/lib/cjs/obsidian/components/setting-components/multiple-text-component.cjs +0 -254
  268. package/dist/lib/cjs/obsidian/components/setting-components/tri-state-checkbox-component.cjs +0 -210
  269. package/dist/lib/cjs/obsidian/components/setting-components/typed-dropdown-component.cjs +0 -247
  270. package/dist/lib/cjs/obsidian/components/setting-components/typed-multiple-dropdown-component.cjs +0 -249
  271. package/dist/lib/cjs/obsidian/components/setting-components/typed-text-component.cjs +0 -224
  272. package/dist/lib/cjs/obsidian/components/setting-components/validator-component.cjs +0 -226
  273. package/dist/lib/cjs/obsidian/monkey-around.cjs +0 -177
  274. package/dist/lib/cjs/obsidian/monkey-around.d.cts +0 -62
  275. package/dist/lib/cjs/obsidian/plugin/components/index.cjs +0 -170
  276. package/dist/lib/cjs/obsidian/plugin/components/index.d.cts +0 -9
  277. package/dist/lib/cjs/obsidian/plugin/components/layout-ready-component.cjs +0 -124
  278. package/dist/lib/cjs/obsidian/plugin/components/layout-ready-component.d.cts +0 -18
  279. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.cjs +0 -563
  280. package/dist/lib/cjs/obsidian/plugin/path-settings.cjs +0 -239
  281. package/dist/lib/esm/obsidian/components/all-windows-event-handler.mjs +0 -88
  282. package/dist/lib/esm/obsidian/components/setting-components/checkbox-component.mjs +0 -101
  283. package/dist/lib/esm/obsidian/components/setting-components/code-highlighter-component.mjs +0 -254
  284. package/dist/lib/esm/obsidian/components/setting-components/date-component.mjs +0 -62
  285. package/dist/lib/esm/obsidian/components/setting-components/date-time-component.mjs +0 -62
  286. package/dist/lib/esm/obsidian/components/setting-components/email-component.mjs +0 -72
  287. package/dist/lib/esm/obsidian/components/setting-components/file-component.mjs +0 -66
  288. package/dist/lib/esm/obsidian/components/setting-components/index.mjs +0 -78
  289. package/dist/lib/esm/obsidian/components/setting-components/month-component.mjs +0 -70
  290. package/dist/lib/esm/obsidian/components/setting-components/multiple-dropdown-component.mjs +0 -136
  291. package/dist/lib/esm/obsidian/components/setting-components/multiple-email-component.mjs +0 -59
  292. package/dist/lib/esm/obsidian/components/setting-components/multiple-file-component.mjs +0 -68
  293. package/dist/lib/esm/obsidian/components/setting-components/multiple-text-component.mjs +0 -149
  294. package/dist/lib/esm/obsidian/components/setting-components/number-component.mjs +0 -82
  295. package/dist/lib/esm/obsidian/components/setting-components/password-component.mjs +0 -58
  296. package/dist/lib/esm/obsidian/components/setting-components/setting-component-wrapper.mjs +0 -45
  297. package/dist/lib/esm/obsidian/components/setting-components/telephone-component.mjs +0 -72
  298. package/dist/lib/esm/obsidian/components/setting-components/text-based-component.mjs +0 -58
  299. package/dist/lib/esm/obsidian/components/setting-components/time-component.mjs +0 -67
  300. package/dist/lib/esm/obsidian/components/setting-components/tri-state-checkbox-component.mjs +0 -102
  301. package/dist/lib/esm/obsidian/components/setting-components/typed-dropdown-component.mjs +0 -142
  302. package/dist/lib/esm/obsidian/components/setting-components/typed-multiple-dropdown-component.mjs +0 -141
  303. package/dist/lib/esm/obsidian/components/setting-components/typed-range-text-component.mjs +0 -60
  304. package/dist/lib/esm/obsidian/components/setting-components/typed-text-component.mjs +0 -119
  305. package/dist/lib/esm/obsidian/components/setting-components/url-component.mjs +0 -72
  306. package/dist/lib/esm/obsidian/components/setting-components/validator-component.mjs +0 -127
  307. package/dist/lib/esm/obsidian/components/setting-components/week-component.mjs +0 -70
  308. package/dist/lib/esm/obsidian/monkey-around.d.mts +0 -62
  309. package/dist/lib/esm/obsidian/monkey-around.mjs +0 -66
  310. package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.mjs +0 -59
  311. package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.mjs +0 -62
  312. package/dist/lib/esm/obsidian/plugin/components/console-debug-component.mjs +0 -56
  313. package/dist/lib/esm/obsidian/plugin/components/i18n-component.mjs +0 -53
  314. package/dist/lib/esm/obsidian/plugin/components/index.d.mts +0 -9
  315. package/dist/lib/esm/obsidian/plugin/components/index.mjs +0 -44
  316. package/dist/lib/esm/obsidian/plugin/components/layout-ready-component.d.mts +0 -18
  317. package/dist/lib/esm/obsidian/plugin/components/layout-ready-component.mjs +0 -24
  318. package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.mjs +0 -61
  319. package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.mjs +0 -60
  320. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.mjs +0 -461
  321. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.mjs +0 -49
  322. package/dist/lib/esm/obsidian/plugin/path-settings.mjs +0 -135
  323. package/obsidian/Components/setting-components/checkbox-component/package.json +0 -6
  324. package/obsidian/Components/setting-components/code-highlighter-component/package.json +0 -6
  325. package/obsidian/Components/setting-components/date-component/package.json +0 -6
  326. package/obsidian/Components/setting-components/date-time-component/package.json +0 -6
  327. package/obsidian/Components/setting-components/email-component/package.json +0 -6
  328. package/obsidian/Components/setting-components/file-component/package.json +0 -6
  329. package/obsidian/Components/setting-components/index/package.json +0 -6
  330. package/obsidian/Components/setting-components/month-component/package.json +0 -6
  331. package/obsidian/Components/setting-components/multiple-dropdown-component/package.json +0 -6
  332. package/obsidian/Components/setting-components/multiple-email-component/package.json +0 -6
  333. package/obsidian/Components/setting-components/multiple-file-component/package.json +0 -6
  334. package/obsidian/Components/setting-components/multiple-text-component/package.json +0 -6
  335. package/obsidian/Components/setting-components/number-component/package.json +0 -6
  336. package/obsidian/Components/setting-components/package.json +0 -6
  337. package/obsidian/Components/setting-components/password-component/package.json +0 -6
  338. package/obsidian/Components/setting-components/setting-component-wrapper/package.json +0 -6
  339. package/obsidian/Components/setting-components/telephone-component/package.json +0 -6
  340. package/obsidian/Components/setting-components/text-based-component/package.json +0 -6
  341. package/obsidian/Components/setting-components/time-component/package.json +0 -6
  342. package/obsidian/Components/setting-components/tri-state-checkbox-component/package.json +0 -6
  343. package/obsidian/Components/setting-components/typed-dropdown-component/package.json +0 -6
  344. package/obsidian/Components/setting-components/typed-multiple-dropdown-component/package.json +0 -6
  345. package/obsidian/Components/setting-components/typed-range-text-component/package.json +0 -6
  346. package/obsidian/Components/setting-components/typed-text-component/package.json +0 -6
  347. package/obsidian/Components/setting-components/url-component/package.json +0 -6
  348. package/obsidian/Components/setting-components/validator-component/package.json +0 -6
  349. package/obsidian/Components/setting-components/value-component-with-change-tracking/package.json +0 -6
  350. package/obsidian/Components/setting-components/week-component/package.json +0 -6
  351. package/obsidian/Plugin/components/abort-signal-component/package.json +0 -6
  352. package/obsidian/Plugin/components/async-error-handler-component/package.json +0 -6
  353. package/obsidian/Plugin/components/console-debug-component/package.json +0 -6
  354. package/obsidian/Plugin/components/i18n-component/package.json +0 -6
  355. package/obsidian/Plugin/components/index/package.json +0 -6
  356. package/obsidian/Plugin/components/layout-ready-component/package.json +0 -6
  357. package/obsidian/Plugin/components/package.json +0 -6
  358. package/obsidian/Plugin/components/plugin-context-component/package.json +0 -6
  359. package/obsidian/Plugin/components/plugin-notice-component/package.json +0 -6
  360. package/obsidian/Plugin/components/plugin-settings-component/package.json +0 -6
  361. package/obsidian/Plugin/components/plugin-settings-tab-component/package.json +0 -6
  362. package/obsidian/Plugin/path-settings/package.json +0 -6
  363. package/obsidian/monkey-around/package.json +0 -6
  364. /package/dist/lib/cjs/obsidian/{plugin/path-settings.d.cts → path-settings.d.cts} +0 -0
  365. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-component.d.cts +0 -0
  366. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-time-component.d.cts +0 -0
  367. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/email-component.d.cts +0 -0
  368. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/file-component.d.cts +0 -0
  369. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/index.d.cts +0 -0
  370. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/month-component.d.cts +0 -0
  371. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-email-component.d.cts +0 -0
  372. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-file-component.d.cts +0 -0
  373. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/number-component.d.cts +0 -0
  374. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/password-component.d.cts +0 -0
  375. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/setting-component-wrapper.d.cts +0 -0
  376. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/telephone-component.d.cts +0 -0
  377. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/text-based-component.d.cts +0 -0
  378. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/time-component.d.cts +0 -0
  379. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-range-text-component.d.cts +0 -0
  380. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/url-component.d.cts +0 -0
  381. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.d.cts +0 -0
  382. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/week-component.d.cts +0 -0
  383. /package/dist/lib/esm/obsidian/{plugin/path-settings.d.mts → path-settings.d.mts} +0 -0
  384. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/date-component.d.mts +0 -0
  385. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/date-time-component.d.mts +0 -0
  386. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/email-component.d.mts +0 -0
  387. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/file-component.d.mts +0 -0
  388. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/index.d.mts +0 -0
  389. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/month-component.d.mts +0 -0
  390. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-email-component.d.mts +0 -0
  391. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-file-component.d.mts +0 -0
  392. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/number-component.d.mts +0 -0
  393. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/password-component.d.mts +0 -0
  394. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/setting-component-wrapper.d.mts +0 -0
  395. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/telephone-component.d.mts +0 -0
  396. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/text-based-component.d.mts +0 -0
  397. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/time-component.d.mts +0 -0
  398. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-range-text-component.d.mts +0 -0
  399. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/url-component.d.mts +0 -0
  400. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.d.mts +0 -0
  401. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.mjs +0 -0
  402. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/week-component.d.mts +0 -0
@@ -0,0 +1,433 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ import { AsyncEvents } from "../../async-events.mjs";
25
+ import { getLibDebugger } from "../../debug.mjs";
26
+ import {
27
+ noop,
28
+ noopAsync
29
+ } from "../../function.mjs";
30
+ import {
31
+ castTo,
32
+ deepEqual,
33
+ getAllKeys
34
+ } from "../../object-utils.mjs";
35
+ import { DateTransformer } from "../../transformers/date-transformer.mjs";
36
+ import { DurationTransformer } from "../../transformers/duration-transformer.mjs";
37
+ import { GroupTransformer } from "../../transformers/group-transformer.mjs";
38
+ import { MapTransformer } from "../../transformers/map-transformer.mjs";
39
+ import { SetTransformer } from "../../transformers/set-transformer.mjs";
40
+ import { SkipPrivatePropertyTransformer } from "../../transformers/skip-private-property-transformer.mjs";
41
+ import { TwoWayMapTransformer } from "../../transformers/two-way-map-transformer.mjs";
42
+ import { AsyncComponentBase } from "./async-component.mjs";
43
+ import { registerAsyncEvent } from "./async-events-component.mjs";
44
+ const defaultTransformer = new GroupTransformer([
45
+ new SkipPrivatePropertyTransformer(),
46
+ new DateTransformer(),
47
+ new DurationTransformer(),
48
+ new MapTransformer(),
49
+ new SetTransformer(),
50
+ new TwoWayMapTransformer()
51
+ ]);
52
+ class PluginSettingsComponentBase extends AsyncComponentBase {
53
+ /**
54
+ * Creates a new plugin settings component.
55
+ *
56
+ * @param dataHandler - The data handler.
57
+ */
58
+ constructor(dataHandler) {
59
+ super();
60
+ this.dataHandler = dataHandler;
61
+ this.defaultSettings = this.createDefaultSettings();
62
+ this.currentState = this.createDefaultState();
63
+ this.lastSavedState = this.createDefaultState();
64
+ this.propertyNames = getAllKeys(this.currentState.inputValues);
65
+ this.registerValidators();
66
+ this.registerLegacySettingsConverters();
67
+ }
68
+ dataHandler;
69
+ /**
70
+ * Component key for singleton replacement via {@link PluginBase.addChild}.
71
+ */
72
+ static COMPONENT_KEY = Symbol(PluginSettingsComponentBase.name);
73
+ /**
74
+ * Gets the readonly default settings.
75
+ *
76
+ * @returns The default settings (as a readonly object).
77
+ */
78
+ defaultSettings;
79
+ /**
80
+ * Gets the readonly effective settings (validated, with defaults substituted for invalid values).
81
+ *
82
+ * @returns The readonly effective settings.
83
+ */
84
+ get settings() {
85
+ return this.settingsState.effectiveValues;
86
+ }
87
+ /**
88
+ * Gets the current settings state snapshot.
89
+ *
90
+ * @returns The current settings state.
91
+ */
92
+ get settingsState() {
93
+ return this.currentState;
94
+ }
95
+ asyncEvents = new AsyncEvents();
96
+ currentState;
97
+ lastSavedState;
98
+ legacySettingsConverters = [];
99
+ propertyNames;
100
+ validators = /* @__PURE__ */ new Map();
101
+ /**
102
+ * Edits the plugin settings and saves them.
103
+ *
104
+ * @param settingsEditor - The editor.
105
+ * @param context - The context.
106
+ * @returns A {@link Promise} that resolves when the settings are saved.
107
+ */
108
+ async editAndSave(settingsEditor, context) {
109
+ await this.edit(settingsEditor);
110
+ await this.saveToFile(context);
111
+ }
112
+ /**
113
+ * Ensures the settings are safe.
114
+ *
115
+ * It runs validation for each property and sets the default value if the validation fails.
116
+ *
117
+ * @param settings - The settings.
118
+ * @returns A {@link Promise} that resolves when the settings are safe.
119
+ */
120
+ async ensureSafe(settings) {
121
+ const validationResult = await this.validate(settings);
122
+ const defaults = this.defaultSettings;
123
+ for (const propertyName of this.propertyNames) {
124
+ if (validationResult[propertyName]) {
125
+ settings[propertyName] = defaults[propertyName];
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Gets a safe copy of the settings.
131
+ *
132
+ * @param settings - The settings.
133
+ * @returns A {@link Promise} that resolves to the safe copy of the settings.
134
+ */
135
+ async getSafeCopy(settings) {
136
+ const safeSettings = await this.cloneSettings(settings);
137
+ await this.ensureSafe(safeSettings);
138
+ return safeSettings;
139
+ }
140
+ /**
141
+ * Loads the plugin settings from the file.
142
+ *
143
+ * @param isInitialLoad - Whether the settings are being loaded for the first time.
144
+ * @returns A {@link Promise} that resolves when the settings are loaded.
145
+ */
146
+ async loadFromFile(isInitialLoad) {
147
+ const data = await this.dataHandler.loadData();
148
+ this.lastSavedState = this.createDefaultState();
149
+ this.currentState = this.createDefaultState();
150
+ try {
151
+ if (data === void 0 || data === null) {
152
+ return;
153
+ }
154
+ if (typeof data !== "object") {
155
+ console.error(`Invalid settings from data.json. Expected Object, got: ${typeof data}`);
156
+ return;
157
+ }
158
+ const rawRecord = data;
159
+ const parsedSettings = await this.rawRecordToSettings(rawRecord);
160
+ const validationResult = await this.validate(parsedSettings);
161
+ for (const propertyName of this.propertyNames) {
162
+ this.setPropertyImpl(propertyName, parsedSettings[propertyName], validationResult[propertyName]);
163
+ }
164
+ this.lastSavedState = await this.cloneState(this.currentState);
165
+ const newRecord = await this.settingsToRawRecord(this.currentState.inputValues);
166
+ if (!deepEqual(newRecord, data)) {
167
+ await this.saveToFileImpl();
168
+ }
169
+ } finally {
170
+ await this.asyncEvents.triggerAsync("loadSettings", this.currentState, isInitialLoad);
171
+ }
172
+ }
173
+ /**
174
+ * Subscribes to an event.
175
+ *
176
+ * @param name - The name of the event.
177
+ * @param callback - The callback.
178
+ * @param thisArg - The `this` context.
179
+ * @returns A reference to the event listener.
180
+ */
181
+ on(name, callback, thisArg) {
182
+ return this.asyncEvents.on(name, callback, thisArg);
183
+ }
184
+ /**
185
+ * Called when the external settings change.
186
+ *
187
+ * @returns A {@link Promise} that resolves when the settings are reloaded.
188
+ */
189
+ async onExternalSettingsChange() {
190
+ await this.loadFromFile(false);
191
+ }
192
+ /**
193
+ * Loads settings from file and registers event handlers.
194
+ */
195
+ async onload() {
196
+ await super.onload();
197
+ registerAsyncEvent(this, this.on("loadSettings", this.onLoadSettings.bind(this)));
198
+ registerAsyncEvent(this, this.on("saveSettings", this.onSaveSettings.bind(this)));
199
+ await this.loadFromFile(true);
200
+ }
201
+ /**
202
+ * Registers a legacy settings converter.
203
+ *
204
+ * @typeParam LegacySettings - The legacy settings class.
205
+ * @param legacySettingsClass - The legacy settings class.
206
+ * @param converter - The converter.
207
+ */
208
+ registerLegacySettingsConverter(legacySettingsClass, converter) {
209
+ const that = this;
210
+ this.legacySettingsConverters.push(legacySettingsConverter);
211
+ function legacySettingsConverter(record) {
212
+ const legacySettingsKeys = new Set(Object.keys(new legacySettingsClass()));
213
+ const pluginSettingKeys = new Set(that.propertyNames);
214
+ const legacySettings = record;
215
+ converter(legacySettings);
216
+ for (const key of Object.keys(legacySettings)) {
217
+ if (pluginSettingKeys.has(key)) {
218
+ continue;
219
+ }
220
+ if (!legacySettingsKeys.has(key)) {
221
+ continue;
222
+ }
223
+ delete record[key];
224
+ }
225
+ }
226
+ }
227
+ /**
228
+ * Registers a validator for a property.
229
+ *
230
+ * @param propertyName - The name of the property.
231
+ * @param validator - The validator.
232
+ */
233
+ registerValidator(propertyName, validator) {
234
+ this.validators.set(propertyName, validator);
235
+ }
236
+ /**
237
+ * Revalidates the settings.
238
+ *
239
+ * @returns The validation messages.
240
+ */
241
+ async revalidate() {
242
+ await this.edit(noop);
243
+ return this.currentState.validationMessages;
244
+ }
245
+ /**
246
+ * Saves the new plugin settings.
247
+ *
248
+ * @param context - The context of the save to file operation.
249
+ * @returns A {@link Promise} that resolves when the settings are saved.
250
+ */
251
+ async saveToFile(context) {
252
+ if (deepEqual(this.lastSavedState.inputValues, this.currentState.inputValues)) {
253
+ return;
254
+ }
255
+ await this.saveToFileImpl();
256
+ await this.asyncEvents.triggerAsync("saveSettings", this.currentState, this.lastSavedState, context);
257
+ this.lastSavedState = await this.cloneState(this.currentState);
258
+ }
259
+ /**
260
+ * Sets the value of a property.
261
+ *
262
+ * @typeParam PropertyName - The name of the property.
263
+ * @param propertyName - The name of the property.
264
+ * @param value - The value to set.
265
+ * @returns A {@link Promise} that resolves to the validation message.
266
+ */
267
+ async setProperty(propertyName, value) {
268
+ await this.edit((settings) => {
269
+ settings[propertyName] = value;
270
+ });
271
+ return this.currentState.validationMessages[propertyName];
272
+ }
273
+ /**
274
+ * Validates the settings.
275
+ *
276
+ * @param settings - The settings.
277
+ * @returns A {@link Promise} that resolves to the validation result.
278
+ */
279
+ async validate(settings) {
280
+ const result = {};
281
+ for (const [propertyName, validator] of this.validators.entries()) {
282
+ const validationMessage = await validator(settings[propertyName], settings);
283
+ if (validationMessage) {
284
+ result[propertyName] = validationMessage;
285
+ }
286
+ }
287
+ return result;
288
+ }
289
+ /**
290
+ * Gets the transformer.
291
+ *
292
+ * @returns The transformer.
293
+ */
294
+ getTransformer() {
295
+ return defaultTransformer;
296
+ }
297
+ /**
298
+ * Called when the plugin settings record is loaded from disk.
299
+ *
300
+ * @param record - The record.
301
+ */
302
+ async onLoadRecord(record) {
303
+ for (const converter of this.legacySettingsConverters) {
304
+ converter(record);
305
+ }
306
+ await Promise.resolve();
307
+ }
308
+ /**
309
+ * Called when settings are loaded or reloaded.
310
+ *
311
+ * @param _loadedState - The loaded settings state.
312
+ * @param _isInitialLoad - Whether this is the initial load.
313
+ */
314
+ async onLoadSettings(_loadedState, _isInitialLoad) {
315
+ await noopAsync();
316
+ }
317
+ /**
318
+ * Called when settings are saved.
319
+ *
320
+ * @param _newState - The new settings state.
321
+ * @param _oldState - The old settings state.
322
+ * @param _context - The save context.
323
+ */
324
+ async onSaveSettings(_newState, _oldState, _context) {
325
+ await noopAsync();
326
+ }
327
+ /**
328
+ * Called when the plugin settings record is about to be saved to disk.
329
+ *
330
+ * @param _record - The record.
331
+ */
332
+ async onSavingRecord(_record) {
333
+ await noopAsync();
334
+ }
335
+ /**
336
+ * Registers the legacy settings converters.
337
+ * Override to register legacy settings converters.
338
+ */
339
+ registerLegacySettingsConverters() {
340
+ noop();
341
+ }
342
+ /**
343
+ * Registers the validators.
344
+ * Override to register validators for properties.
345
+ */
346
+ registerValidators() {
347
+ noop();
348
+ }
349
+ async cloneSettings(settings) {
350
+ const record = await this.settingsToRawRecord(settings);
351
+ const json = JSON.stringify(record);
352
+ const cloneRecord = JSON.parse(json);
353
+ return await this.rawRecordToSettings(cloneRecord);
354
+ }
355
+ async cloneState(state) {
356
+ return {
357
+ effectiveValues: await this.cloneSettings(state.effectiveValues),
358
+ inputValues: await this.cloneSettings(state.inputValues),
359
+ validationMessages: { ...state.validationMessages }
360
+ };
361
+ }
362
+ createDefaultState() {
363
+ return {
364
+ effectiveValues: this.createDefaultSettings(),
365
+ inputValues: this.createDefaultSettings(),
366
+ validationMessages: castTo({})
367
+ };
368
+ }
369
+ async edit(settingsEditor) {
370
+ try {
371
+ await settingsEditor(this.currentState.inputValues);
372
+ } finally {
373
+ const validationResult = await this.validate(this.currentState.inputValues);
374
+ for (const propertyName of this.propertyNames) {
375
+ const validationMessage = validationResult[propertyName] ?? "";
376
+ this.currentState.validationMessages[propertyName] = validationMessage;
377
+ const defaults = this.defaultSettings;
378
+ this.currentState.effectiveValues[propertyName] = validationMessage ? defaults[propertyName] : this.currentState.inputValues[propertyName];
379
+ }
380
+ }
381
+ }
382
+ isValidPropertyName(prop) {
383
+ if (typeof prop !== "string") {
384
+ return false;
385
+ }
386
+ return this.propertyNames.includes(prop);
387
+ }
388
+ async rawRecordToSettings(rawRecord) {
389
+ rawRecord = this.getTransformer().transformObjectRecursively(rawRecord);
390
+ await this.onLoadRecord(rawRecord);
391
+ const settings = this.createDefaultSettings();
392
+ const defaults = this.defaultSettings;
393
+ for (const [propertyName, value] of Object.entries(rawRecord)) {
394
+ if (!this.isValidPropertyName(propertyName)) {
395
+ getLibDebugger("PluginSettingsComponentBase:rawRecordToSettings")(`Unknown property: ${propertyName}`);
396
+ continue;
397
+ }
398
+ if (typeof value !== typeof defaults[propertyName]) {
399
+ getLibDebugger("PluginSettingsComponentBase:rawRecordToSettings")(
400
+ "Possible invalid value type. It might lead to an unexpected behavior of the plugin. There is also a chance it is a false-negative warning, as we are unable to determine the exact type of the value in runtime.",
401
+ {
402
+ defaultValue: defaults[propertyName],
403
+ propertyName,
404
+ value
405
+ }
406
+ );
407
+ }
408
+ settings[propertyName] = value;
409
+ }
410
+ return settings;
411
+ }
412
+ async saveToFileImpl() {
413
+ await this.dataHandler.saveData(await this.settingsToRawRecord(this.currentState.inputValues));
414
+ }
415
+ setPropertyImpl(propertyName, value, validationMessage) {
416
+ const defaults = this.defaultSettings;
417
+ this.currentState.inputValues[propertyName] = value;
418
+ this.currentState.validationMessages[propertyName] = validationMessage ?? "";
419
+ this.currentState.effectiveValues[propertyName] = validationMessage ? defaults[propertyName] : value;
420
+ }
421
+ async settingsToRawRecord(settings) {
422
+ const rawRecord = {};
423
+ for (const propertyName of this.propertyNames) {
424
+ rawRecord[propertyName] = settings[propertyName];
425
+ }
426
+ await this.onSavingRecord(rawRecord);
427
+ return this.getTransformer().transformObjectRecursively(rawRecord);
428
+ }
429
+ }
430
+ export {
431
+ PluginSettingsComponentBase
432
+ };
433
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG1hbmFnZXMgcGx1Z2luIHNldHRpbmdzOiBkYXRhLCBwZXJzaXN0ZW5jZSwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50cy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzaW5nbGUgcHVibGljLWZhY2luZyBzZXR0aW5ncyBBUEkgZm9yIHBsdWdpbiBhdXRob3JzLlxuICogQWxsIHNldHRpbmdzIGxvZ2ljIChsb2FkLCBzYXZlLCB2YWxpZGF0ZSwgdHJhbnNmb3JtLCBjbG9uZSkgaXMgaGFuZGxlZCBkaXJlY3RseVxuICogYnkgdGhpcyBjb21wb25lbnQgXHUyMDE0IG5vIHNlcGFyYXRlIG1hbmFnZXIgY2xhc3MgaXMgbmVlZGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUHJvbWlzYWJsZSxcbiAgUmVhZG9ubHlEZWVwXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNFdmVudFJlZiB9IGZyb20gJy4uLy4uL2FzeW5jLWV2ZW50cy50cyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNQcm9taXNhYmxlVm9pZEZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL3RyYW5zZm9ybWVycy90cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4uLy4uL3R5cGUudHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhSGFuZGxlciB9IGZyb20gJy4uL2RhdGEtaGFuZGxlci50cyc7XG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi4vLi4vYXN5bmMtZXZlbnRzLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7XG4gIGNhc3RUbyxcbiAgZGVlcEVxdWFsLFxuICBnZXRBbGxLZXlzXG59IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBEYXRlVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi90cmFuc2Zvcm1lcnMvZGF0ZS10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBEdXJhdGlvblRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vdHJhbnNmb3JtZXJzL2R1cmF0aW9uLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IEdyb3VwVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi90cmFuc2Zvcm1lcnMvZ3JvdXAtdHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgTWFwVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi90cmFuc2Zvcm1lcnMvbWFwLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IFNldFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vdHJhbnNmb3JtZXJzL3NldC10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi90cmFuc2Zvcm1lcnMvc2tpcC1wcml2YXRlLXByb3BlcnR5LXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IFR3b1dheU1hcFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vdHJhbnNmb3JtZXJzL3R3by13YXktbWFwLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IEFzeW5jQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vYXN5bmMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IGRlZmF1bHRUcmFuc2Zvcm1lciA9IG5ldyBHcm91cFRyYW5zZm9ybWVyKFtcbiAgbmV3IFNraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lcigpLFxuICBuZXcgRGF0ZVRyYW5zZm9ybWVyKCksXG4gIG5ldyBEdXJhdGlvblRyYW5zZm9ybWVyKCksXG4gIG5ldyBNYXBUcmFuc2Zvcm1lcigpLFxuICBuZXcgU2V0VHJhbnNmb3JtZXIoKSxcbiAgbmV3IFR3b1dheU1hcFRyYW5zZm9ybWVyKClcbl0pO1xuXG4vKipcbiAqIEEgc25hcHNob3Qgb2YgcGx1Z2luIHNldHRpbmdzIHN0YXRlLCBpbmNsdWRpbmcgcmF3IGlucHV0IHZhbHVlcywgZWZmZWN0aXZlICh2YWxpZGF0ZWQpIHZhbHVlcyxcbiAqIGFuZCBwZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgZWZmZWN0aXZlIHNldHRpbmdzIHZhbHVlcyB1c2VkIGJ5IHRoZSBwbHVnaW4uIEludmFsaWQgcHJvcGVydGllcyBhcmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cy5cbiAgICovXG4gIGVmZmVjdGl2ZVZhbHVlczogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSByYXcgaW5wdXQgdmFsdWVzIGFzIGVudGVyZWQgYnkgdGhlIHVzZXIuIE1heSBjb250YWluIGludmFsaWQgdmFsdWVzLlxuICAgKi9cbiAgaW5wdXRWYWx1ZXM6IFBsdWdpblNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBQZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy4gRW1wdHkgc3RyaW5nIG1lYW5zIHZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3N9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NTdGF0ZX0gZm9yIHVzZSBpbiBldmVudCBjYWxsYmFja3MgYW5kIHB1YmxpYyBnZXR0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+ID0gUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+PjtcblxuLyoqXG4gKiBBIHZhbGlkYXRvciBmdW5jdGlvbiBmb3IgYSBzZXR0aW5ncyBwcm9wZXJ0eS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+ID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+ID0gKFxuICB2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSxcbiAgc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzXG4pID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG5cbnR5cGUgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPjtcblxudHlwZSBQcm9wZXJ0eVZhbHVlczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPl07XG5cbnR5cGUgVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBQYXJ0aWFsPFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPj47XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudHMuXG4gKlxuICogTWFuYWdlcyBzZXR0aW5ncyBkYXRhLCBwZXJzaXN0ZW5jZSwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50cy5cbiAqIFBsdWdpbiBhdXRob3JzIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBpbXBsZW1lbnQge0BsaW5rIGNyZWF0ZURlZmF1bHRTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBBc3luY0NvbXBvbmVudEJhc2Uge1xuICAvKipcbiAgICogQ29tcG9uZW50IGtleSBmb3Igc2luZ2xldG9uIHJlcGxhY2VtZW50IHZpYSB7QGxpbmsgUGx1Z2luQmFzZS5hZGRDaGlsZH0uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTVBPTkVOVF9LRVkgPSBTeW1ib2woUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLm5hbWUpO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWFkb25seSBkZWZhdWx0IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBzZXR0aW5ncyAoYXMgYSByZWFkb25seSBvYmplY3QpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRTZXR0aW5nczogUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogR2V0cyB0aGUgcmVhZG9ubHkgZWZmZWN0aXZlIHNldHRpbmdzICh2YWxpZGF0ZWQsIHdpdGggZGVmYXVsdHMgc3Vic3RpdHV0ZWQgZm9yIGludmFsaWQgdmFsdWVzKS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlYWRvbmx5IGVmZmVjdGl2ZSBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dGluZ3MoKTogUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NTdGF0ZS5lZmZlY3RpdmVWYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzZXR0aW5ncyBzdGF0ZSBzbmFwc2hvdC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzU3RhdGUoKTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlIGFzIFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz47XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFzeW5jRXZlbnRzID0gbmV3IEFzeW5jRXZlbnRzKCk7XG4gIHByaXZhdGUgY3VycmVudFN0YXRlOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcbiAgcHJpdmF0ZSBsYXN0U2F2ZWRTdGF0ZTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz47XG4gIHByaXZhdGUgcmVhZG9ubHkgbGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzOiAoKHJlY29yZDogR2VuZXJpY09iamVjdCkgPT4gdm9pZClbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5TmFtZXM6IFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+W107XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9ycyA9IG5ldyBNYXA8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YUhhbmRsZXIgLSBUaGUgZGF0YSBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YUhhbmRsZXI6IERhdGFIYW5kbGVyKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHRoaXMuY3JlYXRlRGVmYXVsdFNldHRpbmdzKCkgYXMgUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzPjtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5wcm9wZXJ0eU5hbWVzID0gZ2V0QWxsS2V5cyh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcyk7XG4gICAgdGhpcy5yZWdpc3RlclZhbGlkYXRvcnMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyTGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBhbmQgc2F2ZXMgdGhlbS5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzRWRpdG9yIC0gVGhlIGVkaXRvci5cbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZWRpdEFuZFNhdmUoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpID0+IFByb21pc2FibGU8dm9pZD4sIGNvbnRleHQ/OiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lZGl0KHNldHRpbmdzRWRpdG9yKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVUb0ZpbGUoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgc2V0dGluZ3MgYXJlIHNhZmUuXG4gICAqXG4gICAqIEl0IHJ1bnMgdmFsaWRhdGlvbiBmb3IgZWFjaCBwcm9wZXJ0eSBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscy5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBzYWZlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVuc3VyZVNhZmUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdGUoc2V0dGluZ3MpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdFtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc2FmZSBjb3B5IG9mIHRoZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzYWZlIGNvcHkgb2YgdGhlIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNhZmVDb3B5KHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBjb25zdCBzYWZlU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU2FmZShzYWZlU2V0dGluZ3MpO1xuICAgIHJldHVybiBzYWZlU2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBmcm9tIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gaXNJbml0aWFsTG9hZCAtIFdoZXRoZXIgdGhlIHNldHRpbmdzIGFyZSBiZWluZyBsb2FkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEZyb21GaWxlKGlzSW5pdGlhbExvYWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kYXRhSGFuZGxlci5sb2FkRGF0YSgpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudFN0YXRlID0gdGhpcy5jcmVhdGVEZWZhdWx0U3RhdGUoKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgc2V0dGluZ3MgZnJvbSBkYXRhLmpzb24uIEV4cGVjdGVkIE9iamVjdCwgZ290OiAke3R5cGVvZiBkYXRhfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGRhdGEgYXMgR2VuZXJpY09iamVjdDtcbiAgICAgIGNvbnN0IHBhcnNlZFNldHRpbmdzID0gYXdhaXQgdGhpcy5yYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZCk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZShwYXJzZWRTZXR0aW5ncyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5SW1wbChwcm9wZXJ0eU5hbWUsIHBhcnNlZFNldHRpbmdzW3Byb3BlcnR5TmFtZV0sIHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSBhd2FpdCB0aGlzLmNsb25lU3RhdGUodGhpcy5jdXJyZW50U3RhdGUpO1xuXG4gICAgICBjb25zdCBuZXdSZWNvcmQgPSBhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuXG4gICAgICBpZiAoIWRlZXBFcXVhbChuZXdSZWNvcmQsIGRhdGEpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5hc3luY0V2ZW50cy50cmlnZ2VyQXN5bmMoJ2xvYWRTZXR0aW5ncycsIHRoaXMuY3VycmVudFN0YXRlLCBpc0luaXRpYWxMb2FkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgYGxvYWRTZXR0aW5nc2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQWx3YXlzIGBsb2FkU2V0dGluZ3NgLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb24oXG4gICAgbmFtZTogJ2xvYWRTZXR0aW5ncycsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgaXNJbml0aWFsTG9hZDogYm9vbGVhblxuICAgICkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmO1xuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgYHNhdmVTZXR0aW5nc2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQWx3YXlzIGBzYXZlU2V0dGluZ3NgLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb24oXG4gICAgbmFtZTogJ3NhdmVTZXR0aW5ncycsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIG5ld1N0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgICBjb250ZXh0OiB1bmtub3duXG4gICAgKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWY7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGFuIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0gdGhpc0FyZyAtIFRoZSBgdGhpc2AgY29udGV4dC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHVibGljIG9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogR2VuZXJpY1Byb21pc2FibGVWb2lkRnVuY3Rpb248QXJncz4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNFdmVudHMub24obmFtZSwgY2FsbGJhY2ssIHRoaXNBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHJlbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRGcm9tRmlsZShmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgc2V0dGluZ3MgZnJvbSBmaWxlIGFuZCByZWdpc3RlcnMgZXZlbnQgaGFuZGxlcnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9ubG9hZCgpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLm9uKCdsb2FkU2V0dGluZ3MnLCB0aGlzLm9uTG9hZFNldHRpbmdzLmJpbmQodGhpcykpKTtcbiAgICByZWdpc3RlckFzeW5jRXZlbnQodGhpcywgdGhpcy5vbignc2F2ZVNldHRpbmdzJywgdGhpcy5vblNhdmVTZXR0aW5ncy5iaW5kKHRoaXMpKSk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnJvbUZpbGUodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGVnYWN5IHNldHRpbmdzIGNvbnZlcnRlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBMZWdhY3lTZXR0aW5ncyAtIFRoZSBsZWdhY3kgc2V0dGluZ3MgY2xhc3MuXG4gICAqIEBwYXJhbSBsZWdhY3lTZXR0aW5nc0NsYXNzIC0gVGhlIGxlZ2FjeSBzZXR0aW5ncyBjbGFzcy5cbiAgICogQHBhcmFtIGNvbnZlcnRlciAtIFRoZSBjb252ZXJ0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJMZWdhY3lTZXR0aW5nc0NvbnZlcnRlcjxMZWdhY3lTZXR0aW5ncyBleHRlbmRzIG9iamVjdD4oXG4gICAgbGVnYWN5U2V0dGluZ3NDbGFzczogbmV3ICgpID0+IExlZ2FjeVNldHRpbmdzLFxuICAgIGNvbnZlcnRlcjogKGxlZ2FjeVNldHRpbmdzOiBQYXJ0aWFsPExlZ2FjeVNldHRpbmdzPiAmIFBhcnRpYWw8UGx1Z2luU2V0dGluZ3M+KSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIHRoaXMubGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzLnB1c2gobGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXIpO1xuXG4gICAgZnVuY3Rpb24gbGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXIocmVjb3JkOiBHZW5lcmljT2JqZWN0KTogdm9pZCB7XG4gICAgICBjb25zdCBsZWdhY3lTZXR0aW5nc0tleXMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMobmV3IGxlZ2FjeVNldHRpbmdzQ2xhc3MoKSkpO1xuICAgICAgY29uc3QgcGx1Z2luU2V0dGluZ0tleXMgPSBuZXcgU2V0PHN0cmluZz4odGhhdC5wcm9wZXJ0eU5hbWVzKTtcbiAgICAgIGNvbnN0IGxlZ2FjeVNldHRpbmdzID0gcmVjb3JkIGFzIFBhcnRpYWw8TGVnYWN5U2V0dGluZ3M+ICYgUGFydGlhbDxQbHVnaW5TZXR0aW5ncz47XG4gICAgICBjb252ZXJ0ZXIobGVnYWN5U2V0dGluZ3MpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobGVnYWN5U2V0dGluZ3MpKSB7XG4gICAgICAgIGlmIChwbHVnaW5TZXR0aW5nS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsZWdhY3lTZXR0aW5nc0tleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YWxpZGF0b3IgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgLSBUaGUgdmFsaWRhdG9yLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyVmFsaWRhdG9yPFByb3BlcnR5TmFtZSBleHRlbmRzIFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+PihcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZSxcbiAgICB2YWxpZGF0b3I6IFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzLCBQcm9wZXJ0eU5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdG9ycy5zZXQocHJvcGVydHlOYW1lLCB2YWxpZGF0b3IgYXMgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3M+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldmFsaWRhdGUoKTogUHJvbWlzZTxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+IHtcbiAgICBhd2FpdCB0aGlzLmVkaXQobm9vcCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgc2F2ZSB0byBmaWxlIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVRvRmlsZShjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChkZWVwRXF1YWwodGhpcy5sYXN0U2F2ZWRTdGF0ZS5pbnB1dFZhbHVlcywgdGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgIGF3YWl0IHRoaXMuYXN5bmNFdmVudHMudHJpZ2dlckFzeW5jKCdzYXZlU2V0dGluZ3MnLCB0aGlzLmN1cnJlbnRTdGF0ZSwgdGhpcy5sYXN0U2F2ZWRTdGF0ZSwgY29udGV4dCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IGF3YWl0IHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVkaXQoKHNldHRpbmdzKSA9PiB7XG4gICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWRhdGlvbiByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcl0gb2YgdGhpcy52YWxpZGF0b3JzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB2YWxpZGF0b3Ioc2V0dGluZ3NbcHJvcGVydHlOYW1lXSwgc2V0dGluZ3MpO1xuICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHJlc3VsdFtwcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNldHRpbmdzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZURlZmF1bHRTZXR0aW5ncygpOiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogR2V0cyB0aGUgdHJhbnNmb3JtZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRUcmFuc2Zvcm1lcigpOiBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIGRlZmF1bHRUcmFuc2Zvcm1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIHJlY29yZCBpcyBsb2FkZWQgZnJvbSBkaXNrLlxuICAgKlxuICAgKiBAcGFyYW0gcmVjb3JkIC0gVGhlIHJlY29yZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRSZWNvcmQocmVjb3JkOiBHZW5lcmljT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgdGhpcy5sZWdhY3lTZXR0aW5nc0NvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnZlcnRlcihyZWNvcmQpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBzZXR0aW5ncyBhcmUgbG9hZGVkIG9yIHJlbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2xvYWRlZFN0YXRlIC0gVGhlIGxvYWRlZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9pc0luaXRpYWxMb2FkIC0gV2hldGhlciB0aGlzIGlzIHRoZSBpbml0aWFsIGxvYWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2FkU2V0dGluZ3MoXG4gICAgX2xvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIF9pc0luaXRpYWxMb2FkOiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICpcbiAgICogQHBhcmFtIF9uZXdTdGF0ZSAtIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBfb2xkU3RhdGUgLSBUaGUgb2xkIHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgc2F2ZSBjb250ZXh0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU2F2ZVNldHRpbmdzKFxuICAgIF9uZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBfb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgX2NvbnRleHQ6IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyByZWNvcmQgaXMgYWJvdXQgdG8gYmUgc2F2ZWQgdG8gZGlzay5cbiAgICpcbiAgICogQHBhcmFtIF9yZWNvcmQgLSBUaGUgcmVjb3JkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU2F2aW5nUmVjb3JkKF9yZWNvcmQ6IEdlbmVyaWNPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXJzLlxuICAgKiBPdmVycmlkZSB0byByZWdpc3RlciBsZWdhY3kgc2V0dGluZ3MgY29udmVydGVycy5cbiAgICovXG4gIHByb3RlY3RlZCByZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3JzLlxuICAgKiBPdmVycmlkZSB0byByZWdpc3RlciB2YWxpZGF0b3JzIGZvciBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsb25lU2V0dGluZ3Moc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuc2V0dGluZ3NUb1Jhd1JlY29yZChzZXR0aW5ncyk7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHJlY29yZCk7XG4gICAgY29uc3QgY2xvbmVSZWNvcmQgPSBKU09OLnBhcnNlKGpzb24pIGFzIEdlbmVyaWNPYmplY3Q7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmF3UmVjb3JkVG9TZXR0aW5ncyhjbG9uZVJlY29yZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsb25lU3RhdGUoXG4gICAgc3RhdGU6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+XG4gICk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZWZmZWN0aXZlVmFsdWVzOiBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc3RhdGUuZWZmZWN0aXZlVmFsdWVzKSxcbiAgICAgIGlucHV0VmFsdWVzOiBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc3RhdGUuaW5wdXRWYWx1ZXMpLFxuICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzOiB7IC4uLnN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdFN0YXRlKCk6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZWZmZWN0aXZlVmFsdWVzOiB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpLFxuICAgICAgaW5wdXRWYWx1ZXM6IHRoaXMuY3JlYXRlRGVmYXVsdFNldHRpbmdzKCksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IGNhc3RUbzxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+KHt9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXQoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0dGluZ3NFZGl0b3IodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0W3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICA/IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV1cbiAgICAgICAgICA6IHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUHJvcGVydHlOYW1lKHByb3A6IHVua25vd24pOiBwcm9wIGlzIFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnR5TmFtZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHByb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByYXdSZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmF3UmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLm9uTG9hZFJlY29yZChyYXdSZWNvcmQpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdSZWNvcmQpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIGdldExpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKGBVbmtub3duIHByb3BlcnR5OiAke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIGdldExpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKFxuICAgICAgICAgICdQb3NzaWJsZSBpbnZhbGlkIHZhbHVlIHR5cGUuIEl0IG1pZ2h0IGxlYWQgdG8gYW4gdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgcGx1Z2luLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmNlIGl0IGlzIGEgZmFsc2UtbmVnYXRpdmUgd2FybmluZywgYXMgd2UgYXJlIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgb2YgdGhlIHZhbHVlIGluIHJ1bnRpbWUuJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHZhbHVlIGFzIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVUb0ZpbGVJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGF0YUhhbmRsZXIuc2F2ZURhdGEoYXdhaXQgdGhpcy5zZXR0aW5nc1RvUmF3UmVjb3JkKHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFByb3BlcnR5SW1wbChcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+LFxuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlczxQbHVnaW5TZXR0aW5ncz4sXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLmRlZmF1bHRTZXR0aW5ncyBhcyBQbHVnaW5TZXR0aW5ncztcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgdGhpcy5jdXJyZW50U3RhdGUudmFsaWRhdGlvbk1lc3NhZ2VzW3Byb3BlcnR5TmFtZV0gPSB2YWxpZGF0aW9uTWVzc2FnZSA/PyAnJztcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZS5lZmZlY3RpdmVWYWx1ZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlID8gZGVmYXVsdHNbcHJvcGVydHlOYW1lXSA6IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXR0aW5nc1RvUmF3UmVjb3JkKHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8R2VuZXJpY09iamVjdD4ge1xuICAgIGNvbnN0IHJhd1JlY29yZDogR2VuZXJpY09iamVjdCA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICByYXdSZWNvcmRbcHJvcGVydHlOYW1lXSA9IHNldHRpbmdzW3Byb3BlcnR5TmFtZV07XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5vblNhdmluZ1JlY29yZChyYXdSZWNvcmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmb3JtZXIoKS50cmFuc2Zvcm1PYmplY3RSZWN1cnNpdmVseShyYXdSZWNvcmQpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsMkJBQTJCO0FBQ3BD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T0FBTyxTQUFTLFVBQVU7QUFDNUIsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFRLEtBQUssY0FBMkIsU0FBUyxJQUFJO0FBQUEsRUFDdkQ7QUFBQSxFQUVBLE1BQWMsb0JBQW9CLFdBQW1EO0FBQ25GLGdCQUFZLEtBQUssZUFBZSxFQUFFLDJCQUEyQixTQUFTO0FBQ3RFLFVBQU0sS0FBSyxhQUFhLFNBQVM7QUFFakMsVUFBTSxXQUFXLEtBQUssc0JBQXNCO0FBQzVDLFVBQU0sV0FBVyxLQUFLO0FBRXRCLGVBQVcsQ0FBQyxjQUFjLEtBQUssS0FBSyxPQUFPLFFBQVEsU0FBUyxHQUFHO0FBQzdELFVBQUksQ0FBQyxLQUFLLG9CQUFvQixZQUFZLEdBQUc7QUFDM0MsdUJBQWUsaURBQWlELEVBQUUscUJBQXFCLFlBQVksRUFBRTtBQUNyRztBQUFBLE1BQ0Y7QUFFQSxVQUFJLE9BQU8sVUFBVSxPQUFPLFNBQVMsWUFBWSxHQUFHO0FBQ2xELHVCQUFlLGlEQUFpRDtBQUFBLFVBQzlEO0FBQUEsVUFDQTtBQUFBLFlBQ0UsY0FBYyxTQUFTLFlBQVk7QUFBQSxZQUNuQztBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFlBQVksSUFBSTtBQUFBLElBQzNCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLE1BQWMsaUJBQWdDO0FBQzVDLFVBQU0sS0FBSyxZQUFZLFNBQVMsTUFBTSxLQUFLLG9CQUFvQixLQUFLLGFBQWEsV0FBVyxDQUFDO0FBQUEsRUFDL0Y7QUFBQSxFQUVRLGdCQUNOLGNBQ0EsT0FDQSxtQkFDTTtBQUNOLFVBQU0sV0FBVyxLQUFLO0FBQ3RCLFNBQUssYUFBYSxZQUFZLFlBQVksSUFBSTtBQUM5QyxTQUFLLGFBQWEsbUJBQW1CLFlBQVksSUFBSSxxQkFBcUI7QUFDMUUsU0FBSyxhQUFhLGdCQUFnQixZQUFZLElBQUksb0JBQW9CLFNBQVMsWUFBWSxJQUFJO0FBQUEsRUFDakc7QUFBQSxFQUVBLE1BQWMsb0JBQW9CLFVBQWtEO0FBQ2xGLFVBQU0sWUFBMkIsQ0FBQztBQUVsQyxlQUFXLGdCQUFnQixLQUFLLGVBQWU7QUFDN0MsZ0JBQVUsWUFBWSxJQUFJLFNBQVMsWUFBWTtBQUFBLElBQ2pEO0FBRUEsVUFBTSxLQUFLLGVBQWUsU0FBUztBQUVuQyxXQUFPLEtBQUssZUFBZSxFQUFFLDJCQUEyQixTQUFTO0FBQUEsRUFDbkU7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -5,17 +5,17 @@
5
5
  * Also registers an "Open Settings" command automatically.
6
6
  */
7
7
  import type { Plugin } from 'obsidian';
8
- import { Component } from 'obsidian';
9
- import type { PluginSettingsTabBase } from '../plugin-settings-tab.mjs';
8
+ import { PluginSettingTab } from 'obsidian';
9
+ import { DisposableComponent } from './disposable-component.mjs';
10
10
  interface PluginSettingsTabComponentConstructorParams {
11
11
  readonly plugin: Plugin;
12
- readonly pluginSettingsTab: PluginSettingsTabBase<object>;
12
+ readonly pluginSettingsTab: PluginSettingTab;
13
13
  }
14
14
  /**
15
- * Wraps a {@link PluginSettingsTabBase} and registers it with Obsidian on load.
15
+ * Wraps a {@link PluginSettingTab} and registers it with Obsidian on load.
16
16
  * Also registers an "Open Settings" command to open the settings tab from the command palette.
17
17
  */
18
- export declare class PluginSettingsTabComponent extends Component {
18
+ export declare class PluginSettingsTabComponent extends DisposableComponent {
19
19
  private readonly plugin;
20
20
  private readonly pluginSettingsTab;
21
21
  /**
@@ -0,0 +1,50 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ import { PluginSettingTab } from "obsidian";
25
+ import { DisposableComponent } from "./disposable-component.mjs";
26
+ class PluginSettingsTabComponent extends DisposableComponent {
27
+ plugin;
28
+ pluginSettingsTab;
29
+ /**
30
+ * Creates a new plugin settings tab component.
31
+ *
32
+ * @param params - The plugin settings tab component constructor parameters.
33
+ */
34
+ constructor(params) {
35
+ super();
36
+ this.plugin = params.plugin;
37
+ this.pluginSettingsTab = params.pluginSettingsTab;
38
+ }
39
+ /**
40
+ * Registers the settings tab and an "Open Settings" command with Obsidian.
41
+ */
42
+ onload() {
43
+ super.onload();
44
+ this.plugin.addSettingTab(this.pluginSettingsTab);
45
+ }
46
+ }
47
+ export {
48
+ PluginSettingsTabComponent
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLXNldHRpbmdzLXRhYi1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCByZWdpc3RlcnMgYSBwbHVnaW4gc2V0dGluZ3MgdGFiIHdpdGggT2JzaWRpYW4uXG4gKiBBbHNvIHJlZ2lzdGVycyBhbiBcIk9wZW4gU2V0dGluZ3NcIiBjb21tYW5kIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFBsdWdpblNldHRpbmdUYWIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuL2Rpc3Bvc2FibGUtY29tcG9uZW50LnRzJztcblxuaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NUYWI6IFBsdWdpblNldHRpbmdUYWI7XG59XG5cbi8qKlxuICogV3JhcHMgYSB7QGxpbmsgUGx1Z2luU2V0dGluZ1RhYn0gYW5kIHJlZ2lzdGVycyBpdCB3aXRoIE9ic2lkaWFuIG9uIGxvYWQuXG4gKiBBbHNvIHJlZ2lzdGVycyBhbiBcIk9wZW4gU2V0dGluZ3NcIiBjb21tYW5kIHRvIG9wZW4gdGhlIHNldHRpbmdzIHRhYiBmcm9tIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkNvbXBvbmVudCBleHRlbmRzIERpc3Bvc2FibGVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzVGFiOiBQbHVnaW5TZXR0aW5nVGFiO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBzZXR0aW5ncyB0YWIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIgY29tcG9uZW50IGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBhcmFtcy5wbHVnaW47XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc1RhYiA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc1RhYjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIHNldHRpbmdzIHRhYiBhbmQgYW4gXCJPcGVuIFNldHRpbmdzXCIgY29tbWFuZCB3aXRoIE9ic2lkaWFuLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcbiAgICB0aGlzLnBsdWdpbi5hZGRTZXR0aW5nVGFiKHRoaXMucGx1Z2luU2V0dGluZ3NUYWIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsd0JBQXdCO0FBRWpDLFNBQVMsMkJBQTJCO0FBVzdCLE1BQU0sbUNBQW1DLG9CQUFvQjtBQUFBLEVBQ2pEO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBcUQ7QUFDdEUsVUFBTTtBQUNOLFNBQUssU0FBUyxPQUFPO0FBQ3JCLFNBQUssb0JBQW9CLE9BQU87QUFBQSxFQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS2dCLFNBQWU7QUFDN0IsVUFBTSxPQUFPO0FBQ2IsU0FBSyxPQUFPLGNBQWMsS0FBSyxpQkFBaUI7QUFBQSxFQUNsRDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -24,7 +24,7 @@ if you want to view the source, please visit the github repository of this plugi
24
24
  import { MarkdownPreviewRenderer } from "obsidian";
25
25
  import { requestAnimationFrameAsync } from "../../async.mjs";
26
26
  import { assertNonNullable } from "../../type-guards.mjs";
27
- import { invokeWithPatchAsync } from "../monkey-around.mjs";
27
+ import { MonkeyAroundComponent } from "../components/monkey-around-component.mjs";
28
28
  import { trashSafe } from "../vault.mjs";
29
29
  async function getDomEventsHandlersConstructor(app) {
30
30
  let mdFile = app.vault.getMarkdownFiles()[0];
@@ -35,22 +35,26 @@ async function getDomEventsHandlersConstructor(app) {
35
35
  }
36
36
  let ctor = null;
37
37
  try {
38
- await invokeWithPatchAsync(MarkdownPreviewRenderer, {
39
- registerDomEvents: (next) => {
40
- return (el, handlers, childElFn) => {
41
- ctor = handlers.constructor;
42
- next(el, handlers, childElFn);
43
- };
38
+ using patch = new MonkeyAroundComponent();
39
+ patch.load();
40
+ patch.registerMethodPatch({
41
+ methodName: "registerDomEvents",
42
+ obj: MarkdownPreviewRenderer,
43
+ patchHandler({
44
+ fallback,
45
+ originalArgs: [handlers]
46
+ }) {
47
+ ctor = handlers.constructor;
48
+ fallback();
44
49
  }
45
- }, async () => {
46
- const leaf = app.workspace.getLeaf(true);
47
- await leaf.openFile(mdFile, {
48
- active: true,
49
- state: { mode: "preview" }
50
- });
51
- await requestAnimationFrameAsync();
52
- leaf.detach();
53
50
  });
51
+ const leaf = app.workspace.getLeaf(true);
52
+ await leaf.openFile(mdFile, {
53
+ active: true,
54
+ state: { mode: "preview" }
55
+ });
56
+ await requestAnimationFrameAsync();
57
+ leaf.detach();
54
58
  assertNonNullable(ctor, "Failed to get register dom events handlers constructor");
55
59
  return ctor;
56
60
  } finally {
@@ -62,4 +66,4 @@ async function getDomEventsHandlersConstructor(app) {
62
66
  export {
63
67
  getDomEventsHandlersConstructor
64
68
  };
65
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbnN0cnVjdG9ycy9nZXREb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZXh0cmFjdHMgdGhlIGBEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yYCBmcm9tIE9ic2lkaWFuJ3MgcnVudGltZVxuICogYnkgdGVtcG9yYXJpbHkgb3BlbmluZyBhIG1hcmtkb3duIGZpbGUgaW4gcHJldmlldyBtb2RlIGFuZCBpbnRlcmNlcHRpbmcgdGhlXG4gKiBjb25zdHJ1Y3RvciBwYXNzZWQgdG8gYE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzYC5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBFeHRyYWN0Q29uc3RydWN0b3Jcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jIH0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBpbnZva2VXaXRoUGF0Y2hBc3luYyB9IGZyb20gJy4uL21vbmtleS1hcm91bmQudHMnO1xuaW1wb3J0IHsgdHJhc2hTYWZlIH0gZnJvbSAnLi4vdmF1bHQudHMnO1xuXG50eXBlIERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3IgPSBFeHRyYWN0Q29uc3RydWN0b3I8RG9tRXZlbnRzSGFuZGxlcnM+O1xudHlwZSBSZWdpc3RlckRvbUV2ZW50c0ZuID0gdHlwZW9mIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBgRG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvcmAgZnJvbSBPYnNpZGlhbidzIHJ1bnRpbWUuXG4gKlxuICogT3BlbnMgYSB0ZW1wb3JhcnkgbWFya2Rvd24gZmlsZSBpbiBwcmV2aWV3IG1vZGUgYW5kIGludGVyY2VwdHMgdGhlIGNvbnN0cnVjdG9yXG4gKiBwYXNzZWQgdG8gYE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzYC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGBEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3IoYXBwOiBBcHApOiBQcm9taXNlPERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3I+IHtcbiAgbGV0IG1kRmlsZSA9IGFwcC52YXVsdC5nZXRNYXJrZG93bkZpbGVzKClbMF07XG4gIGxldCBzaG91bGREZWxldGUgPSBmYWxzZTtcbiAgaWYgKCFtZEZpbGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBObyByYWNlIGNvbmRpdGlvbi5cbiAgICBtZEZpbGUgPSBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKCdfX3RlbXAubWQnLCAnJyk7XG4gICAgc2hvdWxkRGVsZXRlID0gdHJ1ZTtcbiAgfVxuICBsZXQgY3RvcjogRG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvciB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IGludm9rZVdpdGhQYXRjaEFzeW5jKE1hcmtkb3duUHJldmlld1JlbmRlcmVyLCB7XG4gICAgICByZWdpc3RlckRvbUV2ZW50czogKG5leHQ6IFJlZ2lzdGVyRG9tRXZlbnRzRm4pOiBSZWdpc3RlckRvbUV2ZW50c0ZuID0+IHtcbiAgICAgICAgcmV0dXJuIChlbCwgaGFuZGxlcnMsIGNoaWxkRWxGbikgPT4ge1xuICAgICAgICAgIGN0b3IgPSBoYW5kbGVycy5jb25zdHJ1Y3RvciBhcyBEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yO1xuICAgICAgICAgIG5leHQoZWwsIGhhbmRsZXJzLCBjaGlsZEVsRm4pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGxlYWYgPSBhcHAud29ya3NwYWNlLmdldExlYWYodHJ1ZSk7XG4gICAgICBhd2FpdCBsZWFmLm9wZW5GaWxlKG1kRmlsZSwge1xuICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgIHN0YXRlOiB7IG1vZGU6ICdwcmV2aWV3JyB9XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jKCk7XG4gICAgICBsZWFmLmRldGFjaCgpO1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUoY3RvciwgJ0ZhaWxlZCB0byBnZXQgcmVnaXN0ZXIgZG9tIGV2ZW50cyBoYW5kbGVycyBjb25zdHJ1Y3RvcicpO1xuICAgIHJldHVybiBjdG9yO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzaG91bGREZWxldGUpIHtcbiAgICAgIGF3YWl0IHRyYXNoU2FmZShhcHAsIG1kRmlsZSk7XG4gICAgfVxuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxTQUFTLCtCQUErQjtBQUV4QyxTQUFTLGtDQUFrQztBQUMzQyxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGlCQUFpQjtBQWMxQixlQUFzQixnQ0FBZ0MsS0FBaUQ7QUFDckcsTUFBSSxTQUFTLElBQUksTUFBTSxpQkFBaUIsRUFBRSxDQUFDO0FBQzNDLE1BQUksZUFBZTtBQUNuQixNQUFJLENBQUMsUUFBUTtBQUVYLGFBQVMsTUFBTSxJQUFJLE1BQU0sT0FBTyxhQUFhLEVBQUU7QUFDL0MsbUJBQWU7QUFBQSxFQUNqQjtBQUNBLE1BQUksT0FBNEM7QUFDaEQsTUFBSTtBQUNGLFVBQU0scUJBQXFCLHlCQUF5QjtBQUFBLE1BQ2xELG1CQUFtQixDQUFDLFNBQW1EO0FBQ3JFLGVBQU8sQ0FBQyxJQUFJLFVBQVUsY0FBYztBQUNsQyxpQkFBTyxTQUFTO0FBQ2hCLGVBQUssSUFBSSxVQUFVLFNBQVM7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUcsWUFBWTtBQUNiLFlBQU0sT0FBTyxJQUFJLFVBQVUsUUFBUSxJQUFJO0FBQ3ZDLFlBQU0sS0FBSyxTQUFTLFFBQVE7QUFBQSxRQUMxQixRQUFRO0FBQUEsUUFDUixPQUFPLEVBQUUsTUFBTSxVQUFVO0FBQUEsTUFDM0IsQ0FBQztBQUNELFlBQU0sMkJBQTJCO0FBQ2pDLFdBQUssT0FBTztBQUFBLElBQ2QsQ0FBQztBQUVELHNCQUFrQixNQUFNLHdEQUF3RDtBQUNoRixXQUFPO0FBQUEsRUFDVCxVQUFFO0FBQ0EsUUFBSSxjQUFjO0FBQ2hCLFlBQU0sVUFBVSxLQUFLLE1BQU07QUFBQSxJQUM3QjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
69
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbnN0cnVjdG9ycy9nZXREb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZXh0cmFjdHMgdGhlIGBEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yYCBmcm9tIE9ic2lkaWFuJ3MgcnVudGltZVxuICogYnkgdGVtcG9yYXJpbHkgb3BlbmluZyBhIG1hcmtkb3duIGZpbGUgaW4gcHJldmlldyBtb2RlIGFuZCBpbnRlcmNlcHRpbmcgdGhlXG4gKiBjb25zdHJ1Y3RvciBwYXNzZWQgdG8gYE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzYC5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBFeHRyYWN0Q29uc3RydWN0b3Jcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jIH0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBNb25rZXlBcm91bmRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHRyYXNoU2FmZSB9IGZyb20gJy4uL3ZhdWx0LnRzJztcblxudHlwZSBEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yID0gRXh0cmFjdENvbnN0cnVjdG9yPERvbUV2ZW50c0hhbmRsZXJzPjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3JgIGZyb20gT2JzaWRpYW4ncyBydW50aW1lLlxuICpcbiAqIE9wZW5zIGEgdGVtcG9yYXJ5IG1hcmtkb3duIGZpbGUgaW4gcHJldmlldyBtb2RlIGFuZCBpbnRlcmNlcHRzIHRoZSBjb25zdHJ1Y3RvclxuICogcGFzc2VkIHRvIGBNYXJrZG93blByZXZpZXdSZW5kZXJlci5yZWdpc3RlckRvbUV2ZW50c2AuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBgRG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogUHJvbWlzZTxEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yPiB7XG4gIGxldCBtZEZpbGUgPSBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpWzBdO1xuICBsZXQgc2hvdWxkRGVsZXRlID0gZmFsc2U7XG4gIGlmICghbWRGaWxlKSB7XG4gICAgbWRGaWxlID0gYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZSgnX190ZW1wLm1kJywgJycpO1xuICAgIHNob3VsZERlbGV0ZSA9IHRydWU7XG4gIH1cbiAgbGV0IGN0b3I6IERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3IgfCBudWxsID0gbnVsbDtcbiAgdHJ5IHtcbiAgICB1c2luZyBwYXRjaCA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcbiAgICBwYXRjaC5sb2FkKCk7XG5cbiAgICBwYXRjaC5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgIG1ldGhvZE5hbWU6ICdyZWdpc3RlckRvbUV2ZW50cycsXG4gICAgICBvYmo6IE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICAgICAgcGF0Y2hIYW5kbGVyKHtcbiAgICAgICAgZmFsbGJhY2ssXG4gICAgICAgIG9yaWdpbmFsQXJnczogW2hhbmRsZXJzXVxuICAgICAgfSkge1xuICAgICAgICBjdG9yID0gaGFuZGxlcnMuY29uc3RydWN0b3IgYXMgRG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvcjtcbiAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGxlYWYgPSBhcHAud29ya3NwYWNlLmdldExlYWYodHJ1ZSk7XG4gICAgYXdhaXQgbGVhZi5vcGVuRmlsZShtZEZpbGUsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIHN0YXRlOiB7IG1vZGU6ICdwcmV2aWV3JyB9XG4gICAgfSk7XG4gICAgYXdhaXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoKTtcbiAgICBsZWFmLmRldGFjaCgpO1xuXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUoY3RvciwgJ0ZhaWxlZCB0byBnZXQgcmVnaXN0ZXIgZG9tIGV2ZW50cyBoYW5kbGVycyBjb25zdHJ1Y3RvcicpO1xuICAgIHJldHVybiBjdG9yO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzaG91bGREZWxldGUpIHtcbiAgICAgIGF3YWl0IHRyYXNoU2FmZShhcHAsIG1kRmlsZSk7XG4gICAgfVxuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxTQUFTLCtCQUErQjtBQUV4QyxTQUFTLGtDQUFrQztBQUMzQyxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLGlCQUFpQjtBQWExQixlQUFzQixnQ0FBZ0MsS0FBaUQ7QUFDckcsTUFBSSxTQUFTLElBQUksTUFBTSxpQkFBaUIsRUFBRSxDQUFDO0FBQzNDLE1BQUksZUFBZTtBQUNuQixNQUFJLENBQUMsUUFBUTtBQUNYLGFBQVMsTUFBTSxJQUFJLE1BQU0sT0FBTyxhQUFhLEVBQUU7QUFDL0MsbUJBQWU7QUFBQSxFQUNqQjtBQUNBLE1BQUksT0FBNEM7QUFDaEQsTUFBSTtBQUNGLFVBQU0sUUFBUSxJQUFJLHNCQUFzQjtBQUN4QyxVQUFNLEtBQUs7QUFFWCxVQUFNLG9CQUFvQjtBQUFBLE1BQ3hCLFlBQVk7QUFBQSxNQUNaLEtBQUs7QUFBQSxNQUNMLGFBQWE7QUFBQSxRQUNYO0FBQUEsUUFDQSxjQUFjLENBQUMsUUFBUTtBQUFBLE1BQ3pCLEdBQUc7QUFDRCxlQUFPLFNBQVM7QUFDaEIsaUJBQVM7QUFBQSxNQUNYO0FBQUEsSUFDRixDQUFDO0FBRUQsVUFBTSxPQUFPLElBQUksVUFBVSxRQUFRLElBQUk7QUFDdkMsVUFBTSxLQUFLLFNBQVMsUUFBUTtBQUFBLE1BQzFCLFFBQVE7QUFBQSxNQUNSLE9BQU8sRUFBRSxNQUFNLFVBQVU7QUFBQSxJQUMzQixDQUFDO0FBQ0QsVUFBTSwyQkFBMkI7QUFDakMsU0FBSyxPQUFPO0FBRVosc0JBQWtCLE1BQU0sd0RBQXdEO0FBQ2hGLFdBQU87QUFBQSxFQUNULFVBQUU7QUFDQSxRQUFJLGNBQWM7QUFDaEIsWUFBTSxVQUFVLEtBQUssTUFBTTtBQUFBLElBQzdCO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -147,7 +147,7 @@ export interface RenderPaginatedParams<T> {
147
147
  * @param rowsForOnePage - The rows to render.
148
148
  * @returns A {@link Promise} that resolves when the content is rendered.
149
149
  */
150
- readonly renderer: (rowsForOnePage: ArrayOrDataArray<T>) => Promisable<void>;
150
+ renderer(rowsForOnePage: ArrayOrDataArray<T>): Promisable<void>;
151
151
  /**
152
152
  * Rows to paginate.
153
153
  */