obsidian-dev-utils 55.4.1 → 56.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/lib/cjs/abort-controller.cjs +6 -4
  3. package/dist/lib/cjs/array.cjs +5 -3
  4. package/dist/lib/cjs/async-events.cjs +7 -5
  5. package/dist/lib/cjs/async.cjs +6 -4
  6. package/dist/lib/cjs/blob.cjs +6 -4
  7. package/dist/lib/cjs/codemirror/index.cjs +5 -3
  8. package/dist/lib/cjs/codemirror/state-field-spec.cjs +5 -3
  9. package/dist/lib/cjs/css-class.cjs +5 -3
  10. package/dist/lib/cjs/debug-controller.cjs +5 -3
  11. package/dist/lib/cjs/debug.cjs +5 -3
  12. package/dist/lib/cjs/enum.cjs +5 -3
  13. package/dist/lib/cjs/error.cjs +5 -3
  14. package/dist/lib/cjs/function.cjs +5 -3
  15. package/dist/lib/cjs/html-element.cjs +18 -16
  16. package/dist/lib/cjs/index.cjs +5 -3
  17. package/dist/lib/cjs/library.cjs +6 -4
  18. package/dist/lib/cjs/object-utils.cjs +5 -3
  19. package/dist/lib/cjs/obsidian/@types/i18next.d.cts +3 -3
  20. package/dist/lib/cjs/obsidian/app.cjs +5 -3
  21. package/dist/lib/cjs/obsidian/async-with-notice.cjs +8 -6
  22. package/dist/lib/cjs/obsidian/attachment-path.cjs +5 -3
  23. package/dist/lib/cjs/obsidian/backlink.cjs +5 -3
  24. package/dist/lib/cjs/obsidian/callout.cjs +5 -3
  25. package/dist/lib/cjs/obsidian/code-block-markdown-information.cjs +5 -3
  26. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +355 -0
  27. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +178 -0
  28. package/dist/lib/cjs/obsidian/{commands/index.cjs → command-handlers/app-active-file-provider.cjs} +29 -34
  29. package/dist/lib/cjs/obsidian/command-handlers/app-active-file-provider.d.cts +25 -0
  30. package/dist/lib/cjs/obsidian/command-handlers/app-menu-event-registrar.cjs +173 -0
  31. package/dist/lib/cjs/obsidian/command-handlers/app-menu-event-registrar.d.cts +41 -0
  32. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +164 -0
  33. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +26 -0
  34. package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +174 -0
  35. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +143 -0
  36. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +269 -0
  37. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +114 -0
  38. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +261 -0
  39. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +112 -0
  40. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +261 -0
  41. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +112 -0
  42. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +177 -0
  43. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +38 -0
  44. package/dist/lib/cjs/obsidian/command-handlers/index.cjs +170 -0
  45. package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +9 -0
  46. package/dist/lib/cjs/obsidian/components/all-windows-event-handler.cjs +6 -4
  47. package/dist/lib/cjs/obsidian/components/async-component.cjs +164 -0
  48. package/dist/lib/cjs/obsidian/components/async-component.d.cts +28 -0
  49. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +5 -3
  50. package/dist/lib/cjs/obsidian/components/index.cjs +8 -3
  51. package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
  52. package/dist/lib/cjs/obsidian/components/setting-components/checkbox-component.cjs +5 -3
  53. package/dist/lib/cjs/obsidian/components/setting-components/code-highlighter-component.cjs +5 -3
  54. package/dist/lib/cjs/obsidian/components/setting-components/date-component.cjs +5 -3
  55. package/dist/lib/cjs/obsidian/components/setting-components/date-time-component.cjs +5 -3
  56. package/dist/lib/cjs/obsidian/components/setting-components/email-component.cjs +5 -3
  57. package/dist/lib/cjs/obsidian/components/setting-components/file-component.cjs +5 -3
  58. package/dist/lib/cjs/obsidian/components/setting-components/index.cjs +5 -3
  59. package/dist/lib/cjs/obsidian/components/setting-components/month-component.cjs +5 -3
  60. package/dist/lib/cjs/obsidian/components/setting-components/multiple-dropdown-component.cjs +5 -3
  61. package/dist/lib/cjs/obsidian/components/setting-components/multiple-email-component.cjs +5 -3
  62. package/dist/lib/cjs/obsidian/components/setting-components/multiple-file-component.cjs +5 -3
  63. package/dist/lib/cjs/obsidian/components/setting-components/multiple-text-component.cjs +5 -3
  64. package/dist/lib/cjs/obsidian/components/setting-components/number-component.cjs +5 -3
  65. package/dist/lib/cjs/obsidian/components/setting-components/password-component.cjs +5 -3
  66. package/dist/lib/cjs/obsidian/components/setting-components/setting-component-wrapper.cjs +5 -3
  67. package/dist/lib/cjs/obsidian/components/setting-components/telephone-component.cjs +5 -3
  68. package/dist/lib/cjs/obsidian/components/setting-components/text-based-component.cjs +5 -3
  69. package/dist/lib/cjs/obsidian/components/setting-components/time-component.cjs +5 -3
  70. package/dist/lib/cjs/obsidian/components/setting-components/tri-state-checkbox-component.cjs +5 -3
  71. package/dist/lib/cjs/obsidian/components/setting-components/typed-dropdown-component.cjs +5 -3
  72. package/dist/lib/cjs/obsidian/components/setting-components/typed-multiple-dropdown-component.cjs +5 -3
  73. package/dist/lib/cjs/obsidian/components/setting-components/typed-range-text-component.cjs +5 -3
  74. package/dist/lib/cjs/obsidian/components/setting-components/typed-text-component.cjs +5 -3
  75. package/dist/lib/cjs/obsidian/components/setting-components/url-component.cjs +5 -3
  76. package/dist/lib/cjs/obsidian/components/setting-components/validator-component.cjs +7 -5
  77. package/dist/lib/cjs/obsidian/components/setting-components/value-component-with-change-tracking.cjs +5 -3
  78. package/dist/lib/cjs/obsidian/components/setting-components/week-component.cjs +5 -3
  79. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.cjs +5 -3
  80. package/dist/lib/cjs/obsidian/constructors/index.cjs +5 -3
  81. package/dist/lib/cjs/obsidian/dataview-link.cjs +5 -3
  82. package/dist/lib/cjs/obsidian/dataview.cjs +6 -4
  83. package/dist/lib/cjs/obsidian/editor.cjs +5 -3
  84. package/dist/lib/cjs/obsidian/file-change.cjs +5 -3
  85. package/dist/lib/cjs/obsidian/file-manager.cjs +5 -3
  86. package/dist/lib/cjs/obsidian/file-system.cjs +5 -3
  87. package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.cjs +5 -3
  88. package/dist/lib/cjs/obsidian/frontmatter.cjs +5 -3
  89. package/dist/lib/cjs/obsidian/i18n/{custom-type-options-base.cjs → custom-type-options.cjs} +7 -5
  90. package/dist/lib/cjs/obsidian/i18n/custom-type-options.d.cts +37 -0
  91. package/dist/lib/cjs/obsidian/{plugin/plugin-settings-wrapper.cjs → i18n/default-translations.cjs} +8 -5
  92. package/dist/lib/cjs/obsidian/i18n/default-translations.d.cts +14 -0
  93. package/dist/lib/cjs/obsidian/i18n/i18n.cjs +5 -3
  94. package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +2 -13
  95. package/dist/lib/cjs/obsidian/i18n/index.cjs +11 -9
  96. package/dist/lib/cjs/obsidian/i18n/index.d.cts +2 -2
  97. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +5 -3
  98. package/dist/lib/cjs/obsidian/i18n/locales/index.cjs +5 -3
  99. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.cjs +5 -3
  100. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +1 -2
  101. package/dist/lib/cjs/obsidian/index.cjs +8 -6
  102. package/dist/lib/cjs/obsidian/index.d.cts +1 -1
  103. package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +5 -3
  104. package/dist/lib/cjs/obsidian/link.cjs +5 -3
  105. package/dist/lib/cjs/obsidian/logger.cjs +5 -3
  106. package/dist/lib/cjs/obsidian/loop.cjs +5 -3
  107. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +5 -3
  108. package/dist/lib/cjs/obsidian/markdown-view.cjs +5 -3
  109. package/dist/lib/cjs/obsidian/markdown.cjs +5 -3
  110. package/dist/lib/cjs/obsidian/metadata-cache.cjs +5 -3
  111. package/dist/lib/cjs/obsidian/modals/alert.cjs +8 -6
  112. package/dist/lib/cjs/obsidian/modals/confirm.cjs +8 -6
  113. package/dist/lib/cjs/obsidian/modals/index.cjs +8 -6
  114. package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -1
  115. package/dist/lib/cjs/obsidian/modals/{modal-base.cjs → modal.cjs} +8 -6
  116. package/dist/lib/cjs/obsidian/modals/prompt.cjs +8 -6
  117. package/dist/lib/cjs/obsidian/modals/select-item.cjs +7 -5
  118. package/dist/lib/cjs/obsidian/monkey-around.cjs +5 -3
  119. package/dist/lib/cjs/obsidian/obsidian-settings.cjs +5 -3
  120. package/dist/lib/cjs/obsidian/pdf.cjs +8 -6
  121. package/dist/lib/cjs/obsidian/plugin/components/abort-signal-component.cjs +162 -0
  122. package/dist/lib/cjs/obsidian/plugin/components/abort-signal-component.d.cts +27 -0
  123. package/dist/lib/cjs/obsidian/plugin/components/async-error-handler-component.cjs +165 -0
  124. package/dist/lib/cjs/obsidian/plugin/components/async-error-handler-component.d.cts +29 -0
  125. package/dist/lib/cjs/obsidian/{commands/non-editor-command-base.cjs → plugin/components/console-debug-component.cjs} +26 -20
  126. package/dist/lib/cjs/obsidian/plugin/components/console-debug-component.d.cts +29 -0
  127. package/dist/lib/cjs/obsidian/{i18n/default-translations-base.cjs → plugin/components/i18n-component.cjs} +39 -6
  128. package/dist/lib/cjs/obsidian/plugin/components/i18n-component.d.cts +23 -0
  129. package/dist/lib/cjs/obsidian/plugin/components/index.cjs +170 -0
  130. package/dist/lib/cjs/obsidian/plugin/components/index.d.cts +9 -0
  131. package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.cjs +207 -0
  132. package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.d.cts +59 -0
  133. package/dist/lib/cjs/obsidian/plugin/components/plugin-context-component.cjs +162 -0
  134. package/dist/lib/cjs/obsidian/plugin/components/plugin-context-component.d.cts +25 -0
  135. package/dist/lib/cjs/obsidian/plugin/components/plugin-notice-component.cjs +161 -0
  136. package/dist/lib/cjs/obsidian/plugin/components/plugin-notice-component.d.cts +25 -0
  137. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.cjs +566 -0
  138. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.d.cts +296 -0
  139. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-tab-component.cjs +166 -0
  140. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-tab-component.d.cts +28 -0
  141. package/dist/lib/cjs/obsidian/plugin/index.cjs +11 -18
  142. package/dist/lib/cjs/obsidian/plugin/index.d.cts +2 -5
  143. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +5 -3
  144. package/dist/lib/cjs/obsidian/plugin/path-settings.cjs +5 -3
  145. package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +16 -7
  146. package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +3 -2
  147. package/dist/lib/cjs/obsidian/plugin/plugin-id.cjs +5 -3
  148. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +408 -0
  149. package/dist/lib/cjs/obsidian/plugin/{plugin-settings-tab-base.d.cts → plugin-settings-tab.d.cts} +28 -11
  150. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +135 -3
  151. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +106 -5
  152. package/dist/lib/cjs/obsidian/queue.cjs +5 -3
  153. package/dist/lib/cjs/obsidian/react/app-context.cjs +5 -3
  154. package/dist/lib/cjs/obsidian/react/index.cjs +5 -3
  155. package/dist/lib/cjs/obsidian/reference.cjs +5 -3
  156. package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +5 -3
  157. package/dist/lib/cjs/obsidian/resource-url.cjs +5 -3
  158. package/dist/lib/cjs/obsidian/setting-ex.cjs +5 -3
  159. package/dist/lib/cjs/obsidian/setting-group-ex.cjs +5 -3
  160. package/dist/lib/cjs/obsidian/validation.cjs +5 -3
  161. package/dist/lib/cjs/obsidian/vault-delete.cjs +5 -3
  162. package/dist/lib/cjs/obsidian/vault.cjs +5 -3
  163. package/dist/lib/cjs/obsidian/workspace.cjs +5 -3
  164. package/dist/lib/cjs/path.cjs +5 -3
  165. package/dist/lib/cjs/reg-exp.cjs +5 -3
  166. package/dist/lib/cjs/script-utils/build.cjs +5 -3
  167. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +5 -3
  168. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +5 -3
  169. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +5 -3
  170. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +6 -4
  171. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +5 -3
  172. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +5 -3
  173. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.cjs +5 -3
  174. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +5 -3
  175. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +8 -6
  176. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.cjs +5 -3
  177. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +5 -3
  178. package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +5 -3
  179. package/dist/lib/cjs/script-utils/bundlers/index.cjs +5 -3
  180. package/dist/lib/cjs/script-utils/cli-utils.cjs +5 -3
  181. package/dist/lib/cjs/script-utils/code-generator.cjs +5 -3
  182. package/dist/lib/cjs/script-utils/commitlint-config.cjs +5 -3
  183. package/dist/lib/cjs/script-utils/exec.cjs +5 -3
  184. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +6 -4
  185. package/dist/lib/cjs/script-utils/formatters/index.cjs +5 -3
  186. package/dist/lib/cjs/script-utils/fs.cjs +5 -3
  187. package/dist/lib/cjs/script-utils/index.cjs +5 -3
  188. package/dist/lib/cjs/script-utils/json.cjs +5 -3
  189. package/dist/lib/cjs/script-utils/linters/cspell.cjs +5 -3
  190. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +6 -4
  191. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +5 -3
  192. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +5 -3
  193. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +5 -3
  194. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +5 -3
  195. package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.cjs +5 -3
  196. package/dist/lib/cjs/script-utils/linters/eslint.cjs +6 -4
  197. package/dist/lib/cjs/script-utils/linters/index.cjs +5 -3
  198. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +5 -3
  199. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +9 -5
  200. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +5 -3
  201. package/dist/lib/cjs/script-utils/npm-publish.cjs +5 -3
  202. package/dist/lib/cjs/script-utils/npm-run.cjs +5 -3
  203. package/dist/lib/cjs/script-utils/npm.cjs +5 -3
  204. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +5 -3
  205. package/dist/lib/cjs/script-utils/root.cjs +5 -3
  206. package/dist/lib/cjs/script-utils/test-runners/index.cjs +5 -3
  207. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +5 -3
  208. package/dist/lib/cjs/script-utils/version.cjs +5 -3
  209. package/dist/lib/cjs/strict-proxy.cjs +5 -3
  210. package/dist/lib/cjs/string.cjs +5 -3
  211. package/dist/lib/cjs/transformers/date-transformer.cjs +5 -3
  212. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -3
  213. package/dist/lib/cjs/transformers/group-transformer.cjs +5 -3
  214. package/dist/lib/cjs/transformers/index.cjs +5 -3
  215. package/dist/lib/cjs/transformers/map-transformer.cjs +5 -3
  216. package/dist/lib/cjs/transformers/set-transformer.cjs +5 -3
  217. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +5 -3
  218. package/dist/lib/cjs/transformers/transformer.cjs +5 -3
  219. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +5 -3
  220. package/dist/lib/cjs/transformers/typed-transformer.cjs +5 -3
  221. package/dist/lib/cjs/two-way-map.cjs +5 -3
  222. package/dist/lib/cjs/type-guards.cjs +5 -3
  223. package/dist/lib/cjs/type.cjs +5 -3
  224. package/dist/lib/cjs/url.cjs +5 -3
  225. package/dist/lib/cjs/value-provider.cjs +5 -3
  226. package/dist/lib/esm/abort-controller.mjs +4 -2
  227. package/dist/lib/esm/array.mjs +3 -1
  228. package/dist/lib/esm/async-events.mjs +5 -3
  229. package/dist/lib/esm/async.mjs +4 -2
  230. package/dist/lib/esm/blob.mjs +4 -2
  231. package/dist/lib/esm/codemirror/index.mjs +3 -1
  232. package/dist/lib/esm/codemirror/state-field-spec.mjs +2 -0
  233. package/dist/lib/esm/css-class.mjs +3 -1
  234. package/dist/lib/esm/debug-controller.mjs +2 -0
  235. package/dist/lib/esm/debug.mjs +3 -1
  236. package/dist/lib/esm/enum.mjs +3 -1
  237. package/dist/lib/esm/error.mjs +3 -1
  238. package/dist/lib/esm/function.mjs +3 -1
  239. package/dist/lib/esm/html-element.mjs +16 -14
  240. package/dist/lib/esm/index.mjs +3 -1
  241. package/dist/lib/esm/library.mjs +4 -2
  242. package/dist/lib/esm/object-utils.mjs +3 -1
  243. package/dist/lib/esm/obsidian/@types/i18next.d.mts +3 -3
  244. package/dist/lib/esm/obsidian/app.mjs +3 -1
  245. package/dist/lib/esm/obsidian/async-with-notice.mjs +6 -4
  246. package/dist/lib/esm/obsidian/attachment-path.mjs +3 -1
  247. package/dist/lib/esm/obsidian/backlink.mjs +3 -1
  248. package/dist/lib/esm/obsidian/callout.mjs +3 -1
  249. package/dist/lib/esm/obsidian/code-block-markdown-information.mjs +2 -0
  250. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +178 -0
  251. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +247 -0
  252. package/dist/lib/esm/obsidian/command-handlers/app-active-file-provider.d.mts +25 -0
  253. package/dist/lib/esm/obsidian/command-handlers/app-active-file-provider.mjs +46 -0
  254. package/dist/lib/esm/obsidian/command-handlers/app-menu-event-registrar.d.mts +41 -0
  255. package/dist/lib/esm/obsidian/command-handlers/app-menu-event-registrar.mjs +65 -0
  256. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +26 -0
  257. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +56 -0
  258. package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +143 -0
  259. package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +66 -0
  260. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +114 -0
  261. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +161 -0
  262. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +112 -0
  263. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +157 -0
  264. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +112 -0
  265. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +157 -0
  266. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.d.mts +38 -0
  267. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +69 -0
  268. package/dist/lib/esm/obsidian/command-handlers/index.d.mts +9 -0
  269. package/dist/lib/esm/obsidian/command-handlers/index.mjs +44 -0
  270. package/dist/lib/esm/obsidian/components/all-windows-event-handler.mjs +4 -2
  271. package/dist/lib/esm/obsidian/components/async-component.d.mts +28 -0
  272. package/dist/lib/esm/obsidian/components/async-component.mjs +56 -0
  273. package/dist/lib/esm/obsidian/components/async-events-component.mjs +3 -1
  274. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  275. package/dist/lib/esm/obsidian/components/index.mjs +5 -1
  276. package/dist/lib/esm/obsidian/components/setting-components/checkbox-component.mjs +3 -1
  277. package/dist/lib/esm/obsidian/components/setting-components/code-highlighter-component.mjs +3 -1
  278. package/dist/lib/esm/obsidian/components/setting-components/date-component.mjs +3 -1
  279. package/dist/lib/esm/obsidian/components/setting-components/date-time-component.mjs +3 -1
  280. package/dist/lib/esm/obsidian/components/setting-components/email-component.mjs +3 -1
  281. package/dist/lib/esm/obsidian/components/setting-components/file-component.mjs +3 -1
  282. package/dist/lib/esm/obsidian/components/setting-components/index.mjs +3 -1
  283. package/dist/lib/esm/obsidian/components/setting-components/month-component.mjs +3 -1
  284. package/dist/lib/esm/obsidian/components/setting-components/multiple-dropdown-component.mjs +3 -1
  285. package/dist/lib/esm/obsidian/components/setting-components/multiple-email-component.mjs +3 -1
  286. package/dist/lib/esm/obsidian/components/setting-components/multiple-file-component.mjs +3 -1
  287. package/dist/lib/esm/obsidian/components/setting-components/multiple-text-component.mjs +3 -1
  288. package/dist/lib/esm/obsidian/components/setting-components/number-component.mjs +3 -1
  289. package/dist/lib/esm/obsidian/components/setting-components/password-component.mjs +3 -1
  290. package/dist/lib/esm/obsidian/components/setting-components/setting-component-wrapper.mjs +3 -1
  291. package/dist/lib/esm/obsidian/components/setting-components/telephone-component.mjs +3 -1
  292. package/dist/lib/esm/obsidian/components/setting-components/text-based-component.mjs +3 -1
  293. package/dist/lib/esm/obsidian/components/setting-components/time-component.mjs +3 -1
  294. package/dist/lib/esm/obsidian/components/setting-components/tri-state-checkbox-component.mjs +3 -1
  295. package/dist/lib/esm/obsidian/components/setting-components/typed-dropdown-component.mjs +3 -1
  296. package/dist/lib/esm/obsidian/components/setting-components/typed-multiple-dropdown-component.mjs +3 -1
  297. package/dist/lib/esm/obsidian/components/setting-components/typed-range-text-component.mjs +3 -1
  298. package/dist/lib/esm/obsidian/components/setting-components/typed-text-component.mjs +3 -1
  299. package/dist/lib/esm/obsidian/components/setting-components/url-component.mjs +3 -1
  300. package/dist/lib/esm/obsidian/components/setting-components/validator-component.mjs +5 -3
  301. package/dist/lib/esm/obsidian/components/setting-components/value-component-with-change-tracking.mjs +2 -0
  302. package/dist/lib/esm/obsidian/components/setting-components/week-component.mjs +3 -1
  303. package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.mjs +3 -1
  304. package/dist/lib/esm/obsidian/constructors/index.mjs +3 -1
  305. package/dist/lib/esm/obsidian/dataview-link.mjs +3 -1
  306. package/dist/lib/esm/obsidian/dataview.mjs +4 -2
  307. package/dist/lib/esm/obsidian/editor.mjs +3 -1
  308. package/dist/lib/esm/obsidian/file-change.mjs +3 -1
  309. package/dist/lib/esm/obsidian/file-manager.mjs +3 -1
  310. package/dist/lib/esm/obsidian/file-system.mjs +3 -1
  311. package/dist/lib/esm/obsidian/frontmatter-link-cache-with-offsets.mjs +3 -1
  312. package/dist/lib/esm/obsidian/frontmatter.mjs +3 -1
  313. package/dist/lib/esm/obsidian/i18n/custom-type-options.d.mts +37 -0
  314. package/dist/lib/esm/obsidian/i18n/custom-type-options.mjs +25 -0
  315. package/dist/lib/esm/obsidian/i18n/default-translations.d.mts +14 -0
  316. package/dist/lib/esm/obsidian/i18n/default-translations.mjs +25 -0
  317. package/dist/lib/esm/obsidian/i18n/i18n.d.mts +2 -13
  318. package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -1
  319. package/dist/lib/esm/obsidian/i18n/index.d.mts +2 -2
  320. package/dist/lib/esm/obsidian/i18n/index.mjs +7 -5
  321. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +3 -1
  322. package/dist/lib/esm/obsidian/i18n/locales/index.mjs +3 -1
  323. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +1 -2
  324. package/dist/lib/esm/obsidian/i18n/locales/translations-map.mjs +3 -1
  325. package/dist/lib/esm/obsidian/index.d.mts +1 -1
  326. package/dist/lib/esm/obsidian/index.mjs +5 -3
  327. package/dist/lib/esm/obsidian/is-in-obsidian.mjs +3 -1
  328. package/dist/lib/esm/obsidian/link.mjs +3 -1
  329. package/dist/lib/esm/obsidian/logger.mjs +3 -1
  330. package/dist/lib/esm/obsidian/loop.mjs +3 -1
  331. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +3 -1
  332. package/dist/lib/esm/obsidian/markdown-view.mjs +3 -1
  333. package/dist/lib/esm/obsidian/markdown.mjs +3 -1
  334. package/dist/lib/esm/obsidian/metadata-cache.mjs +3 -1
  335. package/dist/lib/esm/obsidian/modals/alert.mjs +4 -2
  336. package/dist/lib/esm/obsidian/modals/confirm.mjs +4 -2
  337. package/dist/lib/esm/obsidian/modals/index.d.mts +1 -1
  338. package/dist/lib/esm/obsidian/modals/index.mjs +5 -3
  339. package/dist/lib/esm/obsidian/modals/modal.mjs +54 -0
  340. package/dist/lib/esm/obsidian/modals/prompt.mjs +4 -2
  341. package/dist/lib/esm/obsidian/modals/select-item.mjs +4 -2
  342. package/dist/lib/esm/obsidian/monkey-around.mjs +3 -1
  343. package/dist/lib/esm/obsidian/obsidian-settings.mjs +3 -1
  344. package/dist/lib/esm/obsidian/pdf.mjs +6 -4
  345. package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.d.mts +27 -0
  346. package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.mjs +54 -0
  347. package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.d.mts +29 -0
  348. package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.mjs +57 -0
  349. package/dist/lib/esm/obsidian/plugin/components/console-debug-component.d.mts +29 -0
  350. package/dist/lib/esm/obsidian/plugin/components/console-debug-component.mjs +52 -0
  351. package/dist/lib/esm/obsidian/plugin/components/i18n-component.d.mts +23 -0
  352. package/dist/lib/esm/obsidian/plugin/components/i18n-component.mjs +48 -0
  353. package/dist/lib/esm/obsidian/plugin/components/index.d.mts +9 -0
  354. package/dist/lib/esm/obsidian/plugin/components/index.mjs +44 -0
  355. package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.d.mts +59 -0
  356. package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.mjs +102 -0
  357. package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.d.mts +25 -0
  358. package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.mjs +57 -0
  359. package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.d.mts +25 -0
  360. package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.mjs +56 -0
  361. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.d.mts +296 -0
  362. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.mjs +463 -0
  363. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.d.mts +28 -0
  364. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.mjs +58 -0
  365. package/dist/lib/esm/obsidian/plugin/index.d.mts +2 -5
  366. package/dist/lib/esm/obsidian/plugin/index.mjs +7 -11
  367. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +3 -1
  368. package/dist/lib/esm/obsidian/plugin/path-settings.mjs +3 -1
  369. package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +3 -2
  370. package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +14 -5
  371. package/dist/lib/esm/obsidian/plugin/plugin-id.mjs +3 -1
  372. package/dist/lib/esm/obsidian/plugin/{plugin-settings-tab-base.d.mts → plugin-settings-tab.d.mts} +28 -11
  373. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +309 -0
  374. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +106 -5
  375. package/dist/lib/esm/obsidian/plugin/plugin.mjs +140 -2
  376. package/dist/lib/esm/obsidian/queue.mjs +3 -1
  377. package/dist/lib/esm/obsidian/react/app-context.mjs +3 -1
  378. package/dist/lib/esm/obsidian/react/index.mjs +3 -1
  379. package/dist/lib/esm/obsidian/reference.mjs +3 -1
  380. package/dist/lib/esm/obsidian/rename-delete-handler.mjs +3 -1
  381. package/dist/lib/esm/obsidian/resource-url.mjs +3 -1
  382. package/dist/lib/esm/obsidian/setting-ex.mjs +3 -1
  383. package/dist/lib/esm/obsidian/setting-group-ex.mjs +3 -1
  384. package/dist/lib/esm/obsidian/validation.mjs +3 -1
  385. package/dist/lib/esm/obsidian/vault-delete.mjs +3 -1
  386. package/dist/lib/esm/obsidian/vault.mjs +3 -1
  387. package/dist/lib/esm/obsidian/workspace.mjs +3 -1
  388. package/dist/lib/esm/path.mjs +3 -1
  389. package/dist/lib/esm/reg-exp.mjs +3 -1
  390. package/dist/lib/esm/script-utils/build.mjs +3 -1
  391. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +3 -1
  392. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -1
  393. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +3 -1
  394. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +3 -1
  395. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -1
  396. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +3 -1
  397. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/index.mjs +3 -1
  398. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +3 -1
  399. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +5 -3
  400. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/rename-css-plugin.mjs +3 -1
  401. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +3 -1
  402. package/dist/lib/esm/script-utils/bundlers/esbuild.mjs +3 -1
  403. package/dist/lib/esm/script-utils/bundlers/index.mjs +3 -1
  404. package/dist/lib/esm/script-utils/cli-utils.mjs +3 -1
  405. package/dist/lib/esm/script-utils/code-generator.mjs +3 -1
  406. package/dist/lib/esm/script-utils/commitlint-config.mjs +3 -1
  407. package/dist/lib/esm/script-utils/exec.mjs +3 -1
  408. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -1
  409. package/dist/lib/esm/script-utils/formatters/index.mjs +3 -1
  410. package/dist/lib/esm/script-utils/fs.mjs +3 -1
  411. package/dist/lib/esm/script-utils/index.mjs +3 -1
  412. package/dist/lib/esm/script-utils/json.mjs +3 -1
  413. package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -1
  414. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +4 -2
  415. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +3 -1
  416. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +3 -1
  417. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +3 -1
  418. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +3 -1
  419. package/dist/lib/esm/script-utils/linters/eslint-rules/rule-tester-helper.mjs +3 -1
  420. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -1
  421. package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
  422. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +3 -1
  423. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +6 -2
  424. package/dist/lib/esm/script-utils/nano-staged-config.mjs +3 -1
  425. package/dist/lib/esm/script-utils/npm-publish.mjs +3 -1
  426. package/dist/lib/esm/script-utils/npm-run.mjs +3 -1
  427. package/dist/lib/esm/script-utils/npm.mjs +3 -1
  428. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +3 -1
  429. package/dist/lib/esm/script-utils/root.mjs +3 -1
  430. package/dist/lib/esm/script-utils/test-runners/index.mjs +3 -1
  431. package/dist/lib/esm/script-utils/test-runners/vitest.mjs +3 -1
  432. package/dist/lib/esm/script-utils/version.mjs +3 -1
  433. package/dist/lib/esm/strict-proxy.mjs +3 -1
  434. package/dist/lib/esm/string.mjs +3 -1
  435. package/dist/lib/esm/transformers/date-transformer.mjs +3 -1
  436. package/dist/lib/esm/transformers/duration-transformer.mjs +3 -1
  437. package/dist/lib/esm/transformers/group-transformer.mjs +3 -1
  438. package/dist/lib/esm/transformers/index.mjs +3 -1
  439. package/dist/lib/esm/transformers/map-transformer.mjs +3 -1
  440. package/dist/lib/esm/transformers/set-transformer.mjs +3 -1
  441. package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +3 -1
  442. package/dist/lib/esm/transformers/transformer.mjs +3 -1
  443. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +3 -1
  444. package/dist/lib/esm/transformers/typed-transformer.mjs +3 -1
  445. package/dist/lib/esm/two-way-map.mjs +3 -1
  446. package/dist/lib/esm/type-guards.mjs +3 -1
  447. package/dist/lib/esm/type.mjs +3 -1
  448. package/dist/lib/esm/url.mjs +3 -1
  449. package/dist/lib/esm/value-provider.mjs +3 -1
  450. package/obsidian/Components/async-component/package.json +6 -0
  451. package/obsidian/Modals/modal/package.json +6 -0
  452. package/obsidian/Plugin/components/abort-signal-component/package.json +6 -0
  453. package/obsidian/Plugin/components/async-error-handler-component/package.json +6 -0
  454. package/obsidian/Plugin/components/console-debug-component/package.json +6 -0
  455. package/obsidian/Plugin/components/i18n-component/package.json +6 -0
  456. package/obsidian/Plugin/components/index/package.json +6 -0
  457. package/obsidian/Plugin/components/lifecycle-events-component/package.json +6 -0
  458. package/obsidian/Plugin/components/package.json +6 -0
  459. package/obsidian/Plugin/components/plugin-context-component/package.json +6 -0
  460. package/obsidian/Plugin/components/plugin-notice-component/package.json +6 -0
  461. package/obsidian/Plugin/components/plugin-settings-component/package.json +6 -0
  462. package/obsidian/Plugin/components/plugin-settings-tab-component/package.json +6 -0
  463. package/obsidian/Plugin/{plugin-settings-wrapper → plugin-settings-tab}/package.json +3 -3
  464. package/obsidian/command-handlers/abstract-file-command-handler/package.json +6 -0
  465. package/obsidian/command-handlers/app-active-file-provider/package.json +6 -0
  466. package/obsidian/command-handlers/app-menu-event-registrar/package.json +6 -0
  467. package/obsidian/command-handlers/command-handler/package.json +6 -0
  468. package/obsidian/command-handlers/command-handler-component/package.json +6 -0
  469. package/obsidian/command-handlers/editor-command-handler/package.json +6 -0
  470. package/obsidian/command-handlers/file-command-handler/package.json +6 -0
  471. package/obsidian/command-handlers/folder-command-handler/package.json +6 -0
  472. package/obsidian/command-handlers/global-command-handler/package.json +6 -0
  473. package/obsidian/command-handlers/index/package.json +6 -0
  474. package/obsidian/command-handlers/package.json +6 -0
  475. package/obsidian/i18n/{custom-type-options-base → custom-type-options}/package.json +3 -3
  476. package/obsidian/i18n/{default-translations-base → default-translations}/package.json +3 -3
  477. package/package.json +33 -12
  478. package/dist/lib/cjs/obsidian/commands/abstract-file-command-base.cjs +0 -441
  479. package/dist/lib/cjs/obsidian/commands/abstract-file-command-base.d.cts +0 -264
  480. package/dist/lib/cjs/obsidian/commands/command-base.cjs +0 -255
  481. package/dist/lib/cjs/obsidian/commands/command-base.d.cts +0 -125
  482. package/dist/lib/cjs/obsidian/commands/editor-command-base.cjs +0 -282
  483. package/dist/lib/cjs/obsidian/commands/editor-command-base.d.cts +0 -139
  484. package/dist/lib/cjs/obsidian/commands/file-command-base.cjs +0 -343
  485. package/dist/lib/cjs/obsidian/commands/file-command-base.d.cts +0 -191
  486. package/dist/lib/cjs/obsidian/commands/folder-command-base.cjs +0 -335
  487. package/dist/lib/cjs/obsidian/commands/folder-command-base.d.cts +0 -184
  488. package/dist/lib/cjs/obsidian/commands/index.d.cts +0 -6
  489. package/dist/lib/cjs/obsidian/commands/non-editor-command-base.d.cts +0 -34
  490. package/dist/lib/cjs/obsidian/i18n/custom-type-options-base.d.cts +0 -37
  491. package/dist/lib/cjs/obsidian/i18n/default-translations-base.d.cts +0 -25
  492. package/dist/lib/cjs/obsidian/plugin/plugin-base.cjs +0 -409
  493. package/dist/lib/cjs/obsidian/plugin/plugin-base.d.cts +0 -176
  494. package/dist/lib/cjs/obsidian/plugin/plugin-settings-manager-base.cjs +0 -486
  495. package/dist/lib/cjs/obsidian/plugin/plugin-settings-manager-base.d.cts +0 -186
  496. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab-base.cjs +0 -401
  497. package/dist/lib/cjs/obsidian/plugin/plugin-settings-wrapper.d.cts +0 -25
  498. package/dist/lib/cjs/obsidian/plugin/plugin-types-base.cjs +0 -122
  499. package/dist/lib/cjs/obsidian/plugin/plugin-types-base.d.cts +0 -87
  500. package/dist/lib/esm/obsidian/commands/abstract-file-command-base.d.mts +0 -264
  501. package/dist/lib/esm/obsidian/commands/abstract-file-command-base.mjs +0 -329
  502. package/dist/lib/esm/obsidian/commands/command-base.d.mts +0 -125
  503. package/dist/lib/esm/obsidian/commands/command-base.mjs +0 -146
  504. package/dist/lib/esm/obsidian/commands/editor-command-base.d.mts +0 -139
  505. package/dist/lib/esm/obsidian/commands/editor-command-base.mjs +0 -176
  506. package/dist/lib/esm/obsidian/commands/file-command-base.d.mts +0 -191
  507. package/dist/lib/esm/obsidian/commands/file-command-base.mjs +0 -240
  508. package/dist/lib/esm/obsidian/commands/folder-command-base.d.mts +0 -184
  509. package/dist/lib/esm/obsidian/commands/folder-command-base.mjs +0 -232
  510. package/dist/lib/esm/obsidian/commands/index.d.mts +0 -6
  511. package/dist/lib/esm/obsidian/commands/index.mjs +0 -36
  512. package/dist/lib/esm/obsidian/commands/non-editor-command-base.d.mts +0 -34
  513. package/dist/lib/esm/obsidian/commands/non-editor-command-base.mjs +0 -46
  514. package/dist/lib/esm/obsidian/i18n/custom-type-options-base.d.mts +0 -37
  515. package/dist/lib/esm/obsidian/i18n/custom-type-options-base.mjs +0 -23
  516. package/dist/lib/esm/obsidian/i18n/default-translations-base.d.mts +0 -25
  517. package/dist/lib/esm/obsidian/i18n/default-translations-base.mjs +0 -23
  518. package/dist/lib/esm/obsidian/modals/modal-base.mjs +0 -52
  519. package/dist/lib/esm/obsidian/plugin/plugin-base.d.mts +0 -176
  520. package/dist/lib/esm/obsidian/plugin/plugin-base.mjs +0 -317
  521. package/dist/lib/esm/obsidian/plugin/plugin-settings-manager-base.d.mts +0 -186
  522. package/dist/lib/esm/obsidian/plugin/plugin-settings-manager-base.mjs +0 -385
  523. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab-base.mjs +0 -302
  524. package/dist/lib/esm/obsidian/plugin/plugin-settings-wrapper.d.mts +0 -25
  525. package/dist/lib/esm/obsidian/plugin/plugin-settings-wrapper.mjs +0 -22
  526. package/dist/lib/esm/obsidian/plugin/plugin-types-base.d.mts +0 -87
  527. package/dist/lib/esm/obsidian/plugin/plugin-types-base.mjs +0 -22
  528. package/obsidian/Commands/abstract-file-command-base/package.json +0 -6
  529. package/obsidian/Commands/command-base/package.json +0 -6
  530. package/obsidian/Commands/editor-command-base/package.json +0 -6
  531. package/obsidian/Commands/file-command-base/package.json +0 -6
  532. package/obsidian/Commands/folder-command-base/package.json +0 -6
  533. package/obsidian/Commands/index/package.json +0 -6
  534. package/obsidian/Commands/non-editor-command-base/package.json +0 -6
  535. package/obsidian/Commands/package.json +0 -6
  536. package/obsidian/Modals/modal-base/package.json +0 -6
  537. package/obsidian/Plugin/plugin-base/package.json +0 -6
  538. package/obsidian/Plugin/plugin-settings-manager-base/package.json +0 -6
  539. package/obsidian/Plugin/plugin-settings-tab-base/package.json +0 -6
  540. package/obsidian/Plugin/plugin-types-base/package.json +0 -6
  541. /package/dist/lib/cjs/obsidian/modals/{modal-base.d.cts → modal.d.cts} +0 -0
  542. /package/dist/lib/esm/obsidian/modals/{modal-base.d.mts → modal.d.mts} +0 -0
@@ -0,0 +1,408 @@
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 initCjs() {
7
+ // eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
8
+ const globalThisRecord = globalThis;
9
+ globalThisRecord['__name'] ??= name;
10
+ const originalRequire = require;
11
+ if (originalRequire && !originalRequire.__isPatched) {
12
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
13
+ require = Object.assign(
14
+ (id) => requirePatched(id),
15
+ originalRequire,
16
+ {
17
+ __isPatched: true
18
+ }
19
+ );
20
+ }
21
+
22
+ const newFuncs = {
23
+ __extractDefault() {
24
+ return extractDefault;
25
+ },
26
+ process() {
27
+ const browserProcess = {
28
+ browser: true,
29
+ cwd() {
30
+ return '/';
31
+ },
32
+ env: {},
33
+ platform: 'android'
34
+ };
35
+ return browserProcess;
36
+ }
37
+ };
38
+
39
+ for (const key of Object.keys(newFuncs)) {
40
+ globalThisRecord[key] ??= newFuncs[key]?.();
41
+ }
42
+
43
+ function name(obj) {
44
+ return obj;
45
+ }
46
+
47
+ function extractDefault(module) {
48
+ return module && module.__esModule && 'default' in module ? module.default : module;
49
+ }
50
+
51
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
+ 'obsidian',
53
+ '@codemirror/autocomplete',
54
+ '@codemirror/collab',
55
+ '@codemirror/commands',
56
+ '@codemirror/language',
57
+ '@codemirror/lint',
58
+ '@codemirror/search',
59
+ '@codemirror/state',
60
+ '@codemirror/text',
61
+ '@codemirror/view',
62
+ '@lezer/common',
63
+ '@lezer/lr',
64
+ '@lezer/highlight'];
65
+
66
+
67
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
68
+ '@codemirror/closebrackets',
69
+ '@codemirror/comment',
70
+ '@codemirror/fold',
71
+ '@codemirror/gutter',
72
+ '@codemirror/highlight',
73
+ '@codemirror/history',
74
+ '@codemirror/matchbrackets',
75
+ '@codemirror/panel',
76
+ '@codemirror/rangeset',
77
+ '@codemirror/rectangular-selection',
78
+ '@codemirror/stream-parser',
79
+ '@codemirror/tooltip'];
80
+
81
+
82
+ function requirePatched(id) {
83
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
84
+ return originalRequire?.(id);
85
+ }
86
+
87
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/prefer-active-doc -- Need access to app. Actively use globalThis.
88
+ if (globalThis.app.isMobile) {
89
+ if (id === 'process' || id === 'node:process') {
90
+ // eslint-disable-next-line no-console -- Valid usage.
91
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
+ // eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
93
+ return globalThis.process;
94
+ }
95
+ } else {
96
+ const module = originalRequire?.(id);
97
+ if (module) {
98
+ return extractDefault(module);
99
+ }
100
+ }
101
+
102
+ // eslint-disable-next-line no-console -- Valid usage.
103
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
104
+ return {};
105
+ }
106
+ })();
107
+
108
+ "use strict";
109
+ var __defProp = Object.defineProperty;
110
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
111
+ var __getOwnPropNames = Object.getOwnPropertyNames;
112
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
113
+ var __export = (target, all) => {
114
+ for (var name in all)
115
+ __defProp(target, name, { get: all[name], enumerable: true });
116
+ };
117
+ var __copyProps = (to, from, except, desc) => {
118
+ if (from && typeof from === "object" || typeof from === "function") {
119
+ for (let key of __getOwnPropNames(from))
120
+ if (!__hasOwnProp.call(to, key) && key !== except)
121
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
122
+ }
123
+ return to;
124
+ };
125
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
+ var plugin_settings_tab_exports = {};
127
+ __export(plugin_settings_tab_exports, {
128
+ PluginSettingsTabBase: () => PluginSettingsTabBase,
129
+ SAVE_TO_FILE_CONTEXT: () => SAVE_TO_FILE_CONTEXT
130
+ });
131
+ module.exports = __toCommonJS(plugin_settings_tab_exports);
132
+ var import_obsidian = require('obsidian');
133
+ var import_async = require('../../async.cjs');
134
+ var import_css_class = require('../../css-class.cjs');
135
+ var import_function = require('../../function.cjs');
136
+ var import_object_utils = require('../../object-utils.cjs');
137
+ var import_type_guards = require('../../type-guards.cjs');
138
+ var import_async_events_component = require('../components/async-events-component.cjs');
139
+ var import_setting_component_wrapper = require('../components/setting-components/setting-component-wrapper.cjs');
140
+ var import_text_based_component = require('../components/setting-components/text-based-component.cjs');
141
+ var import_validator_component = require('../components/setting-components/validator-component.cjs');
142
+ var import_validation = require('../validation.cjs');
143
+ var import_plugin_context = require('./plugin-context.cjs');
144
+ const SAVE_TO_FILE_CONTEXT = "PluginSettingsTab";
145
+ class PluginSettingsTabBase extends import_obsidian.PluginSettingTab {
146
+ /**
147
+ * Whether the plugin settings tab is open.
148
+ *
149
+ * @returns Whether the plugin settings tab is open.
150
+ */
151
+ get isOpen() {
152
+ return this._isOpen;
153
+ }
154
+ /**
155
+ * The settings manager.
156
+ */
157
+ settingsComponent;
158
+ /**
159
+ * A debounce timeout for saving settings.
160
+ *
161
+ * @returns The debounce timeout for saving settings.
162
+ */
163
+ get saveSettingsDebounceTimeoutInMilliseconds() {
164
+ const DEFAULT = 2e3;
165
+ return DEFAULT;
166
+ }
167
+ _isOpen = false;
168
+ asyncEventsComponent;
169
+ saveSettingsDebounced;
170
+ get pluginSettings() {
171
+ return this.settingsComponent.settingsState.inputValues;
172
+ }
173
+ /**
174
+ * Creates a new plugin settings tab.
175
+ *
176
+ * @param params - The params.
177
+ */
178
+ constructor(params) {
179
+ super(params.plugin.app, params.plugin);
180
+ this.settingsComponent = params.settingsComponent;
181
+ (0, import_plugin_context.addPluginCssClasses)(this.containerEl, import_css_class.CssClass.PluginSettingsTab);
182
+ this.saveSettingsDebounced = (0, import_obsidian.debounce)(
183
+ (0, import_async.convertAsyncToSync)(() => this.settingsComponent.saveToFile(SAVE_TO_FILE_CONTEXT)),
184
+ this.saveSettingsDebounceTimeoutInMilliseconds
185
+ );
186
+ this.asyncEventsComponent = new import_async_events_component.AsyncEventsComponent();
187
+ }
188
+ /**
189
+ * Binds a value component to a plugin setting.
190
+ *
191
+ * @typeParam UIValue - The type of the value of the UI component.
192
+ * @typeParam TValueComponent - The type of the value component.
193
+ * @typeParam PropertyName - The property name of the plugin settings to bind to.
194
+ * @param valueComponent - The value component to bind.
195
+ * @param propertyName - The property name of the plugin settings to bind to.
196
+ * @param options - The options for binding the value component.
197
+ * @returns The value component.
198
+ */
199
+ bind(valueComponent, propertyName, options) {
200
+ const DEFAULT_OPTIONS = {
201
+ componentToPluginSettingsValueConverter: (value) => value,
202
+ onChanged: import_function.noop,
203
+ pluginSettingsToComponentValueConverter: (value) => value,
204
+ shouldResetSettingWhenComponentIsEmpty: true,
205
+ shouldShowPlaceholderForDefaultValues: true,
206
+ shouldShowValidationMessage: true
207
+ };
208
+ const optionsExt = { ...DEFAULT_OPTIONS, ...options };
209
+ const validatorEl = (0, import_validator_component.getValidatorComponent)(valueComponent)?.validatorEl;
210
+ const textBasedComponent = (0, import_text_based_component.getTextBasedComponentValue)(valueComponent);
211
+ const readonlyValue = this.pluginSettings[propertyName];
212
+ const defaults = this.settingsComponent.defaultSettings;
213
+ const defaultValue = defaults[propertyName];
214
+ const defaultComponentValue = optionsExt.pluginSettingsToComponentValueConverter(defaultValue);
215
+ textBasedComponent?.setPlaceholderValue(defaultComponentValue);
216
+ let validationMessage;
217
+ let tooltipEl = null;
218
+ let tooltipContentEl = null;
219
+ if (validatorEl) {
220
+ const wrapper = (0, import_setting_component_wrapper.ensureWrapped)(validatorEl);
221
+ tooltipEl = wrapper.createDiv();
222
+ (0, import_plugin_context.addPluginCssClasses)(tooltipEl, import_css_class.CssClass.Tooltip, import_css_class.CssClass.TooltipValidator);
223
+ tooltipContentEl = tooltipEl.createSpan();
224
+ const tooltipArrowEl = tooltipEl.createDiv();
225
+ (0, import_plugin_context.addPluginCssClasses)(tooltipArrowEl, import_css_class.CssClass.TooltipArrow);
226
+ tooltipEl.hide();
227
+ wrapper.appendChild(tooltipEl);
228
+ }
229
+ this.asyncEventsComponent.registerAsyncEvent(this.on("validationMessageChanged", (anotherPropertyName, anotherValidationMessage) => {
230
+ if (propertyName !== anotherPropertyName) {
231
+ return;
232
+ }
233
+ validationMessage = anotherValidationMessage;
234
+ updateValidatorElDebounced();
235
+ }));
236
+ let shouldEmptyOnBlur = false;
237
+ let shouldRevertToDefaultValueOnBlur = false;
238
+ if (textBasedComponent && optionsExt.shouldShowPlaceholderForDefaultValues && (0, import_object_utils.deepEqual)(readonlyValue, defaultValue)) {
239
+ textBasedComponent.empty();
240
+ } else {
241
+ valueComponent.setValue(optionsExt.pluginSettingsToComponentValueConverter(readonlyValue));
242
+ }
243
+ let shouldSkipOnChange = false;
244
+ const UPDATE_VALIDATOR_EL_TIMEOUT_IN_MILLISECONDS = 100;
245
+ const updateValidatorElDebounced = (0, import_obsidian.debounce)(() => {
246
+ requestAnimationFrame(() => {
247
+ updateValidatorEl();
248
+ });
249
+ }, UPDATE_VALIDATOR_EL_TIMEOUT_IN_MILLISECONDS);
250
+ valueComponent.onChange(async (uiValue) => {
251
+ if (shouldSkipOnChange) {
252
+ shouldSkipOnChange = false;
253
+ return;
254
+ }
255
+ shouldEmptyOnBlur = false;
256
+ const oldValue = this.pluginSettings[propertyName];
257
+ let newValue = void 0;
258
+ let shouldSetProperty = true;
259
+ shouldRevertToDefaultValueOnBlur = !!textBasedComponent?.isEmpty() && optionsExt.shouldResetSettingWhenComponentIsEmpty;
260
+ if (shouldRevertToDefaultValueOnBlur) {
261
+ newValue = defaultValue;
262
+ } else {
263
+ const convertedValue = optionsExt.componentToPluginSettingsValueConverter(uiValue);
264
+ if ((0, import_validation.isValidationMessageHolder)(convertedValue)) {
265
+ validationMessage = convertedValue.validationMessage;
266
+ shouldSetProperty = false;
267
+ } else {
268
+ newValue = convertedValue;
269
+ }
270
+ }
271
+ if (shouldSetProperty) {
272
+ validationMessage = await this.settingsComponent.setProperty(propertyName, newValue);
273
+ if (textBasedComponent && optionsExt.shouldShowPlaceholderForDefaultValues && !textBasedComponent.isEmpty() && (0, import_object_utils.deepEqual)(newValue, defaultValue)) {
274
+ shouldEmptyOnBlur = true;
275
+ }
276
+ }
277
+ updateValidatorElDebounced();
278
+ if (shouldSetProperty) {
279
+ await optionsExt.onChanged(newValue, oldValue);
280
+ }
281
+ this.saveSettingsDebounced();
282
+ });
283
+ validatorEl?.addEventListener("focus", () => {
284
+ updateValidatorElDebounced();
285
+ });
286
+ validatorEl?.addEventListener("blur", () => {
287
+ updateValidatorElDebounced();
288
+ });
289
+ validatorEl?.addEventListener("click", () => {
290
+ requestAnimationFrame(() => {
291
+ updateValidatorElDebounced();
292
+ });
293
+ });
294
+ const validationMessages = this.settingsComponent.settingsState.validationMessages;
295
+ validationMessage = validationMessages[propertyName] ?? "";
296
+ updateValidatorElDebounced();
297
+ return valueComponent;
298
+ function updateValidatorEl() {
299
+ if (!validatorEl?.isActiveElement()) {
300
+ if (shouldEmptyOnBlur) {
301
+ shouldEmptyOnBlur = false;
302
+ if (!textBasedComponent?.isEmpty()) {
303
+ shouldSkipOnChange = true;
304
+ textBasedComponent?.empty();
305
+ }
306
+ } else if (shouldRevertToDefaultValueOnBlur) {
307
+ shouldRevertToDefaultValueOnBlur = false;
308
+ if (textBasedComponent?.isEmpty()) {
309
+ shouldSkipOnChange = true;
310
+ valueComponent.setValue(defaultComponentValue);
311
+ }
312
+ }
313
+ }
314
+ if (!validatorEl) {
315
+ return;
316
+ }
317
+ (0, import_type_guards.assertNonNullable)(tooltipContentEl);
318
+ if (validationMessage === "") {
319
+ validatorEl.setCustomValidity("");
320
+ validatorEl.checkValidity();
321
+ validationMessage = validatorEl.validationMessage;
322
+ }
323
+ validatorEl.setCustomValidity(validationMessage);
324
+ if (optionsExt.shouldShowValidationMessage) {
325
+ tooltipContentEl.textContent = validationMessage;
326
+ tooltipEl?.toggle(!!validationMessage);
327
+ } else if (validationMessage) {
328
+ (0, import_obsidian.setTooltip)(validatorEl, validationMessage);
329
+ }
330
+ }
331
+ }
332
+ /**
333
+ * Renders the plugin settings tab.
334
+ */
335
+ display() {
336
+ this.containerEl.empty();
337
+ this._isOpen = true;
338
+ this.asyncEventsComponent.load();
339
+ this.asyncEventsComponent.registerAsyncEvent(this.settingsComponent.on("loadSettings", this.onLoadSettings.bind(this)));
340
+ this.asyncEventsComponent.registerAsyncEvent(this.settingsComponent.on("saveSettings", this.onSaveSettings.bind(this)));
341
+ }
342
+ /**
343
+ * Hides the plugin settings tab.
344
+ */
345
+ hide() {
346
+ super.hide();
347
+ this.saveSettingsDebounced.cancel();
348
+ this._isOpen = false;
349
+ this.asyncEventsComponent.unload();
350
+ this.asyncEventsComponent.load();
351
+ (0, import_async.invokeAsyncSafely)(() => this.hideAsync());
352
+ }
353
+ /**
354
+ * Async actions to perform when the settings tab is being hidden.
355
+ *
356
+ * @returns A {@link Promise} that resolves when the settings tab is hidden.
357
+ */
358
+ async hideAsync() {
359
+ await this.settingsComponent.saveToFile(SAVE_TO_FILE_CONTEXT);
360
+ }
361
+ /**
362
+ * Shows the plugin settings tab.
363
+ */
364
+ show() {
365
+ this.app.setting.openTab(this);
366
+ }
367
+ /**
368
+ * Called when the plugin settings are loaded.
369
+ *
370
+ * @param _loadedState - The loaded settings state.
371
+ * @param _isInitialLoad - Whether the settings are being loaded for the first time.
372
+ * @returns A {@link Promise} that resolves when the settings are loaded.
373
+ */
374
+ async onLoadSettings(_loadedState, _isInitialLoad) {
375
+ this.display();
376
+ await (0, import_function.noopAsync)();
377
+ }
378
+ /**
379
+ * Revalidates the settings.
380
+ *
381
+ * @returns A {@link Promise} that resolves when the settings are revalidated.
382
+ */
383
+ async revalidate() {
384
+ const validationMessages = await this.settingsComponent.revalidate();
385
+ await this.updateValidations(validationMessages);
386
+ }
387
+ on(name, callback, thisArg) {
388
+ return this.asyncEventsComponent.asyncEvents.on(name, callback, thisArg);
389
+ }
390
+ async onSaveSettings(newState, _oldState, context) {
391
+ if (context === SAVE_TO_FILE_CONTEXT) {
392
+ await this.updateValidations(newState.validationMessages);
393
+ return;
394
+ }
395
+ this.display();
396
+ }
397
+ async updateValidations(validationMessages) {
398
+ for (const [propertyName, validationMessage] of Object.entries(validationMessages)) {
399
+ await this.asyncEventsComponent.asyncEvents.triggerAsync("validationMessageChanged", propertyName, validationMessage);
400
+ }
401
+ }
402
+ }
403
+ // Annotate the CommonJS export names for ESM import in node:
404
+ 0 && (module.exports = {
405
+ PluginSettingsTabBase,
406
+ SAVE_TO_FILE_CONTEXT
407
+ });
408
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4tc2V0dGluZ3MtdGFiLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRGVib3VuY2VyLFxuICBQbHVnaW5cbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICBDb25kaXRpb25hbEtleXMsXG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgUGx1Z2luU2V0dGluZ1RhYixcbiAgc2V0VG9vbHRpcFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNFdmVudFJlZiB9IGZyb20gJy4uLy4uL2FzeW5jLWV2ZW50cy50cyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ0tleXMgfSBmcm9tICcuLi8uLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy92YWx1ZS1jb21wb25lbnQtd2l0aC1jaGFuZ2UtdHJhY2tpbmcudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB9IGZyb20gJy4uL3ZhbGlkYXRpb24udHMnO1xuaW1wb3J0IHR5cGUge1xuICBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UsXG4gIFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZVxufSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7XG4gIGNvbnZlcnRBc3luY1RvU3luYyxcbiAgaW52b2tlQXN5bmNTYWZlbHlcbn0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IEFzeW5jRXZlbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGVuc3VyZVdyYXBwZWQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudC13cmFwcGVyLnRzJztcbmltcG9ydCB7IGdldFRleHRCYXNlZENvbXBvbmVudFZhbHVlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvdGV4dC1iYXNlZC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvdmFsaWRhdG9yLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBpc1ZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi9wbHVnaW4tY29udGV4dC50cyc7XG5cbi8qKlxuICogQSBjb250ZXh0IHBhc3NlZCB0byB0aGUge0BsaW5rIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZS5zYXZlVG9GaWxlfSBtZXRob2QuXG4gKi9cbmV4cG9ydCBjb25zdCBTQVZFX1RPX0ZJTEVfQ09OVEVYVCA9ICdQbHVnaW5TZXR0aW5nc1RhYic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFBsdWdpblNldHRpbmdzVGFiQmFzZS5iaW5kYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlZD86IChuZXdWYWx1ZTogUmVhZG9ubHlEZWVwPFQ+LCBvbGRWYWx1ZTogUmVhZG9ubHlEZWVwPFQ+KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlc2V0IHRoZSBzZXR0aW5nIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBpcyBlbXB0eS4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqIEFwcGxpY2FibGUgb25seSB0byB0ZXh0LWJhc2VkIGNvbXBvbmVudHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXNldFNldHRpbmdXaGVuQ29tcG9uZW50SXNFbXB0eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgcGxhY2Vob2xkZXIgZm9yIGRlZmF1bHQgdmFsdWVzLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICogQXBwbGljYWJsZSBvbmx5IHRvIHRleHQtYmFzZWQgY29tcG9uZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dQbGFjZWhvbGRlckZvckRlZmF1bHRWYWx1ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHZhbGlkYXRpb24gbWVzc2FnZSB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgaXMgaW52YWxpZC4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkIG9wdGlvbnMgZm9yIGBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZE9wdGlvbnNFeHRlbmRlZDxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4+IGV4dGVuZHMgQmluZE9wdGlvbnM8UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT4ge1xuICAvKipcbiAgICogQ29udmVydHMgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlIGJhY2sgdG8gdGhlIHBsdWdpbiBzZXR0aW5ncyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHVpVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHRvIHNldCBvbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodWlWYWx1ZTogVUlWYWx1ZSkgPT4gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSB8IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlIHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IHRoZSBVSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW5TZXR0aW5nc1ZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBVSSBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5TZXR0aW5nc1RvQ29tcG9uZW50VmFsdWVDb252ZXJ0ZXI6IChwbHVnaW5TZXR0aW5nc1ZhbHVlOiBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT4pID0+IFVJVmFsdWU7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciBjcmVhdGluZyBhIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZVBhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpbnN0YW5jZSAobmVlZGVkIGJ5IE9ic2lkaWFuJ3MgUGx1Z2luU2V0dGluZ1RhYikuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5ncyB0YWJzIGluIE9ic2lkaWFuLlxuICogUHJvdmlkZXMgYSBtZXRob2QgZm9yIGJpbmRpbmcgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsaW5nIGNoYW5nZXMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpblNldHRpbmdzVGFiQmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIgaXMgb3Blbi5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYiBpcyBvcGVuLlxuICAgKi9cbiAgcHVibGljIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgbWFuYWdlci5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQSBkZWJvdW5jZSB0aW1lb3V0IGZvciBzYXZpbmcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWJvdW5jZSB0aW1lb3V0IGZvciBzYXZpbmcgc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNhdmVTZXR0aW5nc0RlYm91bmNlVGltZW91dEluTWlsbGlzZWNvbmRzKCk6IG51bWJlciB7XG4gICAgY29uc3QgREVGQVVMVCA9IDJfMDAwO1xuICAgIHJldHVybiBERUZBVUxUO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXN5bmNFdmVudHNDb21wb25lbnQ6IEFzeW5jRXZlbnRzQ29tcG9uZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHNhdmVTZXR0aW5nc0RlYm91bmNlZDogRGVib3VuY2VyPFtdLCB2b2lkPjtcblxuICBwcml2YXRlIGdldCBwbHVnaW5TZXR0aW5ncygpOiBQbHVnaW5TZXR0aW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQuc2V0dGluZ3NTdGF0ZS5pbnB1dFZhbHVlcyBhcyBQbHVnaW5TZXR0aW5ncztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBzZXR0aW5ncyB0YWIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlUGFyYW1zPFBsdWdpblNldHRpbmdzPikge1xuICAgIHN1cGVyKHBhcmFtcy5wbHVnaW4uYXBwLCBwYXJhbXMucGx1Z2luKTtcbiAgICB0aGlzLnNldHRpbmdzQ29tcG9uZW50ID0gcGFyYW1zLnNldHRpbmdzQ29tcG9uZW50O1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModGhpcy5jb250YWluZXJFbCwgQ3NzQ2xhc3MuUGx1Z2luU2V0dGluZ3NUYWIpO1xuICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkID0gZGVib3VuY2UoXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoKCkgPT4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudC5zYXZlVG9GaWxlKFNBVkVfVE9fRklMRV9DT05URVhUKSksXG4gICAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlVGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgKTtcbiAgICB0aGlzLmFzeW5jRXZlbnRzQ29tcG9uZW50ID0gbmV3IEFzeW5jRXZlbnRzQ29tcG9uZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgYSB2YWx1ZSBjb21wb25lbnQgdG8gYSBwbHVnaW4gc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIG9mIHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgYmluZGluZyB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGJpbmQ8XG4gICAgVUlWYWx1ZSxcbiAgICBUVmFsdWVDb21wb25lbnRcbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT4sXG4gICAgcHJvcGVydHlOYW1lOiBDb25kaXRpb25hbEtleXM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWU+LFxuICAgIG9wdGlvbnM/OiBCaW5kT3B0aW9uczxVSVZhbHVlPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudCxcbiAgICBQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPlxuICA+KFxuICAgIHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPixcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZSxcbiAgICBvcHRpb25zOiBCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+XG4gICk6IFRWYWx1ZUNvbXBvbmVudDtcbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+LFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lLFxuICAgIG9wdGlvbnM/OiBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPlxuICApOiBUVmFsdWVDb21wb25lbnQge1xuICAgIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0ge1xuICAgICAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodmFsdWU6IFVJVmFsdWUpOiBQcm9wZXJ0eVR5cGUgPT4gdmFsdWUgYXMgUHJvcGVydHlUeXBlLFxuICAgICAgb25DaGFuZ2VkOiBub29wLFxuICAgICAgcGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyOiAodmFsdWU6IFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+KTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgICAgc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk6IHRydWUsXG4gICAgICBzaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzOiB0cnVlLFxuICAgICAgc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNFeHQ6IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckVsID0gZ2V0VmFsaWRhdG9yQ29tcG9uZW50KHZhbHVlQ29tcG9uZW50KT8udmFsaWRhdG9yRWw7XG5cbiAgICBjb25zdCB0ZXh0QmFzZWRDb21wb25lbnQgPSBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSh2YWx1ZUNvbXBvbmVudCk7XG5cbiAgICBjb25zdCByZWFkb25seVZhbHVlID0gdGhpcy5wbHVnaW5TZXR0aW5nc1twcm9wZXJ0eU5hbWVdIGFzIFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+O1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5zZXR0aW5nc0NvbXBvbmVudC5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGVmYXVsdHNbcHJvcGVydHlOYW1lXSBhcyBQcm9wZXJ0eVR5cGU7XG4gICAgY29uc3QgZGVmYXVsdENvbXBvbmVudFZhbHVlID0gb3B0aW9uc0V4dC5wbHVnaW5TZXR0aW5nc1RvQ29tcG9uZW50VmFsdWVDb252ZXJ0ZXIoZGVmYXVsdFZhbHVlIGFzIFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+KTtcbiAgICB0ZXh0QmFzZWRDb21wb25lbnQ/LnNldFBsYWNlaG9sZGVyVmFsdWUoZGVmYXVsdENvbXBvbmVudFZhbHVlKTtcblxuICAgIGxldCB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xuICAgIGxldCB0b29sdGlwRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHRvb2x0aXBDb250ZW50RWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHZhbGlkYXRvckVsKSB7XG4gICAgICBjb25zdCB3cmFwcGVyID0gZW5zdXJlV3JhcHBlZCh2YWxpZGF0b3JFbCk7XG4gICAgICB0b29sdGlwRWwgPSB3cmFwcGVyLmNyZWF0ZURpdigpO1xuICAgICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyh0b29sdGlwRWwsIENzc0NsYXNzLlRvb2x0aXAsIENzc0NsYXNzLlRvb2x0aXBWYWxpZGF0b3IpO1xuICAgICAgdG9vbHRpcENvbnRlbnRFbCA9IHRvb2x0aXBFbC5jcmVhdGVTcGFuKCk7XG4gICAgICBjb25zdCB0b29sdGlwQXJyb3dFbCA9IHRvb2x0aXBFbC5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEFycm93RWwsIENzc0NsYXNzLlRvb2x0aXBBcnJvdyk7XG4gICAgICB0b29sdGlwRWwuaGlkZSgpO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0b29sdGlwRWwpO1xuICAgIH1cblxuICAgIHRoaXMuYXN5bmNFdmVudHNDb21wb25lbnQucmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMub24oJ3ZhbGlkYXRpb25NZXNzYWdlQ2hhbmdlZCcsIChhbm90aGVyUHJvcGVydHlOYW1lLCBhbm90aGVyVmFsaWRhdGlvbk1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IGFub3RoZXJQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGFub3RoZXJWYWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIHVwZGF0ZVZhbGlkYXRvckVsRGVib3VuY2VkKCk7XG4gICAgfSkpO1xuXG4gICAgbGV0IHNob3VsZEVtcHR5T25CbHVyID0gZmFsc2U7XG4gICAgbGV0IHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyID0gZmFsc2U7XG5cbiAgICBpZiAodGV4dEJhc2VkQ29tcG9uZW50ICYmIG9wdGlvbnNFeHQuc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcyAmJiBkZWVwRXF1YWwocmVhZG9ubHlWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgdGV4dEJhc2VkQ29tcG9uZW50LmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKG9wdGlvbnNFeHQucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKHJlYWRvbmx5VmFsdWUpKTtcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkU2tpcE9uQ2hhbmdlID0gZmFsc2U7XG4gICAgY29uc3QgVVBEQVRFX1ZBTElEQVRPUl9FTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDtcbiAgICBjb25zdCB1cGRhdGVWYWxpZGF0b3JFbERlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsKCk7XG4gICAgICB9KTtcbiAgICB9LCBVUERBVEVfVkFMSURBVE9SX0VMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHZhbHVlQ29tcG9uZW50Lm9uQ2hhbmdlKGFzeW5jICh1aVZhbHVlKSA9PiB7XG4gICAgICBpZiAoc2hvdWxkU2tpcE9uQ2hhbmdlKSB7XG4gICAgICAgIHNob3VsZFNraXBPbkNoYW5nZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNob3VsZEVtcHR5T25CbHVyID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5wbHVnaW5TZXR0aW5nc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgbGV0IG5ld1ZhbHVlOiBQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2hvdWxkU2V0UHJvcGVydHkgPSB0cnVlO1xuICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSAhIXRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpICYmIG9wdGlvbnNFeHQuc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk7XG4gICAgICBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IG9wdGlvbnNFeHQuY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyKHVpVmFsdWUpO1xuICAgICAgICBpZiAoaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlcihjb252ZXJ0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGNvbnZlcnRlZFZhbHVlLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICAgIHNob3VsZFNldFByb3BlcnR5ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBjb252ZXJ0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkU2V0UHJvcGVydHkpIHtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB0aGlzLnNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbmV3VmFsdWUgYXMgUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSk7XG4gICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dC5zaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzICYmICF0ZXh0QmFzZWRDb21wb25lbnQuaXNFbXB0eSgpICYmIGRlZXBFcXVhbChuZXdWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIHNob3VsZEVtcHR5T25CbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbERlYm91bmNlZCgpO1xuICAgICAgaWYgKHNob3VsZFNldFByb3BlcnR5KSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnNFeHQub25DaGFuZ2VkKG5ld1ZhbHVlIGFzIFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+LCBvbGRWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPik7XG4gICAgICB9XG4gICAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCgpO1xuICAgIH0pO1xuXG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgdXBkYXRlVmFsaWRhdG9yRWxEZWJvdW5jZWQoKTtcbiAgICB9KTtcbiAgICB2YWxpZGF0b3JFbD8uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcbiAgICAgIHVwZGF0ZVZhbGlkYXRvckVsRGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdXBkYXRlVmFsaWRhdG9yRWxEZWJvdW5jZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gdGhpcy5zZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHZhbGlkYXRpb25NZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2VzW3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgdXBkYXRlVmFsaWRhdG9yRWxEZWJvdW5jZWQoKTtcblxuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudDtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbGlkYXRvckVsKCk6IHZvaWQge1xuICAgICAgaWYgKCF2YWxpZGF0b3JFbD8uaXNBY3RpdmVFbGVtZW50KCkpIHtcbiAgICAgICAgaWYgKHNob3VsZEVtcHR5T25CbHVyKSB7XG4gICAgICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICghdGV4dEJhc2VkQ29tcG9uZW50Py5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHNob3VsZFNraXBPbkNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICB0ZXh0QmFzZWRDb21wb25lbnQ/LmVtcHR5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyKSB7XG4gICAgICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKGRlZmF1bHRDb21wb25lbnRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdG9yRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnROb25OdWxsYWJsZSh0b29sdGlwQ29udGVudEVsKTtcblxuICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlID09PSAnJykge1xuICAgICAgICB2YWxpZGF0b3JFbC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgICAgIHZhbGlkYXRvckVsLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0b3JFbC52YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgdmFsaWRhdG9yRWwuc2V0Q3VzdG9tVmFsaWRpdHkodmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgaWYgKG9wdGlvbnNFeHQuc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHRvb2x0aXBDb250ZW50RWwudGV4dENvbnRlbnQgPSB2YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgdG9vbHRpcEVsPy50b2dnbGUoISF2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHNldFRvb2x0aXAodmFsaWRhdG9yRWwsIHZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNwbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMuYXN5bmNFdmVudHNDb21wb25lbnQubG9hZCgpO1xuICAgIHRoaXMuYXN5bmNFdmVudHNDb21wb25lbnQucmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMuc2V0dGluZ3NDb21wb25lbnQub24oJ2xvYWRTZXR0aW5ncycsIHRoaXMub25Mb2FkU2V0dGluZ3MuYmluZCh0aGlzKSkpO1xuICAgIHRoaXMuYXN5bmNFdmVudHNDb21wb25lbnQucmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMuc2V0dGluZ3NDb21wb25lbnQub24oJ3NhdmVTZXR0aW5ncycsIHRoaXMub25TYXZlU2V0dGluZ3MuYmluZCh0aGlzKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGhpZGUoKTogdm9pZCB7XG4gICAgc3VwZXIuaGlkZSgpO1xuICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkLmNhbmNlbCgpO1xuICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYXN5bmNFdmVudHNDb21wb25lbnQudW5sb2FkKCk7XG4gICAgdGhpcy5hc3luY0V2ZW50c0NvbXBvbmVudC5sb2FkKCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5oaWRlQXN5bmMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gdGhlIHNldHRpbmdzIHRhYiBpcyBiZWluZyBoaWRkZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgdGFiIGlzIGhpZGRlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoaWRlQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5nc0NvbXBvbmVudC5zYXZlVG9GaWxlKFNBVkVfVE9fRklMRV9DT05URVhUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBzaG93KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwLnNldHRpbmcub3BlblRhYih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBfbG9hZGVkU3RhdGUgLSBUaGUgbG9hZGVkIHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX2lzSW5pdGlhbExvYWQgLSBXaGV0aGVyIHRoZSBzZXR0aW5ncyBhcmUgYmVpbmcgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9hZFNldHRpbmdzKF9sb2FkZWRTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPiwgX2lzSW5pdGlhbExvYWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRpc3BsYXkoKTtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHJldmFsaWRhdGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJldmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gYXdhaXQgdGhpcy5zZXR0aW5nc0NvbXBvbmVudC5yZXZhbGlkYXRlKCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVWYWxpZGF0aW9ucyh2YWxpZGF0aW9uTWVzc2FnZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbihcbiAgICBuYW1lOiAndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJyxcbiAgICBjYWxsYmFjazogKFxuICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nXG4gICAgKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWY7XG4gIHByaXZhdGUgb248QXJncyBleHRlbmRzIHVua25vd25bXT4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0V2ZW50c0NvbXBvbmVudC5hc3luY0V2ZW50cy5vbihuYW1lLCBjYWxsYmFjaywgdGhpc0FyZyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uU2F2ZVNldHRpbmdzKFxuICAgIG5ld1N0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIF9vbGRTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBjb250ZXh0OiB1bmtub3duXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjb250ZXh0ID09PSBTQVZFX1RPX0ZJTEVfQ09OVEVYVCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWYWxpZGF0aW9ucyhuZXdTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgYXMgUmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVmFsaWRhdGlvbnModmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRpb25NZXNzYWdlXSBvZiBPYmplY3QuZW50cmllcyh2YWxpZGF0aW9uTWVzc2FnZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFzeW5jRXZlbnRzQ29tcG9uZW50LmFzeW5jRXZlbnRzLnRyaWdnZXJBc3luYygndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJywgcHJvcGVydHlOYW1lLCB2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQSxzQkFJTztBQVdQLG1CQUdPO0FBQ1AsdUJBQXlCO0FBQ3pCLHNCQUdPO0FBQ1AsMEJBQTBCO0FBQzFCLHlCQUFrQztBQUNsQyxvQ0FBcUM7QUFDckMsdUNBQThC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LEtBQUssSUFBSSxDQUFDLENBQUM7QUFDdEgsU0FBSyxxQkFBcUIsbUJBQW1CLEtBQUssa0JBQWtCLEdBQUcsZ0JBQWdCLEtBQUssZUFBZSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDeEg7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtnQixPQUFhO0FBQzNCLFVBQU0sS0FBSztBQUNYLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyxVQUFVO0FBQ2YsU0FBSyxxQkFBcUIsT0FBTztBQUNqQyxTQUFLLHFCQUFxQixLQUFLO0FBQy9CLHdDQUFrQixNQUFNLEtBQUssVUFBVSxDQUFDO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFhLFlBQTJCO0FBQ3RDLFVBQU0sS0FBSyxrQkFBa0IsV0FBVyxvQkFBb0I7QUFBQSxFQUM5RDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS08sT0FBYTtBQUNsQixTQUFLLElBQUksUUFBUSxRQUFRLElBQUk7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTQSxNQUFnQixlQUFlLGNBQTJELGdCQUF3QztBQUNoSSxTQUFLLFFBQVE7QUFDYixjQUFNLDJCQUFVO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFnQixhQUE0QjtBQUMxQyxVQUFNLHFCQUFxQixNQUFNLEtBQUssa0JBQWtCLFdBQVc7QUFDbkUsVUFBTSxLQUFLLGtCQUFrQixrQkFBa0I7QUFBQSxFQUNqRDtBQUFBLEVBVVEsR0FDTixNQUNBLFVBQ0EsU0FDZTtBQUNmLFdBQU8sS0FBSyxxQkFBcUIsWUFBWSxHQUFHLE1BQU0sVUFBVSxPQUFPO0FBQUEsRUFDekU7QUFBQSxFQUVBLE1BQWMsZUFDWixVQUNBLFdBQ0EsU0FDZTtBQUNmLFFBQUksWUFBWSxzQkFBc0I7QUFDcEMsWUFBTSxLQUFLLGtCQUFrQixTQUFTLGtCQUFnRTtBQUN0RztBQUFBLElBQ0Y7QUFFQSxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxNQUFjLGtCQUFrQixvQkFBK0U7QUFDN0csZUFBVyxDQUFDLGNBQWMsaUJBQWlCLEtBQUssT0FBTyxRQUFRLGtCQUFrQixHQUFHO0FBQ2xGLFlBQU0sS0FBSyxxQkFBcUIsWUFBWSxhQUFhLDRCQUE0QixjQUFjLGlCQUFpQjtBQUFBLElBQ3RIO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -4,14 +4,15 @@
4
4
  * This module defines a base class for creating plugin setting tabs in Obsidian.
5
5
  * It provides a utility method to bind value components to plugin settings and handle changes.
6
6
  */
7
+ import type { Plugin } from 'obsidian';
7
8
  import type { ConditionalKeys, Promisable, ReadonlyDeep } from 'type-fest';
8
9
  import { PluginSettingTab } from 'obsidian';
9
10
  import type { StringKeys } from '../../type.cjs';
10
11
  import type { ValueComponentWithChangeTracking } from '../components/setting-components/value-component-with-change-tracking.cjs';
11
12
  import type { ValidationMessageHolder } from '../validation.cjs';
12
- import type { ExtractPlugin, ExtractPluginSettings, ExtractReadonlyPluginSettingsWrapper, PluginTypesBase } from './plugin-types-base.cjs';
13
+ import type { PluginSettingsComponentBase, ReadonlyPluginSettingsState } from './components/plugin-settings-component.cjs';
13
14
  /**
14
- * A context passed to the {@link PluginSettingsManagerBase.saveToFile} method.
15
+ * A context passed to the {@link PluginSettingsComponentBase.saveToFile} method.
15
16
  */
16
17
  export declare const SAVE_TO_FILE_CONTEXT = "PluginSettingsTab";
17
18
  /**
@@ -56,20 +57,36 @@ export interface BindOptionsExtended<PluginSettings extends object, UIValue, Pro
56
57
  */
57
58
  readonly pluginSettingsToComponentValueConverter: (pluginSettingsValue: ReadonlyDeep<PluginSettings[PropertyName]>) => UIValue;
58
59
  }
60
+ /**
61
+ * Params for creating a {@link PluginSettingsTabBase}.
62
+ */
63
+ export interface PluginSettingsTabBaseParams<PluginSettings extends object> {
64
+ /**
65
+ * The plugin instance (needed by Obsidian's PluginSettingTab).
66
+ */
67
+ readonly plugin: Plugin;
68
+ /**
69
+ * The settings component.
70
+ */
71
+ readonly settingsComponent: PluginSettingsComponentBase<PluginSettings>;
72
+ }
59
73
  /**
60
74
  * Base class for creating plugin settings tabs in Obsidian.
61
75
  * Provides a method for binding value components to plugin settings and handling changes.
62
76
  *
63
- * @typeParam PluginTypes - Plugin-specific types.
77
+ * @typeParam PluginSettings - The plugin settings type.
64
78
  */
65
- export declare abstract class PluginSettingsTabBase<PluginTypes extends PluginTypesBase> extends PluginSettingTab {
66
- plugin: ExtractPlugin<PluginTypes>;
79
+ export declare abstract class PluginSettingsTabBase<PluginSettings extends object> extends PluginSettingTab {
67
80
  /**
68
81
  * Whether the plugin settings tab is open.
69
82
  *
70
83
  * @returns Whether the plugin settings tab is open.
71
84
  */
72
85
  get isOpen(): boolean;
86
+ /**
87
+ * The settings manager.
88
+ */
89
+ protected readonly settingsComponent: PluginSettingsComponentBase<PluginSettings>;
73
90
  /**
74
91
  * A debounce timeout for saving settings.
75
92
  *
@@ -83,9 +100,9 @@ export declare abstract class PluginSettingsTabBase<PluginTypes extends PluginTy
83
100
  /**
84
101
  * Creates a new plugin settings tab.
85
102
  *
86
- * @param plugin - The plugin.
103
+ * @param params - The params.
87
104
  */
88
- constructor(plugin: ExtractPlugin<PluginTypes>);
105
+ constructor(params: PluginSettingsTabBaseParams<PluginSettings>);
89
106
  /**
90
107
  * Binds a value component to a plugin setting.
91
108
  *
@@ -96,7 +113,7 @@ export declare abstract class PluginSettingsTabBase<PluginTypes extends PluginTy
96
113
  * @param options - The options for binding the value component.
97
114
  * @returns The value component.
98
115
  */
99
- bind<UIValue, TValueComponent>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: ConditionalKeys<ExtractPluginSettings<PluginTypes>, UIValue>, options?: BindOptions<UIValue>): TValueComponent;
116
+ bind<UIValue, TValueComponent>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: ConditionalKeys<PluginSettings, UIValue>, options?: BindOptions<UIValue>): TValueComponent;
100
117
  /**
101
118
  * Binds a value component to a plugin setting.
102
119
  *
@@ -108,7 +125,7 @@ export declare abstract class PluginSettingsTabBase<PluginTypes extends PluginTy
108
125
  * @param options - The options for binding the value component.
109
126
  * @returns The value component.
110
127
  */
111
- bind<UIValue, TValueComponent, PropertyName extends StringKeys<ExtractPluginSettings<PluginTypes>>>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: PropertyName, options: BindOptionsExtended<ExtractPluginSettings<PluginTypes>, UIValue, PropertyName>): TValueComponent;
128
+ bind<UIValue, TValueComponent, PropertyName extends StringKeys<PluginSettings>>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: PropertyName, options: BindOptionsExtended<PluginSettings, UIValue, PropertyName>): TValueComponent;
112
129
  /**
113
130
  * Renders the plugin settings tab.
114
131
  */
@@ -130,11 +147,11 @@ export declare abstract class PluginSettingsTabBase<PluginTypes extends PluginTy
130
147
  /**
131
148
  * Called when the plugin settings are loaded.
132
149
  *
133
- * @param _loadedSettings - The loaded settings.
150
+ * @param _loadedState - The loaded settings state.
134
151
  * @param _isInitialLoad - Whether the settings are being loaded for the first time.
135
152
  * @returns A {@link Promise} that resolves when the settings are loaded.
136
153
  */
137
- protected onLoadSettings(_loadedSettings: ExtractReadonlyPluginSettingsWrapper<PluginTypes>, _isInitialLoad: boolean): Promise<void>;
154
+ protected onLoadSettings(_loadedState: ReadonlyPluginSettingsState<PluginSettings>, _isInitialLoad: boolean): Promise<void>;
138
155
  /**
139
156
  * Revalidates the settings.
140
157
  *