obsidian-dev-utils 65.0.1 → 66.0.1

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 (400) hide show
  1. package/CHANGELOG.md +32 -0
  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/async-with-notice.cjs +1 -1
  11. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +2 -2
  12. package/dist/lib/cjs/obsidian/{plugin/components → components}/abort-signal-component.cjs +4 -4
  13. package/dist/lib/cjs/obsidian/{plugin/components → components}/abort-signal-component.d.cts +2 -2
  14. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +201 -0
  15. package/dist/lib/{esm/obsidian/components/all-windows-event-handler.d.mts → cjs/obsidian/components/all-windows-event-component.d.cts} +6 -7
  16. package/dist/lib/cjs/obsidian/components/async-component.cjs +3 -2
  17. package/dist/lib/cjs/obsidian/components/async-component.d.cts +2 -1
  18. package/dist/lib/cjs/obsidian/{plugin/components → components}/async-error-handler-component.cjs +5 -5
  19. package/dist/lib/cjs/obsidian/{plugin/components → components}/async-error-handler-component.d.cts +2 -2
  20. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +3 -2
  21. package/dist/lib/cjs/obsidian/components/async-events-component.d.cts +2 -1
  22. package/dist/lib/cjs/obsidian/{plugin/components → components}/console-debug-component.cjs +4 -4
  23. package/dist/lib/cjs/obsidian/{plugin/components → components}/console-debug-component.d.cts +2 -2
  24. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +160 -0
  25. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +34 -0
  26. package/dist/lib/cjs/obsidian/{plugin/components → components}/i18n-component.cjs +4 -4
  27. package/dist/lib/cjs/obsidian/{plugin/components → components}/i18n-component.d.cts +2 -2
  28. package/dist/lib/cjs/obsidian/components/index.cjs +40 -7
  29. package/dist/lib/cjs/obsidian/components/index.d.cts +13 -2
  30. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +185 -0
  31. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +47 -0
  32. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +172 -0
  33. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +41 -0
  34. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +197 -0
  35. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +113 -0
  36. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-context-component.cjs +6 -6
  37. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-context-component.d.cts +2 -2
  38. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-notice-component.cjs +3 -2
  39. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-notice-component.d.cts +2 -2
  40. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +534 -0
  41. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-settings-component.d.cts +6 -21
  42. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-settings-tab-component.cjs +3 -2
  43. package/dist/lib/cjs/obsidian/{plugin/components → components}/plugin-settings-tab-component.d.cts +5 -5
  44. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.cjs +20 -16
  45. package/dist/lib/cjs/obsidian/dataview.cjs +1 -1
  46. package/dist/lib/cjs/obsidian/dataview.d.cts +1 -1
  47. package/dist/lib/cjs/obsidian/index.cjs +7 -4
  48. package/dist/lib/cjs/obsidian/index.d.cts +2 -1
  49. package/dist/lib/cjs/obsidian/loop.cjs +1 -1
  50. package/dist/lib/cjs/obsidian/loop.d.cts +2 -2
  51. package/dist/lib/cjs/obsidian/markdown.cjs +13 -7
  52. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -50
  53. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -35
  54. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -1
  55. package/dist/lib/cjs/obsidian/modals/prompt.d.cts +1 -1
  56. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -1
  57. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -1
  58. package/dist/lib/cjs/obsidian/path-settings.cjs +239 -0
  59. package/dist/lib/cjs/obsidian/plugin/index.cjs +1 -7
  60. package/dist/lib/cjs/obsidian/plugin/index.d.cts +0 -2
  61. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +4 -4
  62. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +5 -5
  63. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +39 -34
  64. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +13 -11
  65. package/dist/lib/cjs/obsidian/queue.cjs +1 -1
  66. package/dist/lib/cjs/obsidian/queue.d.cts +2 -2
  67. package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +19 -12
  68. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +209 -0
  69. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/checkbox-component.d.cts +1 -1
  70. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +356 -0
  71. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/code-highlighter-component.d.cts +1 -1
  72. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-component.cjs +3 -3
  73. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-time-component.cjs +3 -3
  74. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/email-component.cjs +2 -2
  75. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/file-component.cjs +2 -2
  76. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/index.cjs +1 -1
  77. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/month-component.cjs +3 -3
  78. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +241 -0
  79. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-dropdown-component.d.cts +1 -1
  80. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-email-component.cjs +2 -2
  81. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-file-component.cjs +3 -3
  82. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +254 -0
  83. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-text-component.d.cts +1 -1
  84. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/number-component.cjs +2 -2
  85. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/password-component.cjs +2 -2
  86. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/setting-component-wrapper.cjs +4 -4
  87. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/telephone-component.cjs +2 -2
  88. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/text-based-component.cjs +1 -1
  89. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/time-component.cjs +2 -2
  90. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +210 -0
  91. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/tri-state-checkbox-component.d.cts +1 -1
  92. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +247 -0
  93. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-dropdown-component.d.cts +1 -1
  94. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +249 -0
  95. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-multiple-dropdown-component.d.cts +1 -1
  96. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-range-text-component.cjs +1 -1
  97. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +224 -0
  98. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-text-component.d.cts +2 -2
  99. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/url-component.cjs +2 -2
  100. package/dist/lib/cjs/obsidian/setting-components/validator-component.cjs +226 -0
  101. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/validator-component.d.cts +1 -1
  102. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.cjs +1 -1
  103. package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/week-component.cjs +3 -3
  104. package/dist/lib/cjs/obsidian/setting-ex.cjs +21 -21
  105. package/dist/lib/cjs/obsidian/setting-ex.d.cts +20 -20
  106. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +1 -1
  107. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +2 -2
  108. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +2 -1
  109. package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +2 -2
  110. package/dist/lib/cjs/type.cjs +1 -1
  111. package/dist/lib/esm/async-events.d.mts +19 -19
  112. package/dist/lib/esm/async-events.mjs +15 -18
  113. package/dist/lib/esm/async.d.mts +9 -8
  114. package/dist/lib/esm/async.mjs +1 -1
  115. package/dist/lib/esm/function.d.mts +43 -3
  116. package/dist/lib/esm/function.mjs +1 -1
  117. package/dist/lib/esm/library.mjs +1 -1
  118. package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
  119. package/dist/lib/esm/obsidian/async-with-notice.mjs +1 -1
  120. package/dist/lib/esm/obsidian/{plugin/components → components}/abort-signal-component.d.mts +2 -2
  121. package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +59 -0
  122. package/dist/lib/{cjs/obsidian/components/all-windows-event-handler.d.cts → esm/obsidian/components/all-windows-event-component.d.mts} +6 -7
  123. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +93 -0
  124. package/dist/lib/esm/obsidian/components/async-component.d.mts +2 -1
  125. package/dist/lib/esm/obsidian/components/async-component.mjs +3 -2
  126. package/dist/lib/esm/obsidian/{plugin/components → components}/async-error-handler-component.d.mts +2 -2
  127. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +62 -0
  128. package/dist/lib/esm/obsidian/components/async-events-component.d.mts +2 -1
  129. package/dist/lib/esm/obsidian/components/async-events-component.mjs +3 -2
  130. package/dist/lib/esm/obsidian/{plugin/components → components}/console-debug-component.d.mts +2 -2
  131. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +56 -0
  132. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +34 -0
  133. package/dist/lib/esm/obsidian/components/disposable-component.mjs +50 -0
  134. package/dist/lib/esm/obsidian/{plugin/components → components}/i18n-component.d.mts +2 -2
  135. package/dist/lib/esm/obsidian/components/i18n-component.mjs +53 -0
  136. package/dist/lib/esm/obsidian/components/index.d.mts +13 -2
  137. package/dist/lib/esm/obsidian/components/index.mjs +27 -5
  138. package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +47 -0
  139. package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +76 -0
  140. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +41 -0
  141. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +64 -0
  142. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +113 -0
  143. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +87 -0
  144. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-context-component.d.mts +2 -2
  145. package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +61 -0
  146. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-notice-component.d.mts +2 -2
  147. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +58 -0
  148. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-settings-component.d.mts +6 -21
  149. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +433 -0
  150. package/dist/lib/esm/obsidian/{plugin/components → components}/plugin-settings-tab-component.d.mts +5 -5
  151. package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +50 -0
  152. package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.mjs +20 -16
  153. package/dist/lib/esm/obsidian/dataview.d.mts +1 -1
  154. package/dist/lib/esm/obsidian/dataview.mjs +1 -1
  155. package/dist/lib/esm/obsidian/index.d.mts +2 -1
  156. package/dist/lib/esm/obsidian/index.mjs +5 -3
  157. package/dist/lib/esm/obsidian/loop.d.mts +2 -2
  158. package/dist/lib/esm/obsidian/loop.mjs +1 -1
  159. package/dist/lib/esm/obsidian/markdown.mjs +13 -7
  160. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -35
  161. package/dist/lib/esm/obsidian/menu-event-registrar.mjs +1 -42
  162. package/dist/lib/esm/obsidian/modals/prompt.d.mts +1 -1
  163. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -1
  164. package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
  165. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -1
  166. package/dist/lib/esm/obsidian/path-settings.mjs +135 -0
  167. package/dist/lib/esm/obsidian/plugin/index.d.mts +0 -2
  168. package/dist/lib/esm/obsidian/plugin/index.mjs +1 -5
  169. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +5 -5
  170. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +4 -4
  171. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +13 -11
  172. package/dist/lib/esm/obsidian/plugin/plugin.mjs +39 -34
  173. package/dist/lib/esm/obsidian/queue.d.mts +2 -2
  174. package/dist/lib/esm/obsidian/queue.mjs +1 -1
  175. package/dist/lib/esm/obsidian/rename-delete-handler.mjs +22 -12
  176. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/checkbox-component.d.mts +1 -1
  177. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +101 -0
  178. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/code-highlighter-component.d.mts +1 -1
  179. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +254 -0
  180. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +62 -0
  181. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +62 -0
  182. package/dist/lib/esm/obsidian/setting-components/email-component.mjs +72 -0
  183. package/dist/lib/esm/obsidian/setting-components/file-component.mjs +66 -0
  184. package/dist/lib/esm/obsidian/setting-components/index.mjs +78 -0
  185. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +70 -0
  186. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-dropdown-component.d.mts +1 -1
  187. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +136 -0
  188. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +59 -0
  189. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +68 -0
  190. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-text-component.d.mts +1 -1
  191. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +149 -0
  192. package/dist/lib/esm/obsidian/setting-components/number-component.mjs +82 -0
  193. package/dist/lib/esm/obsidian/setting-components/password-component.mjs +58 -0
  194. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +45 -0
  195. package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +72 -0
  196. package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +58 -0
  197. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +67 -0
  198. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/tri-state-checkbox-component.d.mts +1 -1
  199. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +102 -0
  200. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-dropdown-component.d.mts +1 -1
  201. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +142 -0
  202. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-multiple-dropdown-component.d.mts +1 -1
  203. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +141 -0
  204. package/dist/lib/esm/obsidian/setting-components/typed-range-text-component.mjs +60 -0
  205. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-text-component.d.mts +2 -2
  206. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +119 -0
  207. package/dist/lib/esm/obsidian/setting-components/url-component.mjs +72 -0
  208. package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/validator-component.d.mts +1 -1
  209. package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +127 -0
  210. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +70 -0
  211. package/dist/lib/esm/obsidian/setting-ex.d.mts +20 -20
  212. package/dist/lib/esm/obsidian/setting-ex.mjs +21 -21
  213. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +2 -2
  214. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
  215. package/dist/lib/esm/script-utils/linters/eslint-config.d.mts +2 -2
  216. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +2 -1
  217. package/dist/lib/esm/type.mjs +1 -1
  218. package/obsidian/Components/abort-signal-component/package.json +6 -0
  219. package/obsidian/Components/{all-windows-event-handler → all-windows-event-component}/package.json +3 -3
  220. package/obsidian/Components/async-error-handler-component/package.json +6 -0
  221. package/obsidian/Components/console-debug-component/package.json +6 -0
  222. package/obsidian/Components/disposable-component/package.json +6 -0
  223. package/obsidian/Components/i18n-component/package.json +6 -0
  224. package/obsidian/Components/layout-ready-component/package.json +6 -0
  225. package/obsidian/Components/menu-event-registrar-component/package.json +6 -0
  226. package/obsidian/Components/monkey-around-component/package.json +6 -0
  227. package/obsidian/Components/plugin-context-component/package.json +6 -0
  228. package/obsidian/Components/plugin-notice-component/package.json +6 -0
  229. package/obsidian/Components/plugin-settings-component/package.json +6 -0
  230. package/obsidian/Components/plugin-settings-tab-component/package.json +6 -0
  231. package/obsidian/path-settings/package.json +6 -0
  232. package/obsidian/setting-components/checkbox-component/package.json +6 -0
  233. package/obsidian/setting-components/code-highlighter-component/package.json +6 -0
  234. package/obsidian/setting-components/date-component/package.json +6 -0
  235. package/obsidian/setting-components/date-time-component/package.json +6 -0
  236. package/obsidian/setting-components/email-component/package.json +6 -0
  237. package/obsidian/setting-components/file-component/package.json +6 -0
  238. package/obsidian/setting-components/index/package.json +6 -0
  239. package/obsidian/setting-components/month-component/package.json +6 -0
  240. package/obsidian/setting-components/multiple-dropdown-component/package.json +6 -0
  241. package/obsidian/setting-components/multiple-email-component/package.json +6 -0
  242. package/obsidian/setting-components/multiple-file-component/package.json +6 -0
  243. package/obsidian/setting-components/multiple-text-component/package.json +6 -0
  244. package/obsidian/setting-components/number-component/package.json +6 -0
  245. package/obsidian/setting-components/package.json +6 -0
  246. package/obsidian/setting-components/password-component/package.json +6 -0
  247. package/obsidian/setting-components/setting-component-wrapper/package.json +6 -0
  248. package/obsidian/setting-components/telephone-component/package.json +6 -0
  249. package/obsidian/setting-components/text-based-component/package.json +6 -0
  250. package/obsidian/setting-components/time-component/package.json +6 -0
  251. package/obsidian/setting-components/tri-state-checkbox-component/package.json +6 -0
  252. package/obsidian/setting-components/typed-dropdown-component/package.json +6 -0
  253. package/obsidian/setting-components/typed-multiple-dropdown-component/package.json +6 -0
  254. package/obsidian/setting-components/typed-range-text-component/package.json +6 -0
  255. package/obsidian/setting-components/typed-text-component/package.json +6 -0
  256. package/obsidian/setting-components/url-component/package.json +6 -0
  257. package/obsidian/setting-components/validator-component/package.json +6 -0
  258. package/obsidian/setting-components/value-component-with-change-tracking/package.json +6 -0
  259. package/obsidian/setting-components/week-component/package.json +6 -0
  260. package/package.json +23 -43
  261. package/dist/lib/cjs/obsidian/components/all-windows-event-handler.cjs +0 -196
  262. package/dist/lib/cjs/obsidian/components/setting-components/checkbox-component.cjs +0 -209
  263. package/dist/lib/cjs/obsidian/components/setting-components/code-highlighter-component.cjs +0 -356
  264. package/dist/lib/cjs/obsidian/components/setting-components/multiple-dropdown-component.cjs +0 -241
  265. package/dist/lib/cjs/obsidian/components/setting-components/multiple-text-component.cjs +0 -254
  266. package/dist/lib/cjs/obsidian/components/setting-components/tri-state-checkbox-component.cjs +0 -210
  267. package/dist/lib/cjs/obsidian/components/setting-components/typed-dropdown-component.cjs +0 -247
  268. package/dist/lib/cjs/obsidian/components/setting-components/typed-multiple-dropdown-component.cjs +0 -249
  269. package/dist/lib/cjs/obsidian/components/setting-components/typed-text-component.cjs +0 -224
  270. package/dist/lib/cjs/obsidian/components/setting-components/validator-component.cjs +0 -226
  271. package/dist/lib/cjs/obsidian/monkey-around.cjs +0 -177
  272. package/dist/lib/cjs/obsidian/monkey-around.d.cts +0 -62
  273. package/dist/lib/cjs/obsidian/plugin/components/index.cjs +0 -170
  274. package/dist/lib/cjs/obsidian/plugin/components/index.d.cts +0 -9
  275. package/dist/lib/cjs/obsidian/plugin/components/layout-ready-component.cjs +0 -124
  276. package/dist/lib/cjs/obsidian/plugin/components/layout-ready-component.d.cts +0 -18
  277. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.cjs +0 -563
  278. package/dist/lib/cjs/obsidian/plugin/path-settings.cjs +0 -239
  279. package/dist/lib/esm/obsidian/components/all-windows-event-handler.mjs +0 -88
  280. package/dist/lib/esm/obsidian/components/setting-components/checkbox-component.mjs +0 -101
  281. package/dist/lib/esm/obsidian/components/setting-components/code-highlighter-component.mjs +0 -254
  282. package/dist/lib/esm/obsidian/components/setting-components/date-component.mjs +0 -62
  283. package/dist/lib/esm/obsidian/components/setting-components/date-time-component.mjs +0 -62
  284. package/dist/lib/esm/obsidian/components/setting-components/email-component.mjs +0 -72
  285. package/dist/lib/esm/obsidian/components/setting-components/file-component.mjs +0 -66
  286. package/dist/lib/esm/obsidian/components/setting-components/index.mjs +0 -78
  287. package/dist/lib/esm/obsidian/components/setting-components/month-component.mjs +0 -70
  288. package/dist/lib/esm/obsidian/components/setting-components/multiple-dropdown-component.mjs +0 -136
  289. package/dist/lib/esm/obsidian/components/setting-components/multiple-email-component.mjs +0 -59
  290. package/dist/lib/esm/obsidian/components/setting-components/multiple-file-component.mjs +0 -68
  291. package/dist/lib/esm/obsidian/components/setting-components/multiple-text-component.mjs +0 -149
  292. package/dist/lib/esm/obsidian/components/setting-components/number-component.mjs +0 -82
  293. package/dist/lib/esm/obsidian/components/setting-components/password-component.mjs +0 -58
  294. package/dist/lib/esm/obsidian/components/setting-components/setting-component-wrapper.mjs +0 -45
  295. package/dist/lib/esm/obsidian/components/setting-components/telephone-component.mjs +0 -72
  296. package/dist/lib/esm/obsidian/components/setting-components/text-based-component.mjs +0 -58
  297. package/dist/lib/esm/obsidian/components/setting-components/time-component.mjs +0 -67
  298. package/dist/lib/esm/obsidian/components/setting-components/tri-state-checkbox-component.mjs +0 -102
  299. package/dist/lib/esm/obsidian/components/setting-components/typed-dropdown-component.mjs +0 -142
  300. package/dist/lib/esm/obsidian/components/setting-components/typed-multiple-dropdown-component.mjs +0 -141
  301. package/dist/lib/esm/obsidian/components/setting-components/typed-range-text-component.mjs +0 -60
  302. package/dist/lib/esm/obsidian/components/setting-components/typed-text-component.mjs +0 -119
  303. package/dist/lib/esm/obsidian/components/setting-components/url-component.mjs +0 -72
  304. package/dist/lib/esm/obsidian/components/setting-components/validator-component.mjs +0 -127
  305. package/dist/lib/esm/obsidian/components/setting-components/week-component.mjs +0 -70
  306. package/dist/lib/esm/obsidian/monkey-around.d.mts +0 -62
  307. package/dist/lib/esm/obsidian/monkey-around.mjs +0 -66
  308. package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.mjs +0 -59
  309. package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.mjs +0 -62
  310. package/dist/lib/esm/obsidian/plugin/components/console-debug-component.mjs +0 -56
  311. package/dist/lib/esm/obsidian/plugin/components/i18n-component.mjs +0 -53
  312. package/dist/lib/esm/obsidian/plugin/components/index.d.mts +0 -9
  313. package/dist/lib/esm/obsidian/plugin/components/index.mjs +0 -44
  314. package/dist/lib/esm/obsidian/plugin/components/layout-ready-component.d.mts +0 -18
  315. package/dist/lib/esm/obsidian/plugin/components/layout-ready-component.mjs +0 -24
  316. package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.mjs +0 -61
  317. package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.mjs +0 -60
  318. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.mjs +0 -461
  319. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.mjs +0 -49
  320. package/dist/lib/esm/obsidian/plugin/path-settings.mjs +0 -135
  321. package/obsidian/Components/setting-components/checkbox-component/package.json +0 -6
  322. package/obsidian/Components/setting-components/code-highlighter-component/package.json +0 -6
  323. package/obsidian/Components/setting-components/date-component/package.json +0 -6
  324. package/obsidian/Components/setting-components/date-time-component/package.json +0 -6
  325. package/obsidian/Components/setting-components/email-component/package.json +0 -6
  326. package/obsidian/Components/setting-components/file-component/package.json +0 -6
  327. package/obsidian/Components/setting-components/index/package.json +0 -6
  328. package/obsidian/Components/setting-components/month-component/package.json +0 -6
  329. package/obsidian/Components/setting-components/multiple-dropdown-component/package.json +0 -6
  330. package/obsidian/Components/setting-components/multiple-email-component/package.json +0 -6
  331. package/obsidian/Components/setting-components/multiple-file-component/package.json +0 -6
  332. package/obsidian/Components/setting-components/multiple-text-component/package.json +0 -6
  333. package/obsidian/Components/setting-components/number-component/package.json +0 -6
  334. package/obsidian/Components/setting-components/package.json +0 -6
  335. package/obsidian/Components/setting-components/password-component/package.json +0 -6
  336. package/obsidian/Components/setting-components/setting-component-wrapper/package.json +0 -6
  337. package/obsidian/Components/setting-components/telephone-component/package.json +0 -6
  338. package/obsidian/Components/setting-components/text-based-component/package.json +0 -6
  339. package/obsidian/Components/setting-components/time-component/package.json +0 -6
  340. package/obsidian/Components/setting-components/tri-state-checkbox-component/package.json +0 -6
  341. package/obsidian/Components/setting-components/typed-dropdown-component/package.json +0 -6
  342. package/obsidian/Components/setting-components/typed-multiple-dropdown-component/package.json +0 -6
  343. package/obsidian/Components/setting-components/typed-range-text-component/package.json +0 -6
  344. package/obsidian/Components/setting-components/typed-text-component/package.json +0 -6
  345. package/obsidian/Components/setting-components/url-component/package.json +0 -6
  346. package/obsidian/Components/setting-components/validator-component/package.json +0 -6
  347. package/obsidian/Components/setting-components/value-component-with-change-tracking/package.json +0 -6
  348. package/obsidian/Components/setting-components/week-component/package.json +0 -6
  349. package/obsidian/Plugin/components/abort-signal-component/package.json +0 -6
  350. package/obsidian/Plugin/components/async-error-handler-component/package.json +0 -6
  351. package/obsidian/Plugin/components/console-debug-component/package.json +0 -6
  352. package/obsidian/Plugin/components/i18n-component/package.json +0 -6
  353. package/obsidian/Plugin/components/index/package.json +0 -6
  354. package/obsidian/Plugin/components/layout-ready-component/package.json +0 -6
  355. package/obsidian/Plugin/components/package.json +0 -6
  356. package/obsidian/Plugin/components/plugin-context-component/package.json +0 -6
  357. package/obsidian/Plugin/components/plugin-notice-component/package.json +0 -6
  358. package/obsidian/Plugin/components/plugin-settings-component/package.json +0 -6
  359. package/obsidian/Plugin/components/plugin-settings-tab-component/package.json +0 -6
  360. package/obsidian/Plugin/path-settings/package.json +0 -6
  361. package/obsidian/monkey-around/package.json +0 -6
  362. /package/dist/lib/cjs/obsidian/{plugin/path-settings.d.cts → path-settings.d.cts} +0 -0
  363. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-component.d.cts +0 -0
  364. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/date-time-component.d.cts +0 -0
  365. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/email-component.d.cts +0 -0
  366. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/file-component.d.cts +0 -0
  367. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/index.d.cts +0 -0
  368. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/month-component.d.cts +0 -0
  369. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-email-component.d.cts +0 -0
  370. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/multiple-file-component.d.cts +0 -0
  371. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/number-component.d.cts +0 -0
  372. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/password-component.d.cts +0 -0
  373. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/setting-component-wrapper.d.cts +0 -0
  374. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/telephone-component.d.cts +0 -0
  375. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/text-based-component.d.cts +0 -0
  376. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/time-component.d.cts +0 -0
  377. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/typed-range-text-component.d.cts +0 -0
  378. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/url-component.d.cts +0 -0
  379. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.d.cts +0 -0
  380. /package/dist/lib/cjs/obsidian/{components/setting-components → setting-components}/week-component.d.cts +0 -0
  381. /package/dist/lib/esm/obsidian/{plugin/path-settings.d.mts → path-settings.d.mts} +0 -0
  382. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/date-component.d.mts +0 -0
  383. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/date-time-component.d.mts +0 -0
  384. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/email-component.d.mts +0 -0
  385. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/file-component.d.mts +0 -0
  386. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/index.d.mts +0 -0
  387. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/month-component.d.mts +0 -0
  388. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-email-component.d.mts +0 -0
  389. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/multiple-file-component.d.mts +0 -0
  390. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/number-component.d.mts +0 -0
  391. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/password-component.d.mts +0 -0
  392. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/setting-component-wrapper.d.mts +0 -0
  393. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/telephone-component.d.mts +0 -0
  394. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/text-based-component.d.mts +0 -0
  395. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/time-component.d.mts +0 -0
  396. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/typed-range-text-component.d.mts +0 -0
  397. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/url-component.d.mts +0 -0
  398. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.d.mts +0 -0
  399. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/value-component-with-change-tracking.mjs +0 -0
  400. /package/dist/lib/esm/obsidian/{components/setting-components → setting-components}/week-component.d.mts +0 -0
@@ -1,461 +0,0 @@
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 "../../components/async-component.mjs";
43
- import { registerAsyncEvent } from "../../components/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 EmptyDataHandler {
53
- async loadData() {
54
- await noopAsync();
55
- return {};
56
- }
57
- /* v8 ignore start -- unreachable because EmptyPluginSettingsComponent has no properties to change, so saveToFile always short-circuits. */
58
- async saveData() {
59
- await noopAsync();
60
- }
61
- /* v8 ignore stop */
62
- }
63
- class PluginSettingsComponentBase extends AsyncComponentBase {
64
- /**
65
- * Creates a new plugin settings component.
66
- *
67
- * @param dataHandler - The data handler.
68
- */
69
- constructor(dataHandler) {
70
- super();
71
- this.dataHandler = dataHandler;
72
- this.defaultSettings = this.createDefaultSettings();
73
- this.currentState = this.createDefaultState();
74
- this.lastSavedState = this.createDefaultState();
75
- this.propertyNames = getAllKeys(this.currentState.inputValues);
76
- this.registerValidators();
77
- this.registerLegacySettingsConverters();
78
- }
79
- dataHandler;
80
- /**
81
- * Component key for singleton replacement via {@link PluginBase.addChild}.
82
- */
83
- static COMPONENT_KEY = Symbol(PluginSettingsComponentBase.name);
84
- /**
85
- * Gets the readonly default settings.
86
- *
87
- * @returns The default settings (as a readonly object).
88
- */
89
- defaultSettings;
90
- /**
91
- * Gets the readonly effective settings (validated, with defaults substituted for invalid values).
92
- *
93
- * @returns The readonly effective settings.
94
- */
95
- get settings() {
96
- return this.settingsState.effectiveValues;
97
- }
98
- /**
99
- * Gets the current settings state snapshot.
100
- *
101
- * @returns The current settings state.
102
- */
103
- get settingsState() {
104
- return this.currentState;
105
- }
106
- asyncEvents = new AsyncEvents();
107
- currentState;
108
- lastSavedState;
109
- legacySettingsConverters = [];
110
- propertyNames;
111
- validators = /* @__PURE__ */ new Map();
112
- /**
113
- * Edits the plugin settings and saves them.
114
- *
115
- * @param settingsEditor - The editor.
116
- * @param context - The context.
117
- * @returns A {@link Promise} that resolves when the settings are saved.
118
- */
119
- async editAndSave(settingsEditor, context) {
120
- await this.edit(settingsEditor);
121
- await this.saveToFile(context);
122
- }
123
- /**
124
- * Ensures the settings are safe.
125
- *
126
- * It runs validation for each property and sets the default value if the validation fails.
127
- *
128
- * @param settings - The settings.
129
- * @returns A {@link Promise} that resolves when the settings are safe.
130
- */
131
- async ensureSafe(settings) {
132
- const validationResult = await this.validate(settings);
133
- const defaults = this.defaultSettings;
134
- for (const propertyName of this.propertyNames) {
135
- if (validationResult[propertyName]) {
136
- settings[propertyName] = defaults[propertyName];
137
- }
138
- }
139
- }
140
- /**
141
- * Gets a safe copy of the settings.
142
- *
143
- * @param settings - The settings.
144
- * @returns A {@link Promise} that resolves to the safe copy of the settings.
145
- */
146
- async getSafeCopy(settings) {
147
- const safeSettings = await this.cloneSettings(settings);
148
- await this.ensureSafe(safeSettings);
149
- return safeSettings;
150
- }
151
- /**
152
- * Loads the plugin settings from the file.
153
- *
154
- * @param isInitialLoad - Whether the settings are being loaded for the first time.
155
- * @returns A {@link Promise} that resolves when the settings are loaded.
156
- */
157
- async loadFromFile(isInitialLoad) {
158
- const data = await this.dataHandler.loadData();
159
- this.lastSavedState = this.createDefaultState();
160
- this.currentState = this.createDefaultState();
161
- try {
162
- if (data === void 0 || data === null) {
163
- return;
164
- }
165
- if (typeof data !== "object") {
166
- console.error(`Invalid settings from data.json. Expected Object, got: ${typeof data}`);
167
- return;
168
- }
169
- const rawRecord = data;
170
- const parsedSettings = await this.rawRecordToSettings(rawRecord);
171
- const validationResult = await this.validate(parsedSettings);
172
- for (const propertyName of this.propertyNames) {
173
- this.setPropertyImpl(propertyName, parsedSettings[propertyName], validationResult[propertyName]);
174
- }
175
- this.lastSavedState = await this.cloneState(this.currentState);
176
- const newRecord = await this.settingsToRawRecord(this.currentState.inputValues);
177
- if (!deepEqual(newRecord, data)) {
178
- await this.saveToFileImpl();
179
- }
180
- } finally {
181
- await this.asyncEvents.triggerAsync("loadSettings", this.currentState, isInitialLoad);
182
- }
183
- }
184
- /**
185
- * Subscribes to an event.
186
- *
187
- * @param name - The name of the event.
188
- * @param callback - The callback.
189
- * @param thisArg - The `this` context.
190
- * @returns A reference to the event listener.
191
- */
192
- on(name, callback, thisArg) {
193
- return this.asyncEvents.on(name, callback, thisArg);
194
- }
195
- /**
196
- * Called when the external settings change.
197
- *
198
- * @returns A {@link Promise} that resolves when the settings are reloaded.
199
- */
200
- async onExternalSettingsChange() {
201
- await this.loadFromFile(false);
202
- }
203
- /**
204
- * Loads settings from file and registers event handlers.
205
- */
206
- async onload() {
207
- await super.onload();
208
- registerAsyncEvent(this, this.on("loadSettings", this.onLoadSettings.bind(this)));
209
- registerAsyncEvent(this, this.on("saveSettings", this.onSaveSettings.bind(this)));
210
- await this.loadFromFile(true);
211
- }
212
- /**
213
- * Registers a legacy settings converter.
214
- *
215
- * @typeParam LegacySettings - The legacy settings class.
216
- * @param legacySettingsClass - The legacy settings class.
217
- * @param converter - The converter.
218
- */
219
- registerLegacySettingsConverter(legacySettingsClass, converter) {
220
- const that = this;
221
- this.legacySettingsConverters.push(legacySettingsConverter);
222
- function legacySettingsConverter(record) {
223
- const legacySettingsKeys = new Set(Object.keys(new legacySettingsClass()));
224
- const pluginSettingKeys = new Set(that.propertyNames);
225
- const legacySettings = record;
226
- converter(legacySettings);
227
- for (const key of Object.keys(legacySettings)) {
228
- if (pluginSettingKeys.has(key)) {
229
- continue;
230
- }
231
- if (!legacySettingsKeys.has(key)) {
232
- continue;
233
- }
234
- delete record[key];
235
- }
236
- }
237
- }
238
- /**
239
- * Registers a validator for a property.
240
- *
241
- * @param propertyName - The name of the property.
242
- * @param validator - The validator.
243
- */
244
- registerValidator(propertyName, validator) {
245
- this.validators.set(propertyName, validator);
246
- }
247
- /**
248
- * Revalidates the settings.
249
- *
250
- * @returns The validation messages.
251
- */
252
- async revalidate() {
253
- await this.edit(noop);
254
- return this.currentState.validationMessages;
255
- }
256
- /**
257
- * Saves the new plugin settings.
258
- *
259
- * @param context - The context of the save to file operation.
260
- * @returns A {@link Promise} that resolves when the settings are saved.
261
- */
262
- async saveToFile(context) {
263
- if (deepEqual(this.lastSavedState.inputValues, this.currentState.inputValues)) {
264
- return;
265
- }
266
- await this.saveToFileImpl();
267
- await this.asyncEvents.triggerAsync("saveSettings", this.currentState, this.lastSavedState, context);
268
- this.lastSavedState = await this.cloneState(this.currentState);
269
- }
270
- /**
271
- * Sets the value of a property.
272
- *
273
- * @typeParam PropertyName - The name of the property.
274
- * @param propertyName - The name of the property.
275
- * @param value - The value to set.
276
- * @returns A {@link Promise} that resolves to the validation message.
277
- */
278
- async setProperty(propertyName, value) {
279
- await this.edit((settings) => {
280
- settings[propertyName] = value;
281
- });
282
- return this.currentState.validationMessages[propertyName];
283
- }
284
- /**
285
- * Validates the settings.
286
- *
287
- * @param settings - The settings.
288
- * @returns A {@link Promise} that resolves to the validation result.
289
- */
290
- async validate(settings) {
291
- const result = {};
292
- for (const [propertyName, validator] of this.validators.entries()) {
293
- const validationMessage = await validator(settings[propertyName], settings);
294
- if (validationMessage) {
295
- result[propertyName] = validationMessage;
296
- }
297
- }
298
- return result;
299
- }
300
- /**
301
- * Gets the transformer.
302
- *
303
- * @returns The transformer.
304
- */
305
- getTransformer() {
306
- return defaultTransformer;
307
- }
308
- /**
309
- * Called when the plugin settings record is loaded from disk.
310
- *
311
- * @param record - The record.
312
- */
313
- async onLoadRecord(record) {
314
- for (const converter of this.legacySettingsConverters) {
315
- converter(record);
316
- }
317
- await Promise.resolve();
318
- }
319
- /**
320
- * Called when settings are loaded or reloaded.
321
- *
322
- * @param _loadedState - The loaded settings state.
323
- * @param _isInitialLoad - Whether this is the initial load.
324
- */
325
- async onLoadSettings(_loadedState, _isInitialLoad) {
326
- await noopAsync();
327
- }
328
- /**
329
- * Called when settings are saved.
330
- *
331
- * @param _newState - The new settings state.
332
- * @param _oldState - The old settings state.
333
- * @param _context - The save context.
334
- */
335
- async onSaveSettings(_newState, _oldState, _context) {
336
- await noopAsync();
337
- }
338
- /**
339
- * Called when the plugin settings record is about to be saved to disk.
340
- *
341
- * @param _record - The record.
342
- */
343
- async onSavingRecord(_record) {
344
- await noopAsync();
345
- }
346
- /**
347
- * Registers the legacy settings converters.
348
- * Override to register legacy settings converters.
349
- */
350
- registerLegacySettingsConverters() {
351
- noop();
352
- }
353
- /**
354
- * Registers the validators.
355
- * Override to register validators for properties.
356
- */
357
- registerValidators() {
358
- noop();
359
- }
360
- async cloneSettings(settings) {
361
- const record = await this.settingsToRawRecord(settings);
362
- const json = JSON.stringify(record);
363
- const cloneRecord = JSON.parse(json);
364
- return await this.rawRecordToSettings(cloneRecord);
365
- }
366
- async cloneState(state) {
367
- return {
368
- effectiveValues: await this.cloneSettings(state.effectiveValues),
369
- inputValues: await this.cloneSettings(state.inputValues),
370
- validationMessages: { ...state.validationMessages }
371
- };
372
- }
373
- createDefaultState() {
374
- return {
375
- effectiveValues: this.createDefaultSettings(),
376
- inputValues: this.createDefaultSettings(),
377
- validationMessages: castTo({})
378
- };
379
- }
380
- async edit(settingsEditor) {
381
- try {
382
- await settingsEditor(this.currentState.inputValues);
383
- } finally {
384
- const validationResult = await this.validate(this.currentState.inputValues);
385
- for (const propertyName of this.propertyNames) {
386
- const validationMessage = validationResult[propertyName] ?? "";
387
- this.currentState.validationMessages[propertyName] = validationMessage;
388
- const defaults = this.defaultSettings;
389
- this.currentState.effectiveValues[propertyName] = validationMessage ? defaults[propertyName] : this.currentState.inputValues[propertyName];
390
- }
391
- }
392
- }
393
- isValidPropertyName(prop) {
394
- if (typeof prop !== "string") {
395
- return false;
396
- }
397
- return this.propertyNames.includes(prop);
398
- }
399
- async rawRecordToSettings(rawRecord) {
400
- rawRecord = this.getTransformer().transformObjectRecursively(rawRecord);
401
- await this.onLoadRecord(rawRecord);
402
- const settings = this.createDefaultSettings();
403
- const defaults = this.defaultSettings;
404
- for (const [propertyName, value] of Object.entries(rawRecord)) {
405
- if (!this.isValidPropertyName(propertyName)) {
406
- getLibDebugger("PluginSettingsComponentBase:rawRecordToSettings")(`Unknown property: ${propertyName}`);
407
- continue;
408
- }
409
- if (typeof value !== typeof defaults[propertyName]) {
410
- getLibDebugger("PluginSettingsComponentBase:rawRecordToSettings")(
411
- "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.",
412
- {
413
- defaultValue: defaults[propertyName],
414
- propertyName,
415
- value
416
- }
417
- );
418
- }
419
- settings[propertyName] = value;
420
- }
421
- return settings;
422
- }
423
- async saveToFileImpl() {
424
- await this.dataHandler.saveData(await this.settingsToRawRecord(this.currentState.inputValues));
425
- }
426
- setPropertyImpl(propertyName, value, validationMessage) {
427
- const defaults = this.defaultSettings;
428
- this.currentState.inputValues[propertyName] = value;
429
- this.currentState.validationMessages[propertyName] = validationMessage ?? "";
430
- this.currentState.effectiveValues[propertyName] = validationMessage ? defaults[propertyName] : value;
431
- }
432
- async settingsToRawRecord(settings) {
433
- const rawRecord = {};
434
- for (const propertyName of this.propertyNames) {
435
- rawRecord[propertyName] = settings[propertyName];
436
- }
437
- await this.onSavingRecord(rawRecord);
438
- return this.getTransformer().transformObjectRecursively(rawRecord);
439
- }
440
- }
441
- class EmptyPluginSettingsComponent extends PluginSettingsComponentBase {
442
- /**
443
- * Creates a new empty plugin settings component.
444
- */
445
- constructor() {
446
- super(new EmptyDataHandler());
447
- }
448
- /**
449
- * Creates empty default settings.
450
- *
451
- * @returns An empty object.
452
- */
453
- createDefaultSettings() {
454
- return {};
455
- }
456
- }
457
- export {
458
- EmptyPluginSettingsComponent,
459
- PluginSettingsComponentBase
460
- };
461
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIHBsdWdpbiBzZXR0aW5nczogZGF0YSwgcGVyc2lzdGVuY2UsIHZhbGlkYXRpb24sIGFuZCBldmVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgc2luZ2xlIHB1YmxpYy1mYWNpbmcgc2V0dGluZ3MgQVBJIGZvciBwbHVnaW4gYXV0aG9ycy5cbiAqIEFsbCBzZXR0aW5ncyBsb2dpYyAobG9hZCwgc2F2ZSwgdmFsaWRhdGUsIHRyYW5zZm9ybSwgY2xvbmUpIGlzIGhhbmRsZWQgZGlyZWN0bHlcbiAqIGJ5IHRoaXMgY29tcG9uZW50IFx1MjAxNCBubyBzZXBhcmF0ZSBtYW5hZ2VyIGNsYXNzIGlzIG5lZWRlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFzeW5jRXZlbnRSZWYgfSBmcm9tICcuLi8uLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy90cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4uLy4uLy4uL3R5cGUudHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhSGFuZGxlciB9IGZyb20gJy4uLy4uL2RhdGEtaGFuZGxlci50cyc7XG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi4vLi4vLi4vYXN5bmMtZXZlbnRzLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7XG4gIGNhc3RUbyxcbiAgZGVlcEVxdWFsLFxuICBnZXRBbGxLZXlzXG59IGZyb20gJy4uLy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBEYXRlVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi8uLi90cmFuc2Zvcm1lcnMvZGF0ZS10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBEdXJhdGlvblRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL2R1cmF0aW9uLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IEdyb3VwVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi8uLi90cmFuc2Zvcm1lcnMvZ3JvdXAtdHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgTWFwVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi8uLi90cmFuc2Zvcm1lcnMvbWFwLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IFNldFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL3NldC10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi8uLi90cmFuc2Zvcm1lcnMvc2tpcC1wcml2YXRlLXByb3BlcnR5LXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IFR3b1dheU1hcFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL3R3by13YXktbWFwLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IEFzeW5jQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYXN5bmMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IGRlZmF1bHRUcmFuc2Zvcm1lciA9IG5ldyBHcm91cFRyYW5zZm9ybWVyKFtcbiAgbmV3IFNraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lcigpLFxuICBuZXcgRGF0ZVRyYW5zZm9ybWVyKCksXG4gIG5ldyBEdXJhdGlvblRyYW5zZm9ybWVyKCksXG4gIG5ldyBNYXBUcmFuc2Zvcm1lcigpLFxuICBuZXcgU2V0VHJhbnNmb3JtZXIoKSxcbiAgbmV3IFR3b1dheU1hcFRyYW5zZm9ybWVyKClcbl0pO1xuXG4vKipcbiAqIEEgc25hcHNob3Qgb2YgcGx1Z2luIHNldHRpbmdzIHN0YXRlLCBpbmNsdWRpbmcgcmF3IGlucHV0IHZhbHVlcywgZWZmZWN0aXZlICh2YWxpZGF0ZWQpIHZhbHVlcyxcbiAqIGFuZCBwZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgZWZmZWN0aXZlIHNldHRpbmdzIHZhbHVlcyB1c2VkIGJ5IHRoZSBwbHVnaW4uIEludmFsaWQgcHJvcGVydGllcyBhcmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cy5cbiAgICovXG4gIGVmZmVjdGl2ZVZhbHVlczogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSByYXcgaW5wdXQgdmFsdWVzIGFzIGVudGVyZWQgYnkgdGhlIHVzZXIuIE1heSBjb250YWluIGludmFsaWQgdmFsdWVzLlxuICAgKi9cbiAgaW5wdXRWYWx1ZXM6IFBsdWdpblNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBQZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy4gRW1wdHkgc3RyaW5nIG1lYW5zIHZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3N9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NTdGF0ZX0gZm9yIHVzZSBpbiBldmVudCBjYWxsYmFja3MgYW5kIHB1YmxpYyBnZXR0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+ID0gUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+PjtcblxuLyoqXG4gKiBBIHZhbGlkYXRvciBmdW5jdGlvbiBmb3IgYSBzZXR0aW5ncyBwcm9wZXJ0eS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+ID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+ID0gKFxuICB2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSxcbiAgc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzXG4pID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG5cbnR5cGUgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPjtcblxudHlwZSBQcm9wZXJ0eVZhbHVlczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPl07XG5cbnR5cGUgVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBQYXJ0aWFsPFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPj47XG5cbmNsYXNzIEVtcHR5RGF0YUhhbmRsZXIgaW1wbGVtZW50cyBEYXRhSGFuZGxlciB7XG4gIHB1YmxpYyBhc3luYyBsb2FkRGF0YSgpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gdW5yZWFjaGFibGUgYmVjYXVzZSBFbXB0eVBsdWdpblNldHRpbmdzQ29tcG9uZW50IGhhcyBubyBwcm9wZXJ0aWVzIHRvIGNoYW5nZSwgc28gc2F2ZVRvRmlsZSBhbHdheXMgc2hvcnQtY2lyY3VpdHMuICovXG4gIHB1YmxpYyBhc3luYyBzYXZlRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHBsdWdpbiBzZXR0aW5ncyBjb21wb25lbnRzLlxuICpcbiAqIE1hbmFnZXMgc2V0dGluZ3MgZGF0YSwgcGVyc2lzdGVuY2UsIHZhbGlkYXRpb24sIGFuZCBldmVudHMuXG4gKiBQbHVnaW4gYXV0aG9ycyBleHRlbmQgdGhpcyBjbGFzcyBhbmQgaW1wbGVtZW50IHtAbGluayBjcmVhdGVEZWZhdWx0U2V0dGluZ3N9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgQXN5bmNDb21wb25lbnRCYXNlIHtcbiAgLyoqXG4gICAqIENvbXBvbmVudCBrZXkgZm9yIHNpbmdsZXRvbiByZXBsYWNlbWVudCB2aWEge0BsaW5rIFBsdWdpbkJhc2UuYWRkQ2hpbGR9LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QT05FTlRfS0VZID0gU3ltYm9sKFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZS5uYW1lKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgcmVhZG9ubHkgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgc2V0dGluZ3MgKGFzIGEgcmVhZG9ubHkgb2JqZWN0KS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlYWRvbmx5IGVmZmVjdGl2ZSBzZXR0aW5ncyAodmFsaWRhdGVkLCB3aXRoIGRlZmF1bHRzIHN1YnN0aXR1dGVkIGZvciBpbnZhbGlkIHZhbHVlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWFkb25seSBlZmZlY3RpdmUgc2V0dGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzU3RhdGUuZWZmZWN0aXZlVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgc3RhdGUgc25hcHNob3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldHRpbmdzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5nc1N0YXRlKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSBhcyBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhc3luY0V2ZW50cyA9IG5ldyBBc3luY0V2ZW50cygpO1xuICBwcml2YXRlIGN1cnJlbnRTdGF0ZTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz47XG4gIHByaXZhdGUgbGFzdFNhdmVkU3RhdGU6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIHJlYWRvbmx5IGxlZ2FjeVNldHRpbmdzQ29udmVydGVyczogKChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eU5hbWVzOiBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPltdO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRvcnMgPSBuZXcgTWFwPFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+LCBTZXR0aW5nc1ZhbGlkYXRvcjxQbHVnaW5TZXR0aW5ncz4+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFIYW5kbGVyIC0gVGhlIGRhdGEgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRhdGFIYW5kbGVyOiBEYXRhSGFuZGxlcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMucHJvcGVydHlOYW1lcyA9IGdldEFsbEtleXModGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5yZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgYW5kIHNhdmVzIHRoZW0uXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc0VkaXRvciAtIFRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVkaXRBbmRTYXZlKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZWRpdChzZXR0aW5nc0VkaXRvcik7XG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlKGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIHNldHRpbmdzIGFyZSBzYWZlLlxuICAgKlxuICAgKiBJdCBydW5zIHZhbGlkYXRpb24gZm9yIGVhY2ggcHJvcGVydHkgYW5kIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlIHZhbGlkYXRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2FmZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnN1cmVTYWZlKHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlKHNldHRpbmdzKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gZGVmYXVsdHNbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNhZmUgY29weSBvZiB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc2FmZSBjb3B5IG9mIHRoZSBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTYWZlQ29weShzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgY29uc3Qgc2FmZVNldHRpbmdzID0gYXdhaXQgdGhpcy5jbG9uZVNldHRpbmdzKHNldHRpbmdzKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVNhZmUoc2FmZVNldHRpbmdzKTtcbiAgICByZXR1cm4gc2FmZVNldHRpbmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgZnJvbSB0aGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGlzSW5pdGlhbExvYWQgLSBXaGV0aGVyIHRoZSBzZXR0aW5ncyBhcmUgYmVpbmcgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRGcm9tRmlsZShpc0luaXRpYWxMb2FkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YUhhbmRsZXIubG9hZERhdGEoKTtcbiAgICB0aGlzLmxhc3RTYXZlZFN0YXRlID0gdGhpcy5jcmVhdGVEZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFN0YXRlKCk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIHNldHRpbmdzIGZyb20gZGF0YS5qc29uLiBFeHBlY3RlZCBPYmplY3QsIGdvdDogJHt0eXBlb2YgZGF0YX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByYXdSZWNvcmQgPSBkYXRhIGFzIEdlbmVyaWNPYmplY3Q7XG4gICAgICBjb25zdCBwYXJzZWRTZXR0aW5ncyA9IGF3YWl0IHRoaXMucmF3UmVjb3JkVG9TZXR0aW5ncyhyYXdSZWNvcmQpO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdGUocGFyc2VkU2V0dGluZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eUltcGwocHJvcGVydHlOYW1lLCBwYXJzZWRTZXR0aW5nc1twcm9wZXJ0eU5hbWVdLCB2YWxpZGF0aW9uUmVzdWx0W3Byb3BlcnR5TmFtZV0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RTYXZlZFN0YXRlID0gYXdhaXQgdGhpcy5jbG9uZVN0YXRlKHRoaXMuY3VycmVudFN0YXRlKTtcblxuICAgICAgY29uc3QgbmV3UmVjb3JkID0gYXdhaXQgdGhpcy5zZXR0aW5nc1RvUmF3UmVjb3JkKHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKTtcblxuICAgICAgaWYgKCFkZWVwRXF1YWwobmV3UmVjb3JkLCBkYXRhKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVUb0ZpbGVJbXBsKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXN5bmNFdmVudHMudHJpZ2dlckFzeW5jKCdsb2FkU2V0dGluZ3MnLCB0aGlzLmN1cnJlbnRTdGF0ZSwgaXNJbml0aWFsTG9hZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIGBsb2FkU2V0dGluZ3NgIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIEFsd2F5cyBgbG9hZFNldHRpbmdzYC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0gdGhpc0FyZyAtIFRoZSBgdGhpc2AgY29udGV4dC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHVibGljIG9uKFxuICAgIG5hbWU6ICdsb2FkU2V0dGluZ3MnLFxuICAgIGNhbGxiYWNrOiAoXG4gICAgICBsb2FkZWRTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICAgIGlzSW5pdGlhbExvYWQ6IGJvb2xlYW5cbiAgICApID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZjtcbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIGBzYXZlU2V0dGluZ3NgIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIEFsd2F5cyBgc2F2ZVNldHRpbmdzYC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0gdGhpc0FyZyAtIFRoZSBgdGhpc2AgY29udGV4dC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHVibGljIG9uKFxuICAgIG5hbWU6ICdzYXZlU2V0dGluZ3MnLFxuICAgIGNhbGxiYWNrOiAoXG4gICAgICBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICAgIG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgY29udGV4dDogdW5rbm93blxuICAgICkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmO1xuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBhbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHRoaXNBcmcgLSBUaGUgYHRoaXNgIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIHB1YmxpYyBvbjxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmFzeW5jRXZlbnRzLm9uKG5hbWUsIGNhbGxiYWNrLCB0aGlzQXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSByZWxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnJvbUZpbGUoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHNldHRpbmdzIGZyb20gZmlsZSBhbmQgcmVnaXN0ZXJzIGV2ZW50IGhhbmRsZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vbmxvYWQoKTtcbiAgICByZWdpc3RlckFzeW5jRXZlbnQodGhpcywgdGhpcy5vbignbG9hZFNldHRpbmdzJywgdGhpcy5vbkxvYWRTZXR0aW5ncy5iaW5kKHRoaXMpKSk7XG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMsIHRoaXMub24oJ3NhdmVTZXR0aW5ncycsIHRoaXMub25TYXZlU2V0dGluZ3MuYmluZCh0aGlzKSkpO1xuICAgIGF3YWl0IHRoaXMubG9hZEZyb21GaWxlKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gTGVnYWN5U2V0dGluZ3MgLSBUaGUgbGVnYWN5IHNldHRpbmdzIGNsYXNzLlxuICAgKiBAcGFyYW0gbGVnYWN5U2V0dGluZ3NDbGFzcyAtIFRoZSBsZWdhY3kgc2V0dGluZ3MgY2xhc3MuXG4gICAqIEBwYXJhbSBjb252ZXJ0ZXIgLSBUaGUgY29udmVydGVyLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXI8TGVnYWN5U2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIGxlZ2FjeVNldHRpbmdzQ2xhc3M6IG5ldyAoKSA9PiBMZWdhY3lTZXR0aW5ncyxcbiAgICBjb252ZXJ0ZXI6IChsZWdhY3lTZXR0aW5nczogUGFydGlhbDxMZWdhY3lTZXR0aW5ncz4gJiBQYXJ0aWFsPFBsdWdpblNldHRpbmdzPikgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICB0aGlzLmxlZ2FjeVNldHRpbmdzQ29udmVydGVycy5wdXNoKGxlZ2FjeVNldHRpbmdzQ29udmVydGVyKTtcblxuICAgIGZ1bmN0aW9uIGxlZ2FjeVNldHRpbmdzQ29udmVydGVyKHJlY29yZDogR2VuZXJpY09iamVjdCk6IHZvaWQge1xuICAgICAgY29uc3QgbGVnYWN5U2V0dGluZ3NLZXlzID0gbmV3IFNldDxzdHJpbmc+KE9iamVjdC5rZXlzKG5ldyBsZWdhY3lTZXR0aW5nc0NsYXNzKCkpKTtcbiAgICAgIGNvbnN0IHBsdWdpblNldHRpbmdLZXlzID0gbmV3IFNldDxzdHJpbmc+KHRoYXQucHJvcGVydHlOYW1lcyk7XG4gICAgICBjb25zdCBsZWdhY3lTZXR0aW5ncyA9IHJlY29yZCBhcyBQYXJ0aWFsPExlZ2FjeVNldHRpbmdzPiAmIFBhcnRpYWw8UGx1Z2luU2V0dGluZ3M+O1xuICAgICAgY29udmVydGVyKGxlZ2FjeVNldHRpbmdzKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGxlZ2FjeVNldHRpbmdzKSkge1xuICAgICAgICBpZiAocGx1Z2luU2V0dGluZ0tleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbGVnYWN5U2V0dGluZ3NLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gICAgICAgIGRlbGV0ZSByZWNvcmRba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdmFsaWRhdG9yIGZvciBhIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIHZhbGlkYXRvci5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclZhbGlkYXRvcjxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsaWRhdG9yOiBTZXR0aW5nc1ZhbGlkYXRvcjxQbHVnaW5TZXR0aW5ncywgUHJvcGVydHlOYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRvcnMuc2V0KHByb3BlcnR5TmFtZSwgdmFsaWRhdG9yIGFzIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPik7XG4gIH1cblxuICAvKipcbiAgICogUmV2YWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXZhbGlkYXRlKCk6IFByb21pc2U8UmVjb3JkPFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+PiB7XG4gICAgYXdhaXQgdGhpcy5lZGl0KG5vb3ApO1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXM7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIG5ldyBwbHVnaW4gc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQgb2YgdGhlIHNhdmUgdG8gZmlsZSBvcGVyYXRpb24uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmVUb0ZpbGUoY29udGV4dD86IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZGVlcEVxdWFsKHRoaXMubGFzdFNhdmVkU3RhdGUuaW5wdXRWYWx1ZXMsIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICBhd2FpdCB0aGlzLmFzeW5jRXZlbnRzLnRyaWdnZXJBc3luYygnc2F2ZVNldHRpbmdzJywgdGhpcy5jdXJyZW50U3RhdGUsIHRoaXMubGFzdFNhdmVkU3RhdGUsIGNvbnRleHQpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSBhd2FpdCB0aGlzLmNsb25lU3RhdGUodGhpcy5jdXJyZW50U3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UHJvcGVydHk8UHJvcGVydHlOYW1lIGV4dGVuZHMgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4+KFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lLFxuICAgIHZhbHVlOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5lZGl0KChzZXR0aW5ncykgPT4ge1xuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXNbcHJvcGVydHlOYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkYXRpb24gcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlKHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncz4+IHtcbiAgICBjb25zdCByZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQ8UGx1Z2luU2V0dGluZ3M+ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCB2YWxpZGF0b3JdIG9mIHRoaXMudmFsaWRhdG9ycy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlID0gYXdhaXQgdmFsaWRhdG9yKHNldHRpbmdzW3Byb3BlcnR5TmFtZV0sIHNldHRpbmdzKTtcbiAgICAgIGlmICh2YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICByZXN1bHRbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVEZWZhdWx0U2V0dGluZ3MoKTogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRyYW5zZm9ybWVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VHJhbnNmb3JtZXIoKTogVHJhbnNmb3JtZXIge1xuICAgIHJldHVybiBkZWZhdWx0VHJhbnNmb3JtZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyByZWNvcmQgaXMgbG9hZGVkIGZyb20gZGlzay5cbiAgICpcbiAgICogQHBhcmFtIHJlY29yZCAtIFRoZSByZWNvcmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2FkUmVjb3JkKHJlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgY29udmVydGVyIG9mIHRoaXMubGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzKSB7XG4gICAgICBjb252ZXJ0ZXIocmVjb3JkKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gc2V0dGluZ3MgYXJlIGxvYWRlZCBvciByZWxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIF9sb2FkZWRTdGF0ZSAtIFRoZSBsb2FkZWQgc2V0dGluZ3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBfaXNJbml0aWFsTG9hZCAtIFdoZXRoZXIgdGhpcyBpcyB0aGUgaW5pdGlhbCBsb2FkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9hZFNldHRpbmdzKFxuICAgIF9sb2FkZWRTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBfaXNJbml0aWFsTG9hZDogYm9vbGVhblxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmV3U3RhdGUgLSBUaGUgbmV3IHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX29sZFN0YXRlIC0gVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9jb250ZXh0IC0gVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvblNhdmVTZXR0aW5ncyhcbiAgICBfbmV3U3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgX29sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIF9jb250ZXh0OiB1bmtub3duXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gc2V0dGluZ3MgcmVjb3JkIGlzIGFib3V0IHRvIGJlIHNhdmVkIHRvIGRpc2suXG4gICAqXG4gICAqIEBwYXJhbSBfcmVjb3JkIC0gVGhlIHJlY29yZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvblNhdmluZ1JlY29yZChfcmVjb3JkOiBHZW5lcmljT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBsZWdhY3kgc2V0dGluZ3MgY29udmVydGVycy5cbiAgICogT3ZlcnJpZGUgdG8gcmVnaXN0ZXIgbGVnYWN5IHNldHRpbmdzIGNvbnZlcnRlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVnaXN0ZXJMZWdhY3lTZXR0aW5nc0NvbnZlcnRlcnMoKTogdm9pZCB7XG4gICAgbm9vcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgdmFsaWRhdG9ycy5cbiAgICogT3ZlcnJpZGUgdG8gcmVnaXN0ZXIgdmFsaWRhdG9ycyBmb3IgcHJvcGVydGllcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWdpc3RlclZhbGlkYXRvcnMoKTogdm9pZCB7XG4gICAgbm9vcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbG9uZVNldHRpbmdzKHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQoc2V0dGluZ3MpO1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShyZWNvcmQpO1xuICAgIGNvbnN0IGNsb25lUmVjb3JkID0gSlNPTi5wYXJzZShqc29uKSBhcyBHZW5lcmljT2JqZWN0O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJhd1JlY29yZFRvU2V0dGluZ3MoY2xvbmVSZWNvcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbG9uZVN0YXRlKFxuICAgIHN0YXRlOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPlxuICApOiBQcm9taXNlPFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVmZmVjdGl2ZVZhbHVlczogYXdhaXQgdGhpcy5jbG9uZVNldHRpbmdzKHN0YXRlLmVmZmVjdGl2ZVZhbHVlcyksXG4gICAgICBpbnB1dFZhbHVlczogYXdhaXQgdGhpcy5jbG9uZVNldHRpbmdzKHN0YXRlLmlucHV0VmFsdWVzKSxcbiAgICAgIHZhbGlkYXRpb25NZXNzYWdlczogeyAuLi5zdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlZmF1bHRTdGF0ZSgpOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVmZmVjdGl2ZVZhbHVlczogdGhpcy5jcmVhdGVEZWZhdWx0U2V0dGluZ3MoKSxcbiAgICAgIGlucHV0VmFsdWVzOiB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpLFxuICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzOiBjYXN0VG88UmVjb3JkPFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+Pih7fSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlZGl0KHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNldHRpbmdzRWRpdG9yKHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdGUodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlID0gdmFsaWRhdGlvblJlc3VsdFtwcm9wZXJ0eU5hbWVdID8/ICcnO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5lZmZlY3RpdmVWYWx1ZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlXG4gICAgICAgICAgPyBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdXG4gICAgICAgICAgOiB0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZFByb3BlcnR5TmFtZShwcm9wOiB1bmtub3duKTogcHJvcCBpcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPiB7XG4gICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0eU5hbWVzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhwcm9wKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmF3UmVjb3JkVG9TZXR0aW5ncyhyYXdSZWNvcmQ6IEdlbmVyaWNPYmplY3QpOiBQcm9taXNlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgcmF3UmVjb3JkID0gdGhpcy5nZXRUcmFuc2Zvcm1lcigpLnRyYW5zZm9ybU9iamVjdFJlY3Vyc2l2ZWx5KHJhd1JlY29yZCk7XG4gICAgYXdhaXQgdGhpcy5vbkxvYWRSZWNvcmQocmF3UmVjb3JkKTtcblxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jcmVhdGVEZWZhdWx0U2V0dGluZ3MoKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuXG4gICAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmF3UmVjb3JkKSkge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsaWRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkge1xuICAgICAgICBnZXRMaWJEZWJ1Z2dlcignUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlOnJhd1JlY29yZFRvU2V0dGluZ3MnKShgVW5rbm93biBwcm9wZXJ0eTogJHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlb2YgZGVmYXVsdHNbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBnZXRMaWJEZWJ1Z2dlcignUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlOnJhd1JlY29yZFRvU2V0dGluZ3MnKShcbiAgICAgICAgICAnUG9zc2libGUgaW52YWxpZCB2YWx1ZSB0eXBlLiBJdCBtaWdodCBsZWFkIHRvIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIHBsdWdpbi4gVGhlcmUgaXMgYWxzbyBhIGNoYW5jZSBpdCBpcyBhIGZhbHNlLW5lZ2F0aXZlIHdhcm5pbmcsIGFzIHdlIGFyZSB1bmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCB0eXBlIG9mIHRoZSB2YWx1ZSBpbiBydW50aW1lLicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdLFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZSBhcyBQcm9wZXJ0eVZhbHVlczxQbHVnaW5TZXR0aW5ncz47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9GaWxlSW1wbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRhdGFIYW5kbGVyLnNhdmVEYXRhKGF3YWl0IHRoaXMuc2V0dGluZ3NUb1Jhd1JlY29yZCh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0eUltcGwoXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPixcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZXM8UGx1Z2luU2V0dGluZ3M+LFxuICAgIHZhbGlkYXRpb25NZXNzYWdlPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgdGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2UgPz8gJyc7XG4gICAgdGhpcy5jdXJyZW50U3RhdGUuZWZmZWN0aXZlVmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWxpZGF0aW9uTWVzc2FnZSA/IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV0gOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0dGluZ3NUb1Jhd1JlY29yZChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPEdlbmVyaWNPYmplY3Q+IHtcbiAgICBjb25zdCByYXdSZWNvcmQ6IEdlbmVyaWNPYmplY3QgPSB7fTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgcmF3UmVjb3JkW3Byb3BlcnR5TmFtZV0gPSBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub25TYXZpbmdSZWNvcmQocmF3UmVjb3JkKTtcblxuICAgIHJldHVybiB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmF3UmVjb3JkKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbm8tb3Agc2V0dGluZ3MgY29tcG9uZW50IGZvciBwbHVnaW5zIHdpdGhvdXQgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbXB0eVBsdWdpblNldHRpbmdzQ29tcG9uZW50IGV4dGVuZHMgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlbXB0eSBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG5ldyBFbXB0eURhdGFIYW5kbGVyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZW1wdHkgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZURlZmF1bHRTZXR0aW5ncygpOiBvYmplY3Qge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLDBCQUEwQjtBQUVuQyxNQUFNLHFCQUFxQixJQUFJLGlCQUFpQjtBQUFBLEVBQzlDLElBQUksK0JBQStCO0FBQUEsRUFDbkMsSUFBSSxnQkFBZ0I7QUFBQSxFQUNwQixJQUFJLG9CQUFvQjtBQUFBLEVBQ3hCLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUkscUJBQXFCO0FBQzNCLENBQUM7QUF3REQsTUFBTSxpQkFBd0M7QUFBQSxFQUM1QyxNQUFhLFdBQTZCO0FBQ3hDLFVBQU0sVUFBVTtBQUNoQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQUE7QUFBQSxFQUdBLE1BQWEsV0FBMEI7QUFDckMsVUFBTSxVQUFVO0FBQUEsRUFDbEI7QUFBQTtBQUVGO0FBVU8sTUFBZSxvQ0FBbUUsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBMkNuRyxZQUE2QixhQUEwQjtBQUM1RCxVQUFNO0FBRDRCO0FBRWxDLFNBQUssa0JBQWtCLEtBQUssc0JBQXNCO0FBQ2xELFNBQUssZUFBZSxLQUFLLG1CQUFtQjtBQUM1QyxTQUFLLGlCQUFpQixLQUFLLG1CQUFtQjtBQUM5QyxTQUFLLGdCQUFnQixXQUFXLEtBQUssYUFBYSxXQUFXO0FBQzdELFNBQUssbUJBQW1CO0FBQ3hCLFNBQUssaUNBQWlDO0FBQUEsRUFDeEM7QUFBQSxFQVJvQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBdkNwQyxPQUF1QixnQkFBZ0IsT0FBTyw0QkFBNEIsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU85RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9oQixJQUFXLFdBQXlDO0FBQ2xELFdBQU8sS0FBSyxjQUFjO0FBQUEsRUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGdCQUE2RDtBQUN0RSxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFaUIsY0FBYyxJQUFJLFlBQVk7QUFBQSxFQUN2QztBQUFBLEVBQ0E7QUFBQSxFQUNTLDJCQUFnRSxDQUFDO0FBQUEsRUFDakU7QUFBQSxFQUNBLGFBQWEsb0JBQUksSUFBc0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBd0J4RyxNQUFhLFlBQVksZ0JBQWdFLFNBQWtDO0FBQ3pILFVBQU0sS0FBSyxLQUFLLGNBQWM7QUFDOUIsVUFBTSxLQUFLLFdBQVcsT0FBTztBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsTUFBYSxXQUFXLFVBQXlDO0FBQy9ELFVBQU0sbUJBQW1CLE1BQU0sS0FBSyxTQUFTLFFBQVE7QUFDckQsVUFBTSxXQUFXLEtBQUs7QUFDdEIsZUFBVyxnQkFBZ0IsS0FBSyxlQUFlO0FBQzdDLFVBQUksaUJBQWlCLFlBQVksR0FBRztBQUNsQyxpQkFBUyxZQUFZLElBQUksU0FBUyxZQUFZO0FBQUEsTUFDaEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxZQUFZLFVBQW1EO0FBQzFFLFVBQU0sZUFBZSxNQUFNLEtBQUssY0FBYyxRQUFRO0FBQ3RELFVBQU0sS0FBSyxXQUFXLFlBQVk7QUFDbEMsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWEsYUFBYSxlQUF1QztBQUMvRCxVQUFNLE9BQU8sTUFBTSxLQUFLLFlBQVksU0FBUztBQUM3QyxTQUFLLGlCQUFpQixLQUFLLG1CQUFtQjtBQUM5QyxTQUFLLGVBQWUsS0FBSyxtQkFBbUI7QUFFNUMsUUFBSTtBQUNGLFVBQUksU0FBUyxVQUFhLFNBQVMsTUFBTTtBQUN2QztBQUFBLE1BQ0Y7QUFFQSxVQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGdCQUFRLE1BQU0sMERBQTBELE9BQU8sSUFBSSxFQUFFO0FBQ3JGO0FBQUEsTUFDRjtBQUVBLFlBQU0sWUFBWTtBQUNsQixZQUFNLGlCQUFpQixNQUFNLEtBQUssb0JBQW9CLFNBQVM7QUFDL0QsWUFBTSxtQkFBbUIsTUFBTSxLQUFLLFNBQVMsY0FBYztBQUUzRCxpQkFBVyxnQkFBZ0IsS0FBSyxlQUFlO0FBQzdDLGFBQUssZ0JBQWdCLGNBQWMsZUFBZSxZQUFZLEdBQUcsaUJBQWlCLFlBQVksQ0FBQztBQUFBLE1BQ2pHO0FBRUEsV0FBSyxpQkFBaUIsTUFBTSxLQUFLLFdBQVcsS0FBSyxZQUFZO0FBRTdELFlBQU0sWUFBWSxNQUFNLEtBQUssb0JBQW9CLEtBQUssYUFBYSxXQUFXO0FBRTlFLFVBQUksQ0FBQyxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQy9CLGNBQU0sS0FBSyxlQUFlO0FBQUEsTUFDNUI7QUFBQSxJQUNGLFVBQUU7QUFDQSxZQUFNLEtBQUssWUFBWSxhQUFhLGdCQUFnQixLQUFLLGNBQWMsYUFBYTtBQUFBLElBQ3RGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQTJDTyxHQUNMLE1BQ0EsVUFDQSxTQUNlO0FBQ2YsV0FBTyxLQUFLLFlBQVksR0FBRyxNQUFNLFVBQVUsT0FBTztBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBYSwyQkFBMEM7QUFDckQsVUFBTSxLQUFLLGFBQWEsS0FBSztBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFzQixTQUF3QjtBQUM1QyxVQUFNLE1BQU0sT0FBTztBQUNuQix1QkFBbUIsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLEtBQUssZUFBZSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2hGLHVCQUFtQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsS0FBSyxlQUFlLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDaEYsVUFBTSxLQUFLLGFBQWEsSUFBSTtBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLGdDQUNMLHFCQUNBLFdBQ007QUFDTixVQUFNLE9BQU87QUFDYixTQUFLLHlCQUF5QixLQUFLLHVCQUF1QjtBQUUxRCxhQUFTLHdCQUF3QixRQUE2QjtBQUM1RCxZQUFNLHFCQUFxQixJQUFJLElBQVksT0FBTyxLQUFLLElBQUksb0JBQW9CLENBQUMsQ0FBQztBQUNqRixZQUFNLG9CQUFvQixJQUFJLElBQVksS0FBSyxhQUFhO0FBQzVELFlBQU0saUJBQWlCO0FBQ3ZCLGdCQUFVLGNBQWM7QUFDeEIsaUJBQVcsT0FBTyxPQUFPLEtBQUssY0FBYyxHQUFHO0FBQzdDLFlBQUksa0JBQWtCLElBQUksR0FBRyxHQUFHO0FBQzlCO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLEdBQUc7QUFDaEM7QUFBQSxRQUNGO0FBR0EsZUFBTyxPQUFPLEdBQUc7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxrQkFDTCxjQUNBLFdBQ007QUFDTixTQUFLLFdBQVcsSUFBSSxjQUFjLFNBQThDO0FBQUEsRUFDbEY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFhLGFBQXFFO0FBQ2hGLFVBQU0sS0FBSyxLQUFLLElBQUk7QUFDcEIsV0FBTyxLQUFLLGFBQWE7QUFBQSxFQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxXQUFXLFNBQWtDO0FBQ3hELFFBQUksVUFBVSxLQUFLLGVBQWUsYUFBYSxLQUFLLGFBQWEsV0FBVyxHQUFHO0FBQzdFO0FBQUEsSUFDRjtBQUVBLFVBQU0sS0FBSyxlQUFlO0FBQzFCLFVBQU0sS0FBSyxZQUFZLGFBQWEsZ0JBQWdCLEtBQUssY0FBYyxLQUFLLGdCQUFnQixPQUFPO0FBQ25HLFNBQUssaUJBQWlCLE1BQU0sS0FBSyxXQUFXLEtBQUssWUFBWTtBQUFBLEVBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsTUFBYSxZQUNYLGNBQ0EsT0FDaUI7QUFDakIsVUFBTSxLQUFLLEtBQUssQ0FBQyxhQUFhO0FBQzVCLGVBQVMsWUFBWSxJQUFJO0FBQUEsSUFDM0IsQ0FBQztBQUNELFdBQU8sS0FBSyxhQUFhLG1CQUFtQixZQUFZO0FBQUEsRUFDMUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWEsU0FBUyxVQUFxRTtBQUN6RixVQUFNLFNBQTJDLENBQUM7QUFDbEQsZUFBVyxDQUFDLGNBQWMsU0FBUyxLQUFLLEtBQUssV0FBVyxRQUFRLEdBQUc7QUFDakUsWUFBTSxvQkFBb0IsTUFBTSxVQUFVLFNBQVMsWUFBWSxHQUFHLFFBQVE7QUFDMUUsVUFBSSxtQkFBbUI7QUFDckIsZUFBTyxZQUFZLElBQUk7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWNVLGlCQUE4QjtBQUN0QyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQWdCLGFBQWEsUUFBc0M7QUFDakUsZUFBVyxhQUFhLEtBQUssMEJBQTBCO0FBQ3JELGdCQUFVLE1BQU07QUFBQSxJQUNsQjtBQUNBLFVBQU0sUUFBUSxRQUFRO0FBQUEsRUFDeEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWdCLGVBQ2QsY0FDQSxnQkFDZTtBQUNmLFVBQU0sVUFBVTtBQUFBLEVBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE1BQWdCLGVBQ2QsV0FDQSxXQUNBLFVBQ2U7QUFDZixVQUFNLFVBQVU7QUFBQSxFQUNsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQWdCLGVBQWUsU0FBdUM7QUFDcEUsVUFBTSxVQUFVO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVUsbUNBQXlDO0FBQ2pELFNBQUs7QUFBQSxFQUNQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1VLHFCQUEyQjtBQUNuQyxTQUFLO0FBQUEsRUFDUDtBQUFBLEVBRUEsTUFBYyxjQUFjLFVBQW1EO0FBQzdFLFVBQU0sU0FBUyxNQUFNLEtBQUssb0JBQW9CLFFBQVE7QUFDdEQsVUFBTSxPQUFPLEtBQUssVUFBVSxNQUFNO0FBQ2xDLFVBQU0sY0FBYyxLQUFLLE1BQU0sSUFBSTtBQUNuQyxXQUFPLE1BQU0sS0FBSyxvQkFBb0IsV0FBVztBQUFBLEVBQ25EO0FBQUEsRUFFQSxNQUFjLFdBQ1osT0FDOEM7QUFDOUMsV0FBTztBQUFBLE1BQ0wsaUJBQWlCLE1BQU0sS0FBSyxjQUFjLE1BQU0sZUFBZTtBQUFBLE1BQy9ELGFBQWEsTUFBTSxLQUFLLGNBQWMsTUFBTSxXQUFXO0FBQUEsTUFDdkQsb0JBQW9CLEVBQUUsR0FBRyxNQUFNLG1CQUFtQjtBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUFBLEVBRVEscUJBQTBEO0FBQ2hFLFdBQU87QUFBQSxNQUNMLGlCQUFpQixLQUFLLHNCQUFzQjtBQUFBLE1BQzVDLGFBQWEsS0FBSyxzQkFBc0I7QUFBQSxNQUN4QyxvQkFBb0IsT0FBc0QsQ0FBQyxDQUFDO0FBQUEsSUFDOUU7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFjLEtBQUssZ0JBQStFO0FBQ2hHLFFBQUk7QUFDRixZQUFNLGVBQWUsS0FBSyxhQUFhLFdBQVc7QUFBQSxJQUNwRCxVQUFFO0FBQ0EsWUFBTSxtQkFBbUIsTUFBTSxLQUFLLFNBQVMsS0FBSyxhQUFhLFdBQVc7QUFDMUUsaUJBQVcsZ0JBQWdCLEtBQUssZUFBZTtBQUM3QyxjQUFNLG9CQUFvQixpQkFBaUIsWUFBWSxLQUFLO0FBQzVELGFBQUssYUFBYSxtQkFBbUIsWUFBWSxJQUFJO0FBQ3JELGNBQU0sV0FBVyxLQUFLO0FBQ3RCLGFBQUssYUFBYSxnQkFBZ0IsWUFBWSxJQUFJLG9CQUM5QyxTQUFTLFlBQVksSUFDckIsS0FBSyxhQUFhLFlBQVksWUFBWTtBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVRLG9CQUFvQixNQUFzRDtBQUNoRixRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBUSxLQUFLLGNBQTJCLFNBQVMsSUFBSTtBQUFBLEVBQ3ZEO0FBQUEsRUFFQSxNQUFjLG9CQUFvQixXQUFtRDtBQUNuRixnQkFBWSxLQUFLLGVBQWUsRUFBRSwyQkFBMkIsU0FBUztBQUN0RSxVQUFNLEtBQUssYUFBYSxTQUFTO0FBRWpDLFVBQU0sV0FBVyxLQUFLLHNCQUFzQjtBQUM1QyxVQUFNLFdBQVcsS0FBSztBQUV0QixlQUFXLENBQUMsY0FBYyxLQUFLLEtBQUssT0FBTyxRQUFRLFNBQVMsR0FBRztBQUM3RCxVQUFJLENBQUMsS0FBSyxvQkFBb0IsWUFBWSxHQUFHO0FBQzNDLHVCQUFlLGlEQUFpRCxFQUFFLHFCQUFxQixZQUFZLEVBQUU7QUFDckc7QUFBQSxNQUNGO0FBRUEsVUFBSSxPQUFPLFVBQVUsT0FBTyxTQUFTLFlBQVksR0FBRztBQUNsRCx1QkFBZSxpREFBaUQ7QUFBQSxVQUM5RDtBQUFBLFVBQ0E7QUFBQSxZQUNFLGNBQWMsU0FBUyxZQUFZO0FBQUEsWUFDbkM7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxZQUFZLElBQUk7QUFBQSxJQUMzQjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxNQUFjLGlCQUFnQztBQUM1QyxVQUFNLEtBQUssWUFBWSxTQUFTLE1BQU0sS0FBSyxvQkFBb0IsS0FBSyxhQUFhLFdBQVcsQ0FBQztBQUFBLEVBQy9GO0FBQUEsRUFFUSxnQkFDTixjQUNBLE9BQ0EsbUJBQ007QUFDTixVQUFNLFdBQVcsS0FBSztBQUN0QixTQUFLLGFBQWEsWUFBWSxZQUFZLElBQUk7QUFDOUMsU0FBSyxhQUFhLG1CQUFtQixZQUFZLElBQUkscUJBQXFCO0FBQzFFLFNBQUssYUFBYSxnQkFBZ0IsWUFBWSxJQUFJLG9CQUFvQixTQUFTLFlBQVksSUFBSTtBQUFBLEVBQ2pHO0FBQUEsRUFFQSxNQUFjLG9CQUFvQixVQUFrRDtBQUNsRixVQUFNLFlBQTJCLENBQUM7QUFFbEMsZUFBVyxnQkFBZ0IsS0FBSyxlQUFlO0FBQzdDLGdCQUFVLFlBQVksSUFBSSxTQUFTLFlBQVk7QUFBQSxJQUNqRDtBQUVBLFVBQU0sS0FBSyxlQUFlLFNBQVM7QUFFbkMsV0FBTyxLQUFLLGVBQWUsRUFBRSwyQkFBMkIsU0FBUztBQUFBLEVBQ25FO0FBQ0Y7QUFLTyxNQUFNLHFDQUFxQyw0QkFBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk3RSxjQUFjO0FBQ25CLFVBQU0sSUFBSSxpQkFBaUIsQ0FBQztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT21CLHdCQUFnQztBQUNqRCxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,49 +0,0 @@
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 { Component } from "obsidian";
25
- class PluginSettingsTabComponent extends Component {
26
- plugin;
27
- pluginSettingsTab;
28
- /**
29
- * Creates a new plugin settings tab component.
30
- *
31
- * @param params - The plugin settings tab component constructor parameters.
32
- */
33
- constructor(params) {
34
- super();
35
- this.plugin = params.plugin;
36
- this.pluginSettingsTab = params.pluginSettingsTab;
37
- }
38
- /**
39
- * Registers the settings tab and an "Open Settings" command with Obsidian.
40
- */
41
- onload() {
42
- super.onload();
43
- this.plugin.addSettingTab(this.pluginSettingsTab);
44
- }
45
- }
46
- export {
47
- PluginSettingsTabComponent
48
- };
49
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgcmVnaXN0ZXJzIGEgcGx1Z2luIHNldHRpbmdzIHRhYiB3aXRoIE9ic2lkaWFuLlxuICogQWxzbyByZWdpc3RlcnMgYW4gXCJPcGVuIFNldHRpbmdzXCIgY29tbWFuZCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlIH0gZnJvbSAnLi4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyc7XG5cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzVGFiOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8b2JqZWN0Pjtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2V9IGFuZCByZWdpc3RlcnMgaXQgd2l0aCBPYnNpZGlhbiBvbiBsb2FkLlxuICogQWxzbyByZWdpc3RlcnMgYW4gXCJPcGVuIFNldHRpbmdzXCIgY29tbWFuZCB0byBvcGVuIHRoZSBzZXR0aW5ncyB0YWIgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luU2V0dGluZ3NUYWJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzVGFiOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8b2JqZWN0PjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gc2V0dGluZ3MgdGFiIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wbHVnaW4gPSBwYXJhbXMucGx1Z2luO1xuICAgIHRoaXMucGx1Z2luU2V0dGluZ3NUYWIgPSBwYXJhbXMucGx1Z2luU2V0dGluZ3NUYWI7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBzZXR0aW5ncyB0YWIgYW5kIGFuIFwiT3BlbiBTZXR0aW5nc1wiIGNvbW1hbmQgd2l0aCBPYnNpZGlhbi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgdGhpcy5wbHVnaW4uYWRkU2V0dGluZ1RhYih0aGlzLnBsdWdpblNldHRpbmdzVGFiKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxTQUFTLGlCQUFpQjtBQWFuQixNQUFNLG1DQUFtQyxVQUFVO0FBQUEsRUFDdkM7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUFxRDtBQUN0RSxVQUFNO0FBQ04sU0FBSyxTQUFTLE9BQU87QUFDckIsU0FBSyxvQkFBb0IsT0FBTztBQUFBLEVBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLZ0IsU0FBZTtBQUM3QixVQUFNLE9BQU87QUFDYixTQUFLLE9BQU8sY0FBYyxLQUFLLGlCQUFpQjtBQUFBLEVBQ2xEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==