@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,297 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+ (function patchObsidianRequire() {
33
+ const originalRequire = require;
34
+ if (!originalRequire || originalRequire.__isPatched) {
35
+ return;
36
+ }
37
+ require = Object.assign(
38
+ (id) => requirePatched(id),
39
+ originalRequire,
40
+ {
41
+ __isPatched: true
42
+ }
43
+ );
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
+ }
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
+ "@codemirror/autocomplete",
49
+ "@codemirror/collab",
50
+ "@codemirror/commands",
51
+ "@codemirror/language",
52
+ "@codemirror/lint",
53
+ "@codemirror/search",
54
+ "@codemirror/state",
55
+ "@codemirror/text",
56
+ "@codemirror/view",
57
+ "@lezer/common",
58
+ "@lezer/highlight",
59
+ "@lezer/lr",
60
+ "obsidian"
61
+ ]);
62
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
63
+ "@codemirror/closebrackets",
64
+ "@codemirror/comment",
65
+ "@codemirror/fold",
66
+ "@codemirror/gutter",
67
+ "@codemirror/highlight",
68
+ "@codemirror/history",
69
+ "@codemirror/matchbrackets",
70
+ "@codemirror/panel",
71
+ "@codemirror/rangeset",
72
+ "@codemirror/rectangular-selection",
73
+ "@codemirror/stream-parser",
74
+ "@codemirror/tooltip"
75
+ ]);
76
+ function requirePatched(id) {
77
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
+ return originalRequire?.(id);
79
+ }
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
82
+ if (id === "process" || id === "node:process") {
83
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
84
+ return process;
85
+ }
86
+ } else {
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
+ }
91
+ }
92
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
93
+ return {};
94
+ }
95
+ })();
96
+
97
+ "use strict";
98
+ var __defProp = Object.defineProperty;
99
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
100
+ var __getOwnPropNames = Object.getOwnPropertyNames;
101
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
102
+ var __export = (target, all) => {
103
+ for (var name in all)
104
+ __defProp(target, name, { get: all[name], enumerable: true });
105
+ };
106
+ var __copyProps = (to, from, except, desc) => {
107
+ if (from && typeof from === "object" || typeof from === "function") {
108
+ for (let key of __getOwnPropNames(from))
109
+ if (!__hasOwnProp.call(to, key) && key !== except)
110
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
111
+ }
112
+ return to;
113
+ };
114
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
115
+ var misplaced_attachment_exports = {};
116
+ __export(misplaced_attachment_exports, {
117
+ ExternalAttachmentLinkMode: () => ExternalAttachmentLinkMode,
118
+ MisplacedAttachmentIndex: () => MisplacedAttachmentIndex,
119
+ getAttachmentPlacement: () => getAttachmentPlacement,
120
+ recordAttachmentPlacement: () => recordAttachmentPlacement
121
+ });
122
+ module.exports = __toCommonJS(misplaced_attachment_exports);
123
+ var import_implementations = require("@obsidian-typings/obsidian-public-latest/implementations");
124
+ var import_attachment_path = require("./attachment-path.cjs");
125
+ var import_file_system = require("./file-system.cjs");
126
+ var ExternalAttachmentLinkMode = /* @__PURE__ */ ((ExternalAttachmentLinkMode2) => {
127
+ ExternalAttachmentLinkMode2["Ignore"] = "Ignore";
128
+ ExternalAttachmentLinkMode2["Report"] = "Report";
129
+ ExternalAttachmentLinkMode2["ReportUnowned"] = "ReportUnowned";
130
+ return ExternalAttachmentLinkMode2;
131
+ })(ExternalAttachmentLinkMode || {});
132
+ class MisplacedAttachmentIndex extends Map {
133
+ /**
134
+ * Creates an empty index.
135
+ *
136
+ * @param mode - Which external references {@link MisplacedAttachmentIndex.getReported} returns.
137
+ */
138
+ constructor(mode = "Report" /* Report */) {
139
+ super();
140
+ this.mode = mode;
141
+ }
142
+ mode;
143
+ properNotePathsByAttachment = /* @__PURE__ */ new Map();
144
+ userNotePathsByAttachment = /* @__PURE__ */ new Map();
145
+ /**
146
+ * Records a reference to an attachment outside the referencing note's folder.
147
+ *
148
+ * @param notePath - The referencing note's vault-relative path.
149
+ * @param entry - The reference and the folder the note wants the attachment in.
150
+ */
151
+ add(notePath, entry) {
152
+ let entries = this.get(notePath);
153
+ if (!entries) {
154
+ entries = [];
155
+ this.set(notePath, entries);
156
+ }
157
+ entries.push(entry);
158
+ this.addUser(entry.attachmentPath, notePath);
159
+ }
160
+ /**
161
+ * Records that a note references an attachment, wherever the attachment sits.
162
+ *
163
+ * @param attachmentPath - The attachment's vault-relative path.
164
+ * @param notePath - The referencing note's vault-relative path.
165
+ */
166
+ addUser(attachmentPath, notePath) {
167
+ addToSetMap(this.userNotePathsByAttachment, attachmentPath, notePath);
168
+ }
169
+ /**
170
+ * The notes that use an attachment besides the given one, its proper notes first, each group in walk order.
171
+ *
172
+ * @param attachmentPath - The attachment's vault-relative path.
173
+ * @param notePath - The note to leave out: the one whose reference is being reported.
174
+ * @returns The other notes' paths.
175
+ */
176
+ getOtherUserNotePaths(attachmentPath, notePath) {
177
+ const properNotePaths = this.getProperNotePaths(attachmentPath);
178
+ const userNotePaths = [...this.userNotePathsByAttachment.get(attachmentPath) ?? []];
179
+ return [...properNotePaths, ...userNotePaths.filter((path) => !properNotePaths.includes(path))].filter((path) => path !== notePath);
180
+ }
181
+ /**
182
+ * The proper notes of an attachment: the notes that reference it and whose own folder holds it, in walk order.
183
+ *
184
+ * @param attachmentPath - The attachment's vault-relative path.
185
+ * @returns The proper notes' paths, empty when the attachment has none.
186
+ */
187
+ getProperNotePaths(attachmentPath) {
188
+ return [...this.properNotePathsByAttachment.get(attachmentPath) ?? []];
189
+ }
190
+ /**
191
+ * The entries to report, after the mode is applied, grouped by note, with a note left out once none of its
192
+ * entries survive.
193
+ *
194
+ * @returns The entries to report.
195
+ */
196
+ getReported() {
197
+ const reported = /* @__PURE__ */ new Map();
198
+ if (this.mode === "Ignore" /* Ignore */) {
199
+ return reported;
200
+ }
201
+ for (const [notePath, entries] of this) {
202
+ const surviving = this.mode === "ReportUnowned" /* ReportUnowned */ ? entries.filter((entry) => !this.properNotePathsByAttachment.has(entry.attachmentPath)) : entries;
203
+ if (surviving.length > 0) {
204
+ reported.set(notePath, surviving);
205
+ }
206
+ }
207
+ return reported;
208
+ }
209
+ /**
210
+ * Whether a note is a proper note of an attachment: it references it, and its own folder holds it.
211
+ *
212
+ * @param attachmentPath - The attachment's vault-relative path.
213
+ * @param notePath - The note's vault-relative path.
214
+ * @returns `true` when the note's own attachment folder holds the attachment.
215
+ */
216
+ isProperNote(attachmentPath, notePath) {
217
+ return this.properNotePathsByAttachment.get(attachmentPath)?.has(notePath) ?? false;
218
+ }
219
+ /**
220
+ * Records that an attachment sits in the folder configured for a note that references it, which makes that
221
+ * note its proper note.
222
+ *
223
+ * @param attachmentPath - The attachment's vault-relative path.
224
+ * @param notePath - The referencing note whose folder holds it.
225
+ */
226
+ markHomed(attachmentPath, notePath) {
227
+ addToSetMap(this.properNotePathsByAttachment, attachmentPath, notePath);
228
+ this.addUser(attachmentPath, notePath);
229
+ }
230
+ }
231
+ async function getAttachmentPlacement(params) {
232
+ const { app, attachmentFile, notePath } = params;
233
+ const properAttachmentFolderPath = await (0, import_attachment_path.getAttachmentFolderPathForAttachment)({
234
+ app,
235
+ attachmentPathOrFile: attachmentFile,
236
+ context: import_attachment_path.AttachmentPathContext.Unknown,
237
+ notePathOrFile: notePath
238
+ });
239
+ const isInsensitive = (0, import_implementations.getDataAdapterEx)(app).insensitive;
240
+ return {
241
+ isInProperFolder: fold((0, import_implementations.parentFolderPath)(attachmentFile.path)) === fold(properAttachmentFolderPath),
242
+ properAttachmentFolderPath
243
+ };
244
+ function fold(value) {
245
+ return isInsensitive ? value.toLowerCase() : value;
246
+ }
247
+ }
248
+ async function recordAttachmentPlacement(params) {
249
+ const {
250
+ app,
251
+ attachmentFile,
252
+ index,
253
+ isPathIgnored = isNone,
254
+ isSharedAttachmentPath = isNone,
255
+ isTreatedAsAttachment = isNone,
256
+ notePath,
257
+ reference
258
+ } = params;
259
+ if (index.mode === "Ignore" /* Ignore */) {
260
+ return;
261
+ }
262
+ if ((0, import_file_system.isNote)(attachmentFile) && !isTreatedAsAttachment(attachmentFile.path)) {
263
+ return;
264
+ }
265
+ if (isPathIgnored(attachmentFile.path) || isSharedAttachmentPath(attachmentFile.path)) {
266
+ return;
267
+ }
268
+ const placement = await getAttachmentPlacement({ app, attachmentFile, notePath });
269
+ if (placement.isInProperFolder) {
270
+ index.markHomed(attachmentFile.path, notePath);
271
+ return;
272
+ }
273
+ index.add(notePath, {
274
+ attachmentPath: attachmentFile.path,
275
+ properAttachmentFolderPath: placement.properAttachmentFolderPath,
276
+ reference
277
+ });
278
+ }
279
+ function addToSetMap(map, key, value) {
280
+ let set = map.get(key);
281
+ if (!set) {
282
+ set = /* @__PURE__ */ new Set();
283
+ map.set(key, set);
284
+ }
285
+ set.add(value);
286
+ }
287
+ function isNone() {
288
+ return false;
289
+ }
290
+ // Annotate the CommonJS export names for ESM import in node:
291
+ 0 && (module.exports = {
292
+ ExternalAttachmentLinkMode,
293
+ MisplacedAttachmentIndex,
294
+ getAttachmentPlacement,
295
+ recordAttachmentPlacement
296
+ });
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXNwbGFjZWQtYXR0YWNobWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogV2hldGhlciBhbiBhdHRhY2htZW50IHNpdHMgb3V0c2lkZSB0aGUgYXR0YWNobWVudCBmb2xkZXIgb2YgdGhlIG5vdGVzIHRoYXQgdXNlIGl0LCBhbmQgd2hpY2ggbm90ZXMgYXJlIGl0c1xuICogcHJvcGVyIGhvbWUuXG4gKlxuICogVHdvIHRoaW5ncyBoZXJlIGFyZSBlYXN5IHRvIGdldCB3cm9uZzpcbiAqXG4gKiAtICoqVGhlIGp1ZGdlbWVudCBpcyBhYm91dCB0aGUgRk9MREVSLCBub3QgdGhlIHBhdGguKiogYGdldEF0dGFjaG1lbnRGaWxlUGF0aGAgYW5zd2VycyBhYm91dCB0aGUgcHJvcGVyXG4gKiAgIHBhdGgsIGZvbGRlciBhbmQgdGVtcGxhdGVkIGJhc2UgbmFtZSBib3RoLCBzbyBqdWRnaW5nIG9uIGl0IHJhdyBmbGFncyBldmVyeSBhdHRhY2htZW50IHdob3NlIE5BTUUgZG9lcyBub3RcbiAqICAgbWF0Y2ggYSByZW5hbWUgdGVtcGxhdGUuIFRoYXQgaXMgYSBkaWZmZXJlbnQgZGVmZWN0LiBTbyB0aGUgY29tcGFyaXNvbiBpcyBmb2xkZXIgYWdhaW5zdCBmb2xkZXIsIHRocm91Z2hcbiAqICAgYGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoRm9yQXR0YWNobWVudGAsIHdoaWNoIGFsc28gc2tpcHMgdGhlIG5hbWUgZ2VuZXJhdGlvbiB0aGF0IGRvbWluYXRlcyB0aGUgY29zdCBvZlxuICogICB0aGUgcXVlc3Rpb24gd2hlbiBgQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb25gIGFuc3dlcnMgaXQuXG4gKiAtICoqVGhlIHByb3BlciBmb2xkZXIgaXMgYXNrZWQgZm9yIHRoZSBSRUFMIGF0dGFjaG1lbnQsIG5ldmVyIGEgZHVtbXkuKiogQSBmb2xkZXIgdGVtcGxhdGUgbWF5IHJlYWQgdGhlXG4gKiAgIGF0dGFjaG1lbnQncyBvd24gbmFtZSwgZXh0ZW5zaW9uIG9yIHN0YXRzLCBzbyBgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhgJ3MgZHVtbXktZmlsZSByb3V0ZSBjYW4gYW5zd2VyXG4gKiAgIGFib3V0IGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEEgcmVmZXJlbmNlIGlzIGp1ZGdlZCBmcm9tIHRoZSBub3RlIHRoYXQgbWFrZXMgaXQ6IGBBLm1kYCBsaW5raW5nIGBCL2ltYWdlLnBuZ2AsIHdoaWNoIHNpdHMgaW4gYEIubWRgJ3MgZm9sZGVyLFxuICogaXMgQSBsaW5raW5nIGFuIEVYVEVSTkFMIGF0dGFjaG1lbnQsIGV2ZW4gd2hlbiBCIHVzZXMgaXQgdG9vLiBXaGV0aGVyIHN1Y2ggYSByZWZlcmVuY2UgaXMgd29ydGggcmVwb3J0aW5nIGRlcGVuZHNcbiAqIG9uIHdoZXRoZXIgdGhlIGF0dGFjaG1lbnQgaGFzIGEgcHJvcGVyIG5vdGUgYW55d2hlcmUsIHdoaWNoIGlzIGtub3duIG9ubHkgYWZ0ZXIgZXZlcnkgbm90ZSBoYXMgYmVlbiBqdWRnZWQsIHNvXG4gKiB7QGxpbmsgTWlzcGxhY2VkQXR0YWNobWVudEluZGV4fSBjb2xsZWN0cyB0aGUgdmVyZGljdHMgYW5kIHtAbGluayBNaXNwbGFjZWRBdHRhY2htZW50SW5kZXguZ2V0UmVwb3J0ZWR9IGFwcGxpZXNcbiAqIHRoZSB7QGxpbmsgRXh0ZXJuYWxBdHRhY2htZW50TGlua01vZGV9IGF0IHRoZSBlbmQuXG4gKlxuICogUmVuZGVyaW5nIGlzIHRoZSBjYWxsZXInczogdGhpcyBtb2R1bGUgb25seSBqdWRnZXMgYW5kIGNvbGxlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBSZWZlcmVuY2UsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRQYXRoQ29udGV4dCxcbiAgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhGb3JBdHRhY2htZW50XG59IGZyb20gJy4vYXR0YWNobWVudC1wYXRoLnRzJztcbmltcG9ydCB7IGlzTm90ZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoaWNoIHJlZmVyZW5jZXMgdG8gYW4gYXR0YWNobWVudCBvdXRzaWRlIHRoZSByZWZlcmVuY2luZyBub3RlJ3MgYXR0YWNobWVudCBmb2xkZXIgYXJlIHJlcG9ydGVkLlxuICovXG5leHBvcnQgZW51bSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZSB7XG4gIC8qKlxuICAgKiBOZXZlciByZXBvcnQgb25lOiBub3RoaW5nIGlzIGp1ZGdlZCBhdCBhbGwuXG4gICAqL1xuICBJZ25vcmUgPSAnSWdub3JlJyxcblxuICAvKipcbiAgICogUmVwb3J0IGV2ZXJ5IHN1Y2ggcmVmZXJlbmNlLCBpbmNsdWRpbmcgb25lIHRvIGFuIGF0dGFjaG1lbnQgZmlsZWQgaW4gdGhlIGZvbGRlciBvZiBhbm90aGVyIG5vdGUgdGhhdFxuICAgKiByZWZlcmVuY2VzIGl0IHRvby5cbiAgICovXG4gIFJlcG9ydCA9ICdSZXBvcnQnLFxuXG4gIC8qKlxuICAgKiBSZXBvcnQgc3VjaCBhIHJlZmVyZW5jZSBvbmx5IHdoZW4gbm8gbm90ZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGF0dGFjaG1lbnQgaGFzIGl0IGluIGl0cyBvd24gZm9sZGVyLlxuICAgKi9cbiAgUmVwb3J0VW5vd25lZCA9ICdSZXBvcnRVbm93bmVkJ1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYW4gYXR0YWNobWVudCBzaXRzIGluLCBqdWRnZWQgYWdhaW5zdCB0aGUgZm9sZGVyIG9uZSBub3RlJ3MgY29uZmlndXJhdGlvbiBwdXRzIGl0cyBhdHRhY2htZW50cyBpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50UGxhY2VtZW50IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF0dGFjaG1lbnQgc2l0cyBpbiB7QGxpbmsgQXR0YWNobWVudFBsYWNlbWVudC5wcm9wZXJBdHRhY2htZW50Rm9sZGVyUGF0aH0sIGNvbXBhcmVkIHRoZSB3YXkgdGhlXG4gICAqIHZhdWx0J3MgYWRhcHRlciBjb21wYXJlcyBuYW1lcyAoY2FzZS1mb2xkZWQgb24gYSBjYXNlLWluc2Vuc2l0aXZlIGFkYXB0ZXIpLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJblByb3BlckZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGUgbm90ZSdzIGNvbmZpZ3VyYXRpb24gcHV0cyB0aGlzIGF0dGFjaG1lbnQgaW4sIGAvYCBmb3IgdGhlIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJBdHRhY2htZW50Rm9sZGVyUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50UGxhY2VtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdHRhY2htZW50UGxhY2VtZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGF0dGFjaG1lbnQgdG8ganVkZ2UuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZTogVEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdC1yZWxhdGl2ZSBwYXRoIG9mIHRoZSBub3RlIHdob3NlIGNvbmZpZ3VyYXRpb24gdGhlIGF0dGFjaG1lbnQgaXMganVkZ2VkIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSByZWZlcmVuY2UgdG8gYW4gYXR0YWNobWVudCBvdXRzaWRlIHRoZSBhdHRhY2htZW50IGZvbGRlciBvZiB0aGUgbm90ZSB0aGF0IG1ha2VzIGl0LlxuICpcbiAqIFRoZSBzYW1lIGF0dGFjaG1lbnQgcmVmZXJlbmNlZCBmcm9tIHR3byBub3RlcyBpcyB0d28gZW50cmllcywgYmVjYXVzZSB0aGUgdHdvIG5vdGVzIGNhbiBjb25maWd1cmUgZGlmZmVyZW50XG4gKiBhdHRhY2htZW50IGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlzcGxhY2VkQXR0YWNobWVudEVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBhdHRhY2htZW50J3MgY3VycmVudCB2YXVsdC1yZWxhdGl2ZSBwYXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGUgcmVmZXJlbmNpbmcgbm90ZSdzIGNvbmZpZ3VyYXRpb24gcHV0cyB0aGUgYXR0YWNobWVudCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlckF0dGFjaG1lbnRGb2xkZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdGhhdCByZWFjaGVzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlY29yZEF0dGFjaG1lbnRQbGFjZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEF0dGFjaG1lbnRQbGFjZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSB0aGUgcmVmZXJlbmNlIHJlc29sdmVkIHRvLiBQYXNzIG9ubHkgcmVmZXJlbmNlcyB0aGF0IHJlc29sdmVkOiBhbiB1bnJlc29sdmVkIG9uZSBpcyBhIGJyb2tlbiBsaW5rLFxuICAgKiBub3QgYSBtaXNwbGFjZWQgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlOiBURmlsZTtcblxuICAvKipcbiAgICogVGhlIGluZGV4IHRoZSB2ZXJkaWN0IGlzIHJlY29yZGVkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXg6IE1pc3BsYWNlZEF0dGFjaG1lbnRJbmRleDtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBhdGggaXMgbmV2ZXIganVkZ2VkLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSB1c2VyIGV4Y2x1ZGVkIGl0LiBEZWZhdWx0cyB0byBqdWRnaW5nIGV2ZXJ5IHBhdGguXG4gICAqL1xuICByZWFkb25seSBpc1BhdGhJZ25vcmVkPzogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBhdGggbGllcyBpbiBhIHNoYXJlZCBhdHRhY2htZW50IGxvY2F0aW9uLCB3aGljaCBpcyBhbnlib2R5J3MgZm9sZGVyLCBzbyBubyByZWZlcmVuY2UgaW50byBpdCBpc1xuICAgKiBleHRlcm5hbC4gRGVmYXVsdHMgdG8gbm8gc2hhcmVkIGxvY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTaGFyZWRBdHRhY2htZW50UGF0aD86IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBub3RlIGlzIHRyZWF0ZWQgYXMgYW4gYXR0YWNobWVudCAoYW4gYC5leGNhbGlkcmF3Lm1kYCBmaWxlLCBzYXkpLCBhbmQgc28ganVkZ2VkIGhlcmUuIERlZmF1bHRzIHRvXG4gICAqIG5vIG5vdGUgYmVpbmcgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNUcmVhdGVkQXNBdHRhY2htZW50PzogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggb2YgdGhlIG5vdGUgdGhhdCBtYWtlcyB0aGUgcmVmZXJlbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSwga2VwdCBpbiB0aGUgZW50cnkgc28gYSByZXBvcnQgY2FuIG5hbWUgaXRzIGxpbmUgb3IgZnJvbnRtYXR0ZXIga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogVGhlIHZlcmRpY3RzIG9mIGEgd2FsayBvdmVyIGV2ZXJ5IHJlZmVyZW5jZSB0byBhbiBhdHRhY2htZW50LCBncm91cGVkIGJ5IHRoZSBub3RlIHRoYXQgbWFrZXMgdGhlIHJlZmVyZW5jZS5cbiAqXG4gKiBJdCBrZWVwcyBldmVyeSBleHRlcm5hbCByZWZlcmVuY2UsIGV2ZXJ5IG5vdGUgdGhhdCB1c2VzIGVhY2ggYXR0YWNobWVudCwgYW5kIGVhY2ggYXR0YWNobWVudCdzIHByb3BlciBub3RlczpcbiAqIHRoZSBub3RlcyB0aGF0IHJlZmVyZW5jZSBpdCBhbmQgd2hvc2Ugb3duIGZvbGRlciBob2xkcyBpdC4gV2hpY2ggZW50cmllcyBjb3VudCBhcyByZXBvcnRlZCBkZXBlbmRzIG9uIHRoZVxuICoge0BsaW5rIEV4dGVybmFsQXR0YWNobWVudExpbmtNb2RlfSBhbmQgb24gdGhlIHByb3BlciBub3Rlcywgd2hpY2ggYXJlIGtub3duIG9ubHkgb25jZSB0aGUgd2hvbGUgdmF1bHQgaGFzIGJlZW5cbiAqIHdhbGtlZCwgc28gYXNrIHtAbGluayBNaXNwbGFjZWRBdHRhY2htZW50SW5kZXguZ2V0UmVwb3J0ZWR9IGFmdGVyIHRoZSB3YWxrLlxuICovXG5leHBvcnQgY2xhc3MgTWlzcGxhY2VkQXR0YWNobWVudEluZGV4IGV4dGVuZHMgTWFwPHN0cmluZywgTWlzcGxhY2VkQXR0YWNobWVudEVudHJ5W10+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlck5vdGVQYXRoc0J5QXR0YWNobWVudCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbXB0eSBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGUgLSBXaGljaCBleHRlcm5hbCByZWZlcmVuY2VzIHtAbGluayBNaXNwbGFjZWRBdHRhY2htZW50SW5kZXguZ2V0UmVwb3J0ZWR9IHJldHVybnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG1vZGUgPSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5SZXBvcnQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSByZWZlcmVuY2UgdG8gYW4gYXR0YWNobWVudCBvdXRzaWRlIHRoZSByZWZlcmVuY2luZyBub3RlJ3MgZm9sZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgcmVmZXJlbmNpbmcgbm90ZSdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEBwYXJhbSBlbnRyeSAtIFRoZSByZWZlcmVuY2UgYW5kIHRoZSBmb2xkZXIgdGhlIG5vdGUgd2FudHMgdGhlIGF0dGFjaG1lbnQgaW4uXG4gICAqL1xuICBwdWJsaWMgYWRkKG5vdGVQYXRoOiBzdHJpbmcsIGVudHJ5OiBNaXNwbGFjZWRBdHRhY2htZW50RW50cnkpOiB2b2lkIHtcbiAgICBsZXQgZW50cmllcyA9IHRoaXMuZ2V0KG5vdGVQYXRoKTtcbiAgICBpZiAoIWVudHJpZXMpIHtcbiAgICAgIGVudHJpZXMgPSBbXTtcbiAgICAgIHRoaXMuc2V0KG5vdGVQYXRoLCBlbnRyaWVzKTtcbiAgICB9XG4gICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB0aGlzLmFkZFVzZXIoZW50cnkuYXR0YWNobWVudFBhdGgsIG5vdGVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgYSBub3RlIHJlZmVyZW5jZXMgYW4gYXR0YWNobWVudCwgd2hlcmV2ZXIgdGhlIGF0dGFjaG1lbnQgc2l0cy5cbiAgICpcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRQYXRoIC0gVGhlIGF0dGFjaG1lbnQncyB2YXVsdC1yZWxhdGl2ZSBwYXRoLlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgcmVmZXJlbmNpbmcgbm90ZSdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqL1xuICBwdWJsaWMgYWRkVXNlcihhdHRhY2htZW50UGF0aDogc3RyaW5nLCBub3RlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgYWRkVG9TZXRNYXAodGhpcy51c2VyTm90ZVBhdGhzQnlBdHRhY2htZW50LCBhdHRhY2htZW50UGF0aCwgbm90ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBub3RlcyB0aGF0IHVzZSBhbiBhdHRhY2htZW50IGJlc2lkZXMgdGhlIGdpdmVuIG9uZSwgaXRzIHByb3BlciBub3RlcyBmaXJzdCwgZWFjaCBncm91cCBpbiB3YWxrIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0YWNobWVudFBhdGggLSBUaGUgYXR0YWNobWVudCdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlIHRvIGxlYXZlIG91dDogdGhlIG9uZSB3aG9zZSByZWZlcmVuY2UgaXMgYmVpbmcgcmVwb3J0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBvdGhlciBub3RlcycgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0T3RoZXJVc2VyTm90ZVBhdGhzKGF0dGFjaG1lbnRQYXRoOiBzdHJpbmcsIG5vdGVQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcHJvcGVyTm90ZVBhdGhzID0gdGhpcy5nZXRQcm9wZXJOb3RlUGF0aHMoYXR0YWNobWVudFBhdGgpO1xuICAgIGNvbnN0IHVzZXJOb3RlUGF0aHMgPSBbLi4udGhpcy51c2VyTm90ZVBhdGhzQnlBdHRhY2htZW50LmdldChhdHRhY2htZW50UGF0aCkgPz8gW11dO1xuICAgIHJldHVybiBbLi4ucHJvcGVyTm90ZVBhdGhzLCAuLi51c2VyTm90ZVBhdGhzLmZpbHRlcigocGF0aCkgPT4gIXByb3Blck5vdGVQYXRocy5pbmNsdWRlcyhwYXRoKSldLmZpbHRlcigocGF0aCkgPT4gcGF0aCAhPT0gbm90ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXIgbm90ZXMgb2YgYW4gYXR0YWNobWVudDogdGhlIG5vdGVzIHRoYXQgcmVmZXJlbmNlIGl0IGFuZCB3aG9zZSBvd24gZm9sZGVyIGhvbGRzIGl0LCBpbiB3YWxrIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0YWNobWVudFBhdGggLSBUaGUgYXR0YWNobWVudCdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEByZXR1cm5zIFRoZSBwcm9wZXIgbm90ZXMnIHBhdGhzLCBlbXB0eSB3aGVuIHRoZSBhdHRhY2htZW50IGhhcyBub25lLlxuICAgKi9cbiAgcHVibGljIGdldFByb3Blck5vdGVQYXRocyhhdHRhY2htZW50UGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5wcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQuZ2V0KGF0dGFjaG1lbnRQYXRoKSA/PyBbXV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVudHJpZXMgdG8gcmVwb3J0LCBhZnRlciB0aGUgbW9kZSBpcyBhcHBsaWVkLCBncm91cGVkIGJ5IG5vdGUsIHdpdGggYSBub3RlIGxlZnQgb3V0IG9uY2Ugbm9uZSBvZiBpdHNcbiAgICogZW50cmllcyBzdXJ2aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZW50cmllcyB0byByZXBvcnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVwb3J0ZWQoKTogTWFwPHN0cmluZywgTWlzcGxhY2VkQXR0YWNobWVudEVudHJ5W10+IHtcbiAgICBjb25zdCByZXBvcnRlZCA9IG5ldyBNYXA8c3RyaW5nLCBNaXNwbGFjZWRBdHRhY2htZW50RW50cnlbXT4oKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5JZ25vcmUpIHtcbiAgICAgIHJldHVybiByZXBvcnRlZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtub3RlUGF0aCwgZW50cmllc10gb2YgdGhpcykge1xuICAgICAgY29uc3Qgc3Vydml2aW5nID0gdGhpcy5tb2RlID09PSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5SZXBvcnRVbm93bmVkXG4gICAgICAgID8gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiAhdGhpcy5wcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQuaGFzKGVudHJ5LmF0dGFjaG1lbnRQYXRoKSlcbiAgICAgICAgOiBlbnRyaWVzO1xuICAgICAgaWYgKHN1cnZpdmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydGVkLnNldChub3RlUGF0aCwgc3Vydml2aW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBub3RlIGlzIGEgcHJvcGVyIG5vdGUgb2YgYW4gYXR0YWNobWVudDogaXQgcmVmZXJlbmNlcyBpdCwgYW5kIGl0cyBvd24gZm9sZGVyIGhvbGRzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gYXR0YWNobWVudFBhdGggLSBUaGUgYXR0YWNobWVudCdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlJ3MgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIG5vdGUncyBvd24gYXR0YWNobWVudCBmb2xkZXIgaG9sZHMgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICBwdWJsaWMgaXNQcm9wZXJOb3RlKGF0dGFjaG1lbnRQYXRoOiBzdHJpbmcsIG5vdGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQuZ2V0KGF0dGFjaG1lbnRQYXRoKT8uaGFzKG5vdGVQYXRoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgYW4gYXR0YWNobWVudCBzaXRzIGluIHRoZSBmb2xkZXIgY29uZmlndXJlZCBmb3IgYSBub3RlIHRoYXQgcmVmZXJlbmNlcyBpdCwgd2hpY2ggbWFrZXMgdGhhdFxuICAgKiBub3RlIGl0cyBwcm9wZXIgbm90ZS5cbiAgICpcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRQYXRoIC0gVGhlIGF0dGFjaG1lbnQncyB2YXVsdC1yZWxhdGl2ZSBwYXRoLlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgcmVmZXJlbmNpbmcgbm90ZSB3aG9zZSBmb2xkZXIgaG9sZHMgaXQuXG4gICAqL1xuICBwdWJsaWMgbWFya0hvbWVkKGF0dGFjaG1lbnRQYXRoOiBzdHJpbmcsIG5vdGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBhZGRUb1NldE1hcCh0aGlzLnByb3Blck5vdGVQYXRoc0J5QXR0YWNobWVudCwgYXR0YWNobWVudFBhdGgsIG5vdGVQYXRoKTtcbiAgICB0aGlzLmFkZFVzZXIoYXR0YWNobWVudFBhdGgsIG5vdGVQYXRoKTtcbiAgfVxufVxuXG4vKipcbiAqIEp1ZGdlcyB3aGVyZSBhbiBhdHRhY2htZW50IHNpdHMgYWdhaW5zdCB0aGUgYXR0YWNobWVudCBmb2xkZXIgb2Ygb25lIG5vdGUuXG4gKlxuICogQXNrcyB0aGUgYXR0YWNobWVudC1wYXRoIHNlYW0gb25jZSwgZm9sZGVyLW9ubHksIGZvciB0aGUgUkVBTCBhdHRhY2htZW50LCBzbyBhIGBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbmBcbiAqIGZvbGRlciB0ZW1wbGF0ZSB0aGF0IHJlYWRzIHRoZSBhdHRhY2htZW50J3Mgb3duIG5hbWUgaXMgaG9ub3VyZWQgYW5kIG5vIG5hbWUgaXMgZ2VuZXJhdGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgYXR0YWNobWVudCBhbmQgdGhlIG5vdGUuXG4gKiBAcmV0dXJucyBUaGUgbm90ZSdzIHByb3BlciBmb2xkZXIgZm9yIHRoZSBhdHRhY2htZW50LCBhbmQgd2hldGhlciB0aGUgYXR0YWNobWVudCBpcyBpbiBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRQbGFjZW1lbnQocGFyYW1zOiBHZXRBdHRhY2htZW50UGxhY2VtZW50UGFyYW1zKTogUHJvbWlzZTxBdHRhY2htZW50UGxhY2VtZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBhdHRhY2htZW50RmlsZSwgbm90ZVBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgcHJvcGVyQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aEZvckF0dGFjaG1lbnQoe1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50UGF0aE9yRmlsZTogYXR0YWNobWVudEZpbGUsXG4gICAgY29udGV4dDogQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgbm90ZVBhdGhPckZpbGU6IG5vdGVQYXRoXG4gIH0pO1xuXG4gIC8vIEZvbGQgYXMgYGlzQXRQcm9wZXJBdHRhY2htZW50UGF0aGAgZG9lcywgc28gYSBjYXNlLWluc2Vuc2l0aXZlIGFkYXB0ZXIgZG9lcyBub3QgcmVwb3J0IGEgZm9sZGVyIHRoYXQgZGlmZmVyc1xuICAvLyBvbmx5IGluIGNhc2UuXG4gIGNvbnN0IGlzSW5zZW5zaXRpdmUgPSBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmU7XG4gIHJldHVybiB7XG4gICAgaXNJblByb3BlckZvbGRlcjogZm9sZChwYXJlbnRGb2xkZXJQYXRoKGF0dGFjaG1lbnRGaWxlLnBhdGgpKSA9PT0gZm9sZChwcm9wZXJBdHRhY2htZW50Rm9sZGVyUGF0aCksXG4gICAgcHJvcGVyQXR0YWNobWVudEZvbGRlclBhdGhcbiAgfTtcblxuICBmdW5jdGlvbiBmb2xkKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc0luc2Vuc2l0aXZlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSnVkZ2VzIG9uZSByZXNvbHZlZCByZWZlcmVuY2UgYW5kIHJlY29yZHMgdGhlIHZlcmRpY3QgaW4gdGhlIGluZGV4LlxuICpcbiAqIFJlY29yZHMgbm90aGluZyB1bmRlciB7QGxpbmsgRXh0ZXJuYWxBdHRhY2htZW50TGlua01vZGUuSWdub3JlfSwgZm9yIGEgbm90ZSB0aGF0IGlzIG5vdCB0cmVhdGVkIGFzIGFuXG4gKiBhdHRhY2htZW50LCBhbmQgZm9yIGFuIGlnbm9yZWQgb3Igc2hhcmVkIHBhdGguIE90aGVyd2lzZSB0aGUgcmVmZXJlbmNpbmcgbm90ZSBiZWNvbWVzIGEgcHJvcGVyIG5vdGUgb2YgdGhlXG4gKiBhdHRhY2htZW50IHdoZW4gaXRzIGZvbGRlciBob2xkcyBpdCwgYW5kIHRoZSByZWZlcmVuY2UgYmVjb21lcyBhbiBlbnRyeSB3aGVuIGl0IGRvZXMgbm90LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVmZXJlbmNlLCBpdHMgbm90ZSwgaXRzIHRhcmdldCBhbmQgdGhlIGluZGV4LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2ZXJkaWN0IGlzIHJlY29yZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkQXR0YWNobWVudFBsYWNlbWVudChwYXJhbXM6IFJlY29yZEF0dGFjaG1lbnRQbGFjZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50RmlsZSxcbiAgICBpbmRleCxcbiAgICBpc1BhdGhJZ25vcmVkID0gaXNOb25lLFxuICAgIGlzU2hhcmVkQXR0YWNobWVudFBhdGggPSBpc05vbmUsXG4gICAgaXNUcmVhdGVkQXNBdHRhY2htZW50ID0gaXNOb25lLFxuICAgIG5vdGVQYXRoLFxuICAgIHJlZmVyZW5jZVxuICB9ID0gcGFyYW1zO1xuXG4gIGlmIChpbmRleC5tb2RlID09PSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5JZ25vcmUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXNOb3RlKGF0dGFjaG1lbnRGaWxlKSAmJiAhaXNUcmVhdGVkQXNBdHRhY2htZW50KGF0dGFjaG1lbnRGaWxlLnBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzUGF0aElnbm9yZWQoYXR0YWNobWVudEZpbGUucGF0aCkgfHwgaXNTaGFyZWRBdHRhY2htZW50UGF0aChhdHRhY2htZW50RmlsZS5wYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBsYWNlbWVudCA9IGF3YWl0IGdldEF0dGFjaG1lbnRQbGFjZW1lbnQoeyBhcHAsIGF0dGFjaG1lbnRGaWxlLCBub3RlUGF0aCB9KTtcblxuICBpZiAocGxhY2VtZW50LmlzSW5Qcm9wZXJGb2xkZXIpIHtcbiAgICBpbmRleC5tYXJrSG9tZWQoYXR0YWNobWVudEZpbGUucGF0aCwgbm90ZVBhdGgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluZGV4LmFkZChub3RlUGF0aCwge1xuICAgIGF0dGFjaG1lbnRQYXRoOiBhdHRhY2htZW50RmlsZS5wYXRoLFxuICAgIHByb3BlckF0dGFjaG1lbnRGb2xkZXJQYXRoOiBwbGFjZW1lbnQucHJvcGVyQXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgcmVmZXJlbmNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRUb1NldE1hcChtYXA6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Piwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgbGV0IHNldCA9IG1hcC5nZXQoa2V5KTtcbiAgaWYgKCFzZXQpIHtcbiAgICBzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBtYXAuc2V0KGtleSwgc2V0KTtcbiAgfVxuICBzZXQuYWRkKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNOb25lKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQ0EsNkJBR087QUFFUCw2QkFHTztBQUNQLHlCQUF1QjtBQUtoQixJQUFLLDZCQUFMLGtCQUFLQSxnQ0FBTDtBQUlMLEVBQUFBLDRCQUFBLFlBQVM7QUFNVCxFQUFBQSw0QkFBQSxZQUFTO0FBS1QsRUFBQUEsNEJBQUEsbUJBQWdCO0FBZk4sU0FBQUE7QUFBQSxHQUFBO0FBcUlMLE1BQU0saUNBQWlDLElBQXdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUzdFLFlBQTRCLE9BQU8sdUJBQW1DO0FBQzNFLFVBQU07QUFEMkI7QUFBQSxFQUVuQztBQUFBLEVBRm1DO0FBQUEsRUFSbEIsOEJBQThCLG9CQUFJLElBQXlCO0FBQUEsRUFDM0QsNEJBQTRCLG9CQUFJLElBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQm5FLElBQUksVUFBa0IsT0FBdUM7QUFDbEUsUUFBSSxVQUFVLEtBQUssSUFBSSxRQUFRO0FBQy9CLFFBQUksQ0FBQyxTQUFTO0FBQ1osZ0JBQVUsQ0FBQztBQUNYLFdBQUssSUFBSSxVQUFVLE9BQU87QUFBQSxJQUM1QjtBQUNBLFlBQVEsS0FBSyxLQUFLO0FBQ2xCLFNBQUssUUFBUSxNQUFNLGdCQUFnQixRQUFRO0FBQUEsRUFDN0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLFFBQVEsZ0JBQXdCLFVBQXdCO0FBQzdELGdCQUFZLEtBQUssMkJBQTJCLGdCQUFnQixRQUFRO0FBQUEsRUFDdEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sc0JBQXNCLGdCQUF3QixVQUE0QjtBQUMvRSxVQUFNLGtCQUFrQixLQUFLLG1CQUFtQixjQUFjO0FBQzlELFVBQU0sZ0JBQWdCLENBQUMsR0FBRyxLQUFLLDBCQUEwQixJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUM7QUFDbEYsV0FBTyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsY0FBYyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsU0FBUyxRQUFRO0FBQUEsRUFDcEk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLG1CQUFtQixnQkFBa0M7QUFDMUQsV0FBTyxDQUFDLEdBQUcsS0FBSyw0QkFBNEIsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDdkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLGNBQXVEO0FBQzVELFVBQU0sV0FBVyxvQkFBSSxJQUF3QztBQUM3RCxRQUFJLEtBQUssU0FBUyx1QkFBbUM7QUFDbkQsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLENBQUMsVUFBVSxPQUFPLEtBQUssTUFBTTtBQUN0QyxZQUFNLFlBQVksS0FBSyxTQUFTLHNDQUM1QixRQUFRLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyw0QkFBNEIsSUFBSSxNQUFNLGNBQWMsQ0FBQyxJQUNyRjtBQUNKLFVBQUksVUFBVSxTQUFTLEdBQUc7QUFDeEIsaUJBQVMsSUFBSSxVQUFVLFNBQVM7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxhQUFhLGdCQUF3QixVQUEyQjtBQUNyRSxXQUFPLEtBQUssNEJBQTRCLElBQUksY0FBYyxHQUFHLElBQUksUUFBUSxLQUFLO0FBQUEsRUFDaEY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sVUFBVSxnQkFBd0IsVUFBd0I7QUFDL0QsZ0JBQVksS0FBSyw2QkFBNkIsZ0JBQWdCLFFBQVE7QUFDdEUsU0FBSyxRQUFRLGdCQUFnQixRQUFRO0FBQUEsRUFDdkM7QUFDRjtBQVdBLGVBQXNCLHVCQUF1QixRQUFvRTtBQUMvRyxRQUFNLEVBQUUsS0FBSyxnQkFBZ0IsU0FBUyxJQUFJO0FBQzFDLFFBQU0sNkJBQTZCLFVBQU0sNkRBQXFDO0FBQUEsSUFDNUU7QUFBQSxJQUNBLHNCQUFzQjtBQUFBLElBQ3RCLFNBQVMsNkNBQXNCO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsRUFDbEIsQ0FBQztBQUlELFFBQU0sb0JBQWdCLHlDQUFpQixHQUFHLEVBQUU7QUFDNUMsU0FBTztBQUFBLElBQ0wsa0JBQWtCLFNBQUsseUNBQWlCLGVBQWUsSUFBSSxDQUFDLE1BQU0sS0FBSywwQkFBMEI7QUFBQSxJQUNqRztBQUFBLEVBQ0Y7QUFFQSxXQUFTLEtBQUssT0FBdUI7QUFDbkMsV0FBTyxnQkFBZ0IsTUFBTSxZQUFZLElBQUk7QUFBQSxFQUMvQztBQUNGO0FBWUEsZUFBc0IsMEJBQTBCLFFBQXdEO0FBQ3RHLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGdCQUFnQjtBQUFBLElBQ2hCLHlCQUF5QjtBQUFBLElBQ3pCLHdCQUF3QjtBQUFBLElBQ3hCO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLE1BQUksTUFBTSxTQUFTLHVCQUFtQztBQUNwRDtBQUFBLEVBQ0Y7QUFFQSxVQUFJLDJCQUFPLGNBQWMsS0FBSyxDQUFDLHNCQUFzQixlQUFlLElBQUksR0FBRztBQUN6RTtBQUFBLEVBQ0Y7QUFFQSxNQUFJLGNBQWMsZUFBZSxJQUFJLEtBQUssdUJBQXVCLGVBQWUsSUFBSSxHQUFHO0FBQ3JGO0FBQUEsRUFDRjtBQUVBLFFBQU0sWUFBWSxNQUFNLHVCQUF1QixFQUFFLEtBQUssZ0JBQWdCLFNBQVMsQ0FBQztBQUVoRixNQUFJLFVBQVUsa0JBQWtCO0FBQzlCLFVBQU0sVUFBVSxlQUFlLE1BQU0sUUFBUTtBQUM3QztBQUFBLEVBQ0Y7QUFFQSxRQUFNLElBQUksVUFBVTtBQUFBLElBQ2xCLGdCQUFnQixlQUFlO0FBQUEsSUFDL0IsNEJBQTRCLFVBQVU7QUFBQSxJQUN0QztBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUyxZQUFZLEtBQStCLEtBQWEsT0FBcUI7QUFDcEYsTUFBSSxNQUFNLElBQUksSUFBSSxHQUFHO0FBQ3JCLE1BQUksQ0FBQyxLQUFLO0FBQ1IsVUFBTSxvQkFBSSxJQUFZO0FBQ3RCLFFBQUksSUFBSSxLQUFLLEdBQUc7QUFBQSxFQUNsQjtBQUNBLE1BQUksSUFBSSxLQUFLO0FBQ2Y7QUFFQSxTQUFTLFNBQWtCO0FBQ3pCLFNBQU87QUFDVDsiLCJuYW1lcyI6WyJFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZSJdfQ==
@@ -0,0 +1,228 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Whether an attachment sits outside the attachment folder of the notes that use it, and which notes are its
6
+ * proper home.
7
+ *
8
+ * Two things here are easy to get wrong:
9
+ *
10
+ * - **The judgement is about the FOLDER, not the path.** `getAttachmentFilePath` answers about the proper
11
+ * path, folder and templated base name both, so judging on it raw flags every attachment whose NAME does not
12
+ * match a rename template. That is a different defect. So the comparison is folder against folder, through
13
+ * `getAttachmentFolderPathForAttachment`, which also skips the name generation that dominates the cost of
14
+ * the question when `Custom Attachment Location` answers it.
15
+ * - **The proper folder is asked for the REAL attachment, never a dummy.** A folder template may read the
16
+ * attachment's own name, extension or stats, so `getAttachmentFolderPath`'s dummy-file route can answer
17
+ * about a file that does not exist.
18
+ *
19
+ * A reference is judged from the note that makes it: `A.md` linking `B/image.png`, which sits in `B.md`'s folder,
20
+ * is A linking an EXTERNAL attachment, even when B uses it too. Whether such a reference is worth reporting depends
21
+ * on whether the attachment has a proper note anywhere, which is known only after every note has been judged, so
22
+ * {@link MisplacedAttachmentIndex} collects the verdicts and {@link MisplacedAttachmentIndex.getReported} applies
23
+ * the {@link ExternalAttachmentLinkMode} at the end.
24
+ *
25
+ * Rendering is the caller's: this module only judges and collects.
26
+ */
27
+ import type { App, Reference, TFile } from 'obsidian' with { 'resolution-mode': 'import' };
28
+ /**
29
+ * Which references to an attachment outside the referencing note's attachment folder are reported.
30
+ */
31
+ export declare enum ExternalAttachmentLinkMode {
32
+ /**
33
+ * Never report one: nothing is judged at all.
34
+ */
35
+ Ignore = "Ignore",
36
+ /**
37
+ * Report every such reference, including one to an attachment filed in the folder of another note that
38
+ * references it too.
39
+ */
40
+ Report = "Report",
41
+ /**
42
+ * Report such a reference only when no note that references the attachment has it in its own folder.
43
+ */
44
+ ReportUnowned = "ReportUnowned"
45
+ }
46
+ /**
47
+ * The folder an attachment sits in, judged against the folder one note's configuration puts its attachments in.
48
+ */
49
+ export interface AttachmentPlacement {
50
+ /**
51
+ * Whether the attachment sits in {@link AttachmentPlacement.properAttachmentFolderPath}, compared the way the
52
+ * vault's adapter compares names (case-folded on a case-insensitive adapter).
53
+ */
54
+ readonly isInProperFolder: boolean;
55
+ /**
56
+ * The vault-relative folder the note's configuration puts this attachment in, `/` for the vault root.
57
+ */
58
+ readonly properAttachmentFolderPath: string;
59
+ }
60
+ /**
61
+ * Parameters for {@link getAttachmentPlacement}.
62
+ */
63
+ export interface GetAttachmentPlacementParams {
64
+ /**
65
+ * The Obsidian app instance.
66
+ */
67
+ readonly app: App;
68
+ /**
69
+ * The attachment to judge.
70
+ */
71
+ readonly attachmentFile: TFile;
72
+ /**
73
+ * The vault-relative path of the note whose configuration the attachment is judged against.
74
+ */
75
+ readonly notePath: string;
76
+ }
77
+ /**
78
+ * One reference to an attachment outside the attachment folder of the note that makes it.
79
+ *
80
+ * The same attachment referenced from two notes is two entries, because the two notes can configure different
81
+ * attachment folders.
82
+ */
83
+ export interface MisplacedAttachmentEntry {
84
+ /**
85
+ * The attachment's current vault-relative path.
86
+ */
87
+ readonly attachmentPath: string;
88
+ /**
89
+ * The vault-relative folder the referencing note's configuration puts the attachment in.
90
+ */
91
+ readonly properAttachmentFolderPath: string;
92
+ /**
93
+ * The reference that reaches the attachment.
94
+ */
95
+ readonly reference: Reference;
96
+ }
97
+ /**
98
+ * Parameters for {@link recordAttachmentPlacement}.
99
+ */
100
+ export interface RecordAttachmentPlacementParams {
101
+ /**
102
+ * The Obsidian app instance.
103
+ */
104
+ readonly app: App;
105
+ /**
106
+ * The file the reference resolved to. Pass only references that resolved: an unresolved one is a broken link,
107
+ * not a misplaced attachment.
108
+ */
109
+ readonly attachmentFile: TFile;
110
+ /**
111
+ * The index the verdict is recorded in.
112
+ */
113
+ readonly index: MisplacedAttachmentIndex;
114
+ /**
115
+ * Whether a path is never judged, for example because the user excluded it. Defaults to judging every path.
116
+ */
117
+ readonly isPathIgnored?: (path: string) => boolean;
118
+ /**
119
+ * Whether a path lies in a shared attachment location, which is anybody's folder, so no reference into it is
120
+ * external. Defaults to no shared location.
121
+ */
122
+ readonly isSharedAttachmentPath?: (path: string) => boolean;
123
+ /**
124
+ * Whether a note is treated as an attachment (an `.excalidraw.md` file, say), and so judged here. Defaults to
125
+ * no note being one.
126
+ */
127
+ readonly isTreatedAsAttachment?: (path: string) => boolean;
128
+ /**
129
+ * The vault-relative path of the note that makes the reference.
130
+ */
131
+ readonly notePath: string;
132
+ /**
133
+ * The reference, kept in the entry so a report can name its line or frontmatter key.
134
+ */
135
+ readonly reference: Reference;
136
+ }
137
+ /**
138
+ * The verdicts of a walk over every reference to an attachment, grouped by the note that makes the reference.
139
+ *
140
+ * It keeps every external reference, every note that uses each attachment, and each attachment's proper notes:
141
+ * the notes that reference it and whose own folder holds it. Which entries count as reported depends on the
142
+ * {@link ExternalAttachmentLinkMode} and on the proper notes, which are known only once the whole vault has been
143
+ * walked, so ask {@link MisplacedAttachmentIndex.getReported} after the walk.
144
+ */
145
+ export declare class MisplacedAttachmentIndex extends Map<string, MisplacedAttachmentEntry[]> {
146
+ readonly mode: ExternalAttachmentLinkMode;
147
+ private readonly properNotePathsByAttachment;
148
+ private readonly userNotePathsByAttachment;
149
+ /**
150
+ * Creates an empty index.
151
+ *
152
+ * @param mode - Which external references {@link MisplacedAttachmentIndex.getReported} returns.
153
+ */
154
+ constructor(mode?: ExternalAttachmentLinkMode);
155
+ /**
156
+ * Records a reference to an attachment outside the referencing note's folder.
157
+ *
158
+ * @param notePath - The referencing note's vault-relative path.
159
+ * @param entry - The reference and the folder the note wants the attachment in.
160
+ */
161
+ add(notePath: string, entry: MisplacedAttachmentEntry): void;
162
+ /**
163
+ * Records that a note references an attachment, wherever the attachment sits.
164
+ *
165
+ * @param attachmentPath - The attachment's vault-relative path.
166
+ * @param notePath - The referencing note's vault-relative path.
167
+ */
168
+ addUser(attachmentPath: string, notePath: string): void;
169
+ /**
170
+ * The notes that use an attachment besides the given one, its proper notes first, each group in walk order.
171
+ *
172
+ * @param attachmentPath - The attachment's vault-relative path.
173
+ * @param notePath - The note to leave out: the one whose reference is being reported.
174
+ * @returns The other notes' paths.
175
+ */
176
+ getOtherUserNotePaths(attachmentPath: string, notePath: string): string[];
177
+ /**
178
+ * The proper notes of an attachment: the notes that reference it and whose own folder holds it, in walk order.
179
+ *
180
+ * @param attachmentPath - The attachment's vault-relative path.
181
+ * @returns The proper notes' paths, empty when the attachment has none.
182
+ */
183
+ getProperNotePaths(attachmentPath: string): string[];
184
+ /**
185
+ * The entries to report, after the mode is applied, grouped by note, with a note left out once none of its
186
+ * entries survive.
187
+ *
188
+ * @returns The entries to report.
189
+ */
190
+ getReported(): Map<string, MisplacedAttachmentEntry[]>;
191
+ /**
192
+ * Whether a note is a proper note of an attachment: it references it, and its own folder holds it.
193
+ *
194
+ * @param attachmentPath - The attachment's vault-relative path.
195
+ * @param notePath - The note's vault-relative path.
196
+ * @returns `true` when the note's own attachment folder holds the attachment.
197
+ */
198
+ isProperNote(attachmentPath: string, notePath: string): boolean;
199
+ /**
200
+ * Records that an attachment sits in the folder configured for a note that references it, which makes that
201
+ * note its proper note.
202
+ *
203
+ * @param attachmentPath - The attachment's vault-relative path.
204
+ * @param notePath - The referencing note whose folder holds it.
205
+ */
206
+ markHomed(attachmentPath: string, notePath: string): void;
207
+ }
208
+ /**
209
+ * Judges where an attachment sits against the attachment folder of one note.
210
+ *
211
+ * Asks the attachment-path seam once, folder-only, for the REAL attachment, so a `Custom Attachment Location`
212
+ * folder template that reads the attachment's own name is honoured and no name is generated.
213
+ *
214
+ * @param params - The attachment and the note.
215
+ * @returns The note's proper folder for the attachment, and whether the attachment is in it.
216
+ */
217
+ export declare function getAttachmentPlacement(params: GetAttachmentPlacementParams): Promise<AttachmentPlacement>;
218
+ /**
219
+ * Judges one resolved reference and records the verdict in the index.
220
+ *
221
+ * Records nothing under {@link ExternalAttachmentLinkMode.Ignore}, for a note that is not treated as an
222
+ * attachment, and for an ignored or shared path. Otherwise the referencing note becomes a proper note of the
223
+ * attachment when its folder holds it, and the reference becomes an entry when it does not.
224
+ *
225
+ * @param params - The reference, its note, its target and the index.
226
+ * @returns A {@link Promise} that resolves once the verdict is recorded.
227
+ */
228
+ export declare function recordAttachmentPlacement(params: RecordAttachmentPlacementParams): Promise<void>;
@@ -117,7 +117,7 @@ __export(mobile_app_info_exports, {
117
117
  getMobileAppInfo: () => getMobileAppInfo
118
118
  });
119
119
  module.exports = __toCommonJS(mobile_app_info_exports);
120
- var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
120
+ var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
121
121
  const isAppInfo = (0, import_type_guards.objectTypeGuard)({
122
122
  build: (0, import_type_guards.optionalTypeGuard)(import_type_guards.isString),
123
123
  version: import_type_guards.isString
@@ -117,10 +117,10 @@ __export(alert_exports, {
117
117
  alert: () => alert
118
118
  });
119
119
  module.exports = __toCommonJS(alert_exports);
120
- var import_i18next = require('i18next');
121
- var import_obsidian = require('obsidian');
122
- var import_css_class = require('../css-class.cjs');
123
- var import_modal = require('./modal.cjs');
120
+ var import_i18next = require("i18next");
121
+ var import_obsidian = require("obsidian");
122
+ var import_css_class = require("../css-class.cjs");
123
+ var import_modal = require("./modal.cjs");
124
124
  class AlertModal extends import_modal.ModalBase {
125
125
  message;
126
126
  okButtonText;
@@ -118,13 +118,13 @@ __export(code_block_builder_exports, {
118
118
  showCodeBlockBuilder: () => showCodeBlockBuilder
119
119
  });
120
120
  module.exports = __toCommonJS(code_block_builder_exports);
121
- var import_async = require('@mnaoumov/typescript-lib/async');
122
- var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
123
- var import_obsidian = require('obsidian');
124
- var import_css_class = require('../css-class.cjs');
125
- var import_i18n = require('../i18n/i18n.cjs');
126
- var import_multiple_dropdown_component = require('../setting-components/multiple-dropdown-component.cjs');
127
- var import_modal = require('./modal.cjs');
121
+ var import_async = require("@mnaoumov/typescript-lib/async");
122
+ var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
123
+ var import_obsidian = require("obsidian");
124
+ var import_css_class = require("../css-class.cjs");
125
+ var import_i18n = require("../i18n/i18n.cjs");
126
+ var import_multiple_dropdown_component = require("../setting-components/multiple-dropdown-component.cjs");
127
+ var import_modal = require("./modal.cjs");
128
128
  const DEFAULT_SEPARATOR = ",";
129
129
  const MIN_FENCE_LENGTH = 3;
130
130
  const ROOT_FOLDER_PATH = "/";
@@ -117,10 +117,10 @@ __export(confirm_exports, {
117
117
  confirm: () => confirm
118
118
  });
119
119
  module.exports = __toCommonJS(confirm_exports);
120
- var import_obsidian = require('obsidian');
121
- var import_css_class = require('../css-class.cjs');
122
- var import_i18n = require('../i18n/i18n.cjs');
123
- var import_modal = require('./modal.cjs');
120
+ var import_obsidian = require("obsidian");
121
+ var import_css_class = require("../css-class.cjs");
122
+ var import_i18n = require("../i18n/i18n.cjs");
123
+ var import_modal = require("./modal.cjs");
124
124
  class ConfirmModal extends import_modal.ModalBase {
125
125
  cancelButtonText;
126
126
  isConfirmed = false;