@mnaoumov/obsidian-lib 10.12.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 (399) hide show
  1. package/components/worker-component/package.json +6 -0
  2. package/components/worker-pool-component/package.json +6 -0
  3. package/dist/lib/cjs/__merged.cjs +409 -292
  4. package/dist/lib/cjs/__merged.d.cts +17 -8
  5. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  6. package/dist/lib/cjs/app.cjs +2 -2
  7. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  8. package/dist/lib/cjs/attachment-path.cjs +9 -9
  9. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  10. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  11. package/dist/lib/cjs/backlink-index.cjs +5 -5
  12. package/dist/lib/cjs/backlink.cjs +7 -7
  13. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  14. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  15. package/dist/lib/cjs/bug-report.cjs +3 -3
  16. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  17. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  18. package/dist/lib/cjs/callout.cjs +6 -6
  19. package/dist/lib/cjs/canvas.cjs +11 -9
  20. package/dist/lib/cjs/canvas.d.cts +13 -0
  21. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  22. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  23. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  24. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  25. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  26. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  27. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  28. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  29. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  30. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  31. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  32. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  33. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  34. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  35. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  36. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  37. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  38. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  39. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +6 -6
  40. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  41. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  42. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  43. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  44. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  46. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  47. package/dist/lib/cjs/community-plugins.cjs +3 -3
  48. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  49. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  50. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +3 -3
  51. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  52. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  53. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  54. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  55. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  56. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  57. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  58. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  59. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  60. package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -1
  61. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +8 -8
  62. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  63. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  64. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  65. package/dist/lib/cjs/components/index.cjs +46 -40
  66. package/dist/lib/cjs/components/index.d.cts +2 -0
  67. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  68. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  69. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  70. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  71. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  72. package/dist/lib/cjs/components/plugin-gate-component.cjs +68 -28
  73. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  74. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  75. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  76. package/dist/lib/cjs/components/plugin-settings-component.cjs +113 -17
  77. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  78. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  79. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  80. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  81. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  82. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  83. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  84. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  85. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  86. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  87. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  88. package/dist/lib/cjs/components/shared-component-pool-component.cjs +6 -6
  89. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  90. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  91. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  92. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  93. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  94. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  95. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  96. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +7 -7
  97. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  98. package/dist/lib/cjs/constructors/index.cjs +1 -1
  99. package/dist/lib/cjs/data-handler.cjs +111 -4
  100. package/dist/lib/cjs/data-handler.d.cts +92 -1
  101. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  102. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  103. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  104. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  105. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  106. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  107. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  108. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  109. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  110. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  111. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  112. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  113. package/dist/lib/cjs/dataview-link.cjs +2 -2
  114. package/dist/lib/cjs/dataview.cjs +27 -7
  115. package/dist/lib/cjs/dataview.d.cts +14 -0
  116. package/dist/lib/cjs/debug.cjs +3 -3
  117. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  118. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  119. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  120. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  121. package/dist/lib/cjs/desktop-git-runner.cjs +2 -2
  122. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  123. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  124. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  125. package/dist/lib/cjs/disposable.cjs +150 -0
  126. package/dist/lib/cjs/disposable.d.cts +39 -0
  127. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  128. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  129. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  130. package/dist/lib/cjs/editor.cjs +6 -6
  131. package/dist/lib/cjs/events.cjs +2 -2
  132. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  133. package/dist/lib/cjs/feature-request.cjs +1 -1
  134. package/dist/lib/cjs/file-change.cjs +10 -10
  135. package/dist/lib/cjs/file-explorer.cjs +2 -2
  136. package/dist/lib/cjs/file-manager.cjs +5 -5
  137. package/dist/lib/cjs/file-system.cjs +10 -10
  138. package/dist/lib/cjs/folder-note.cjs +4 -4
  139. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  140. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  141. package/dist/lib/cjs/frontmatter.cjs +5 -5
  142. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  143. package/dist/lib/cjs/hotkey.cjs +1 -1
  144. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  145. package/dist/lib/cjs/html-element.cjs +2 -2
  146. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  147. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  148. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  149. package/dist/lib/cjs/i18n/index.cjs +4 -4
  150. package/dist/lib/cjs/i18n/locales/en.cjs +5 -1
  151. package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
  152. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  153. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  154. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
  155. package/dist/lib/cjs/index.cjs +145 -127
  156. package/dist/lib/cjs/index.d.cts +6 -0
  157. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  158. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  159. package/dist/lib/cjs/library-styles.cjs +3 -3
  160. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  161. package/dist/lib/cjs/link.cjs +76 -56
  162. package/dist/lib/cjs/link.d.cts +20 -14
  163. package/dist/lib/cjs/logger.cjs +4 -4
  164. package/dist/lib/cjs/loop.cjs +10 -16
  165. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  166. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  167. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  168. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  169. package/dist/lib/cjs/markdown-view.cjs +3 -3
  170. package/dist/lib/cjs/markdown.cjs +12 -12
  171. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  172. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  173. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  174. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  175. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  176. package/dist/lib/cjs/modals/alert.cjs +4 -4
  177. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  178. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  179. package/dist/lib/cjs/modals/copy-text-manually.cjs +4 -4
  180. package/dist/lib/cjs/modals/index.cjs +12 -12
  181. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  182. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  183. package/dist/lib/cjs/modals/modal.cjs +3 -3
  184. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  185. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  186. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +5 -5
  187. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  188. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  189. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  190. package/dist/lib/cjs/note-priority.cjs +2 -2
  191. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  192. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  193. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  194. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  195. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  196. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  197. package/dist/lib/cjs/parse-link.cjs +14 -14
  198. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  199. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  200. package/dist/lib/cjs/path-settings.cjs +3 -3
  201. package/dist/lib/cjs/pdf.cjs +2 -2
  202. package/dist/lib/cjs/plugin/index.cjs +16 -13
  203. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  204. package/dist/lib/cjs/plugin/plugin-api.cjs +8 -8
  205. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  206. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  207. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  208. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  209. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  210. package/dist/lib/cjs/plugin/plugin-install-state.cjs +4 -4
  211. package/dist/lib/cjs/plugin/plugin-instance.cjs +14 -12
  212. package/dist/lib/cjs/plugin/plugin-instance.d.cts +7 -0
  213. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  214. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  215. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  216. package/dist/lib/cjs/plugin/plugin.cjs +118 -34
  217. package/dist/lib/cjs/plugin/plugin.d.cts +28 -5
  218. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  219. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  220. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  221. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  222. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  223. package/dist/lib/cjs/popovers/index.cjs +3 -3
  224. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  225. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  226. package/dist/lib/cjs/queue.cjs +8 -8
  227. package/dist/lib/cjs/react/app-context.cjs +3 -3
  228. package/dist/lib/cjs/react/index.cjs +1 -1
  229. package/dist/lib/cjs/reference-definition.cjs +1 -1
  230. package/dist/lib/cjs/reference.cjs +3 -3
  231. package/dist/lib/cjs/release-asset.cjs +5 -5
  232. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  233. package/dist/lib/cjs/request-url.cjs +4 -4
  234. package/dist/lib/cjs/resource-lock.cjs +46 -42
  235. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  236. package/dist/lib/cjs/resource-url.cjs +3 -3
  237. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  238. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  239. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  240. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  241. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  242. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  243. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  244. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  245. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  246. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  247. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  248. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  249. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  250. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  251. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  252. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  253. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  254. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  255. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  256. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  257. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  258. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  259. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  260. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  261. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  262. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  264. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  265. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  266. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  268. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  269. package/dist/lib/cjs/setting-ex.cjs +26 -26
  270. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  271. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  272. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  273. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  274. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  275. package/dist/lib/cjs/templater.cjs +14 -4
  276. package/dist/lib/cjs/templater.d.cts +6 -0
  277. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  278. package/dist/lib/cjs/transformers/index.cjs +1 -1
  279. package/dist/lib/cjs/trusted-input.cjs +1 -1
  280. package/dist/lib/cjs/validation.cjs +4 -4
  281. package/dist/lib/cjs/vault-delete.cjs +6 -6
  282. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  283. package/dist/lib/cjs/vault.cjs +12 -12
  284. package/dist/lib/cjs/view-registrar.cjs +1 -1
  285. package/dist/lib/cjs/virtual-file.cjs +16 -14
  286. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  287. package/dist/lib/cjs/wasm.cjs +119 -0
  288. package/dist/lib/cjs/wasm.d.cts +54 -0
  289. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  290. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  291. package/dist/lib/cjs/workspace.cjs +1 -1
  292. package/dist/lib/esm/__merged.d.mts +17 -8
  293. package/dist/lib/esm/__merged.mjs +133 -3
  294. package/dist/lib/esm/app.mjs +2 -2
  295. package/dist/lib/esm/attachment-path.d.mts +3 -3
  296. package/dist/lib/esm/attachment-path.mjs +2 -2
  297. package/dist/lib/esm/backlink-index.mjs +2 -2
  298. package/dist/lib/esm/canvas.d.mts +13 -0
  299. package/dist/lib/esm/canvas.mjs +6 -5
  300. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  301. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  302. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  303. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  304. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  305. package/dist/lib/esm/components/component-ex.mjs +19 -6
  306. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  307. package/dist/lib/esm/components/index.d.mts +2 -0
  308. package/dist/lib/esm/components/index.mjs +5 -1
  309. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  310. package/dist/lib/esm/components/plugin-gate-component.mjs +57 -14
  311. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  312. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  313. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  314. package/dist/lib/esm/components/plugin-settings-component.mjs +99 -3
  315. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  316. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  317. package/dist/lib/esm/components/worker-component.mjs +279 -0
  318. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  319. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  320. package/dist/lib/esm/components/workspace-layout-state-component.mjs +1 -1
  321. package/dist/lib/esm/data-handler.d.mts +92 -1
  322. package/dist/lib/esm/data-handler.mjs +112 -3
  323. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  324. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  325. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  326. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  327. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  328. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  329. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  330. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  331. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  332. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  333. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  334. package/dist/lib/esm/dataview.d.mts +14 -0
  335. package/dist/lib/esm/dataview.mjs +19 -1
  336. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  337. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  338. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  339. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  340. package/dist/lib/esm/disposable.d.mts +39 -0
  341. package/dist/lib/esm/disposable.mjs +64 -0
  342. package/dist/lib/esm/file-system.mjs +2 -2
  343. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  344. package/dist/lib/esm/generated-during-build.mjs +1 -1
  345. package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
  346. package/dist/lib/esm/i18n/locales/en.mjs +5 -1
  347. package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
  348. package/dist/lib/esm/index.d.mts +6 -0
  349. package/dist/lib/esm/index.mjs +13 -1
  350. package/dist/lib/esm/link.d.mts +20 -14
  351. package/dist/lib/esm/link.mjs +57 -38
  352. package/dist/lib/esm/loop.mjs +2 -8
  353. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  354. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  355. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  356. package/dist/lib/esm/metadata-cache.mjs +6 -6
  357. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  358. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  359. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  360. package/dist/lib/esm/modals/prompt.mjs +1 -1
  361. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  362. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  363. package/dist/lib/esm/parse-link.mjs +4 -4
  364. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  365. package/dist/lib/esm/path-compatibility.mjs +277 -0
  366. package/dist/lib/esm/plugin/index.d.mts +1 -0
  367. package/dist/lib/esm/plugin/index.mjs +4 -2
  368. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  369. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  370. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  371. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  372. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  373. package/dist/lib/esm/plugin/plugin-instance.d.mts +7 -0
  374. package/dist/lib/esm/plugin/plugin-instance.mjs +2 -1
  375. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  376. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  377. package/dist/lib/esm/plugin/plugin.d.mts +28 -5
  378. package/dist/lib/esm/plugin/plugin.mjs +103 -9
  379. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  380. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  381. package/dist/lib/esm/release-asset.mjs +1 -1
  382. package/dist/lib/esm/resource-lock.d.mts +8 -7
  383. package/dist/lib/esm/resource-lock.mjs +31 -26
  384. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  385. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  386. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  387. package/dist/lib/esm/settings-recovery.mjs +125 -0
  388. package/dist/lib/esm/settings-tabs.mjs +2 -2
  389. package/dist/lib/esm/templater.d.mts +6 -0
  390. package/dist/lib/esm/templater.mjs +11 -2
  391. package/dist/lib/esm/vault.mjs +1 -1
  392. package/dist/lib/esm/virtual-file.d.mts +2 -1
  393. package/dist/lib/esm/virtual-file.mjs +7 -5
  394. package/dist/lib/esm/wasm.d.mts +54 -0
  395. package/dist/lib/esm/wasm.mjs +30 -0
  396. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  397. package/dist/lib/esm/worker-protocol.mjs +113 -0
  398. package/package.json +9 -8
  399. package/plugin/third-party-plugin/package.json +6 -0
@@ -91,8 +91,8 @@ __export(rmdir_guard_component_exports, {
91
91
  RmdirGuardComponent: () => RmdirGuardComponent
92
92
  });
93
93
  module.exports = __toCommonJS(rmdir_guard_component_exports);
94
- var import_vault = require('../vault.cjs');
95
- var import_monkey_around_component = require('./monkey-around-component.cjs');
94
+ var import_vault = require("../vault.cjs");
95
+ var import_monkey_around_component = require("./monkey-around-component.cjs");
96
96
  const NOT_EMPTY_DIRECTORY_ERROR_CODE = "ENOTEMPTY";
97
97
  class RmdirGuardComponent extends import_monkey_around_component.MonkeyAroundComponent {
98
98
  /**
@@ -90,7 +90,7 @@ __export(settings_facet_component_exports, {
90
90
  SettingsFacetComponent: () => SettingsFacetComponent
91
91
  });
92
92
  module.exports = __toCommonJS(settings_facet_component_exports);
93
- var import_reconfigurable_editor_extension_component = require('./reconfigurable-editor-extension-component.cjs');
93
+ var import_reconfigurable_editor_extension_component = require("./reconfigurable-editor-extension-component.cjs");
94
94
  class SettingsFacetComponent extends import_reconfigurable_editor_extension_component.ReconfigurableEditorExtensionComponent {
95
95
  /**
96
96
  * The settings the editors currently read.
@@ -117,11 +117,11 @@ __export(settings_migration_component_exports, {
117
117
  SettingsMigrationComponent: () => SettingsMigrationComponent
118
118
  });
119
119
  module.exports = __toCommonJS(settings_migration_component_exports);
120
- var import_async = require('@mnaoumov/typescript-lib/async');
121
- var import_plugin_api = require('../plugin/plugin-api.cjs');
122
- var import_settings_migration_api = require('../plugin/settings-migration-api.cjs');
123
- var import_async_events_component = require('./async-events-component.cjs');
124
- var import_component_ex = require('./component-ex.cjs');
120
+ var import_async = require("@mnaoumov/typescript-lib/async");
121
+ var import_plugin_api = require("../plugin/plugin-api.cjs");
122
+ var import_settings_migration_api = require("../plugin/settings-migration-api.cjs");
123
+ var import_async_events_component = require("./async-events-component.cjs");
124
+ var import_component_ex = require("./component-ex.cjs");
125
125
  class SettingsMigrationComponent extends import_component_ex.ComponentEx {
126
126
  apiVersionRange;
127
127
  app;
@@ -168,12 +168,12 @@ __export(shared_component_pool_component_exports, {
168
168
  SharedComponentPoolComponent: () => SharedComponentPoolComponent
169
169
  });
170
170
  module.exports = __toCommonJS(shared_component_pool_component_exports);
171
- var import_abort_controller = require('@mnaoumov/typescript-lib/abort-controller');
172
- var import_array = require('@mnaoumov/typescript-lib/array');
173
- var import_error = require('@mnaoumov/typescript-lib/error');
174
- var import_function = require('@mnaoumov/typescript-lib/function');
175
- var import_obsidian = require('obsidian');
176
- var import_component_ex = require('./component-ex.cjs');
171
+ var import_abort_controller = require("@mnaoumov/typescript-lib/abort-controller");
172
+ var import_array = require("@mnaoumov/typescript-lib/array");
173
+ var import_error = require("@mnaoumov/typescript-lib/error");
174
+ var import_function = require("@mnaoumov/typescript-lib/function");
175
+ var import_obsidian = require("obsidian");
176
+ var import_component_ex = require("./component-ex.cjs");
177
177
  class SharedComponentAcquisitionImpl {
178
178
  constructor(component, onRelease) {
179
179
  this.component = component;
@@ -118,9 +118,9 @@ __export(style_sheet_component_exports, {
118
118
  registerStyle: () => registerStyle
119
119
  });
120
120
  module.exports = __toCommonJS(style_sheet_component_exports);
121
- var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
122
- var import_all_windows_event_component = require('./all-windows-event-component.cjs');
123
- var import_component_ex = require('./component-ex.cjs');
121
+ var import_object_utils = require("@mnaoumov/typescript-lib/object-utils");
122
+ var import_all_windows_event_component = require("./all-windows-event-component.cjs");
123
+ var import_component_ex = require("./component-ex.cjs");
124
124
  class StyleSheetComponent extends import_component_ex.ComponentEx {
125
125
  /**
126
126
  * The CSS currently attached.
@@ -117,9 +117,9 @@ __export(syntax_highlighting_component_exports, {
117
117
  SyntaxHighlightingComponent: () => SyntaxHighlightingComponent
118
118
  });
119
119
  module.exports = __toCommonJS(syntax_highlighting_component_exports);
120
- var import_error = require('@mnaoumov/typescript-lib/error');
121
- var import_implementations = require('@obsidian-typings/obsidian-public-latest/implementations');
122
- var import_component_ex = require('./component-ex.cjs');
120
+ var import_error = require("@mnaoumov/typescript-lib/error");
121
+ var import_implementations = require("@obsidian-typings/obsidian-public-latest/implementations");
122
+ var import_component_ex = require("./component-ex.cjs");
123
123
  class SyntaxHighlightingComponent extends import_component_ex.ComponentEx {
124
124
  /**
125
125
  * Registers a fenced code block language, highlighting it in the editor and, optionally, in reading view.
@@ -90,7 +90,7 @@ __export(templates_language_component_exports, {
90
90
  TemplatesLanguageComponent: () => TemplatesLanguageComponent
91
91
  });
92
92
  module.exports = __toCommonJS(templates_language_component_exports);
93
- var import_syntax_highlighting_component = require('./syntax-highlighting-component.cjs');
93
+ var import_syntax_highlighting_component = require("./syntax-highlighting-component.cjs");
94
94
  const DEFAULT_FORMAT_PATTERN = /[a-zA-Z0-9_-]+/;
95
95
  const DEFAULT_TOKEN_PATTERN = /^[a-zA-Z0-9_]+/;
96
96
  const FORMAT_DELIMITER_PATTERN = /^:/;
@@ -0,0 +1,363 @@
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 worker_component_exports = {};
116
+ __export(worker_component_exports, {
117
+ WorkerCallError: () => WorkerCallError,
118
+ WorkerComponent: () => WorkerComponent
119
+ });
120
+ module.exports = __toCommonJS(worker_component_exports);
121
+ var import_function = require("@mnaoumov/typescript-lib/function");
122
+ var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
123
+ var import_worker_protocol = require("../worker-protocol.cjs");
124
+ var import_component_ex = require("./component-ex.cjs");
125
+ class WorkerCallError extends Error {
126
+ /**
127
+ * The name of the error thrown in the worker.
128
+ */
129
+ remoteName;
130
+ /**
131
+ * The stack of the error thrown in the worker, when there was one.
132
+ */
133
+ remoteStack;
134
+ /**
135
+ * Creates the error.
136
+ *
137
+ * @param error - The serialized worker-side error.
138
+ */
139
+ constructor(error) {
140
+ super(error.message);
141
+ this.name = "WorkerCallError";
142
+ this.remoteName = error.name;
143
+ this.remoteStack = error.stack;
144
+ }
145
+ }
146
+ class WorkerComponent extends import_component_ex.ComponentEx {
147
+ /**
148
+ * Whether calls run on the main thread, because no `Worker` could be created and fallback handlers were given.
149
+ *
150
+ * @returns Whether the fallback is in use.
151
+ */
152
+ get isUsingFallback() {
153
+ return this.activeFallbackHandlers !== null;
154
+ }
155
+ /**
156
+ * The number of calls that have not settled yet.
157
+ *
158
+ * @returns The count.
159
+ */
160
+ get pendingCallCount() {
161
+ return this._pendingCallCount;
162
+ }
163
+ /**
164
+ * The handlers to run on the main thread when no `Worker` can be created, or `null`.
165
+ */
166
+ fallbackHandlers;
167
+ /**
168
+ * The worker's name, or `null`.
169
+ */
170
+ name;
171
+ /**
172
+ * The bundled worker source.
173
+ */
174
+ source;
175
+ _pendingCallCount = 0;
176
+ activeFallbackHandlers = null;
177
+ lastCallId = 0;
178
+ pendingCalls = /* @__PURE__ */ new Map();
179
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins -- The renderer's Web Worker, not Node's.
180
+ worker = null;
181
+ workerUrl = null;
182
+ /**
183
+ * Creates the component.
184
+ *
185
+ * @param params - The parameters.
186
+ */
187
+ constructor(params) {
188
+ super();
189
+ this.fallbackHandlers = params.fallbackHandlers ?? null;
190
+ this.name = params.name ?? null;
191
+ this.source = params.source;
192
+ }
193
+ /**
194
+ * Calls a worker method.
195
+ *
196
+ * @typeParam TMethod - The method.
197
+ * @param method - The method name.
198
+ * @param callArguments - The method's arguments.
199
+ * @param options - The call options.
200
+ * @returns The method's result. Rejects with a {@link WorkerCallError} when the handler failed, with the abort reason
201
+ * when the call was cancelled, and with an `Error` when the worker failed or the component unloaded first.
202
+ */
203
+ async call(method, callArguments, options = {}) {
204
+ if (!this._loaded) {
205
+ throw new Error("The worker component is not loaded");
206
+ }
207
+ const abortSignal = options.abortSignal ?? new AbortController().signal;
208
+ abortSignal.throwIfAborted();
209
+ this._pendingCallCount++;
210
+ try {
211
+ const result = this.activeFallbackHandlers === null ? await this.callWorker(method, callArguments, abortSignal, options.transfer ?? []) : await callFallback(this.activeFallbackHandlers, method, callArguments, abortSignal);
212
+ return result;
213
+ } finally {
214
+ this._pendingCallCount--;
215
+ }
216
+ }
217
+ /**
218
+ * Starts the worker.
219
+ */
220
+ onload() {
221
+ super.onload();
222
+ try {
223
+ this.startWorker();
224
+ } catch (error) {
225
+ this.stopWorker();
226
+ if (this.fallbackHandlers === null) {
227
+ throw error;
228
+ }
229
+ this.activeFallbackHandlers = this.fallbackHandlers;
230
+ }
231
+ }
232
+ /**
233
+ * Terminates the worker and rejects the pending calls.
234
+ */
235
+ onunload() {
236
+ super.onunload();
237
+ this.stopWorker();
238
+ this.rejectAll(new Error("The worker component was unloaded"));
239
+ this.activeFallbackHandlers = null;
240
+ }
241
+ async callWorker(method, callArguments, abortSignal, transfer) {
242
+ const worker = (0, import_type_guards.ensureNonNullable)(this.worker);
243
+ this.lastCallId++;
244
+ const id = this.lastCallId;
245
+ let onAbort = import_function.noop;
246
+ try {
247
+ return await new Promise((resolve, reject) => {
248
+ onAbort = () => {
249
+ if (!this.pendingCalls.delete(id)) {
250
+ return;
251
+ }
252
+ const cancelMessage = { id, kind: "cancel", protocol: import_worker_protocol.WORKER_PROTOCOL };
253
+ worker.postMessage(cancelMessage);
254
+ reject(getAbortReason(abortSignal));
255
+ };
256
+ this.pendingCalls.set(id, { reject, resolve });
257
+ const callMessage = { arguments: callArguments, id, kind: "call", method, protocol: import_worker_protocol.WORKER_PROTOCOL };
258
+ try {
259
+ worker.postMessage(callMessage, [...transfer]);
260
+ } catch (error) {
261
+ this.pendingCalls.delete(id);
262
+ reject(toError(error));
263
+ return;
264
+ }
265
+ abortSignal.addEventListener("abort", onAbort, { once: true });
266
+ });
267
+ } finally {
268
+ abortSignal.removeEventListener("abort", onAbort);
269
+ }
270
+ }
271
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins -- The renderer's Web ErrorEvent, not Node's.
272
+ handleError = ($event) => {
273
+ $event.preventDefault();
274
+ this.rejectAll(new Error(`The worker failed: ${$event.message || "unknown error"}`));
275
+ };
276
+ handleMessage = ($event) => {
277
+ const message = $event.data;
278
+ if (!(0, import_worker_protocol.isWorkerResponseMessage)(message)) {
279
+ return;
280
+ }
281
+ const pendingCall = this.pendingCalls.get(message.id);
282
+ if (!pendingCall) {
283
+ return;
284
+ }
285
+ this.pendingCalls.delete(message.id);
286
+ if (message.kind === "result") {
287
+ pendingCall.resolve(message.value);
288
+ } else {
289
+ pendingCall.reject(new WorkerCallError(message.error));
290
+ }
291
+ };
292
+ handleMessageError = () => {
293
+ this.rejectAll(new Error("The worker sent a message that could not be deserialized"));
294
+ };
295
+ rejectAll(reason) {
296
+ const pendingCalls = [...this.pendingCalls.values()];
297
+ this.pendingCalls.clear();
298
+ for (const pendingCall of pendingCalls) {
299
+ pendingCall.reject(reason);
300
+ }
301
+ }
302
+ revokeWorkerUrl() {
303
+ if (this.workerUrl === null) {
304
+ return;
305
+ }
306
+ window.URL.revokeObjectURL(this.workerUrl);
307
+ this.workerUrl = null;
308
+ }
309
+ startWorker() {
310
+ this.workerUrl = window.URL.createObjectURL(new Blob([this.source], { type: "text/javascript" }));
311
+ const workerOptions = this.name === null ? {} : { name: this.name };
312
+ const worker = new window.Worker(this.workerUrl, workerOptions);
313
+ this.worker = worker;
314
+ worker.addEventListener("message", this.handleMessage);
315
+ worker.addEventListener("messageerror", this.handleMessageError);
316
+ worker.addEventListener("error", this.handleError);
317
+ }
318
+ stopWorker() {
319
+ this.terminateWorker();
320
+ this.revokeWorkerUrl();
321
+ }
322
+ terminateWorker() {
323
+ if (!this.worker) {
324
+ return;
325
+ }
326
+ this.worker.removeEventListener("message", this.handleMessage);
327
+ this.worker.removeEventListener("messageerror", this.handleMessageError);
328
+ this.worker.removeEventListener("error", this.handleError);
329
+ this.worker.terminate();
330
+ this.worker = null;
331
+ }
332
+ }
333
+ async function callFallback(handlers, method, callArguments, callerSignal) {
334
+ const abortController = new AbortController();
335
+ function onAbort() {
336
+ abortController.abort(callerSignal.reason);
337
+ }
338
+ callerSignal.addEventListener("abort", onAbort, { once: true });
339
+ try {
340
+ const handlerPromise = (0, import_worker_protocol.invokeWorkerHandler)(handlers, method, callArguments, { abortSignal: abortController.signal });
341
+ handlerPromise.catch(import_function.noop);
342
+ const abortPromise = new Promise((_resolve, reject) => {
343
+ abortController.signal.addEventListener("abort", () => {
344
+ reject(getAbortReason(abortController.signal));
345
+ }, { once: true });
346
+ });
347
+ return (0, import_worker_protocol.unwrapTransferredValue)(await Promise.race([handlerPromise, abortPromise])).value;
348
+ } finally {
349
+ callerSignal.removeEventListener("abort", onAbort);
350
+ }
351
+ }
352
+ function getAbortReason(abortSignal) {
353
+ return toError(abortSignal.reason);
354
+ }
355
+ function toError(reason) {
356
+ return reason instanceof Error ? reason : new Error(String(reason));
357
+ }
358
+ // Annotate the CommonJS export names for ESM import in node:
359
+ 0 && (module.exports = {
360
+ WorkerCallError,
361
+ WorkerComponent
362
+ });
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtlci1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgY29tcG9uZW50IHRoYXQgb3ducyBvbmUgYnJvd3NlciBgV29ya2VyYCBidWlsdCBmcm9tIGJ1bmRsZWQgc291cmNlIGFuZCBjYWxscyBpdCB0aHJvdWdoIGEgdHlwZWQgcmVxdWVzdC9yZXNwb25zZVxuICogY2hhbm5lbC5cbiAqL1xuXG5pbXBvcnQgeyBub29wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuaW1wb3J0IHR5cGUge1xuICBTZXJpYWxpemVkV29ya2VyRXJyb3IsXG4gIFdvcmtlckFwaSxcbiAgV29ya2VyQXBpSGFuZGxlcnMsXG4gIFdvcmtlckNhbGxNZXNzYWdlLFxuICBXb3JrZXJDYW5jZWxNZXNzYWdlXG59IGZyb20gJy4uL3dvcmtlci1wcm90b2NvbC50cyc7XG5cbmltcG9ydCB7XG4gIGludm9rZVdvcmtlckhhbmRsZXIsXG4gIGlzV29ya2VyUmVzcG9uc2VNZXNzYWdlLFxuICB1bndyYXBUcmFuc2ZlcnJlZFZhbHVlLFxuICBXT1JLRVJfUFJPVE9DT0xcbn0gZnJvbSAnLi4vd29ya2VyLXByb3RvY29sLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgb2Yge0BsaW5rIFdvcmtlckNvbXBvbmVudC5jYWxsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDb21wb25lbnRDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSBjYWxsLiBUaGUgcmV0dXJuZWQgcHJvbWlzZSByZWplY3RzIHdpdGggdGhlIHNpZ25hbCdzIHJlYXNvbiBhdCBvbmNlLCBhbmQgdGhlIHdvcmtlcidzIGhhbmRsZXIgc2VlcyBpdHNcbiAgICogb3duIGB0aGlzLmFib3J0U2lnbmFsYCBhYm9ydGVkOyB3aGF0ZXZlciBpdCBhbnN3ZXJzIGFmdGVyd2FyZHMgaXMgZHJvcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIE9iamVjdHMgaW5zaWRlIHRoZSBhcmd1bWVudHMgdG8gdHJhbnNmZXIgcmF0aGVyIHRoYW4gY29weS4gVGhleSBhcmUgdW51c2FibGUgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyd2FyZHMuXG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zlcj86IHJlYWRvbmx5IFRyYW5zZmVyYWJsZVtdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgb2Yge0BsaW5rIFdvcmtlckNvbXBvbmVudH0uXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0aGUgd29ya2VyIGV4cG9zZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VEFwaSBleHRlbmRzIFdvcmtlckFwaTxUQXBpPj4ge1xuICAvKipcbiAgICogVGhlIHNhbWUgaGFuZGxlcnMgdGhlIHdvcmtlciBleHBvc2VzLCBydW4gb24gdGhlIG1haW4gdGhyZWFkIHdoZW4gbm8gYFdvcmtlcmAgY2FuIGJlIGNyZWF0ZWQuIFdpdGhvdXQgdGhlbSwgYVxuICAgKiBmYWlsdXJlIHRvIGNyZWF0ZSB0aGUgd29ya2VyIGZhaWxzIHRoZSBjb21wb25lbnQncyBsb2FkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFsbGJhY2tIYW5kbGVycz86IFdvcmtlckFwaUhhbmRsZXJzPFRBcGk+O1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2VyJ3MgbmFtZSwgc2hvd24gYnkgdGhlIGRldmVsb3BlciB0b29scy5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBidW5kbGVkIHdvcmtlciBzb3VyY2U6IHRoZSBzdHJpbmcgYSBgKi53b3JrZXIudHM/d29ya2VyLXNvdXJjZWAgaW1wb3J0IGdpdmVzIHdpdGhcbiAgICogYEBtbmFvdW1vdi9vYnNpZGlhbi1kZXYtdG9vbGtpdGAncyBgd29ya2Vyc2AgZmVhdHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgbmFtZXMgb2YgYSB7QGxpbmsgV29ya2VyQXBpfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtlck1ldGhvZDxUQXBpPiA9IEV4dHJhY3Q8a2V5b2YgVEFwaSwgc3RyaW5nPjtcblxuLyoqXG4gKiBUaGUgcmVzb2x2ZWQgcmVzdWx0IHR5cGUgb2YgYSB3b3JrZXIgbWV0aG9kLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVE1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtlck1ldGhvZFJlc3VsdDxUQXBpIGV4dGVuZHMgV29ya2VyQXBpPFRBcGk+LCBUTWV0aG9kIGV4dGVuZHMgV29ya2VyTWV0aG9kPFRBcGk+PiA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTxUQXBpW1RNZXRob2RdPj47XG5cbmludGVyZmFjZSBQZW5kaW5nQ2FsbCB7XG4gIHJlYWRvbmx5IHJlamVjdDogKHJlYXNvbjogRXJyb3IpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHJlc29sdmU6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgZXJyb3IgYSBjYWxsIHJlamVjdHMgd2l0aCB3aGVuIHRoZSB3b3JrZXIncyBoYW5kbGVyIGZhaWxlZC4gSXQgY2FycmllcyB0aGUgd29ya2VyLXNpZGUgbmFtZSwgbWVzc2FnZSBhbmQgc3RhY2ssXG4gKiBiZWNhdXNlIGFuIGBFcnJvcmAgbG9zZXMgaXRzIGNsYXNzIGFjcm9zcyB0aGUgd29ya2VyIGJvdW5kYXJ5LlxuICovXG5leHBvcnQgY2xhc3MgV29ya2VyQ2FsbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVycm9yIHRocm93biBpbiB0aGUgd29ya2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbW90ZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIG9mIHRoZSBlcnJvciB0aHJvd24gaW4gdGhlIHdvcmtlciwgd2hlbiB0aGVyZSB3YXMgb25lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbW90ZVN0YWNrOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgc2VyaWFsaXplZCB3b3JrZXItc2lkZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihlcnJvcjogU2VyaWFsaXplZFdvcmtlckVycm9yKSB7XG4gICAgc3VwZXIoZXJyb3IubWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1dvcmtlckNhbGxFcnJvcic7XG4gICAgdGhpcy5yZW1vdGVOYW1lID0gZXJyb3IubmFtZTtcbiAgICB0aGlzLnJlbW90ZVN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gIH1cbn1cblxuLyoqXG4gKiBPd25zIG9uZSBgV29ya2VyYCBmb3IgdGhlIGNvbXBvbmVudCdzIGxpZmV0aW1lLlxuICpcbiAqIE9uIGxvYWQgaXQgdHVybnMgdGhlIGJ1bmRsZWQgc291cmNlIGludG8gYSBCbG9iIFVSTCBhbmQgc3RhcnRzIHRoZSB3b3JrZXI7IG9uIHVubG9hZCBpdCB0ZXJtaW5hdGVzIHRoZSB3b3JrZXIsXG4gKiByZXZva2VzIHRoZSBVUkwgYW5kIHJlamVjdHMgZXZlcnkgcGVuZGluZyBjYWxsLiBBZGQgaXQgYXMgYSBjaGlsZCBvZiB0aGUgcGx1Z2luIChvciBvZiBhbnkgY29tcG9uZW50KSwgc28gdGhlIHdvcmtlclxuICogbmV2ZXIgb3V0bGl2ZXMgd2hhdCB1c2VzIGl0LlxuICpcbiAqIFRoZSB3b3JrZXIgZW50cnkgcG9pbnQgY2FsbHMgYGV4cG9zZVdvcmtlckFwaWAgZnJvbSBgQG1uYW91bW92L29ic2lkaWFuLWxpYi93b3JrZXItcHJvdG9jb2xgLCBhbmRcbiAqIHtAbGluayBXb3JrZXJDb21wb25lbnQuY2FsbH0gcmVhY2hlcyBpdHMgaGFuZGxlcnMgYnkgbmFtZSwgdHlwZWQgYnkgYFRBcGlgLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdGhlIHdvcmtlciBleHBvc2VzLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2VyQ29tcG9uZW50PFRBcGkgZXh0ZW5kcyBXb3JrZXJBcGk8VEFwaT4+IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogV2hldGhlciBjYWxscyBydW4gb24gdGhlIG1haW4gdGhyZWFkLCBiZWNhdXNlIG5vIGBXb3JrZXJgIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGZhbGxiYWNrIGhhbmRsZXJzIHdlcmUgZ2l2ZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZhbGxiYWNrIGlzIGluIHVzZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNVc2luZ0ZhbGxiYWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrSGFuZGxlcnMgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjYWxscyB0aGF0IGhhdmUgbm90IHNldHRsZWQgeWV0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY291bnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlbmRpbmdDYWxsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0NhbGxDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGFuZGxlcnMgdG8gcnVuIG9uIHRoZSBtYWluIHRocmVhZCB3aGVuIG5vIGBXb3JrZXJgIGNhbiBiZSBjcmVhdGVkLCBvciBgbnVsbGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFsbGJhY2tIYW5kbGVyczogbnVsbCB8IFdvcmtlckFwaUhhbmRsZXJzPFRBcGk+O1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2VyJ3MgbmFtZSwgb3IgYG51bGxgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBidW5kbGVkIHdvcmtlciBzb3VyY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfcGVuZGluZ0NhbGxDb3VudCA9IDA7XG4gIHByaXZhdGUgYWN0aXZlRmFsbGJhY2tIYW5kbGVyczogbnVsbCB8IFdvcmtlckFwaUhhbmRsZXJzPFRBcGk+ID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0Q2FsbElkID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nQ2FsbHMgPSBuZXcgTWFwPG51bWJlciwgUGVuZGluZ0NhbGw+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlIHJlbmRlcmVyJ3MgV2ViIFdvcmtlciwgbm90IE5vZGUncy5cbiAgcHJpdmF0ZSB3b3JrZXI6IG51bGwgfCBXb3JrZXIgPSBudWxsO1xuICBwcml2YXRlIHdvcmtlclVybDogbnVsbCB8IHN0cmluZyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogV29ya2VyQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VEFwaT4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZmFsbGJhY2tIYW5kbGVycyA9IHBhcmFtcy5mYWxsYmFja0hhbmRsZXJzID8/IG51bGw7XG4gICAgdGhpcy5uYW1lID0gcGFyYW1zLm5hbWUgPz8gbnVsbDtcbiAgICB0aGlzLnNvdXJjZSA9IHBhcmFtcy5zb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgYSB3b3JrZXIgbWV0aG9kLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRNZXRob2QgLSBUaGUgbWV0aG9kLlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbEFyZ3VtZW50cyAtIFRoZSBtZXRob2QncyBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNhbGwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG1ldGhvZCdzIHJlc3VsdC4gUmVqZWN0cyB3aXRoIGEge0BsaW5rIFdvcmtlckNhbGxFcnJvcn0gd2hlbiB0aGUgaGFuZGxlciBmYWlsZWQsIHdpdGggdGhlIGFib3J0IHJlYXNvblxuICAgKiAgIHdoZW4gdGhlIGNhbGwgd2FzIGNhbmNlbGxlZCwgYW5kIHdpdGggYW4gYEVycm9yYCB3aGVuIHRoZSB3b3JrZXIgZmFpbGVkIG9yIHRoZSBjb21wb25lbnQgdW5sb2FkZWQgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2FsbDxUTWV0aG9kIGV4dGVuZHMgV29ya2VyTWV0aG9kPFRBcGk+PihcbiAgICBtZXRob2Q6IFRNZXRob2QsXG4gICAgY2FsbEFyZ3VtZW50czogUGFyYW1ldGVyczxUQXBpW1RNZXRob2RdPixcbiAgICBvcHRpb25zOiBXb3JrZXJDb21wb25lbnRDYWxsT3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8V29ya2VyTWV0aG9kUmVzdWx0PFRBcGksIFRNZXRob2Q+PiB7XG4gICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHdvcmtlciBjb21wb25lbnQgaXMgbm90IGxvYWRlZCcpO1xuICAgIH1cbiAgICBjb25zdCBhYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWwgPz8gbmV3IEFib3J0Q29udHJvbGxlcigpLnNpZ25hbDtcbiAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgdGhpcy5fcGVuZGluZ0NhbGxDb3VudCsrO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFjdGl2ZUZhbGxiYWNrSGFuZGxlcnMgPT09IG51bGxcbiAgICAgICAgPyBhd2FpdCB0aGlzLmNhbGxXb3JrZXIobWV0aG9kLCBjYWxsQXJndW1lbnRzLCBhYm9ydFNpZ25hbCwgb3B0aW9ucy50cmFuc2ZlciA/PyBbXSlcbiAgICAgICAgOiBhd2FpdCBjYWxsRmFsbGJhY2sodGhpcy5hY3RpdmVGYWxsYmFja0hhbmRsZXJzLCBtZXRob2QsIGNhbGxBcmd1bWVudHMsIGFib3J0U2lnbmFsKTtcbiAgICAgIHJldHVybiByZXN1bHQgYXMgV29ya2VyTWV0aG9kUmVzdWx0PFRBcGksIFRNZXRob2Q+O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9wZW5kaW5nQ2FsbENvdW50LS07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgd29ya2VyLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdGFydFdvcmtlcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnN0b3BXb3JrZXIoKTtcbiAgICAgIGlmICh0aGlzLmZhbGxiYWNrSGFuZGxlcnMgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUZhbGxiYWNrSGFuZGxlcnMgPSB0aGlzLmZhbGxiYWNrSGFuZGxlcnM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdGhlIHdvcmtlciBhbmQgcmVqZWN0cyB0aGUgcGVuZGluZyBjYWxscy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICAgIHRoaXMuc3RvcFdvcmtlcigpO1xuICAgIHRoaXMucmVqZWN0QWxsKG5ldyBFcnJvcignVGhlIHdvcmtlciBjb21wb25lbnQgd2FzIHVubG9hZGVkJykpO1xuICAgIHRoaXMuYWN0aXZlRmFsbGJhY2tIYW5kbGVycyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhbGxXb3JrZXIoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgY2FsbEFyZ3VtZW50czogcmVhZG9ubHkgdW5rbm93bltdLFxuICAgIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgICB0cmFuc2ZlcjogcmVhZG9ubHkgVHJhbnNmZXJhYmxlW11cbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gQSBsb2FkZWQgY29tcG9uZW50IHdpdGhvdXQgZmFsbGJhY2sgaGFuZGxlcnMgaW4gdXNlIGFsd2F5cyBob2xkcyBpdHMgd29ya2VyLlxuICAgIGNvbnN0IHdvcmtlciA9IGVuc3VyZU5vbk51bGxhYmxlKHRoaXMud29ya2VyKTtcblxuICAgIHRoaXMubGFzdENhbGxJZCsrO1xuICAgIGNvbnN0IGlkID0gdGhpcy5sYXN0Q2FsbElkO1xuICAgIGxldCBvbkFib3J0ID0gbm9vcDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8dW5rbm93bj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBvbkFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2FsbHMuZGVsZXRlKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjYW5jZWxNZXNzYWdlOiBXb3JrZXJDYW5jZWxNZXNzYWdlID0geyBpZCwga2luZDogJ2NhbmNlbCcsIHByb3RvY29sOiBXT1JLRVJfUFJPVE9DT0wgfTtcbiAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoY2FuY2VsTWVzc2FnZSk7XG4gICAgICAgICAgcmVqZWN0KGdldEFib3J0UmVhc29uKGFib3J0U2lnbmFsKSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGVuZGluZ0NhbGxzLnNldChpZCwgeyByZWplY3QsIHJlc29sdmUgfSk7XG4gICAgICAgIGNvbnN0IGNhbGxNZXNzYWdlOiBXb3JrZXJDYWxsTWVzc2FnZSA9IHsgYXJndW1lbnRzOiBjYWxsQXJndW1lbnRzLCBpZCwga2luZDogJ2NhbGwnLCBtZXRob2QsIHByb3RvY29sOiBXT1JLRVJfUFJPVE9DT0wgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoY2FsbE1lc3NhZ2UsIFsuLi50cmFuc2Zlcl0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMucGVuZGluZ0NhbGxzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgcmVqZWN0KHRvRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZSByZW5kZXJlcidzIFdlYiBFcnJvckV2ZW50LCBub3QgTm9kZSdzLlxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUVycm9yID0gKCRldmVudDogRXJyb3JFdmVudCk6IHZvaWQgPT4ge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVqZWN0QWxsKG5ldyBFcnJvcihgVGhlIHdvcmtlciBmYWlsZWQ6ICR7JGV2ZW50Lm1lc3NhZ2UgfHwgJ3Vua25vd24gZXJyb3InfWApKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZU1lc3NhZ2UgPSAoJGV2ZW50OiBNZXNzYWdlRXZlbnQ8dW5rbm93bj4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gJGV2ZW50LmRhdGE7XG4gICAgaWYgKCFpc1dvcmtlclJlc3BvbnNlTWVzc2FnZShtZXNzYWdlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nQ2FsbCA9IHRoaXMucGVuZGluZ0NhbGxzLmdldChtZXNzYWdlLmlkKTtcbiAgICBpZiAoIXBlbmRpbmdDYWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0NhbGxzLmRlbGV0ZShtZXNzYWdlLmlkKTtcbiAgICBpZiAobWVzc2FnZS5raW5kID09PSAncmVzdWx0Jykge1xuICAgICAgcGVuZGluZ0NhbGwucmVzb2x2ZShtZXNzYWdlLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0NhbGwucmVqZWN0KG5ldyBXb3JrZXJDYWxsRXJyb3IobWVzc2FnZS5lcnJvcikpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZU1lc3NhZ2VFcnJvciA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLnJlamVjdEFsbChuZXcgRXJyb3IoJ1RoZSB3b3JrZXIgc2VudCBhIG1lc3NhZ2UgdGhhdCBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkJykpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVqZWN0QWxsKHJlYXNvbjogRXJyb3IpOiB2b2lkIHtcbiAgICBjb25zdCBwZW5kaW5nQ2FsbHMgPSBbLi4udGhpcy5wZW5kaW5nQ2FsbHMudmFsdWVzKCldO1xuICAgIHRoaXMucGVuZGluZ0NhbGxzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nQ2FsbCBvZiBwZW5kaW5nQ2FsbHMpIHtcbiAgICAgIHBlbmRpbmdDYWxsLnJlamVjdChyZWFzb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmV2b2tlV29ya2VyVXJsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndvcmtlclVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLndvcmtlclVybCk7XG4gICAgdGhpcy53b3JrZXJVcmwgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFdvcmtlcigpOiB2b2lkIHtcbiAgICB0aGlzLndvcmtlclVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0aGlzLnNvdXJjZV0sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSkpO1xuICAgIGNvbnN0IHdvcmtlck9wdGlvbnM6IFdvcmtlck9wdGlvbnMgPSB0aGlzLm5hbWUgPT09IG51bGwgPyB7fSA6IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IHdpbmRvdy5Xb3JrZXIodGhpcy53b3JrZXJVcmwsIHdvcmtlck9wdGlvbnMpO1xuICAgIHRoaXMud29ya2VyID0gd29ya2VyO1xuICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5oYW5kbGVNZXNzYWdlKTtcbiAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZWVycm9yJywgdGhpcy5oYW5kbGVNZXNzYWdlRXJyb3IpO1xuICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuaGFuZGxlRXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wV29ya2VyKCk6IHZvaWQge1xuICAgIHRoaXMudGVybWluYXRlV29ya2VyKCk7XG4gICAgdGhpcy5yZXZva2VXb3JrZXJVcmwoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVybWluYXRlV29ya2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53b3JrZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy53b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuaGFuZGxlTWVzc2FnZSk7XG4gICAgdGhpcy53b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZWVycm9yJywgdGhpcy5oYW5kbGVNZXNzYWdlRXJyb3IpO1xuICAgIHRoaXMud29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5oYW5kbGVFcnJvcik7XG4gICAgdGhpcy53b3JrZXIudGVybWluYXRlKCk7XG4gICAgdGhpcy53b3JrZXIgPSBudWxsO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxGYWxsYmFjayhcbiAgaGFuZGxlcnM6IG9iamVjdCxcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIGNhbGxBcmd1bWVudHM6IHJlYWRvbmx5IHVua25vd25bXSxcbiAgY2FsbGVyU2lnbmFsOiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgZnVuY3Rpb24gb25BYm9ydCgpOiB2b2lkIHtcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoY2FsbGVyU2lnbmFsLnJlYXNvbik7XG4gIH1cbiAgY2FsbGVyU2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IGhhbmRsZXJQcm9taXNlID0gaW52b2tlV29ya2VySGFuZGxlcihoYW5kbGVycywgbWV0aG9kLCBjYWxsQXJndW1lbnRzLCB7IGFib3J0U2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsIH0pO1xuICAgIC8vIFRoZSByYWNlIGJlbG93IG1heSBzZXR0bGUgb24gdGhlIGFib3J0IGZpcnN0OyB0aGUgaGFuZGxlcidzIG93biBsYXRlciByZWplY3Rpb24gaXMgdGhlbiBub2JvZHkncyB0byByZXBvcnQuXG4gICAgaGFuZGxlclByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgY29uc3QgYWJvcnRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICByZWplY3QoZ2V0QWJvcnRSZWFzb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCkpO1xuICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB1bndyYXBUcmFuc2ZlcnJlZFZhbHVlKGF3YWl0IFByb21pc2UucmFjZShbaGFuZGxlclByb21pc2UsIGFib3J0UHJvbWlzZV0pKS52YWx1ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjYWxsZXJTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBYm9ydFJlYXNvbihhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBFcnJvciB7XG4gIHJldHVybiB0b0Vycm9yKGFib3J0U2lnbmFsLnJlYXNvbik7XG59XG5cbmZ1bmN0aW9uIHRvRXJyb3IocmVhc29uOiB1bmtub3duKTogRXJyb3Ige1xuICByZXR1cm4gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlYXNvbikpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -0,0 +1,156 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * A component that owns one browser `Worker` built from bundled source and calls it through a typed request/response
7
+ * channel.
8
+ */
9
+ import type { SerializedWorkerError, WorkerApi, WorkerApiHandlers } from '../worker-protocol.cjs';
10
+ import { ComponentEx } from './component-ex.cjs';
11
+ /**
12
+ * Options of {@link WorkerComponent.call}.
13
+ */
14
+ export interface WorkerComponentCallOptions {
15
+ /**
16
+ * Cancels the call. The returned promise rejects with the signal's reason at once, and the worker's handler sees its
17
+ * own `this.abortSignal` aborted; whatever it answers afterwards is dropped.
18
+ */
19
+ readonly abortSignal?: AbortSignal;
20
+ /**
21
+ * Objects inside the arguments to transfer rather than copy. They are unusable on the main thread afterwards.
22
+ */
23
+ readonly transfer?: readonly Transferable[];
24
+ }
25
+ /**
26
+ * Parameters of {@link WorkerComponent}.
27
+ *
28
+ * @typeParam TApi - The API the worker exposes.
29
+ */
30
+ export interface WorkerComponentConstructorParams<TApi extends WorkerApi<TApi>> {
31
+ /**
32
+ * The same handlers the worker exposes, run on the main thread when no `Worker` can be created. Without them, a
33
+ * failure to create the worker fails the component's load.
34
+ */
35
+ readonly fallbackHandlers?: WorkerApiHandlers<TApi>;
36
+ /**
37
+ * The worker's name, shown by the developer tools.
38
+ */
39
+ readonly name?: string;
40
+ /**
41
+ * The bundled worker source: the string a `*.worker.ts?worker-source` import gives with
42
+ * `@mnaoumov/obsidian-dev-toolkit`'s `workers` feature.
43
+ */
44
+ readonly source: string;
45
+ }
46
+ /**
47
+ * The method names of a {@link WorkerApi}.
48
+ *
49
+ * @typeParam TApi - The API type.
50
+ */
51
+ export type WorkerMethod<TApi> = Extract<keyof TApi, string>;
52
+ /**
53
+ * The resolved result type of a worker method.
54
+ *
55
+ * @typeParam TApi - The API type.
56
+ * @typeParam TMethod - The method.
57
+ */
58
+ export type WorkerMethodResult<TApi extends WorkerApi<TApi>, TMethod extends WorkerMethod<TApi>> = Awaited<ReturnType<TApi[TMethod]>>;
59
+ /**
60
+ * The error a call rejects with when the worker's handler failed. It carries the worker-side name, message and stack,
61
+ * because an `Error` loses its class across the worker boundary.
62
+ */
63
+ export declare class WorkerCallError extends Error {
64
+ /**
65
+ * The name of the error thrown in the worker.
66
+ */
67
+ readonly remoteName: string;
68
+ /**
69
+ * The stack of the error thrown in the worker, when there was one.
70
+ */
71
+ readonly remoteStack: string | undefined;
72
+ /**
73
+ * Creates the error.
74
+ *
75
+ * @param error - The serialized worker-side error.
76
+ */
77
+ constructor(error: SerializedWorkerError);
78
+ }
79
+ /**
80
+ * Owns one `Worker` for the component's lifetime.
81
+ *
82
+ * On load it turns the bundled source into a Blob URL and starts the worker; on unload it terminates the worker,
83
+ * revokes the URL and rejects every pending call. Add it as a child of the plugin (or of any component), so the worker
84
+ * never outlives what uses it.
85
+ *
86
+ * The worker entry point calls `exposeWorkerApi` from `@mnaoumov/obsidian-lib/worker-protocol`, and
87
+ * {@link WorkerComponent.call} reaches its handlers by name, typed by `TApi`.
88
+ *
89
+ * @typeParam TApi - The API the worker exposes.
90
+ */
91
+ export declare class WorkerComponent<TApi extends WorkerApi<TApi>> extends ComponentEx {
92
+ /**
93
+ * Whether calls run on the main thread, because no `Worker` could be created and fallback handlers were given.
94
+ *
95
+ * @returns Whether the fallback is in use.
96
+ */
97
+ get isUsingFallback(): boolean;
98
+ /**
99
+ * The number of calls that have not settled yet.
100
+ *
101
+ * @returns The count.
102
+ */
103
+ get pendingCallCount(): number;
104
+ /**
105
+ * The handlers to run on the main thread when no `Worker` can be created, or `null`.
106
+ */
107
+ protected readonly fallbackHandlers: null | WorkerApiHandlers<TApi>;
108
+ /**
109
+ * The worker's name, or `null`.
110
+ */
111
+ protected readonly name: null | string;
112
+ /**
113
+ * The bundled worker source.
114
+ */
115
+ protected readonly source: string;
116
+ private _pendingCallCount;
117
+ private activeFallbackHandlers;
118
+ private lastCallId;
119
+ private readonly pendingCalls;
120
+ private worker;
121
+ private workerUrl;
122
+ /**
123
+ * Creates the component.
124
+ *
125
+ * @param params - The parameters.
126
+ */
127
+ constructor(params: WorkerComponentConstructorParams<TApi>);
128
+ /**
129
+ * Calls a worker method.
130
+ *
131
+ * @typeParam TMethod - The method.
132
+ * @param method - The method name.
133
+ * @param callArguments - The method's arguments.
134
+ * @param options - The call options.
135
+ * @returns The method's result. Rejects with a {@link WorkerCallError} when the handler failed, with the abort reason
136
+ * when the call was cancelled, and with an `Error` when the worker failed or the component unloaded first.
137
+ */
138
+ call<TMethod extends WorkerMethod<TApi>>(method: TMethod, callArguments: Parameters<TApi[TMethod]>, options?: WorkerComponentCallOptions): Promise<WorkerMethodResult<TApi, TMethod>>;
139
+ /**
140
+ * Starts the worker.
141
+ */
142
+ onload(): void;
143
+ /**
144
+ * Terminates the worker and rejects the pending calls.
145
+ */
146
+ onunload(): void;
147
+ private callWorker;
148
+ private readonly handleError;
149
+ private readonly handleMessage;
150
+ private readonly handleMessageError;
151
+ private rejectAll;
152
+ private revokeWorkerUrl;
153
+ private startWorker;
154
+ private stopWorker;
155
+ private terminateWorker;
156
+ }