@mnaoumov/obsidian-lib 10.11.0 → 11.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 (460) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/worker-component/package.json +6 -0
  5. package/components/worker-pool-component/package.json +6 -0
  6. package/components/workspace-layout-state-component/package.json +6 -0
  7. package/dist/lib/cjs/__merged.cjs +477 -285
  8. package/dist/lib/cjs/__merged.d.cts +26 -10
  9. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  10. package/dist/lib/cjs/app.cjs +2 -2
  11. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  12. package/dist/lib/cjs/attachment-path.cjs +9 -9
  13. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  14. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  15. package/dist/lib/cjs/backlink-index.cjs +5 -5
  16. package/dist/lib/cjs/backlink.cjs +7 -7
  17. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  18. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  19. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  20. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  21. package/dist/lib/cjs/bug-report.cjs +38 -12
  22. package/dist/lib/cjs/bug-report.d.cts +65 -0
  23. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  24. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  25. package/dist/lib/cjs/callout.cjs +6 -6
  26. package/dist/lib/cjs/canvas.cjs +11 -9
  27. package/dist/lib/cjs/canvas.d.cts +13 -0
  28. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  29. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  30. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  31. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  32. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  33. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  34. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  35. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  36. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  37. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  38. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  39. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  40. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  41. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  42. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  43. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  44. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  46. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +95 -4
  47. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  48. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  49. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  50. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  51. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  52. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  53. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  54. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  55. package/dist/lib/cjs/community-plugins.cjs +3 -3
  56. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  57. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  58. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  59. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  60. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  61. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  62. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  63. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  64. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  65. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  66. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  67. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  68. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  69. package/dist/lib/cjs/components/embed-extensions-component.cjs +21 -4
  70. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  71. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +24 -10
  72. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  73. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  74. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  75. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  76. package/dist/lib/cjs/components/index.cjs +54 -39
  77. package/dist/lib/cjs/components/index.d.cts +5 -0
  78. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  79. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  80. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  81. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  82. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  83. package/dist/lib/cjs/components/plugin-gate-component.cjs +69 -36
  84. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  85. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  86. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  87. package/dist/lib/cjs/components/plugin-settings-component.cjs +119 -18
  88. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  89. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  90. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  91. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  92. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  93. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  94. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  95. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  96. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  97. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  98. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  99. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  100. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  101. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  102. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  103. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  104. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  105. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  106. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  107. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  108. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  109. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  110. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  111. package/dist/lib/cjs/constructors/index.cjs +1 -1
  112. package/dist/lib/cjs/css-class.cjs +5 -1
  113. package/dist/lib/cjs/css-class.d.cts +16 -0
  114. package/dist/lib/cjs/data-handler.cjs +264 -6
  115. package/dist/lib/cjs/data-handler.d.cts +219 -2
  116. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  117. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  118. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  119. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  120. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  121. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  122. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  123. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  124. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  125. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  126. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  127. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  128. package/dist/lib/cjs/dataview-link.cjs +2 -2
  129. package/dist/lib/cjs/dataview.cjs +27 -7
  130. package/dist/lib/cjs/dataview.d.cts +14 -0
  131. package/dist/lib/cjs/debug.cjs +3 -3
  132. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  133. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  134. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  135. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  136. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  137. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  138. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  139. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  140. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  141. package/dist/lib/cjs/disposable.cjs +150 -0
  142. package/dist/lib/cjs/disposable.d.cts +39 -0
  143. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  144. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  145. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  146. package/dist/lib/cjs/editor.cjs +6 -6
  147. package/dist/lib/cjs/events.cjs +2 -2
  148. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  149. package/dist/lib/cjs/feature-request.cjs +1 -1
  150. package/dist/lib/cjs/file-change.cjs +10 -10
  151. package/dist/lib/cjs/file-explorer.cjs +2 -2
  152. package/dist/lib/cjs/file-manager.cjs +5 -5
  153. package/dist/lib/cjs/file-system.cjs +10 -10
  154. package/dist/lib/cjs/folder-note.cjs +4 -4
  155. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  156. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  157. package/dist/lib/cjs/frontmatter.cjs +5 -5
  158. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  159. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  160. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  161. package/dist/lib/cjs/hotkey.cjs +1 -1
  162. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  163. package/dist/lib/cjs/html-element.cjs +2 -2
  164. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  165. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  166. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  167. package/dist/lib/cjs/i18n/index.cjs +4 -4
  168. package/dist/lib/cjs/i18n/locales/en.cjs +27 -1
  169. package/dist/lib/cjs/i18n/locales/en.d.cts +26 -0
  170. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  171. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  172. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +26 -0
  173. package/dist/lib/cjs/index.cjs +147 -126
  174. package/dist/lib/cjs/index.d.cts +7 -0
  175. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  176. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  177. package/dist/lib/cjs/library-styles.cjs +3 -3
  178. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  179. package/dist/lib/cjs/link.cjs +76 -56
  180. package/dist/lib/cjs/link.d.cts +20 -14
  181. package/dist/lib/cjs/logger.cjs +4 -4
  182. package/dist/lib/cjs/loop.cjs +10 -16
  183. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  184. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  185. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  186. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  187. package/dist/lib/cjs/markdown-view.cjs +191 -3
  188. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  189. package/dist/lib/cjs/markdown.cjs +12 -12
  190. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  191. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  192. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  193. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  194. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  195. package/dist/lib/cjs/modals/alert.cjs +4 -4
  196. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  197. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  198. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  199. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  200. package/dist/lib/cjs/modals/index.cjs +17 -11
  201. package/dist/lib/cjs/modals/index.d.cts +2 -0
  202. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  203. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  204. package/dist/lib/cjs/modals/modal.cjs +3 -3
  205. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  206. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  207. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  208. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  209. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  210. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  211. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  212. package/dist/lib/cjs/note-priority.cjs +2 -2
  213. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  214. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  215. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  216. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  217. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  218. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  219. package/dist/lib/cjs/parse-link.cjs +14 -14
  220. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  221. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  222. package/dist/lib/cjs/path-settings.cjs +3 -3
  223. package/dist/lib/cjs/pdf.cjs +2 -2
  224. package/dist/lib/cjs/plugin/index.cjs +18 -12
  225. package/dist/lib/cjs/plugin/index.d.cts +2 -0
  226. package/dist/lib/cjs/plugin/plugin-api.cjs +21 -12
  227. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  228. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  229. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  230. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  231. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  232. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  233. package/dist/lib/cjs/plugin/plugin-install-state.cjs +49 -4
  234. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  235. package/dist/lib/cjs/plugin/plugin-instance.cjs +450 -0
  236. package/dist/lib/cjs/plugin/plugin-instance.d.cts +258 -0
  237. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  238. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  239. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  240. package/dist/lib/cjs/plugin/plugin.cjs +133 -34
  241. package/dist/lib/cjs/plugin/plugin.d.cts +35 -5
  242. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  243. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  244. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  245. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  246. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  247. package/dist/lib/cjs/popovers/index.cjs +3 -3
  248. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  249. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  250. package/dist/lib/cjs/queue.cjs +8 -8
  251. package/dist/lib/cjs/react/app-context.cjs +3 -3
  252. package/dist/lib/cjs/react/index.cjs +1 -1
  253. package/dist/lib/cjs/reference-definition.cjs +1 -1
  254. package/dist/lib/cjs/reference.cjs +3 -3
  255. package/dist/lib/cjs/release-asset.cjs +5 -5
  256. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  257. package/dist/lib/cjs/request-url.cjs +4 -4
  258. package/dist/lib/cjs/resource-lock.cjs +46 -42
  259. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  260. package/dist/lib/cjs/resource-url.cjs +3 -3
  261. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  262. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  264. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  265. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  266. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  268. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  269. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  270. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  271. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  272. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  273. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  274. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  275. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  276. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  277. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  278. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  279. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  280. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  281. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  282. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  283. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  284. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  285. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  286. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  287. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  288. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  289. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  290. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  291. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  292. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  293. package/dist/lib/cjs/setting-ex.cjs +26 -26
  294. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  295. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  296. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  297. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  298. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  299. package/dist/lib/cjs/templater.cjs +14 -4
  300. package/dist/lib/cjs/templater.d.cts +6 -0
  301. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  302. package/dist/lib/cjs/transformers/index.cjs +1 -1
  303. package/dist/lib/cjs/trusted-input.cjs +1 -1
  304. package/dist/lib/cjs/validation.cjs +4 -4
  305. package/dist/lib/cjs/vault-delete.cjs +6 -6
  306. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  307. package/dist/lib/cjs/vault.cjs +12 -12
  308. package/dist/lib/cjs/view-registrar.cjs +1 -1
  309. package/dist/lib/cjs/virtual-file.cjs +16 -14
  310. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  311. package/dist/lib/cjs/wasm.cjs +119 -0
  312. package/dist/lib/cjs/wasm.d.cts +54 -0
  313. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  314. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  315. package/dist/lib/cjs/workspace.cjs +1 -1
  316. package/dist/lib/esm/__merged.d.mts +26 -10
  317. package/dist/lib/esm/__merged.mjs +215 -5
  318. package/dist/lib/esm/app.mjs +2 -2
  319. package/dist/lib/esm/attachment-path.d.mts +3 -3
  320. package/dist/lib/esm/attachment-path.mjs +2 -2
  321. package/dist/lib/esm/backlink-index.mjs +2 -2
  322. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  323. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  324. package/dist/lib/esm/bug-report.d.mts +65 -0
  325. package/dist/lib/esm/bug-report.mjs +33 -10
  326. package/dist/lib/esm/canvas.d.mts +13 -0
  327. package/dist/lib/esm/canvas.mjs +6 -5
  328. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  329. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  330. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  331. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  332. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  333. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  334. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  335. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  336. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  337. package/dist/lib/esm/components/component-ex.mjs +19 -6
  338. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  339. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  340. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  341. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  342. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  343. package/dist/lib/esm/components/index.d.mts +5 -0
  344. package/dist/lib/esm/components/index.mjs +12 -2
  345. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  346. package/dist/lib/esm/components/plugin-gate-component.mjs +61 -26
  347. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  348. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  349. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  350. package/dist/lib/esm/components/plugin-settings-component.mjs +105 -4
  351. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  352. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  353. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  354. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  355. package/dist/lib/esm/components/worker-component.mjs +279 -0
  356. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  357. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  358. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  359. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  360. package/dist/lib/esm/css-class.d.mts +16 -0
  361. package/dist/lib/esm/css-class.mjs +5 -1
  362. package/dist/lib/esm/data-handler.d.mts +219 -2
  363. package/dist/lib/esm/data-handler.mjs +262 -5
  364. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  365. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  366. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  367. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  368. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  369. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  370. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  371. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  372. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  373. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  374. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  375. package/dist/lib/esm/dataview.d.mts +14 -0
  376. package/dist/lib/esm/dataview.mjs +19 -1
  377. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  378. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  379. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  380. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  381. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  382. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  383. package/dist/lib/esm/disposable.d.mts +39 -0
  384. package/dist/lib/esm/disposable.mjs +64 -0
  385. package/dist/lib/esm/file-system.mjs +2 -2
  386. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  387. package/dist/lib/esm/generated-during-build.mjs +2 -2
  388. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  389. package/dist/lib/esm/git-rename-history.mjs +1 -1
  390. package/dist/lib/esm/i18n/locales/en.d.mts +26 -0
  391. package/dist/lib/esm/i18n/locales/en.mjs +27 -1
  392. package/dist/lib/esm/i18n/locales/translations-map.d.mts +26 -0
  393. package/dist/lib/esm/index.d.mts +7 -0
  394. package/dist/lib/esm/index.mjs +15 -1
  395. package/dist/lib/esm/link.d.mts +20 -14
  396. package/dist/lib/esm/link.mjs +57 -38
  397. package/dist/lib/esm/loop.mjs +2 -8
  398. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  399. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  400. package/dist/lib/esm/markdown-view.d.mts +48 -1
  401. package/dist/lib/esm/markdown-view.mjs +192 -2
  402. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  403. package/dist/lib/esm/metadata-cache.mjs +6 -6
  404. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  405. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  406. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  407. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  408. package/dist/lib/esm/modals/index.d.mts +2 -0
  409. package/dist/lib/esm/modals/index.mjs +5 -1
  410. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  411. package/dist/lib/esm/modals/prompt.mjs +1 -1
  412. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  413. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  414. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  415. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  416. package/dist/lib/esm/parse-link.mjs +4 -4
  417. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  418. package/dist/lib/esm/path-compatibility.mjs +277 -0
  419. package/dist/lib/esm/plugin/index.d.mts +2 -0
  420. package/dist/lib/esm/plugin/index.mjs +6 -2
  421. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  422. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  423. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  424. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  425. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  426. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  427. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  428. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  429. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  430. package/dist/lib/esm/plugin/plugin-instance.d.mts +258 -0
  431. package/dist/lib/esm/plugin/plugin-instance.mjs +367 -0
  432. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  433. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  434. package/dist/lib/esm/plugin/plugin.d.mts +35 -5
  435. package/dist/lib/esm/plugin/plugin.mjs +118 -9
  436. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  437. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  438. package/dist/lib/esm/release-asset.mjs +1 -1
  439. package/dist/lib/esm/resource-lock.d.mts +8 -7
  440. package/dist/lib/esm/resource-lock.mjs +31 -26
  441. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  442. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  443. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  444. package/dist/lib/esm/settings-recovery.mjs +125 -0
  445. package/dist/lib/esm/settings-tabs.mjs +2 -2
  446. package/dist/lib/esm/templater.d.mts +6 -0
  447. package/dist/lib/esm/templater.mjs +11 -2
  448. package/dist/lib/esm/vault.mjs +1 -1
  449. package/dist/lib/esm/virtual-file.d.mts +2 -1
  450. package/dist/lib/esm/virtual-file.mjs +7 -5
  451. package/dist/lib/esm/wasm.d.mts +54 -0
  452. package/dist/lib/esm/wasm.mjs +30 -0
  453. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  454. package/dist/lib/esm/worker-protocol.mjs +113 -0
  455. package/dist/styles.css +16 -1
  456. package/modals/copy-text-manually/package.json +6 -0
  457. package/modals/review-bug-report-diagnostics/package.json +6 -0
  458. package/package.json +10 -8
  459. package/plugin/plugin-instance/package.json +6 -0
  460. package/plugin/third-party-plugin/package.json +6 -0
@@ -0,0 +1,146 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * Shows one status-bar item in the main window and in every desktop popout, including popouts opened later, and
7
+ * removes only its own items when a window closes or the component unloads.
8
+ *
9
+ * Read from Obsidian `1.15.1`: the main window builds `body > .app-container > .status-bar`, and
10
+ * `Plugin.addStatusBarItem` is a `.status-bar-item` created in it. A popout builds `body > .app-container` with the
11
+ * workspace only, and **no status bar**. `app.css` styles `.status-bar` without scoping it to a window, so a
12
+ * `.status-bar` created inside a popout's `.app-container` looks and sits exactly like the main one. By default
13
+ * this component creates that bar in a popout that lacks one, and marks it with
14
+ * {@link WINDOW_STATUS_BAR_CSS_CLASS}. The marker is a wire constant shared by every copy of this library: any copy
15
+ * reuses a marked bar, and whichever copy removes the last item from it removes the bar too.
16
+ *
17
+ * Mobile has no popouts, and `app.css` hides `.status-bar` under `.is-mobile`, so on mobile the component creates
18
+ * nothing and never calls the render callback.
19
+ */
20
+ import type { App, Component } from 'obsidian' with { 'resolution-mode': 'import' };
21
+ import { ComponentEx } from './component-ex.cjs';
22
+ /**
23
+ * The class that marks a status bar this library created in a window that had none.
24
+ * Other copies of the library match it, so its value must never change.
25
+ */
26
+ export declare const WINDOW_STATUS_BAR_CSS_CLASS = "obsidian-lib-window-status-bar";
27
+ /**
28
+ * Parameters for the {@link AllWindowsStatusBarItemComponent} constructor.
29
+ */
30
+ export interface AllWindowsStatusBarItemComponentConstructorParams {
31
+ /**
32
+ * The Obsidian app instance.
33
+ */
34
+ readonly app: App;
35
+ /**
36
+ * Extra CSS classes for each item.
37
+ */
38
+ readonly cls?: readonly string[];
39
+ /**
40
+ * The plugin id. When given, each item gets the `plugin-<id>` class that `Plugin.addStatusBarItem` adds, so
41
+ * themes and CSS snippets that target the plugin's status-bar items match these too.
42
+ */
43
+ readonly pluginId?: string;
44
+ /**
45
+ * Renders the item of one window. Called when the item is created and again by
46
+ * {@link AllWindowsStatusBarItemComponent.refresh}, so it must be safe to call repeatedly on the same element.
47
+ *
48
+ * @param params - The item and its window.
49
+ */
50
+ readonly render: (params: AllWindowsStatusBarItemRenderParams) => void;
51
+ /**
52
+ * Whether to create a status bar in a window that has none, as every popout in Obsidian `1.15.1` does.
53
+ * When `false`, such a window gets no item. Defaults to `true`.
54
+ */
55
+ readonly shouldCreateMissingStatusBar?: boolean;
56
+ }
57
+ /**
58
+ * Parameters passed to {@link AllWindowsStatusBarItemComponentConstructorParams.render}.
59
+ */
60
+ export interface AllWindowsStatusBarItemRenderParams {
61
+ /**
62
+ * The status-bar item owned by this component in {@link win}.
63
+ */
64
+ readonly el: HTMLElement;
65
+ /**
66
+ * The window the item is in. Use its document for anything the render creates outside the item.
67
+ */
68
+ readonly win: Window;
69
+ }
70
+ /**
71
+ * Parameters for {@link registerAllWindowsStatusBarItem}.
72
+ */
73
+ export interface RegisterAllWindowsStatusBarItemParams extends AllWindowsStatusBarItemComponentConstructorParams {
74
+ /**
75
+ * The component that owns the items: they are removed when it unloads.
76
+ */
77
+ readonly component: Component;
78
+ }
79
+ /**
80
+ * Shows one status-bar item in the main window and in every desktop popout while loaded.
81
+ */
82
+ export declare class AllWindowsStatusBarItemComponent extends ComponentEx {
83
+ /**
84
+ * The Obsidian app instance.
85
+ */
86
+ protected readonly app: App;
87
+ /**
88
+ * The CSS classes added to each item.
89
+ */
90
+ protected readonly itemClasses: readonly string[];
91
+ /**
92
+ * Renders the item of one window.
93
+ */
94
+ protected readonly renderItem: (params: AllWindowsStatusBarItemRenderParams) => void;
95
+ /**
96
+ * Whether a status bar is created in a window that has none.
97
+ */
98
+ protected readonly shouldCreateMissingStatusBar: boolean;
99
+ private readonly itemElsByWindow;
100
+ /**
101
+ * Creates a new instance of the `AllWindowsStatusBarItemComponent` class.
102
+ *
103
+ * @param params - The {@link AllWindowsStatusBarItemComponentConstructorParams}.
104
+ */
105
+ constructor(params: AllWindowsStatusBarItemComponentConstructorParams);
106
+ /**
107
+ * Gets the item of a window.
108
+ *
109
+ * @param win - The window.
110
+ * @returns The item, or `null` when the window has none.
111
+ */
112
+ getItemEl(win: Window): HTMLElement | null;
113
+ /**
114
+ * Gets the items of every window that has one.
115
+ *
116
+ * @returns The items.
117
+ */
118
+ getItemEls(): HTMLElement[];
119
+ /**
120
+ * Creates the item in every window, now and as popouts open. A no-op on mobile.
121
+ */
122
+ onload(): void;
123
+ /**
124
+ * Renders the item of every window again.
125
+ */
126
+ refresh(): void;
127
+ private attach;
128
+ private findOrCreateStatusBar;
129
+ }
130
+ /**
131
+ * Gets the class `Plugin.addStatusBarItem` adds to a plugin's status-bar items.
132
+ * It copies Obsidian `1.15.1` exactly, including that only the first disallowed character is replaced.
133
+ *
134
+ * @param pluginId - The plugin id.
135
+ * @returns The CSS class.
136
+ */
137
+ export declare function getPluginStatusBarItemCssClass(pluginId: string): string;
138
+ /**
139
+ * Shows one status-bar item in the main window and in every desktop popout, including popouts opened later, until
140
+ * the owning component unloads.
141
+ *
142
+ * @param params - The {@link RegisterAllWindowsStatusBarItemParams}. The owner must be loaded.
143
+ * @returns The {@link AllWindowsStatusBarItemComponent}. Call its {@link AllWindowsStatusBarItemComponent.refresh} to
144
+ * render every item again, or remove it from the owner to stop early.
145
+ */
146
+ export declare function registerAllWindowsStatusBarItem(params: RegisterAllWindowsStatusBarItemParams): AllWindowsStatusBarItemComponent;
@@ -117,11 +117,11 @@ __export(async_error_handler_component_exports, {
117
117
  AsyncErrorHandlerComponent: () => AsyncErrorHandlerComponent
118
118
  });
119
119
  module.exports = __toCommonJS(async_error_handler_component_exports);
120
- var import_disposable = require('@mnaoumov/typescript-lib/disposable');
121
- var import_error = require('@mnaoumov/typescript-lib/error');
122
- var import_i18n = require('../i18n/i18n.cjs');
123
- var import_component_ex = require('./component-ex.cjs');
124
- var import_plugin_notice_component = require('./plugin-notice-component.cjs');
120
+ var import_disposable = require("@mnaoumov/typescript-lib/disposable");
121
+ var import_error = require("@mnaoumov/typescript-lib/error");
122
+ var import_i18n = require("../i18n/i18n.cjs");
123
+ var import_component_ex = require("./component-ex.cjs");
124
+ var import_plugin_notice_component = require("./plugin-notice-component.cjs");
125
125
  class AsyncErrorHandlerComponent extends import_component_ex.ComponentEx {
126
126
  /**
127
127
  * Creates a new async error handler component.
@@ -117,7 +117,7 @@ __export(async_events_component_exports, {
117
117
  registerAsyncEvent: () => registerAsyncEvent
118
118
  });
119
119
  module.exports = __toCommonJS(async_events_component_exports);
120
- var import_obsidian = require('obsidian');
120
+ var import_obsidian = require("obsidian");
121
121
  function registerAsyncEvent(component, eventRef) {
122
122
  component.register(() => {
123
123
  eventRef.asyncEventSource.offref(eventRef);
@@ -127,18 +127,18 @@ __export(bulk_operation_commit_component_exports, {
127
127
  BulkOperationCommitComponent: () => BulkOperationCommitComponent
128
128
  });
129
129
  module.exports = __toCommonJS(bulk_operation_commit_component_exports);
130
- var import_async = require('@mnaoumov/typescript-lib/async');
131
- var import_error = require('@mnaoumov/typescript-lib/error');
132
- var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
133
- var import_obsidian = require('obsidian');
134
- var import_bulk_operation_progress = require('../bulk-operation-progress.cjs');
135
- var import_debug = require('../debug.cjs');
136
- var import_file_manager = require('../file-manager.cjs');
137
- var import_i18n = require('../i18n/i18n.cjs');
138
- var import_metadata_cache = require('../metadata-cache.cjs');
139
- var import_select_item = require('../modals/select-item.cjs');
140
- var import_queue = require('../queue.cjs');
141
- var import_component_ex = require('./component-ex.cjs');
130
+ var import_async = require("@mnaoumov/typescript-lib/async");
131
+ var import_error = require("@mnaoumov/typescript-lib/error");
132
+ var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
133
+ var import_obsidian = require("obsidian");
134
+ var import_bulk_operation_progress = require("../bulk-operation-progress.cjs");
135
+ var import_debug = require("../debug.cjs");
136
+ var import_file_manager = require("../file-manager.cjs");
137
+ var import_i18n = require("../i18n/i18n.cjs");
138
+ var import_metadata_cache = require("../metadata-cache.cjs");
139
+ var import_select_item = require("../modals/select-item.cjs");
140
+ var import_queue = require("../queue.cjs");
141
+ var import_component_ex = require("./component-ex.cjs");
142
142
  const DEFAULT_MAX_SETTLE_TIME_IN_MILLISECONDS = 6e4;
143
143
  const DEFAULT_QUIET_PERIOD_IN_MILLISECONDS = 2e3;
144
144
  const SHORT_SHA_LENGTH = 8;
@@ -90,8 +90,8 @@ __export(case_insensitive_file_index_component_exports, {
90
90
  CaseInsensitiveFileIndexComponent: () => CaseInsensitiveFileIndexComponent
91
91
  });
92
92
  module.exports = __toCommonJS(case_insensitive_file_index_component_exports);
93
- var import_case_insensitive_file_index = require('../case-insensitive-file-index.cjs');
94
- var import_component_ex = require('./component-ex.cjs');
93
+ var import_case_insensitive_file_index = require("../case-insensitive-file-index.cjs");
94
+ var import_component_ex = require("./component-ex.cjs");
95
95
  class CaseInsensitiveFileIndexComponent extends import_component_ex.ComponentEx {
96
96
  /**
97
97
  * The Obsidian app instance.
@@ -123,12 +123,12 @@ __export(component_ex_exports, {
123
123
  ComponentEx: () => ComponentEx
124
124
  });
125
125
  module.exports = __toCommonJS(component_ex_exports);
126
- var import_aggregate_error = require('@mnaoumov/typescript-lib/aggregate-error');
127
- var import_array = require('@mnaoumov/typescript-lib/array');
128
- var import_disposable = require('@mnaoumov/typescript-lib/disposable');
129
- var import_error = require('@mnaoumov/typescript-lib/error');
130
- var import_function = require('@mnaoumov/typescript-lib/function');
131
- var import_obsidian = require('obsidian');
126
+ var import_aggregate_error = require("@mnaoumov/typescript-lib/aggregate-error");
127
+ var import_array = require("@mnaoumov/typescript-lib/array");
128
+ var import_error = require("@mnaoumov/typescript-lib/error");
129
+ var import_function = require("@mnaoumov/typescript-lib/function");
130
+ var import_obsidian = require("obsidian");
131
+ var import_disposable = require("../disposable.cjs");
132
132
  class ComponentEx extends import_obsidian.Component {
133
133
  childrenSet = /* @__PURE__ */ new Set();
134
134
  hasBeenLoaded = false;
@@ -239,6 +239,19 @@ class ComponentEx extends import_obsidian.Component {
239
239
  onloadAsync() {
240
240
  return import_function.noopAsyncSingletonPromise;
241
241
  }
242
+ /**
243
+ * Registers an {@link AsyncDisposable} so its disposal starts when this component unloads, and returns it unchanged.
244
+ *
245
+ * Obsidian's unload is synchronous, so nothing awaits the disposal: it runs detached, and a failure is reported, never
246
+ * rethrown. See the free function {@link registerAsyncDisposable}, which this delegates to.
247
+ *
248
+ * @typeParam TAsyncDisposable - The type of the async disposable.
249
+ * @param asyncDisposable - The async disposable to register.
250
+ * @returns The same async disposable, for chaining.
251
+ */
252
+ registerAsyncDisposable(asyncDisposable) {
253
+ return (0, import_disposable.registerAsyncDisposable)(this, asyncDisposable);
254
+ }
242
255
  /**
243
256
  * Registers a {@link Disposable} so it is disposed when this component unloads, and returns it unchanged.
244
257
  *
@@ -251,10 +264,7 @@ class ComponentEx extends import_obsidian.Component {
251
264
  * @returns The same disposable, for chaining.
252
265
  */
253
266
  registerDisposable(disposable) {
254
- this.register(() => {
255
- (0, import_disposable.dispose)(disposable);
256
- });
257
- return disposable;
267
+ return (0, import_disposable.registerDisposable)(this, disposable);
258
268
  }
259
269
  /**
260
270
  * Removes a child component.
@@ -489,4 +499,4 @@ class ComponentEx extends import_obsidian.Component {
489
499
  0 && (module.exports = {
490
500
  ComponentEx
491
501
  });
492
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgY3JlYXRlQWdncmVnYXRlRXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQge1xuICBFcnJvcldyYXBwZXIsXG4gIFNpbGVudEVycm9yXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdG9vbGtpdC9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXggLS0gRXh0ZW5kZWQgYmFzZSBjbGFzcy5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFeCBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuU2V0ID0gbmV3IFNldDxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgaGFzQmVlbkxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGxvYWRFcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBsb2FkUHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICBwcml2YXRlIHBhcmVudENvbXBvbmVudDogQ29tcG9uZW50RXggfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogTWlycm9ycyB0aGUgbmF0aXZlIGBDb21wb25lbnQuYWRkQ2hpbGRgIGNvbnRyYWN0OiBpZiB0aGlzIGNvbXBvbmVudCBpcyBhbHJlYWR5IGxvYWRlZCwgdGhlIGNoaWxkIGlzIGxvYWRlZFxuICAgKiBpbW1lZGlhdGVseSwgc28gYGNoaWxkLl9sb2FkZWRgIGlzIHNldCBiZWZvcmUgdGhpcyBtZXRob2QgcmV0dXJucyBldmVuIHdoZW4gdGhpcyBjb21wb25lbnQgaGFzIGFzeW5jIGxvYWQgbG9naWMuXG4gICAqIFRoZSBjaGlsZCdzIGFzeW5jIHRhaWwgKGlmIGFueSkgaXMgc2VxdWVuY2VkIGludG8gdGhlIGxvYWQgcHJvbWlzZSBzbyBhIGxhdGVyIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSBjYWxsIGF3YWl0cyBpdC5cbiAgICpcbiAgICogQWRkaW5nIGEgY2hpbGQgQkVGT1JFIHRoZSBmaXJzdCBsb2FkIGlzIGxlZ2l0aW1hdGU6IHRoZSBjaGlsZCBpcyBxdWV1ZWQgYW5kIGxvYWRlZCB3aGVuIHRoaXMgY29tcG9uZW50IGxvYWRzLlxuICAgKiBBZGRpbmcgb25lIEFGVEVSIHRoaXMgY29tcG9uZW50IGhhcyBiZWVuIHVubG9hZGVkIGlzIG5vdCDigJQgdGhlIGNoaWxkIHdvdWxkIG5ldmVyIGJlIGxvYWRlZCBhbmQgbmV2ZXIgdW5sb2FkZWRcbiAgICogKGEgbGVhayksIHNvIGl0IGlzIHJlZnVzZWQgd2l0aCBhIHtAbGluayBTaWxlbnRFcnJvcn0uIFRoZSB0eXBpY2FsIHNvdXJjZSBvZiBzdWNoIGEgY2FsbCBpcyBhbiBgYXN5bmNgIG1ldGhvZFxuICAgKiB0aGF0IHdhcyBzdXNwZW5kZWQgb24gYW4gYGF3YWl0YCB3aGVuIHRoZSBjb21wb25lbnQgZ290IHVubG9hZGVkIGFuZCB0aGVuIHJlc3VtZWQgb24gdGhlIGRlYWQgY29tcG9uZW50OyB0aGVcbiAgICoge0BsaW5rIFNpbGVudEVycm9yfSB1bndpbmRzIGl0IHF1aWV0bHkgKHNlZSB7QGxpbmsgaXNVbmxvYWRlZH0pLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqIEB0aHJvd3MgQSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXgpIHtcbiAgICAgIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQgPSB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgY29tcG9uZW50IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgb25lLlxuICAgKlxuICAgKiBPbmx5IERJUkVDVCBjaGlsZHJlbiBhcmUgcmVwb3J0ZWQg4oCUIHRoaXMgaXMgYW4gb3duZXJzaGlwIHF1ZXN0aW9uLCBub3QgYSBjb250YWlubWVudCBvbmUuIFRoZSBjYWxsZXIgdGhhdFxuICAgKiBuZWVkcyBpdCBpcyBvbmUgaG9sZGluZyBzZXZlcmFsIHBhcmVudHMgYW5kIGRlY2lkaW5nIHdoaWNoIG9mIHRoZW0gYSBjb21wb25lbnQgYmVsb25ncyB0bywgYW5kIGZvciB0aGF0IGFcbiAgICogZ3JhbmRjaGlsZCBpcyB0aGUgd3JvbmcgYW5zd2VyOiByZW1vdmluZyBpdCBmcm9tIHRoZSBwYXJlbnQgdGhhdCBtZXJlbHkgY29udGFpbnMgaXRzIHBhcmVudCB3b3VsZCBmYWlsLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byBsb29rIGZvci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgb25lLlxuICAgKi9cbiAgcHVibGljIGhhc0NoaWxkKGNvbXBvbmVudDogQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgRGVzcGl0ZSB0aGUgZGVjbGFyZWQgYHZvaWRgIHJldHVybiB0eXBlLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBsb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMuaGFzQmVlbkxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5yZXNldExvYWRTdGF0ZSgpO1xuXG4gICAgdGhpcy5vbmxvYWQoKTtcblxuICAgIGNvbnN0IG9ubG9hZEFzeW5jUHJvbWlzZSA9IHRoaXMub25sb2FkQXN5bmMoKTtcbiAgICBpZiAob25sb2FkQXN5bmNQcm9taXNlICE9PSBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlKSB7XG4gICAgICB0aGlzLmFwcGVuZEVhZ2VyTG9hZFN0ZXAob25sb2FkQXN5bmNQcm9taXNlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHNuYXBzaG90KHRoaXMuX2NoaWxkcmVuKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogVGhlIGBBZ2dyZWdhdGVFcnJvcmAgaXMgYnVpbHQgYnkge0BsaW5rIGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yfSwgc28gaXRzIG93biBgbWVzc2FnZWAgbmFtZXMgdGhlIGZhaWx1cmUgcmF0aGVyXG4gICAqIHRoYW4gYmVpbmcgZW1wdHk6IGEgbG9uZSBmYWlsdXJlIGxlbmRzIGl0cyBtZXNzYWdlIHRvIGV2ZXJ5IGFnZ3JlZ2F0ZSBhYm92ZSBpdCwgd2hpY2ggaXMgd2hhdCBsZXRzIGEgY2FsbGVyXG4gICAqIGFzc2VydCBvbiB0aGUgc2VudGVuY2UgdGhhdCB3YXMgYWN0dWFsbHkgdGhyb3duIHdpdGhvdXQgd2Fsa2luZyBgZXJyb3JzYCB0byBmaW5kIGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIGZpbmlzaCBsb2FkaW5nLCByZWplY3RzIHdpdGggYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBpZiBhbnkgbG9hZCBzdGVwIGZhaWxlZCwgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBkb24ndCB1c2UgYGFzeW5jYCBsb2dpYyBhbmQgbm9uZSBmYWlsZWQgc3luY2hyb25vdXNseS5cbiAgICovXG4gIHB1YmxpYyBsb2FkV2l0aFByb21pc2VzKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvYWQoKTtcblxuICAgIGNvbnN0IGxvYWRQcm9taXNlID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICBpZiAoIWxvYWRQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDAgPyBQcm9taXNlLnJlamVjdChjcmVhdGVBZ2dyZWdhdGVFcnJvcih0aGlzLmxvYWRFcnJvcnMpKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHtAbGluayBEaXNwb3NhYmxlfSBzbyBpdCBpcyBkaXNwb3NlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIGFuZCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb206IHRoZSBkaXNwb3NhYmxlIGlzXG4gICAqIGRpc3Bvc2VkIG9uIHtAbGluayBDb21wb25lbnQudW5sb2FkfSAob3IgZWFybGllciwgaWYgdGhlIGNhbGxlciBkaXNwb3NlcyBpdCBkaXJlY3RseSDigJQgZGlzcG9zZSBpcyBleHBlY3RlZCB0b1xuICAgKiBiZSBpZGVtcG90ZW50KS4gR3VhcmQgd2l0aCB7QGxpbmsgZW5zdXJlTG9hZGVkfSBhdCB0aGUgY2FsbCBzaXRlIHdoZW4gcmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgd291bGQgYmUgdW5zYWZlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFREaXNwb3NhYmxlIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3Bvc2FibGUuXG4gICAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckRpc3Bvc2FibGU8VERpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlPihkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoZGlzcG9zYWJsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgc3VwZXIucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmRlbGV0ZShjb21wb25lbnQpO1xuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCAmJiBjb21wb25lbnQucGFyZW50Q29tcG9uZW50ID09PSB0aGlzKSB7XG4gICAgICBjb21wb25lbnQucGFyZW50Q29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLCB0aHJvd2luZyBpZiBpdCBpcyBub3QuXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIGd1YXJkIHB1YmxpYyBtZXRob2RzIHRoYXQgcmVnaXN0ZXIgdGVhcmRvd24tYmVhcmluZyByZXNvdXJjZXMgKHZpYSB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyfSxcbiAgICoge0BsaW5rIENvbXBvbmVudC5yZWdpc3RlckV2ZW50fSwge0BsaW5rIENvbXBvbmVudC5yZWdpc3RlckRvbUV2ZW50fSwgZXRjLikuIFJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIGlzIHVuc2FmZTpcbiAgICoge0BsaW5rIENvbXBvbmVudC51bmxvYWR9IGlzIGEgbm8tb3Agd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBub3QgbG9hZGVkLCBzbyBhbnkgdGVhcmRvd24gcmVnaXN0ZXJlZCBiZWZvcmVoYW5kIHdvdWxkXG4gICAqIG5ldmVyIHJ1biBpZiB0aGUgY29tcG9uZW50IGlzIHVubG9hZGVkIHdpdGhvdXQgZmlyc3QgYmVpbmcgbG9hZGVkLlxuICAgKlxuICAgKiBUaGUgdHdvIG5vdC1sb2FkZWQgY2FzZXMgYXJlIGRlbGliZXJhdGVseSBkaXN0aW5ndWlzaGVkLiBBIGNvbXBvbmVudCB0aGF0IHdhcyBORVZFUiBsb2FkZWQgaXMgYSBnZW51aW5lXG4gICAqIHByb2dyYW1taW5nIGVycm9yLCBzbyBpdCB0aHJvd3MgYSBsb3VkIHtAbGluayBFcnJvcn0uIEEgY29tcG9uZW50IHRoYXQgaGFzIEFMUkVBRFkgYmVlbiB1bmxvYWRlZCBpcyBub3Qg4oCUXG4gICAqIGl0IGlzIHRoZSBleHBlY3RlZCBvdXRjb21lIG9mIHdvcmsgdGhhdCBvdXRsaXZlZCBpdHMgY29tcG9uZW50IChlLmcuIGFuIGBhc3luY2AgbWV0aG9kIHN1c3BlbmRlZCBvbiBhblxuICAgKiBgYXdhaXRgIHdoaWxlIHRoZSBjb21wb25lbnQgd2FzIHVubG9hZGVkLCB0aGVuIHJlc3VtZWQpIOKAlCBzbyBpdCB0aHJvd3MgYSB7QGxpbmsgU2lsZW50RXJyb3J9LCB3aGljaFxuICAgKiBgaGFuZGxlU2lsZW50RXJyb3JgIHN1cHByZXNzZXMsIGxldHRpbmcgc3VjaCB3b3JrIHVud2luZCBxdWlldGx5IGluc3RlYWQgb2YgcmVwb3J0aW5nIGFuIGFzeW5jIGVycm9yLlxuICAgKlxuICAgKiBAdGhyb3dzIEFuIHtAbGluayBFcnJvcn0gaWYgdGhlIGNvbXBvbmVudCB3YXMgbmV2ZXIgbG9hZGVkLCBvciBhIHtAbGluayBTaWxlbnRFcnJvcn0gaWYgaXQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBlbnN1cmVMb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNpbGVudEVycm9yKCdDb21wb25lbnQgaXMgYWxyZWFkeSB1bmxvYWRlZCcpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGlzIG5vdCBsb2FkZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgc2V0dGxlcyBvbmNlIG5laXRoZXIgdGhpcyBjb21wb25lbnQgbm9yIGFueSB7QGxpbmsgQ29tcG9uZW50RXh9IGFuY2VzdG9yIGhhcyBhIGxvYWRcbiAgICogaW4gZmxpZ2h0LCBvciBgbnVsbGAgd2hlbiBub25lIG9mIHRoZW0gaGFzIG9uZSByaWdodCBub3cuXG4gICAqXG4gICAqIHtAbGluayBnZXRJbkZsaWdodExvYWRQcm9taXNlfSBjb3ZlcnMgdGhpcyBjb21wb25lbnQncyBPV04gbG9hZCBvbmx5LiBBIHNpYmxpbmcgdGhpcyBjb21wb25lbnQgZGVwZW5kcyBvbiDigJQgbW9zdFxuICAgKiBvZnRlbiB0aGUgb3duaW5nIHBsdWdpbidzIHNldHRpbmdzIGNvbXBvbmVudCwgd2hpY2ggcmVhZHMgYGRhdGEuanNvbmAgYXN5bmNocm9ub3VzbHkg4oCUIGlzIG91dHNpZGUgaXQsIGJ1dCBpdCBpc1xuICAgKiBpbnNpZGUgdGhlIGxvYWQgb2YgYSBzaGFyZWQgYW5jZXN0b3IuIFdhaXRpbmcgZm9yIGV2ZXJ5IGFuY2VzdG9yIHRoZXJlZm9yZSB3YWl0cyBmb3IgdGhlIHdob2xlIHRyZWUgdGhlIGNvbXBvbmVudFxuICAgKiB3YXMgbG9hZGVkIGFzIHBhcnQgb2Y6IHVuZGVyIGBQbHVnaW5CYXNlYCB0aGUgY2hhaW4gZW5kcyBhdCB0aGUgcGx1Z2luJ3MgdW5pdmVyc2FsIHdyYXBwZXIsIHdob3NlIGxvYWQgY292ZXJzIHRoZVxuICAgKiBkZXBlbmRlbmN5IGdhdGUsIHRoZSBmZWF0dXJlIHN1cmZhY2UgYW5kIGBvbmxvYWRJbXBsYC5cbiAgICpcbiAgICogVGhlIGNoYWluIGlzIGZvbGxvd2VkIHRocm91Z2gge0BsaW5rIENvbXBvbmVudEV4fSBwYXJlbnRzIG9ubHkuIEEgcGxhaW4ge0BsaW5rIENvbXBvbmVudH0gYW55d2hlcmUgYmV0d2VlbiB0aGlzXG4gICAqIGNvbXBvbmVudCBhbmQgYW4gYW5jZXN0b3IgZW5kcyBpdCwgYmVjYXVzZSBhIHBsYWluIGNvbXBvbmVudCByZWNvcmRzIG5vIHBhcmVudCBhbmQgZXhwb3NlcyBubyBsb2FkIHByb21pc2UuXG4gICAqXG4gICAqIE5ldmVyIGF3YWl0IHRoaXMgZnJvbSBpbnNpZGUgYSBsb2FkIHN0ZXAgb2Ygb25lIG9mIHRob3NlIGFuY2VzdG9yczogdGhlIGFuY2VzdG9yJ3MgbG9hZCB3b3VsZCB0aGVuIGJlIHdhaXRpbmcgZm9yXG4gICAqIGl0c2VsZi4gSXQgaXMgbWVhbnQgZm9yIHdvcmsgc2NoZWR1bGVkIE9VVFNJREUgdGhlIGxvYWQsIHN1Y2ggYXMgYSBsYXlvdXQtcmVhZHkgaGFuZGxlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHByb21pc2UsIG9yIGBudWxsYCBpZiBub3RoaW5nIGluIHRoZSBhbmNlc3RyeSBpcyBsb2FkaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpID8gdGhpcy53YWl0Rm9yQW5jZXN0cnlMb2FkKCkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCdzIGluLWZsaWdodCBsb2FkIHtAbGluayBQcm9taXNlfSAoaXRzIHtAbGluayBvbmxvYWRBc3luY30gcGx1cyBjaGlsZHJlbiksIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vdGhpbmcgaXMgbG9hZGluZyDigJQgZWl0aGVyIHRoZSBjb21wb25lbnQgbG9hZGVkIGZ1bGx5IHN5bmNocm9ub3VzbHkgb3IgaXRzIGFzeW5jIGxvYWQgaGFzIGFscmVhZHkgc2V0dGxlZC5cbiAgICpcbiAgICogTGV0cyBhIGNhbGxlciBzY2hlZHVsZWQgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBzdGlsbCBsb2FkaW5nIGF3YWl0IHRoZSBhc3luYyBsb2FkIHRhaWwgYmVmb3JlIGFjdGluZywgaW5zdGVhZCBvZlxuICAgKiByYWNpbmcgaXQ6IHtAbGluayBDb21wb25lbnQub25sb2FkfSBoYXMgcnVuIChzbyBgX2xvYWRlZGAgaXMgc2V0KSBidXQge0BsaW5rIG9ubG9hZEFzeW5jfSBtYXkgbm90IGhhdmUgZmluaXNoZWQuXG4gICAqXG4gICAqIEl0IGNvdmVycyB0aGlzIGNvbXBvbmVudCdzIE9XTiBsb2FkIG9ubHkuIEEgY2FsbGVyIHRoYXQgYWxzbyBkZXBlbmRzIG9uIGEgc2libGluZydzIHN0YXRlIOKAlCBhIGxheW91dC1yZWFkeSBoYW5kbGVyXG4gICAqIHJlYWRpbmcgc2V0dGluZ3MgaXMgdGhlIGNvbW1vbiBvbmUg4oCUIHdhbnRzIHtAbGluayBnZXRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2V9LCB3aGljaCBgTGF5b3V0UmVhZHlDb21wb25lbnRgXG4gICAqIHVzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpbi1mbGlnaHQgbG9hZCBwcm9taXNlLCBvciBgbnVsbGAgaWYgbm8gbG9hZCBpcyBpbiBmbGlnaHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SW5GbGlnaHRMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBtb3N0IHJlY2VudCBsb2FkIHJlY29yZGVkIGFueSBmYWlsdXJlLlxuICAgKlxuICAgKiBSZWZsZWN0cyB0aGUgb3V0Y29tZSBvZiB0aGUgbGFzdCB7QGxpbmsgbG9hZH0gLyB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc306IGB0cnVlYCB3aGVuIHtAbGluayBvbmxvYWRBc3luY30gb3IgYW55XG4gICAqIGNoaWxkJ3MgbG9hZCB0aHJldyAoc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSkuIFVubGlrZSB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30sIHJlYWRpbmcgdGhpcyBkb2VzIE5PVFxuICAgKiByZS1yYWlzZSB0aGUgY29sbGVjdGVkIGVycm9ycyDigJQgaXQgbGV0cyBhIGJ5c3RhbmRlciAoZS5nLiBhIGxheW91dC1yZWFkeSBoYW5kbGVyIGF3YWl0aW5nIHRoZSBpbi1mbGlnaHQgbG9hZCkgdGVsbFxuICAgKiB3aGV0aGVyIHRoZSBsb2FkIHN1Y2NlZWRlZCB3aXRob3V0IGFkb3B0aW5nIGEgZmFpbHVyZSB0aGF0IHRoZSBsb2FkJ3Mgb3duZXIgaXMgYWxyZWFkeSByZXNwb25zaWJsZSBmb3IuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbGFzdCBsb2FkIHJlY29yZGVkIGF0IGxlYXN0IG9uZSBlcnJvciwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFzTG9hZEVycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZCwgYXMgb3Bwb3NlZCB0byBzaW1wbHkgbm90IGhhdmluZyBiZWVuIGxvYWRlZCB5ZXQuXG4gICAqXG4gICAqIEJvdGggc3RhdGVzIGxlYXZlIGBfbG9hZGVkYCBmYWxzZSwgYnV0IHRoZXkgbWVhbiBvcHBvc2l0ZSB0aGluZ3M6IGEgY29tcG9uZW50IHRoYXQgd2FzIG5ldmVyIGxvYWRlZCBpcyBzdGlsbFxuICAgKiBhaGVhZCBvZiBpdHMgbGlmZWN5Y2xlIChxdWV1ZWluZyBjaGlsZHJlbiBiZWZvcmUgbG9hZCBpcyBsZWdpdGltYXRlKSwgd2hpbGUgYW4gdW5sb2FkZWQgb25lIGlzIGJlaGluZCBpdCBhbmRcbiAgICogbXVzdCBub3QgYmUgdXNlZCBhbnkgZnVydGhlci4gVGhlIGRpc3RpbmN0aW9uIGlzIHRyYWNrZWQgYnkgYSBmbGFnIHNldCBpbiB7QGxpbmsgbG9hZH0sIE5PVCBieSBhblxuICAgKiB7QGxpbmsgQ29tcG9uZW50Lm9udW5sb2FkfSBvdmVycmlkZSwgYmVjYXVzZSBzdWJjbGFzc2VzIG92ZXJyaWRlIGBvbnVubG9hZGAgYW5kIG1heSBub3QgY2FsbCBgc3VwZXJgLlxuICAgKlxuICAgKiBVc2UgaXQgaW4gYSBsb25nLXJ1bm5pbmcgYGFzeW5jYCBtZXRob2QgdG8gYWJhbmRvbiB3b3JrIHdob3NlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQgbWlkLWZsaWdodCwgd2hlblxuICAgKiB1bndpbmRpbmcgdmlhIHRoZSB7QGxpbmsgU2lsZW50RXJyb3J9IHRocm93biBieSB7QGxpbmsgZW5zdXJlTG9hZGVkfSAvIHtAbGluayBhZGRDaGlsZH0gaXMgbm90IGRlc2lyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29tcG9uZW50IHdhcyBsb2FkZWQgYXQgc29tZSBwb2ludCBhbmQgaXMgY3VycmVudGx5IHVubG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBpc1VubG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0JlZW5Mb2FkZWQgJiYgIXRoaXMuX2xvYWRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UuXG4gICAqXG4gICAqIFRoZSBzdGVwIGlzIHByZXN1bWVkIHRvIGhhdmUgc3RhcnRlZCBzeW5jaHJvbm91c2x5IChzbyBhbnkgYF9sb2FkZWRgIGZsYWcgaXQgc2V0cyBpcyBhbHJlYWR5IHZpc2libGUpOyBvbmx5IHRoZVxuICAgKiBhd2FpdGluZyBvZiBpdHMgYXN5bmMgdGFpbCBpcyBzZXF1ZW5jZWQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIHJlc3VsdCBvZiBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRFYWdlckxvYWRTdGVwKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gICAgaWYgKCFjYXB0dXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzID8gcHJldmlvdXMudGhlbigoKSA9PiBjYXB0dXJlZCkgOiBjYXB0dXJlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGEgZGVmZXJyZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZSwgcnVubmluZyBpdCBvbmx5IGFmdGVyIHByZXZpb3VzbHktYXBwZW5kZWQgc3RlcHMgc2V0dGxlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzLnRoZW4oKCkgPT4gdGhpcy5ydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24pKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24pO1xuICAgIGlmIChjYXB0dXJlZCkge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShjYXB0dXJlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBsb2FkIGZhaWx1cmUuXG4gICAqXG4gICAqIEEgZmFpbHVyZSByYWlzZWQgYnkgYSBjaGlsZCB7QGxpbmsgQ29tcG9uZW50RXh9IGlzIGl0c2VsZiBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9OyBpdCBpcyByZWNvcmRlZCBhcy1pcyBzbyB0aGVcbiAgICogZ3JvdXBpbmcgYnkgY2hpbGQgY29tcG9uZW50IGlzIHByZXNlcnZlZCAob3duIGZhaWx1cmVzIHN0YXkgZmxhdCwgY2hpbGQtc3VidHJlZSBmYWlsdXJlcyBzdGF5IG5lc3RlZCkuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUgdG8gcmVjb3JkLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMucHVzaChFcnJvcldyYXBwZXIuY3JlYXRlKGVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgcmVzdWx0IHNvIGl0IG5ldmVyIHJlamVjdHM6IGFueSBmYWlsdXJlIGlzIHJlY29yZGVkIGludG8gYGxvYWRFcnJvcnNgLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgbG9hZCByZXN1bHQgdG8gb2JzZXJ2ZS5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHJlc3VsdCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBsb2FkUHJvbWlzYWJsZSA9PT0gbnVsbCB8fCBsb2FkUHJvbWlzYWJsZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG51bGxcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGxvYWRQcm9taXNhYmxlKS50aGVuKG5vb3ApLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgbG9hZCBzdGVwIHN5bmNocm9ub3VzbHksIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93LCBhbmQgd3JhcHMgYW55IGFzeW5jIHRhaWwgc28gaXQgbmV2ZXIgcmVqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRnVuY3Rpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHN0ZXAgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD47XG4gICAgdHJ5IHtcbiAgICAgIGxvYWRQcm9taXNhYmxlID0gbG9hZFByb21pc2FibGVGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQ6IENvbXBvbmVudCk6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWNvbmZ1c2luZy12b2lkLWV4cHJlc3Npb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvbiAtLSBJdCBjYW4gYmUgYFByb21pc2U8dm9pZD5gIGluIHJ1bnRpbWUuIFdhbnQgZXhwbGljaXRseSBjYXN0IHRvIHNob3cgd2Uga25vdyBpdCBtYXkgYmUgcHJvbWlzZSwgZGVzcGl0ZSB0aGUgZGVjbGFyZWQgdHlwZSBgdm9pZGAuXG4gICAgcmV0dXJuIGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4ID8gY29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKSA6IGNvbXBvbmVudC5sb2FkKCkgYXMgUHJvbWlzYWJsZTx2b2lkPjtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2UgPz8gdGhpcy5wYXJlbnRDb21wb25lbnQ/LmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldExvYWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMgPSBbXTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgZGVmZXJyZWQgbG9hZCBzdGVwLCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdyBvciBhbiBhc3luYyByZWplY3Rpb24gd2l0aG91dCBldmVyIHJlLXRocm93aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCkgPz8gdW5kZWZpbmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZFByb21pc2UobG9hZFByb21pc2U6IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkUHJvbWlzZVdpdGhSZXNldDogUHJvbWlzZTx2b2lkPiA9IGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZFByb21pc2UgPT09IGxvYWRQcm9taXNlV2l0aFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBsb2FkUHJvbWlzZVdpdGhSZXNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdHMgaW4tZmxpZ2h0IGxvYWRzIGluIHRoZSBhbmNlc3RyeSB1bnRpbCBub25lIGlzIGxlZnQuXG4gICAqXG4gICAqIExvb3BlZCByYXRoZXIgdGhhbiBhd2FpdGVkIG9uY2UsIGJlY2F1c2UgYW4gYW5jZXN0b3IncyBsb2FkIGNhbiBncm93IHdoaWxlIGl0IGlzIGJlaW5nIGF3YWl0ZWQ6IGEgY2hpbGQgYWRkZWRcbiAgICogdG8gYW4gYWxyZWFkeS1sb2FkZWQgY29tcG9uZW50IGFwcGVuZHMgaXRzIGFzeW5jIHRhaWwgdG8gdGhhdCBjb21wb25lbnQncyBsb2FkIHByb21pc2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JBbmNlc3RyeUxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxvYWRQcm9taXNlID0gdGhpcy5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk7XG4gICAgd2hpbGUgKGxvYWRQcm9taXNlKSB7XG4gICAgICBhd2FpdCBsb2FkUHJvbWlzZTtcbiAgICAgIGxvYWRQcm9taXNlID0gdGhpcy5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSw2QkFBcUM7QUFDckMsbUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4QixtQkFHTztBQUNQLHNCQUdPO0FBQ1Asc0JBQTBCO0FBTW5CLE1BQU0sb0JBQW9CLDBCQUFnQztBQUFBLEVBQzlDLGNBQWMsb0JBQUksSUFBZTtBQUFBLEVBQzFDLGdCQUFnQjtBQUFBLEVBQ2hCLGFBQXNCLENBQUM7QUFBQSxFQUN2QixjQUFvQztBQUFBLEVBQ3BDLGtCQUFzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBb0I5QixTQUF1QyxXQUFtQztBQUN4RixRQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLFlBQU0sSUFBSSx5QkFBWSwrQkFBK0I7QUFBQSxJQUN2RDtBQUVBLFNBQUssVUFBVSxLQUFLLFNBQVM7QUFDN0IsU0FB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
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgY3JlYXRlQWdncmVnYXRlRXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7XG4gIEVycm9yV3JhcHBlcixcbiAgU2lsZW50RXJyb3Jcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1NpbmdsZXRvblByb21pc2Vcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgcmVnaXN0ZXJBc3luY0Rpc3Bvc2FibGUsXG4gIHJlZ2lzdGVyRGlzcG9zYWJsZVxufSBmcm9tICcuLi9kaXNwb3NhYmxlLnRzJztcblxuLyoqXG4gKiBFeHRlbmRlZCBDb21wb25lbnRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi10b29sa2l0L3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCAtLSBFeHRlbmRlZCBiYXNlIGNsYXNzLlxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEV4IGV4dGVuZHMgQ29tcG9uZW50IGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW5TZXQgPSBuZXcgU2V0PENvbXBvbmVudD4oKTtcbiAgcHJpdmF0ZSBoYXNCZWVuTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgbG9hZEVycm9yczogRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIGxvYWRQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG4gIHByaXZhdGUgcGFyZW50Q29tcG9uZW50OiBDb21wb25lbnRFeCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBNaXJyb3JzIHRoZSBuYXRpdmUgYENvbXBvbmVudC5hZGRDaGlsZGAgY29udHJhY3Q6IGlmIHRoaXMgY29tcG9uZW50IGlzIGFscmVhZHkgbG9hZGVkLCB0aGUgY2hpbGQgaXMgbG9hZGVkXG4gICAqIGltbWVkaWF0ZWx5LCBzbyBgY2hpbGQuX2xvYWRlZGAgaXMgc2V0IGJlZm9yZSB0aGlzIG1ldGhvZCByZXR1cm5zIGV2ZW4gd2hlbiB0aGlzIGNvbXBvbmVudCBoYXMgYXN5bmMgbG9hZCBsb2dpYy5cbiAgICogVGhlIGNoaWxkJ3MgYXN5bmMgdGFpbCAoaWYgYW55KSBpcyBzZXF1ZW5jZWQgaW50byB0aGUgbG9hZCBwcm9taXNlIHNvIGEgbGF0ZXIge0BsaW5rIGxvYWRXaXRoUHJvbWlzZXN9IGNhbGwgYXdhaXRzIGl0LlxuICAgKlxuICAgKiBBZGRpbmcgYSBjaGlsZCBCRUZPUkUgdGhlIGZpcnN0IGxvYWQgaXMgbGVnaXRpbWF0ZTogdGhlIGNoaWxkIGlzIHF1ZXVlZCBhbmQgbG9hZGVkIHdoZW4gdGhpcyBjb21wb25lbnQgbG9hZHMuXG4gICAqIEFkZGluZyBvbmUgQUZURVIgdGhpcyBjb21wb25lbnQgaGFzIGJlZW4gdW5sb2FkZWQgaXMgbm90IOKAlCB0aGUgY2hpbGQgd291bGQgbmV2ZXIgYmUgbG9hZGVkIGFuZCBuZXZlciB1bmxvYWRlZFxuICAgKiAoYSBsZWFrKSwgc28gaXQgaXMgcmVmdXNlZCB3aXRoIGEge0BsaW5rIFNpbGVudEVycm9yfS4gVGhlIHR5cGljYWwgc291cmNlIG9mIHN1Y2ggYSBjYWxsIGlzIGFuIGBhc3luY2AgbWV0aG9kXG4gICAqIHRoYXQgd2FzIHN1c3BlbmRlZCBvbiBhbiBgYXdhaXRgIHdoZW4gdGhlIGNvbXBvbmVudCBnb3QgdW5sb2FkZWQgYW5kIHRoZW4gcmVzdW1lZCBvbiB0aGUgZGVhZCBjb21wb25lbnQ7IHRoZVxuICAgKiB7QGxpbmsgU2lsZW50RXJyb3J9IHVud2luZHMgaXQgcXVpZXRseSAoc2VlIHtAbGluayBpc1VubG9hZGVkfSkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICogQHRocm93cyBBIHtAbGluayBTaWxlbnRFcnJvcn0gaWYgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFkZENoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNpbGVudEVycm9yKCdDb21wb25lbnQgaXMgYWxyZWFkeSB1bmxvYWRlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmFkZChjb21wb25lbnQpO1xuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCkge1xuICAgICAgY29tcG9uZW50LnBhcmVudENvbXBvbmVudCA9IHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5hcHBlbmRFYWdlckxvYWRTdGVwKHRoaXMuZXh0cmFjdExvYWRQcm9taXNhYmxlKGNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhpcyBvbmUuXG4gICAqXG4gICAqIE9ubHkgRElSRUNUIGNoaWxkcmVuIGFyZSByZXBvcnRlZCDigJQgdGhpcyBpcyBhbiBvd25lcnNoaXAgcXVlc3Rpb24sIG5vdCBhIGNvbnRhaW5tZW50IG9uZS4gVGhlIGNhbGxlciB0aGF0XG4gICAqIG5lZWRzIGl0IGlzIG9uZSBob2xkaW5nIHNldmVyYWwgcGFyZW50cyBhbmQgZGVjaWRpbmcgd2hpY2ggb2YgdGhlbSBhIGNvbXBvbmVudCBiZWxvbmdzIHRvLCBhbmQgZm9yIHRoYXQgYVxuICAgKiBncmFuZGNoaWxkIGlzIHRoZSB3cm9uZyBhbnN3ZXI6IHJlbW92aW5nIGl0IGZyb20gdGhlIHBhcmVudCB0aGF0IG1lcmVseSBjb250YWlucyBpdHMgcGFyZW50IHdvdWxkIGZhaWwuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRvIGxvb2sgZm9yLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhpcyBvbmUuXG4gICAqL1xuICBwdWJsaWMgaGFzQ2hpbGQoY29tcG9uZW50OiBDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlblNldC5oYXMoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXNwaXRlIHRoZSBkZWNsYXJlZCBgdm9pZGAgcmV0dXJuIHR5cGUsIHRoaXMgbWV0aG9kIHJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGxvYWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5oYXNCZWVuTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0TG9hZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgb25sb2FkQXN5bmNQcm9taXNlID0gdGhpcy5vbmxvYWRBc3luYygpO1xuICAgIGlmIChvbmxvYWRBc3luY1Byb21pc2UgIT09IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcChvbmxvYWRBc3luY1Byb21pc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc25hcHNob3QodGhpcy5fY2hpbGRyZW4pKSB7XG4gICAgICB0aGlzLmFwcGVuZFNlcXVlbnRpYWxMb2FkU3RlcCgoKSA9PiB0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjaGlsZCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvYWRQcm9taXNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlLCBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBXZSBuZWVkIHRvIGJ5cGFzcyB0eXBlIHN5c3RlbSB0byByZXR1cm4gYFByb21pc2U8dm9pZD5gLlxuICAgICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2UgYXMgdW5rbm93biBhcyB2b2lkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgY29tcG9uZW50IHdpdGggcHJvbWlzZXMuXG4gICAqXG4gICAqIFVubGlrZSB7QGxpbmsgbG9hZH0sIHRoaXMgbWV0aG9kIG5ldmVyIHJlamVjdHMgd2l0aCBhbiBpbmRpdmlkdWFsIGVycm9yOiBldmVyeSBmYWlsdXJlIHJhaXNlZCBieSB7QGxpbmsgb25sb2FkQXN5bmN9XG4gICAqIG9yIGEgY2hpbGQncyBsb2FkIGlzIGNvbGxlY3RlZCwgYW5kIG9uY2UgZXZlcnl0aGluZyBzZXR0bGVzIHRoZSByZXR1cm5lZCB7QGxpbmsgUHJvbWlzZX0gcmVqZWN0cyB3aXRoIGEgc2luZ2xlXG4gICAqIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaG9sZGluZyBhbGwgb2YgdGhlbS4gTm9uLWBFcnJvcmAgdGhyb3dhYmxlcyBhcmUgbm9ybWFsaXplZCB2aWEge0BsaW5rIEVycm9yV3JhcHBlci5jcmVhdGV9LlxuICAgKlxuICAgKiBUaGUgYEFnZ3JlZ2F0ZUVycm9yYCBpcyBidWlsdCBieSB7QGxpbmsgY3JlYXRlQWdncmVnYXRlRXJyb3J9LCBzbyBpdHMgb3duIGBtZXNzYWdlYCBuYW1lcyB0aGUgZmFpbHVyZSByYXRoZXJcbiAgICogdGhhbiBiZWluZyBlbXB0eTogYSBsb25lIGZhaWx1cmUgbGVuZHMgaXRzIG1lc3NhZ2UgdG8gZXZlcnkgYWdncmVnYXRlIGFib3ZlIGl0LCB3aGljaCBpcyB3aGF0IGxldHMgYSBjYWxsZXJcbiAgICogYXNzZXJ0IG9uIHRoZSBzZW50ZW5jZSB0aGF0IHdhcyBhY3R1YWxseSB0aHJvd24gd2l0aG91dCB3YWxraW5nIGBlcnJvcnNgIHRvIGZpbmQgaXQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZmluaXNoIGxvYWRpbmcsIHJlamVjdHMgd2l0aCBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGlmIGFueSBsb2FkIHN0ZXAgZmFpbGVkLCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIGRvbid0IHVzZSBgYXN5bmNgIGxvZ2ljIGFuZCBub25lIGZhaWxlZCBzeW5jaHJvbm91c2x5LlxuICAgKi9cbiAgcHVibGljIGxvYWRXaXRoUHJvbWlzZXMoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9hZCgpO1xuXG4gICAgY29uc3QgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmICghbG9hZFByb21pc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMCA/IFByb21pc2UucmVqZWN0KGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycykpIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3luY2hyb25vdXNseSBsb2FkcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBPdmVycmlkZSB0byBhZGQgYXN5bmMgbG9hZCBsb2dpYywgd2hpY2ggaXMgZXhlY3V0ZWQgYWZ0ZXIge0BsaW5rIENvbXBvbmVudC5vbmxvYWR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5vb3BBc3luY1NpbmdsZXRvblByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHNvIGl0cyBkaXNwb3NhbCBzdGFydHMgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIE9ic2lkaWFuJ3MgdW5sb2FkIGlzIHN5bmNocm9ub3VzLCBzbyBub3RoaW5nIGF3YWl0cyB0aGUgZGlzcG9zYWw6IGl0IHJ1bnMgZGV0YWNoZWQsIGFuZCBhIGZhaWx1cmUgaXMgcmVwb3J0ZWQsIG5ldmVyXG4gICAqIHJldGhyb3duLiBTZWUgdGhlIGZyZWUgZnVuY3Rpb24ge0BsaW5rIHJlZ2lzdGVyQXN5bmNEaXNwb3NhYmxlfSwgd2hpY2ggdGhpcyBkZWxlZ2F0ZXMgdG8uXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVEFzeW5jRGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gYXN5bmNEaXNwb3NhYmxlIC0gVGhlIGFzeW5jIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGFzeW5jIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFzeW5jRGlzcG9zYWJsZTxUQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlPihhc3luY0Rpc3Bvc2FibGU6IFRBc3luY0Rpc3Bvc2FibGUpOiBUQXN5bmNEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gcmVnaXN0ZXJBc3luY0Rpc3Bvc2FibGUodGhpcywgYXN5bmNEaXNwb3NhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gc28gaXQgaXMgZGlzcG9zZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSByZWN1cnJpbmcgXCJ0aWUgYSBkaXNwb3NhYmxlIHRvIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGUsIHRoZW4ga2VlcCB1c2luZyBpdFwiIGlkaW9tOiB0aGUgZGlzcG9zYWJsZSBpc1xuICAgKiBkaXNwb3NlZCBvbiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gKG9yIGVhcmxpZXIsIGlmIHRoZSBjYWxsZXIgZGlzcG9zZXMgaXQgZGlyZWN0bHkg4oCUIGRpc3Bvc2UgaXMgZXhwZWN0ZWQgdG9cbiAgICogYmUgaWRlbXBvdGVudCkuIEd1YXJkIHdpdGgge0BsaW5rIGVuc3VyZUxvYWRlZH0gYXQgdGhlIGNhbGwgc2l0ZSB3aGVuIHJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIHdvdWxkIGJlIHVuc2FmZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBURGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gZGlzcG9zYWJsZSAtIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgc2FtZSBkaXNwb3NhYmxlLCBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJEaXNwb3NhYmxlPFREaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVERpc3Bvc2FibGUpOiBURGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHJlZ2lzdGVyRGlzcG9zYWJsZSh0aGlzLCBkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICBzdXBlci5yZW1vdmVDaGlsZChjb21wb25lbnQpO1xuICAgIHRoaXMuY2hpbGRyZW5TZXQuZGVsZXRlKGNvbXBvbmVudCk7XG4gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4ICYmIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQgPT09IHRoaXMpIHtcbiAgICAgIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQsIHRocm93aW5nIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gZ3VhcmQgcHVibGljIG1ldGhvZHMgdGhhdCByZWdpc3RlciB0ZWFyZG93bi1iZWFyaW5nIHJlc291cmNlcyAodmlhIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJ9LFxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRXZlbnR9LCB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRG9tRXZlbnR9LCBldGMuKS4gUmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgaXMgdW5zYWZlOlxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gaXMgYSBuby1vcCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIG5vdCBsb2FkZWQsIHNvIGFueSB0ZWFyZG93biByZWdpc3RlcmVkIGJlZm9yZWhhbmQgd291bGRcbiAgICogbmV2ZXIgcnVuIGlmIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQgd2l0aG91dCBmaXJzdCBiZWluZyBsb2FkZWQuXG4gICAqXG4gICAqIFRoZSB0d28gbm90LWxvYWRlZCBjYXNlcyBhcmUgZGVsaWJlcmF0ZWx5IGRpc3Rpbmd1aXNoZWQuIEEgY29tcG9uZW50IHRoYXQgd2FzIE5FVkVSIGxvYWRlZCBpcyBhIGdlbnVpbmVcbiAgICogcHJvZ3JhbW1pbmcgZXJyb3IsIHNvIGl0IHRocm93cyBhIGxvdWQge0BsaW5rIEVycm9yfS4gQSBjb21wb25lbnQgdGhhdCBoYXMgQUxSRUFEWSBiZWVuIHVubG9hZGVkIGlzIG5vdCDigJRcbiAgICogaXQgaXMgdGhlIGV4cGVjdGVkIG91dGNvbWUgb2Ygd29yayB0aGF0IG91dGxpdmVkIGl0cyBjb21wb25lbnQgKGUuZy4gYW4gYGFzeW5jYCBtZXRob2Qgc3VzcGVuZGVkIG9uIGFuXG4gICAqIGBhd2FpdGAgd2hpbGUgdGhlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQsIHRoZW4gcmVzdW1lZCkg4oCUIHNvIGl0IHRocm93cyBhIHtAbGluayBTaWxlbnRFcnJvcn0sIHdoaWNoXG4gICAqIGBoYW5kbGVTaWxlbnRFcnJvcmAgc3VwcHJlc3NlcywgbGV0dGluZyBzdWNoIHdvcmsgdW53aW5kIHF1aWV0bHkgaW5zdGVhZCBvZiByZXBvcnRpbmcgYW4gYXN5bmMgZXJyb3IuXG4gICAqXG4gICAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgY29tcG9uZW50IHdhcyBuZXZlciBsb2FkZWQsIG9yIGEge0BsaW5rIFNpbGVudEVycm9yfSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGVuc3VyZUxvYWRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lsZW50RXJyb3IoJ0NvbXBvbmVudCBpcyBhbHJlYWR5IHVubG9hZGVkJyk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgaXMgbm90IGxvYWRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBzZXR0bGVzIG9uY2UgbmVpdGhlciB0aGlzIGNvbXBvbmVudCBub3IgYW55IHtAbGluayBDb21wb25lbnRFeH0gYW5jZXN0b3IgaGFzIGEgbG9hZFxuICAgKiBpbiBmbGlnaHQsIG9yIGBudWxsYCB3aGVuIG5vbmUgb2YgdGhlbSBoYXMgb25lIHJpZ2h0IG5vdy5cbiAgICpcbiAgICoge0BsaW5rIGdldEluRmxpZ2h0TG9hZFByb21pc2V9IGNvdmVycyB0aGlzIGNvbXBvbmVudCdzIE9XTiBsb2FkIG9ubHkuIEEgc2libGluZyB0aGlzIGNvbXBvbmVudCBkZXBlbmRzIG9uIOKAlCBtb3N0XG4gICAqIG9mdGVuIHRoZSBvd25pbmcgcGx1Z2luJ3Mgc2V0dGluZ3MgY29tcG9uZW50LCB3aGljaCByZWFkcyBgZGF0YS5qc29uYCBhc3luY2hyb25vdXNseSDigJQgaXMgb3V0c2lkZSBpdCwgYnV0IGl0IGlzXG4gICAqIGluc2lkZSB0aGUgbG9hZCBvZiBhIHNoYXJlZCBhbmNlc3Rvci4gV2FpdGluZyBmb3IgZXZlcnkgYW5jZXN0b3IgdGhlcmVmb3JlIHdhaXRzIGZvciB0aGUgd2hvbGUgdHJlZSB0aGUgY29tcG9uZW50XG4gICAqIHdhcyBsb2FkZWQgYXMgcGFydCBvZjogdW5kZXIgYFBsdWdpbkJhc2VgIHRoZSBjaGFpbiBlbmRzIGF0IHRoZSBwbHVnaW4ncyB1bml2ZXJzYWwgd3JhcHBlciwgd2hvc2UgbG9hZCBjb3ZlcnMgdGhlXG4gICAqIGRlcGVuZGVuY3kgZ2F0ZSwgdGhlIGZlYXR1cmUgc3VyZmFjZSBhbmQgYG9ubG9hZEltcGxgLlxuICAgKlxuICAgKiBUaGUgY2hhaW4gaXMgZm9sbG93ZWQgdGhyb3VnaCB7QGxpbmsgQ29tcG9uZW50RXh9IHBhcmVudHMgb25seS4gQSBwbGFpbiB7QGxpbmsgQ29tcG9uZW50fSBhbnl3aGVyZSBiZXR3ZWVuIHRoaXNcbiAgICogY29tcG9uZW50IGFuZCBhbiBhbmNlc3RvciBlbmRzIGl0LCBiZWNhdXNlIGEgcGxhaW4gY29tcG9uZW50IHJlY29yZHMgbm8gcGFyZW50IGFuZCBleHBvc2VzIG5vIGxvYWQgcHJvbWlzZS5cbiAgICpcbiAgICogTmV2ZXIgYXdhaXQgdGhpcyBmcm9tIGluc2lkZSBhIGxvYWQgc3RlcCBvZiBvbmUgb2YgdGhvc2UgYW5jZXN0b3JzOiB0aGUgYW5jZXN0b3IncyBsb2FkIHdvdWxkIHRoZW4gYmUgd2FpdGluZyBmb3JcbiAgICogaXRzZWxmLiBJdCBpcyBtZWFudCBmb3Igd29yayBzY2hlZHVsZWQgT1VUU0lERSB0aGUgbG9hZCwgc3VjaCBhcyBhIGxheW91dC1yZWFkeSBoYW5kbGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSwgb3IgYG51bGxgIGlmIG5vdGhpbmcgaW4gdGhlIGFuY2VzdHJ5IGlzIGxvYWRpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCkgPyB0aGlzLndhaXRGb3JBbmNlc3RyeUxvYWQoKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tcG9uZW50J3MgaW4tZmxpZ2h0IGxvYWQge0BsaW5rIFByb21pc2V9IChpdHMge0BsaW5rIG9ubG9hZEFzeW5jfSBwbHVzIGNoaWxkcmVuKSwgb3IgYG51bGxgIHdoZW5cbiAgICogbm90aGluZyBpcyBsb2FkaW5nIOKAlCBlaXRoZXIgdGhlIGNvbXBvbmVudCBsb2FkZWQgZnVsbHkgc3luY2hyb25vdXNseSBvciBpdHMgYXN5bmMgbG9hZCBoYXMgYWxyZWFkeSBzZXR0bGVkLlxuICAgKlxuICAgKiBMZXRzIGEgY2FsbGVyIHNjaGVkdWxlZCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGxvYWRpbmcgYXdhaXQgdGhlIGFzeW5jIGxvYWQgdGFpbCBiZWZvcmUgYWN0aW5nLCBpbnN0ZWFkIG9mXG4gICAqIHJhY2luZyBpdDoge0BsaW5rIENvbXBvbmVudC5vbmxvYWR9IGhhcyBydW4gKHNvIGBfbG9hZGVkYCBpcyBzZXQpIGJ1dCB7QGxpbmsgb25sb2FkQXN5bmN9IG1heSBub3QgaGF2ZSBmaW5pc2hlZC5cbiAgICpcbiAgICogSXQgY292ZXJzIHRoaXMgY29tcG9uZW50J3MgT1dOIGxvYWQgb25seS4gQSBjYWxsZXIgdGhhdCBhbHNvIGRlcGVuZHMgb24gYSBzaWJsaW5nJ3Mgc3RhdGUg4oCUIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXJcbiAgICogcmVhZGluZyBzZXR0aW5ncyBpcyB0aGUgY29tbW9uIG9uZSDigJQgd2FudHMge0BsaW5rIGdldEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZX0sIHdoaWNoIGBMYXlvdXRSZWFkeUNvbXBvbmVudGBcbiAgICogdXNlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGluLWZsaWdodCBsb2FkIHByb21pc2UsIG9yIGBudWxsYCBpZiBubyBsb2FkIGlzIGluIGZsaWdodC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbkZsaWdodExvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG1vc3QgcmVjZW50IGxvYWQgcmVjb3JkZWQgYW55IGZhaWx1cmUuXG4gICAqXG4gICAqIFJlZmxlY3RzIHRoZSBvdXRjb21lIG9mIHRoZSBsYXN0IHtAbGluayBsb2FkfSAvIHtAbGluayBsb2FkV2l0aFByb21pc2VzfTogYHRydWVgIHdoZW4ge0BsaW5rIG9ubG9hZEFzeW5jfSBvciBhbnlcbiAgICogY2hpbGQncyBsb2FkIHRocmV3IChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KS4gVW5saWtlIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSwgcmVhZGluZyB0aGlzIGRvZXMgTk9UXG4gICAqIHJlLXJhaXNlIHRoZSBjb2xsZWN0ZWQgZXJyb3JzIOKAlCBpdCBsZXRzIGEgYnlzdGFuZGVyIChlLmcuIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXIgYXdhaXRpbmcgdGhlIGluLWZsaWdodCBsb2FkKSB0ZWxsXG4gICAqIHdoZXRoZXIgdGhlIGxvYWQgc3VjY2VlZGVkIHdpdGhvdXQgYWRvcHRpbmcgYSBmYWlsdXJlIHRoYXQgdGhlIGxvYWQncyBvd25lciBpcyBhbHJlYWR5IHJlc3BvbnNpYmxlIGZvci5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXN0IGxvYWQgcmVjb3JkZWQgYXQgbGVhc3Qgb25lIGVycm9yLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBoYXNMb2FkRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLCBhcyBvcHBvc2VkIHRvIHNpbXBseSBub3QgaGF2aW5nIGJlZW4gbG9hZGVkIHlldC5cbiAgICpcbiAgICogQm90aCBzdGF0ZXMgbGVhdmUgYF9sb2FkZWRgIGZhbHNlLCBidXQgdGhleSBtZWFuIG9wcG9zaXRlIHRoaW5nczogYSBjb21wb25lbnQgdGhhdCB3YXMgbmV2ZXIgbG9hZGVkIGlzIHN0aWxsXG4gICAqIGFoZWFkIG9mIGl0cyBsaWZlY3ljbGUgKHF1ZXVlaW5nIGNoaWxkcmVuIGJlZm9yZSBsb2FkIGlzIGxlZ2l0aW1hdGUpLCB3aGlsZSBhbiB1bmxvYWRlZCBvbmUgaXMgYmVoaW5kIGl0IGFuZFxuICAgKiBtdXN0IG5vdCBiZSB1c2VkIGFueSBmdXJ0aGVyLiBUaGUgZGlzdGluY3Rpb24gaXMgdHJhY2tlZCBieSBhIGZsYWcgc2V0IGluIHtAbGluayBsb2FkfSwgTk9UIGJ5IGFuXG4gICAqIHtAbGluayBDb21wb25lbnQub251bmxvYWR9IG92ZXJyaWRlLCBiZWNhdXNlIHN1YmNsYXNzZXMgb3ZlcnJpZGUgYG9udW5sb2FkYCBhbmQgbWF5IG5vdCBjYWxsIGBzdXBlcmAuXG4gICAqXG4gICAqIFVzZSBpdCBpbiBhIGxvbmctcnVubmluZyBgYXN5bmNgIG1ldGhvZCB0byBhYmFuZG9uIHdvcmsgd2hvc2UgY29tcG9uZW50IHdhcyB1bmxvYWRlZCBtaWQtZmxpZ2h0LCB3aGVuXG4gICAqIHVud2luZGluZyB2aWEgdGhlIHtAbGluayBTaWxlbnRFcnJvcn0gdGhyb3duIGJ5IHtAbGluayBlbnN1cmVMb2FkZWR9IC8ge0BsaW5rIGFkZENoaWxkfSBpcyBub3QgZGVzaXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb21wb25lbnQgd2FzIGxvYWRlZCBhdCBzb21lIHBvaW50IGFuZCBpcyBjdXJyZW50bHkgdW5sb2FkZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVW5sb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQmVlbkxvYWRlZCAmJiAhdGhpcy5fbG9hZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZS5cbiAgICpcbiAgICogVGhlIHN0ZXAgaXMgcHJlc3VtZWQgdG8gaGF2ZSBzdGFydGVkIHN5bmNocm9ub3VzbHkgKHNvIGFueSBgX2xvYWRlZGAgZmxhZyBpdCBzZXRzIGlzIGFscmVhZHkgdmlzaWJsZSk7IG9ubHkgdGhlXG4gICAqIGF3YWl0aW5nIG9mIGl0cyBhc3luYyB0YWlsIGlzIHNlcXVlbmNlZCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgcmVzdWx0IG9mIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZEVhZ2VyTG9hZFN0ZXAobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgICBpZiAoIWNhcHR1cmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMgPyBwcmV2aW91cy50aGVuKCgpID0+IGNhcHR1cmVkKSA6IGNhcHR1cmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLCBydW5uaW5nIGl0IG9ubHkgYWZ0ZXIgcHJldmlvdXNseS1hcHBlbmRlZCBzdGVwcyBzZXR0bGUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZFNlcXVlbnRpYWxMb2FkU3RlcChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMudGhlbigoKSA9PiB0aGlzLnJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGdW5jdGlvbikpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGdW5jdGlvbik7XG4gICAgaWYgKGNhcHR1cmVkKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKGNhcHR1cmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkcyBhIGxvYWQgZmFpbHVyZS5cbiAgICpcbiAgICogQSBmYWlsdXJlIHJhaXNlZCBieSBhIGNoaWxkIHtAbGluayBDb21wb25lbnRFeH0gaXMgaXRzZWxmIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn07IGl0IGlzIHJlY29yZGVkIGFzLWlzIHNvIHRoZVxuICAgKiBncm91cGluZyBieSBjaGlsZCBjb21wb25lbnQgaXMgcHJlc2VydmVkIChvd24gZmFpbHVyZXMgc3RheSBmbGF0LCBjaGlsZC1zdWJ0cmVlIGZhaWx1cmVzIHN0YXkgbmVzdGVkKS5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIHRocm93biB2YWx1ZSB0byByZWNvcmQuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVFcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycy5wdXNoKEVycm9yV3JhcHBlci5jcmVhdGUoZXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCByZXN1bHQgc28gaXQgbmV2ZXIgcmVqZWN0czogYW55IGZhaWx1cmUgaXMgcmVjb3JkZWQgaW50byBgbG9hZEVycm9yc2AuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSBsb2FkIHJlc3VsdCB0byBvYnNlcnZlLlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgcmVzdWx0IGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGxvYWRQcm9taXNhYmxlID09PSBudWxsIHx8IGxvYWRQcm9taXNhYmxlID09PSB1bmRlZmluZWRcbiAgICAgID8gbnVsbFxuICAgICAgOiBQcm9taXNlLnJlc29sdmUobG9hZFByb21pc2FibGUpLnRoZW4obm9vcCkuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBsb2FkIHN0ZXAgc3luY2hyb25vdXNseSwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3csIGFuZCB3cmFwcyBhbnkgYXN5bmMgdGFpbCBzbyBpdCBuZXZlciByZWplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgc3RlcCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPjtcbiAgICB0cnkge1xuICAgICAgbG9hZFByb21pc2FibGUgPSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdExvYWRQcm9taXNhYmxlKGNvbXBvbmVudDogQ29tcG9uZW50KTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jaGlsZHJlblNldC5oYXMoY29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uIC0tIEl0IGNhbiBiZSBgUHJvbWlzZTx2b2lkPmAgaW4gcnVudGltZS4gV2FudCBleHBsaWNpdGx5IGNhc3QgdG8gc2hvdyB3ZSBrbm93IGl0IG1heSBiZSBwcm9taXNlLCBkZXNwaXRlIHRoZSBkZWNsYXJlZCB0eXBlIGB2b2lkYC5cbiAgICByZXR1cm4gY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXggPyBjb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpIDogY29tcG9uZW50LmxvYWQoKSBhcyBQcm9taXNhYmxlPHZvaWQ+O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZSA/PyB0aGlzLnBhcmVudENvbXBvbmVudD8uZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0TG9hZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycyA9IFtdO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAsIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93IG9yIGFuIGFzeW5jIHJlamVjdGlvbiB3aXRob3V0IGV2ZXIgcmUtdGhyb3dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24oKSA/PyB1bmRlZmluZWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkUHJvbWlzZShsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRQcm9taXNlV2l0aFJlc2V0OiBQcm9taXNlPHZvaWQ+ID0gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSA9PT0gbG9hZFByb21pc2VXaXRoUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IGxvYWRQcm9taXNlV2l0aFJlc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEF3YWl0cyBpbi1mbGlnaHQgbG9hZHMgaW4gdGhlIGFuY2VzdHJ5IHVudGlsIG5vbmUgaXMgbGVmdC5cbiAgICpcbiAgICogTG9vcGVkIHJhdGhlciB0aGFuIGF3YWl0ZWQgb25jZSwgYmVjYXVzZSBhbiBhbmNlc3RvcidzIGxvYWQgY2FuIGdyb3cgd2hpbGUgaXQgaXMgYmVpbmcgYXdhaXRlZDogYSBjaGlsZCBhZGRlZFxuICAgKiB0byBhbiBhbHJlYWR5LWxvYWRlZCBjb21wb25lbnQgYXBwZW5kcyBpdHMgYXN5bmMgdGFpbCB0byB0aGF0IGNvbXBvbmVudCdzIGxvYWQgcHJvbWlzZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFuY2VzdHJ5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZFByb21pc2UgPSB0aGlzLmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTtcbiAgICB3aGlsZSAobG9hZFByb21pc2UpIHtcbiAgICAgIGF3YWl0IGxvYWRQcm9taXNlO1xuICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDZCQUFxQztBQUNyQyxtQkFBeUI7QUFDekIsbUJBR087QUFDUCxzQkFHTztBQUNQLHNCQUEwQjtBQUUxQix3QkFHTztBQU1BLE1BQU0sb0JBQW9CLDBCQUFnQztBQUFBLEVBQzlDLGNBQWMsb0JBQUksSUFBZTtBQUFBLEVBQzFDLGdCQUFnQjtBQUFBLEVBQ2hCLGFBQXNCLENBQUM7QUFBQSxFQUN2QixjQUFvQztBQUFBLEVBQ3BDLGtCQUFzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBb0I5QixTQUF1QyxXQUFtQztBQUN4RixRQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLFlBQU0sSUFBSSx5QkFBWSwrQkFBK0I7QUFBQSxJQUN2RDtBQUVBLFNBQUssVUFBVSxLQUFLLFNBQVM7QUFDN0IsU0FBSyxZQUFZLElBQUksU0FBUztBQUM5QixRQUFJLHFCQUFxQixhQUFhO0FBQ3BDLGdCQUFVLGtCQUFrQjtBQUFBLElBQzlCO0FBRUEsUUFBSSxLQUFLLFNBQVM7QUFDaEIsV0FBSyxvQkFBb0IsS0FBSyxzQkFBc0IsU0FBUyxDQUFDO0FBQUEsSUFDaEU7QUFFQSxXQUFPO0FBQUEsRUFD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
@@ -72,6 +72,17 @@ export declare class ComponentEx extends Component implements Disposable {
72
72
  * @returns A {@link Promise} that resolves when the component is loaded.
73
73
  */
74
74
  onloadAsync(): Promise<void>;
75
+ /**
76
+ * Registers an {@link AsyncDisposable} so its disposal starts when this component unloads, and returns it unchanged.
77
+ *
78
+ * Obsidian's unload is synchronous, so nothing awaits the disposal: it runs detached, and a failure is reported, never
79
+ * rethrown. See the free function {@link registerAsyncDisposable}, which this delegates to.
80
+ *
81
+ * @typeParam TAsyncDisposable - The type of the async disposable.
82
+ * @param asyncDisposable - The async disposable to register.
83
+ * @returns The same async disposable, for chaining.
84
+ */
85
+ registerAsyncDisposable<TAsyncDisposable extends AsyncDisposable>(asyncDisposable: TAsyncDisposable): TAsyncDisposable;
75
86
  /**
76
87
  * Registers a {@link Disposable} so it is disposed when this component unloads, and returns it unchanged.
77
88
  *
@@ -117,8 +117,8 @@ __export(console_debug_component_exports, {
117
117
  ConsoleDebugComponent: () => ConsoleDebugComponent
118
118
  });
119
119
  module.exports = __toCommonJS(console_debug_component_exports);
120
- var import_debug = require('@mnaoumov/typescript-lib/debug');
121
- var import_component_ex = require('./component-ex.cjs');
120
+ var import_debug = require("@mnaoumov/typescript-lib/debug");
121
+ var import_component_ex = require("./component-ex.cjs");
122
122
  class ConsoleDebugComponent extends import_component_ex.ComponentEx {
123
123
  /**
124
124
  * Creates a new console debug component.
@@ -117,8 +117,8 @@ __export(core_plugin_toggle_component_exports, {
117
117
  CorePluginToggleComponent: () => CorePluginToggleComponent
118
118
  });
119
119
  module.exports = __toCommonJS(core_plugin_toggle_component_exports);
120
- var import_async = require('@mnaoumov/typescript-lib/async');
121
- var import_component_ex = require('./component-ex.cjs');
120
+ var import_async = require("@mnaoumov/typescript-lib/async");
121
+ var import_component_ex = require("./component-ex.cjs");
122
122
  class CorePluginToggleComponent extends import_component_ex.ComponentEx {
123
123
  /**
124
124
  * The Obsidian app instance.
@@ -123,7 +123,7 @@ __export(disposable_component_exports, {
123
123
  asDisposableComponent: () => asDisposableComponent
124
124
  });
125
125
  module.exports = __toCommonJS(disposable_component_exports);
126
- var import_obsidian = require('obsidian');
126
+ var import_obsidian = require("obsidian");
127
127
  function asDisposableComponent(component) {
128
128
  const disposableEx = component;
129
129
  const symbolDispose = disposableEx[Symbol.dispose] ?? (() => {
@@ -139,4 +139,4 @@ function asDisposableComponent(component) {
139
139
  0 && (module.exports = {
140
140
  asDisposableComponent
141
141
  });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Rpc3Bvc2FibGUtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIGNvbXBvbmVudCBiYXNlIGNsYXNzIGFuZCB1dGlsaXRpZXMgZm9yIGB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGlzcG9zYWJsZUV4IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbnR5cGUgRGlzcG9zYWJsZUNvbXBvbmVudFdyYXBwZXI8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4gPSBEaXNwb3NhYmxlRXggJiBUQ29tcG9uZW50O1xuXG4vKipcbiAqIENvbnZlcnQgY29tcG9uZW50IHRvIGEge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlIGJ5IGFkZGluZyBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBhIGNvbnZlbmllbmNlXG4gKiB7QGxpbmsgRGlzcG9zYWJsZUV4LmRpc3Bvc2V9IG1ldGhvZCB0aGF0IHVubG9hZHMgdGhlIGNvbXBvbmVudCB3aGVuIGRpc3Bvc2VkLlxuICpcbiAqIEFuIGV4aXN0aW5nIGBTeW1ib2wuZGlzcG9zZWAgaXMgcHJlc2VydmVkOyB0aGUgY29udmVuaWVuY2Uge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QgYWx3YXlzXG4gKiBkZWxlZ2F0ZXMgdG8gaXQuIFRoZSBwYXNzZWQgY29tcG9uZW50IGlzIG11dGF0ZWQgaW4gcGxhY2UgYW5kIHJldHVybmVkLCBzbyB0aGUgY2FsbCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byB3cmFwLCBjb25zdHJhaW5lZCB0byBleHRlbmQgQ29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHdyYXAgd2l0aCBEaXNwb3NhYmxlIHN1cHBvcnQuXG4gKiBAcmV0dXJucyBUaGUgY29tcG9uZW50IGNhc3QgdG8gYERpc3Bvc2FibGVDb21wb25lbnRXcmFwcGVyYCB3aXRoIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBkaXNwb3NlYFxuICogICBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRGlzcG9zYWJsZUNvbXBvbmVudDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50PiB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9IGNvbXBvbmVudCBhcyBQYXJ0aWFsPERpc3Bvc2FibGVFeD47XG4gIGNvbnN0IHN5bWJvbERpc3Bvc2U6ICgpID0+IHZvaWQgPSBkaXNwb3NhYmxlRXhbU3ltYm9sLmRpc3Bvc2VdID8/ICgoKTogdm9pZCA9PiB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9KTtcbiAgZGlzcG9zYWJsZUV4W1N5bWJvbC5kaXNwb3NlXSA9IHN5bWJvbERpc3Bvc2U7XG4gIGRpc3Bvc2FibGVFeC5kaXNwb3NlID0gKCk6IHZvaWQgPT4ge1xuICAgIHN5bWJvbERpc3Bvc2UoKTtcbiAgfTtcbiAgcmV0dXJuIGRpc3Bvc2FibGVFeCBhcyBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50Pjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHNCQUEwQjtBQWlCbkIsU0FBUyxzQkFBb0QsV0FBK0Q7QUFDakksUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZ0JBQTRCLGFBQWEsT0FBTyxPQUFPLE1BQU0sTUFBWTtBQUM3RSxjQUFVLE9BQU87QUFBQSxFQUNuQjtBQUNBLGVBQWEsT0FBTyxPQUFPLElBQUk7QUFDL0IsZUFBYSxVQUFVLE1BQVk7QUFDakMsa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Rpc3Bvc2FibGUtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIGNvbXBvbmVudCBiYXNlIGNsYXNzIGFuZCB1dGlsaXRpZXMgZm9yIGB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGlzcG9zYWJsZUV4IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxudHlwZSBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50PiA9IERpc3Bvc2FibGVFeCAmIFRDb21wb25lbnQ7XG5cbi8qKlxuICogQ29udmVydCBjb21wb25lbnQgdG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UgYnkgYWRkaW5nIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGEgY29udmVuaWVuY2VcbiAqIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gbWV0aG9kIHRoYXQgdW5sb2FkcyB0aGUgY29tcG9uZW50IHdoZW4gZGlzcG9zZWQuXG4gKlxuICogQW4gZXhpc3RpbmcgYFN5bWJvbC5kaXNwb3NlYCBpcyBwcmVzZXJ2ZWQ7IHRoZSBjb252ZW5pZW5jZSB7QGxpbmsgRGlzcG9zYWJsZUV4LmRpc3Bvc2V9IG1ldGhvZCBhbHdheXNcbiAqIGRlbGVnYXRlcyB0byBpdC4gVGhlIHBhc3NlZCBjb21wb25lbnQgaXMgbXV0YXRlZCBpbiBwbGFjZSBhbmQgcmV0dXJuZWQsIHNvIHRoZSBjYWxsIGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHdyYXAsIGNvbnN0cmFpbmVkIHRvIGV4dGVuZCBDb21wb25lbnQuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gd3JhcCB3aXRoIERpc3Bvc2FibGUgc3VwcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQgY2FzdCB0byBgRGlzcG9zYWJsZUNvbXBvbmVudFdyYXBwZXJgIHdpdGggYFN5bWJvbC5kaXNwb3NlYCBhbmQgYGRpc3Bvc2VgXG4gKiAgIGF0dGFjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNEaXNwb3NhYmxlQ29tcG9uZW50PFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IERpc3Bvc2FibGVDb21wb25lbnRXcmFwcGVyPFRDb21wb25lbnQ+IHtcbiAgY29uc3QgZGlzcG9zYWJsZUV4ID0gY29tcG9uZW50IGFzIFBhcnRpYWw8V3JpdGFibGU8RGlzcG9zYWJsZUV4Pj47XG4gIGNvbnN0IHN5bWJvbERpc3Bvc2U6ICgpID0+IHZvaWQgPSBkaXNwb3NhYmxlRXhbU3ltYm9sLmRpc3Bvc2VdID8/ICgoKTogdm9pZCA9PiB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9KTtcbiAgZGlzcG9zYWJsZUV4W1N5bWJvbC5kaXNwb3NlXSA9IHN5bWJvbERpc3Bvc2U7XG4gIGRpc3Bvc2FibGVFeC5kaXNwb3NlID0gKCk6IHZvaWQgPT4ge1xuICAgIHN5bWJvbERpc3Bvc2UoKTtcbiAgfTtcbiAgcmV0dXJuIGRpc3Bvc2FibGVFeCBhcyBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50Pjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHNCQUEwQjtBQWlCbkIsU0FBUyxzQkFBb0QsV0FBK0Q7QUFDakksUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZ0JBQTRCLGFBQWEsT0FBTyxPQUFPLE1BQU0sTUFBWTtBQUM3RSxjQUFVLE9BQU87QUFBQSxFQUNuQjtBQUNBLGVBQWEsT0FBTyxPQUFPLElBQUk7QUFDL0IsZUFBYSxVQUFVLE1BQVk7QUFDakMsa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
@@ -90,7 +90,7 @@ __export(embed_extensions_component_exports, {
90
90
  EmbedExtensionsComponent: () => EmbedExtensionsComponent
91
91
  });
92
92
  module.exports = __toCommonJS(embed_extensions_component_exports);
93
- var import_component_ex = require('./component-ex.cjs');
93
+ var import_component_ex = require("./component-ex.cjs");
94
94
  class EmbedExtensionsComponent extends import_component_ex.ComponentEx {
95
95
  /**
96
96
  * Creates a new instance of the {@link EmbedExtensionsComponent} class.
@@ -106,6 +106,14 @@ class EmbedExtensionsComponent extends import_component_ex.ComponentEx {
106
106
  * Registers the specified file extensions with the given embed type in the Obsidian app.
107
107
  * The extensions will be automatically unregistered when the component is unloaded.
108
108
  *
109
+ * The registration is all or nothing: Obsidian throws for an extension that is already registered (by the core or by
110
+ * another plugin), and in that case every extension this call registered before the conflict is unregistered again
111
+ * before the error is rethrown. An extension registered by someone else is never unregistered.
112
+ *
113
+ * The creator serves every surface that loads an embed: `![[file.ext#subpath]]` in Reading view and Live Preview,
114
+ * canvas file nodes and the page-preview hover popover. It receives the link's subpath with its leading `#`, or an
115
+ * empty string. Returning `null` makes Obsidian fall back to its generic file embed.
116
+ *
109
117
  * @param extensions - An array of file extensions to register.
110
118
  * @param embedCreator - The embed creator function to associate with the extensions.
111
119
  *
@@ -116,9 +124,18 @@ class EmbedExtensionsComponent extends import_component_ex.ComponentEx {
116
124
  */
117
125
  registerExtensions(extensions, embedCreator) {
118
126
  this.ensureLoaded();
119
- this.app.embedRegistry.registerExtensions(extensions, embedCreator);
127
+ const registeredExtensions = [];
128
+ try {
129
+ for (const extension of extensions) {
130
+ this.app.embedRegistry.registerExtension(extension, embedCreator);
131
+ registeredExtensions.push(extension);
132
+ }
133
+ } catch (error) {
134
+ this.app.embedRegistry.unregisterExtensions(registeredExtensions);
135
+ throw error;
136
+ }
120
137
  this.register(() => {
121
- this.app.embedRegistry.unregisterExtensions(extensions);
138
+ this.app.embedRegistry.unregisterExtensions(registeredExtensions);
122
139
  });
123
140
  }
124
141
  }
@@ -126,4 +143,4 @@ class EmbedExtensionsComponent extends import_component_ex.ComponentEx {
126
143
  0 && (module.exports = {
127
144
  EmbedExtensionsComponent
128
145
  });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2VtYmVkLWV4dGVuc2lvbnMtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyBjbGFzcyB7QGxpbmsgRW1iZWRFeHRlbnNpb25zQ29tcG9uZW50fSB0aGF0IHJlZ2lzdGVycyBlbWJlZCBleHRlbnNpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRW1iZWRDcmVhdG9yIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzIGVtYmVkIGV4dGVuc2lvbnMuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgY3VzdG9tIGVtYmVkIHR5cGVzIGZvciBzcGVjaWZpYyBmaWxlIGV4dGVuc2lvbnMuXG4gKiBJdCBlbnN1cmVzIHRoYXQgdGhlIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgdW5yZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkRXh0ZW5zaW9uc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBFbWJlZEV4dGVuc2lvbnNDb21wb25lbnR9IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3BlY2lmaWVkIGZpbGUgZXh0ZW5zaW9ucyB3aXRoIHRoZSBnaXZlbiBlbWJlZCB0eXBlIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gICAqIFRoZSBleHRlbnNpb25zIHdpbGwgYmUgYXV0b21hdGljYWxseSB1bnJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVubG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXh0ZW5zaW9ucyAtIEFuIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucyB0byByZWdpc3Rlci5cbiAgICogQHBhcmFtIGVtYmVkQ3JlYXRvciAtIFRoZSBlbWJlZCBjcmVhdG9yIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBleHRlbnNpb25zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBjb21wb25lbnQucmVnaXN0ZXJFeHRlbnNpb25zKFsnZXh0MScsICdleHQyJ10sIChjb250ZXh0LCBmaWxlLCBzdWJwYXRoKSA9PiBuZXcgTXlFbWJlZENvbXBvbmVudChjb250ZXh0LCBmaWxlLCBzdWJwYXRoKSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyRXh0ZW5zaW9ucyhleHRlbnNpb25zOiBzdHJpbmdbXSwgZW1iZWRDcmVhdG9yOiBFbWJlZENyZWF0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgdGhpcy5hcHAuZW1iZWRSZWdpc3RyeS5yZWdpc3RlckV4dGVuc2lvbnMoZXh0ZW5zaW9ucywgZW1iZWRDcmVhdG9yKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHRoaXMuYXBwLmVtYmVkUmVnaXN0cnkudW5yZWdpc3RlckV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLDBCQUE0QjtBQVNyQixNQUFNLGlDQUFpQyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRCxZQUErQixLQUFVO0FBQzlDLFVBQU07QUFEOEI7QUFBQSxFQUV0QztBQUFBLEVBRnNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFnQi9CLG1CQUFtQixZQUFzQixjQUFrQztBQUNoRixTQUFLLGFBQWE7QUFFbEIsU0FBSyxJQUFJLGNBQWMsbUJBQW1CLFlBQVksWUFBWTtBQUNsRSxTQUFLLFNBQVMsTUFBTTtBQUNsQixXQUFLLElBQUksY0FBYyxxQkFBcUIsVUFBVTtBQUFBLElBQ3hELENBQUM7QUFBQSxFQUNIO0FBQ0Y7IiwibmFtZXMiOltdfQ==
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2VtYmVkLWV4dGVuc2lvbnMtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyBjbGFzcyB7QGxpbmsgRW1iZWRFeHRlbnNpb25zQ29tcG9uZW50fSB0aGF0IHJlZ2lzdGVycyBlbWJlZCBleHRlbnNpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRW1iZWRDcmVhdG9yIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzIGVtYmVkIGV4dGVuc2lvbnMuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgY3VzdG9tIGVtYmVkIHR5cGVzIGZvciBzcGVjaWZpYyBmaWxlIGV4dGVuc2lvbnMuXG4gKiBJdCBlbnN1cmVzIHRoYXQgdGhlIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgdW5yZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkRXh0ZW5zaW9uc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBFbWJlZEV4dGVuc2lvbnNDb21wb25lbnR9IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3BlY2lmaWVkIGZpbGUgZXh0ZW5zaW9ucyB3aXRoIHRoZSBnaXZlbiBlbWJlZCB0eXBlIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gICAqIFRoZSBleHRlbnNpb25zIHdpbGwgYmUgYXV0b21hdGljYWxseSB1bnJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVubG9hZGVkLlxuICAgKlxuICAgKiBUaGUgcmVnaXN0cmF0aW9uIGlzIGFsbCBvciBub3RoaW5nOiBPYnNpZGlhbiB0aHJvd3MgZm9yIGFuIGV4dGVuc2lvbiB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAoYnkgdGhlIGNvcmUgb3IgYnlcbiAgICogYW5vdGhlciBwbHVnaW4pLCBhbmQgaW4gdGhhdCBjYXNlIGV2ZXJ5IGV4dGVuc2lvbiB0aGlzIGNhbGwgcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGNvbmZsaWN0IGlzIHVucmVnaXN0ZXJlZCBhZ2FpblxuICAgKiBiZWZvcmUgdGhlIGVycm9yIGlzIHJldGhyb3duLiBBbiBleHRlbnNpb24gcmVnaXN0ZXJlZCBieSBzb21lb25lIGVsc2UgaXMgbmV2ZXIgdW5yZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGUgY3JlYXRvciBzZXJ2ZXMgZXZlcnkgc3VyZmFjZSB0aGF0IGxvYWRzIGFuIGVtYmVkOiBgIVtbZmlsZS5leHQjc3VicGF0aF1dYCBpbiBSZWFkaW5nIHZpZXcgYW5kIExpdmUgUHJldmlldyxcbiAgICogY2FudmFzIGZpbGUgbm9kZXMgYW5kIHRoZSBwYWdlLXByZXZpZXcgaG92ZXIgcG9wb3Zlci4gSXQgcmVjZWl2ZXMgdGhlIGxpbmsncyBzdWJwYXRoIHdpdGggaXRzIGxlYWRpbmcgYCNgLCBvciBhblxuICAgKiBlbXB0eSBzdHJpbmcuIFJldHVybmluZyBgbnVsbGAgbWFrZXMgT2JzaWRpYW4gZmFsbCBiYWNrIHRvIGl0cyBnZW5lcmljIGZpbGUgZW1iZWQuXG4gICAqXG4gICAqIEBwYXJhbSBleHRlbnNpb25zIC0gQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0gZW1iZWRDcmVhdG9yIC0gVGhlIGVtYmVkIGNyZWF0b3IgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGV4dGVuc2lvbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGNvbXBvbmVudC5yZWdpc3RlckV4dGVuc2lvbnMoWydleHQxJywgJ2V4dDInXSwgKGNvbnRleHQsIGZpbGUsIHN1YnBhdGgpID0+IG5ldyBNeUVtYmVkQ29tcG9uZW50KGNvbnRleHQsIGZpbGUsIHN1YnBhdGgpKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJFeHRlbnNpb25zKGV4dGVuc2lvbnM6IHN0cmluZ1tdLCBlbWJlZENyZWF0b3I6IEVtYmVkQ3JlYXRvcik6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCByZWdpc3RlcmVkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICB0aGlzLmFwcC5lbWJlZFJlZ2lzdHJ5LnJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbiwgZW1iZWRDcmVhdG9yKTtcbiAgICAgICAgcmVnaXN0ZXJlZEV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFwcC5lbWJlZFJlZ2lzdHJ5LnVucmVnaXN0ZXJFeHRlbnNpb25zKHJlZ2lzdGVyZWRFeHRlbnNpb25zKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5hcHAuZW1iZWRSZWdpc3RyeS51bnJlZ2lzdGVyRXh0ZW5zaW9ucyhyZWdpc3RlcmVkRXh0ZW5zaW9ucyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLDBCQUE0QjtBQVNyQixNQUFNLGlDQUFpQyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRCxZQUErQixLQUFVO0FBQzlDLFVBQU07QUFEOEI7QUFBQSxFQUV0QztBQUFBLEVBRnNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBd0IvQixtQkFBbUIsWUFBc0IsY0FBa0M7QUFDaEYsU0FBSyxhQUFhO0FBRWxCLFVBQU0sdUJBQWlDLENBQUM7QUFDeEMsUUFBSTtBQUNGLGlCQUFXLGFBQWEsWUFBWTtBQUNsQyxhQUFLLElBQUksY0FBYyxrQkFBa0IsV0FBVyxZQUFZO0FBQ2hFLDZCQUFxQixLQUFLLFNBQVM7QUFBQSxNQUNyQztBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsV0FBSyxJQUFJLGNBQWMscUJBQXFCLG9CQUFvQjtBQUNoRSxZQUFNO0FBQUEsSUFDUjtBQUVBLFNBQUssU0FBUyxNQUFNO0FBQ2xCLFdBQUssSUFBSSxjQUFjLHFCQUFxQixvQkFBb0I7QUFBQSxJQUNsRSxDQUFDO0FBQUEsRUFDSDtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -26,6 +26,14 @@ export declare class EmbedExtensionsComponent extends ComponentEx {
26
26
  * Registers the specified file extensions with the given embed type in the Obsidian app.
27
27
  * The extensions will be automatically unregistered when the component is unloaded.
28
28
  *
29
+ * The registration is all or nothing: Obsidian throws for an extension that is already registered (by the core or by
30
+ * another plugin), and in that case every extension this call registered before the conflict is unregistered again
31
+ * before the error is rethrown. An extension registered by someone else is never unregistered.
32
+ *
33
+ * The creator serves every surface that loads an embed: `![[file.ext#subpath]]` in Reading view and Live Preview,
34
+ * canvas file nodes and the page-preview hover popover. It receives the link's subpath with its leading `#`, or an
35
+ * empty string. Returning `null` makes Obsidian fall back to its generic file embed.
36
+ *
29
37
  * @param extensions - An array of file extensions to register.
30
38
  * @param embedCreator - The embed creator function to associate with the extensions.
31
39
  *