@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
@@ -5,6 +5,33 @@
5
5
  *
6
6
  * Record-based device-local persistence, isolated by vault, plugin and store.
7
7
  */
8
+ /**
9
+ * Why a {@link LocalDataStore} connection stopped accepting operations.
10
+ */
11
+ export declare enum LocalDataStoreCloseReason {
12
+ /**
13
+ * The browser closed the connection on its own, for example because the database was deleted or the storage was
14
+ * cleared.
15
+ */
16
+ ClosedByBrowser = "closedByBrowser",
17
+ /**
18
+ * The owner called {@link LocalDataStore.close}, usually because it unloaded.
19
+ */
20
+ ClosedByOwner = "closedByOwner",
21
+ /**
22
+ * Another connection asked for a newer schema version, so this one closed to let it upgrade.
23
+ */
24
+ VersionChange = "versionChange"
25
+ }
26
+ /**
27
+ * Options of a {@link LocalDataStoreClosedError}.
28
+ */
29
+ export interface LocalDataStoreClosedErrorConstructorOptions {
30
+ /**
31
+ * The IndexedDB error the closed-store error replaces.
32
+ */
33
+ readonly cause?: unknown;
34
+ }
8
35
  /**
9
36
  * Atomic mutations of a local record store.
10
37
  */
@@ -54,6 +81,14 @@ export interface LocalDataStoreOpenParams {
54
81
  */
55
82
  export declare class LocalDataStore {
56
83
  private readonly database;
84
+ /**
85
+ * Whether the connection is closed or closing, so no further operation can run.
86
+ *
87
+ * @returns `true` once {@link LocalDataStore.close} was called, or the browser or a schema upgrade closed the
88
+ * connection.
89
+ */
90
+ get isClosed(): boolean;
91
+ private closeReason;
57
92
  private constructor();
58
93
  /**
59
94
  * Opens an isolated database. Writes resolve only once their transaction commits.
@@ -69,7 +104,8 @@ export declare class LocalDataStore {
69
104
  */
70
105
  clear(): Promise<void>;
71
106
  /**
72
- * Closes this connection without deleting its records.
107
+ * Closes this connection without deleting its records. Every later operation rejects with
108
+ * {@link LocalDataStoreClosedError}. Closing twice is harmless.
73
109
  */
74
110
  close(): void;
75
111
  /**
@@ -123,5 +159,26 @@ export declare class LocalDataStore {
123
159
  * @returns A promise that resolves after commit.
124
160
  */
125
161
  set(key: string, value: unknown): Promise<void>;
162
+ private markClosed;
126
163
  private run;
164
+ private toClosedError;
165
+ }
166
+ /**
167
+ * Thrown by every operation of a {@link LocalDataStore} whose connection is closed or closing.
168
+ *
169
+ * It replaces IndexedDB's raw `InvalidStateError` ("The database connection is closing"), which names neither the
170
+ * store nor the cause. The usual cause is work that outlived its owner: a debounced or scheduled save that runs after
171
+ * the plugin unloaded and closed its store.
172
+ */
173
+ export declare class LocalDataStoreClosedError extends Error {
174
+ readonly databaseName: string;
175
+ readonly reason: LocalDataStoreCloseReason;
176
+ /**
177
+ * Creates a {@link LocalDataStoreClosedError}.
178
+ *
179
+ * @param databaseName - The IndexedDB database name of the store.
180
+ * @param reason - Why the connection closed.
181
+ * @param options - The IndexedDB error this one replaces, as its `cause`.
182
+ */
183
+ constructor(databaseName: string, reason: LocalDataStoreCloseReason, options?: LocalDataStoreClosedErrorConstructorOptions);
127
184
  }
@@ -3,11 +3,34 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
+ var LocalDataStoreCloseReason = /* @__PURE__ */ ((LocalDataStoreCloseReason2) => {
7
+ LocalDataStoreCloseReason2["ClosedByBrowser"] = "closedByBrowser";
8
+ LocalDataStoreCloseReason2["ClosedByOwner"] = "closedByOwner";
9
+ LocalDataStoreCloseReason2["VersionChange"] = "versionChange";
10
+ return LocalDataStoreCloseReason2;
11
+ })(LocalDataStoreCloseReason || {});
6
12
  class LocalDataStore {
7
13
  constructor(database) {
8
14
  this.database = database;
15
+ database.onversionchange = () => {
16
+ this.markClosed("versionChange" /* VersionChange */);
17
+ database.close();
18
+ };
19
+ database.addEventListener("close", () => {
20
+ this.markClosed("closedByBrowser" /* ClosedByBrowser */);
21
+ });
9
22
  }
10
23
  database;
24
+ /**
25
+ * Whether the connection is closed or closing, so no further operation can run.
26
+ *
27
+ * @returns `true` once {@link LocalDataStore.close} was called, or the browser or a schema upgrade closed the
28
+ * connection.
29
+ */
30
+ get isClosed() {
31
+ return this.closeReason !== null;
32
+ }
33
+ closeReason = null;
11
34
  /**
12
35
  * Opens an isolated database. Writes resolve only once their transaction commits.
13
36
  *
@@ -25,11 +48,7 @@ class LocalDataStore {
25
48
  reject(new Error("Could not open local data store", { cause: request.error }));
26
49
  });
27
50
  request.onsuccess = () => {
28
- const database = request.result;
29
- database.onversionchange = () => {
30
- database.close();
31
- };
32
- resolve(new LocalDataStore(database));
51
+ resolve(new LocalDataStore(request.result));
33
52
  };
34
53
  });
35
54
  }
@@ -42,9 +61,11 @@ class LocalDataStore {
42
61
  await this.run("readwrite", (store) => store.clear());
43
62
  }
44
63
  /**
45
- * Closes this connection without deleting its records.
64
+ * Closes this connection without deleting its records. Every later operation rejects with
65
+ * {@link LocalDataStoreClosedError}. Closing twice is harmless.
46
66
  */
47
67
  close() {
68
+ this.markClosed("closedByOwner" /* ClosedByOwner */);
48
69
  this.database.close();
49
70
  }
50
71
  /**
@@ -146,9 +167,22 @@ class LocalDataStore {
146
167
  async set(key, value) {
147
168
  await this.run("readwrite", (store) => store.put(value, key));
148
169
  }
170
+ markClosed(reason) {
171
+ this.closeReason ??= reason;
172
+ }
173
+ // eslint-disable-next-line typescript-dev-toolkit/no-undefined-return-type -- Mirrors IndexedDB: a missing record reads as `undefined`, which a stored `null` must stay distinct from.
149
174
  async run(mode, action) {
150
175
  return await new Promise((resolve, reject) => {
151
- const transaction = this.database.transaction("records", mode);
176
+ let transaction;
177
+ try {
178
+ if (this.closeReason !== null) {
179
+ throw new LocalDataStoreClosedError(this.database.name, this.closeReason);
180
+ }
181
+ transaction = this.database.transaction("records", mode);
182
+ } catch (error) {
183
+ reject(this.toClosedError(error));
184
+ return;
185
+ }
152
186
  let request;
153
187
  try {
154
188
  request = action(transaction.objectStore("records"));
@@ -165,8 +199,36 @@ class LocalDataStore {
165
199
  });
166
200
  });
167
201
  }
202
+ toClosedError(error) {
203
+ if (error instanceof LocalDataStoreClosedError) {
204
+ return error;
205
+ }
206
+ if (error instanceof Error && error.name === "InvalidStateError") {
207
+ return new LocalDataStoreClosedError(this.database.name, this.closeReason ?? "closedByBrowser" /* ClosedByBrowser */, { cause: error });
208
+ }
209
+ return error instanceof Error ? error : new Error("Local data-store transaction failed", { cause: error });
210
+ }
211
+ }
212
+ class LocalDataStoreClosedError extends Error {
213
+ /**
214
+ * Creates a {@link LocalDataStoreClosedError}.
215
+ *
216
+ * @param databaseName - The IndexedDB database name of the store.
217
+ * @param reason - Why the connection closed.
218
+ * @param options - The IndexedDB error this one replaces, as its `cause`.
219
+ */
220
+ constructor(databaseName, reason, options) {
221
+ super(`The local data store "${databaseName}" is closed (${reason}), so the operation was not run.`, options);
222
+ this.databaseName = databaseName;
223
+ this.reason = reason;
224
+ this.name = "LocalDataStoreClosedError";
225
+ }
226
+ databaseName;
227
+ reason;
168
228
  }
169
229
  export {
170
- LocalDataStore
230
+ LocalDataStore,
231
+ LocalDataStoreCloseReason,
232
+ LocalDataStoreClosedError
171
233
  };
172
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2xvY2FsLWRhdGEtc3RvcmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlY29yZC1iYXNlZCBkZXZpY2UtbG9jYWwgcGVyc2lzdGVuY2UsIGlzb2xhdGVkIGJ5IHZhdWx0LCBwbHVnaW4gYW5kIHN0b3JlLlxuICovXG5cbi8qKlxuICogQXRvbWljIG11dGF0aW9ucyBvZiBhIGxvY2FsIHJlY29yZCBzdG9yZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbERhdGFTdG9yZUNvbW1pdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBLZXkvdmFsdWUgcGFpcnMgdG8gd3JpdGUuXG4gICAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSAocmVhZG9ubHkgW3N0cmluZywgdW5rbm93bl0pW107XG4gIC8qKlxuICAgKiBLZXlzIHJlbW92ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIHdyaXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZEtleXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIG9mIHRoaXMgc3RvcmUgZmlyc3QsIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSB3cml0ZXMuXG4gICAqXG4gICAqIEVpdGhlciB0aGUgc3RvcmUgaXMgcmVwbGFjZWQgYnkgYGVudHJpZXNgIGFzIGEgd2hvbGUsIG9yLCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBmYWlscywgZXZlcnkgcHJldmlvdXMgcmVjb3JkIHN1cnZpdmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRDbGVhcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Igb3BlbmluZyBhIGxvY2FsIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsRGF0YVN0b3JlT3BlblBhcmFtcyB7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgaW1wbGVtZW50YXRpb24sIGluamVjdGFibGUgZm9yIHRlc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFjdG9yeT86IElEQkZhY3Rvcnk7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgbmFtZSBhbmQgc2NoZW1hIHZlcnNpb24gY2hvc2VuIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YWJsZSwgZGV2aWNlLWxvY2FsIHZhdWx0IGlkZW50aXR5OyBuZXZlciB0aGUgdmF1bHQgZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9jYWwgc3RvcmUgaG9sZHMgc3RydWN0dXJlZC1jbG9uZWFibGUgdmFsdWVzOyBpdCBuZXZlciB3cml0ZXMgdG8gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxEYXRhU3RvcmUge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YWJhc2U6IElEQkRhdGFiYXNlKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbiBpc29sYXRlZCBkYXRhYmFzZS4gV3JpdGVzIHJlc29sdmUgb25seSBvbmNlIHRoZWlyIHRyYW5zYWN0aW9uIGNvbW1pdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTdG9yZSBpZGVudGl0eSBhbmQgb3B0aW9uYWwgSW5kZXhlZERCIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgY29ubmVjdGVkIHN0b3JlOyBjbG9zZSBpdCB3aGVuIGl0cyBvd25lciB1bmxvYWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBvcGVuKHBhcmFtczogTG9jYWxEYXRhU3RvcmVPcGVuUGFyYW1zKTogUHJvbWlzZTxMb2NhbERhdGFTdG9yZT4ge1xuICAgIGNvbnN0IG5hbWUgPSBgb2JzaWRpYW4tbGliOiR7SlNPTi5zdHJpbmdpZnkoW3BhcmFtcy52YXVsdElkLCBwYXJhbXMucGx1Z2luSWQsIHBhcmFtcy5zdG9yZUlkXSl9YDtcbiAgICBjb25zdCByZXF1ZXN0ID0gKHBhcmFtcy5mYWN0b3J5ID8/IGluZGV4ZWREQikub3BlbihuYW1lLCAxKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcXVlc3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKCdyZWNvcmRzJyk7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IG9wZW4gbG9jYWwgZGF0YSBzdG9yZScsIHsgY2F1c2U6IHJlcXVlc3QuZXJyb3IgfSkpO1xuICAgICAgfSk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgZGF0YWJhc2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgZGF0YWJhc2Uub252ZXJzaW9uY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGRhdGFiYXNlLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlc29sdmUobmV3IExvY2FsRGF0YVN0b3JlKGRhdGFiYXNlKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIGluIHRoaXMgc3RvcmUgb25seS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmNsZWFyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIGNvbm5lY3Rpb24gd2l0aG91dCBkZWxldGluZyBpdHMgcmVjb3Jkcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFiYXNlLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyBzZXZlcmFsIHJlY29yZCBjaGFuZ2VzIGF0b21pY2FsbHkgd2l0aG91dCBzZXJpYWxpemluZyB0aGUgcmVzdCBvZiB0aGUgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBXcml0ZXMgYW5kIGRlbGV0aW9ucyBpbiBvbmUgdHJhbnNhY3Rpb24sIG9wdGlvbmFsbHkgYWZ0ZXIgY2xlYXJpbmcgdGhlIHN0b3JlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmx5IGFmdGVyIGFsbCBjaGFuZ2VzIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21taXQocGFyYW1zOiBMb2NhbERhdGFTdG9yZUNvbW1pdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgIGlmIChwYXJhbXMuc2hvdWxkQ2xlYXIpIHtcbiAgICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHBhcmFtcy5yZW1vdmVkS2V5cyA/PyBbXSkge1xuICAgICAgICBzdG9yZS5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhcmFtcy5lbnRyaWVzKSB7XG4gICAgICAgIHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICAgIH1cbiAgICAgIC8vIE5vIHJlcXVlc3QgdG8gcmVzb2x2ZSB3aXRoOiBhIGNsb3NpbmcgYHN0b3JlLmNvdW50KClgIHdvdWxkIHdhbGsgZXZlcnkgcmVjb3JkIG9mIHRoZSBzdG9yZSBvbiBlYWNoIGNvbW1pdC5cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcmVjb3JkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbGwgcmVjb3JkcyBpbiBrZXkgb3JkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIERldGFjaGVkIGtleS92YWx1ZSBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnRyaWVzKCk6IFByb21pc2U8W3N0cmluZywgdW5rbm93bl1bXT4ge1xuICAgIGNvbnN0IHJlY29yZHM6IFtzdHJpbmcsIHVua25vd25dW10gPSBbXTtcbiAgICAvLyBUd28gYnVsayByZWFkcyBpbiBvbmUgdHJhbnNhY3Rpb24gc2VlIHRoZSBzYW1lIHNuYXBzaG90IGluIHRoZSBzYW1lIGtleSBvcmRlciwgc28gdGhleSBwYWlyIHVwIGJ5IGluZGV4LlxuICAgIC8vIEEgY3Vyc29yIGRpc3BhdGNoZXMgb25lIGV2ZW50IHBlciByZWNvcmQgaW5zdGVhZDsgYXQgOTAsMDAwIHJlY29yZHMgaW4gT2JzaWRpYW4gaXQgdG9vayAxLjUgdG8gMiB0aW1lcyBhcyBsb25nLlxuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkb25seScsIChzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qga2V5c1JlcXVlc3QgPSBzdG9yZS5nZXRBbGxLZXlzKCk7XG4gICAgICBjb25zdCB2YWx1ZXNSZXF1ZXN0ID0gc3RvcmUuZ2V0QWxsKCk7XG4gICAgICB2YWx1ZXNSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGtleXNSZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdmFsdWVzUmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBrZXldIG9mIGtleXMuZW50cmllcygpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIGtleSBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKFtrZXksIHZhbHVlc1tpbmRleF1dKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB2YWx1ZXNSZXF1ZXN0O1xuICAgIH0pO1xuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBzaGFyZWQtc3RvcmUgb3BlcmF0aW9uIGFjcm9zcyBjb25uZWN0aW9ucywgd2luZG93cyBhbmQgYnVuZGxlZCBsaWJyYXJ5IGNvcGllcy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBXb3JrIHBlcmZvcm1lZCB3aGlsZSBob2xkaW5nIHRoaXMgZGF0YWJhc2UncyBXZWIgTG9jay5cbiAgICogQHJldHVybnMgVGhlIGNhbGxiYWNrIHJlc3VsdCBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhjbHVzaXZlPFQ+KGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy5uYXZpZ2F0b3IubG9ja3MucmVxdWVzdCh0aGlzLmRhdGFiYXNlLm5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHJlY29yZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkuXG4gICAqIEByZXR1cm5zIEl0cyB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuPHVua25vd24+KCdyZWFkb25seScsIChzdG9yZSkgPT4gc3RvcmUuZ2V0KGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgcmVjb3JkIG9uY2UsIGF0b21pY2FsbHkgYWNyb3NzIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdXNlZCBvbmx5IHdoZW4gdGhlIGtleSBpcyBhYnNlbnQuXG4gICAqIEByZXR1cm5zIFRoZSBleGlzdGluZyBvciBuZXdseSBjb21taXR0ZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T3JDcmVhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuPHVua25vd24+KCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoa2V5KTtcbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC5yZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH0pLnRoZW4oKGV4aXN0aW5nKSA9PiBleGlzdGluZyA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBleGlzdGluZyk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGEgc3RydWN0dXJlZC1jbG9uZWFibGUgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBSZWNvcmQga2V5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBwZXJzaXN0LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLnB1dCh2YWx1ZSwga2V5KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bjxUPihtb2RlOiBJREJUcmFuc2FjdGlvbk1vZGUsIGFjdGlvbjogKHN0b3JlOiBJREJPYmplY3RTdG9yZSkgPT4gSURCUmVxdWVzdDxUPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24oJ3JlY29yZHMnLCBtb2RlKTtcbiAgICAgIGxldCByZXF1ZXN0OiBJREJSZXF1ZXN0PFQ+IHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxdWVzdCA9IGFjdGlvbih0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgncmVjb3JkcycpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ0xvY2FsIGRhdGEtc3RvcmUgdHJhbnNhY3Rpb24gZmFpbGVkJywgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAvLyBBbiBhY3Rpb24gdGhhdCBpc3N1ZWQgbm8gcmVxdWVzdCBvZiBpdHMgb3duIHJlc29sdmVzIHdpdGggYHVuZGVmaW5lZGAgb25jZSBpdHMgd3JpdGVzIGNvbW1pdC5cbiAgICAgICAgcmVzb2x2ZShyZXF1ZXN0Py5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHRyYW5zYWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCk6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIHRyYW5zYWN0aW9uIGFib3J0ZWQnLCB7IGNhdXNlOiB0cmFuc2FjdGlvbi5lcnJvciB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUF3RE8sTUFBTSxlQUFlO0FBQUEsRUFDbEIsWUFBNkIsVUFBdUI7QUFBdkI7QUFBQSxFQUF3QjtBQUFBLEVBQXhCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRckMsYUFBb0IsS0FB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
234
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2xvY2FsLWRhdGEtc3RvcmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWNvcmQtYmFzZWQgZGV2aWNlLWxvY2FsIHBlcnNpc3RlbmNlLCBpc29sYXRlZCBieSB2YXVsdCwgcGx1Z2luIGFuZCBzdG9yZS5cbiAqL1xuXG4vKipcbiAqIFdoeSBhIHtAbGluayBMb2NhbERhdGFTdG9yZX0gY29ubmVjdGlvbiBzdG9wcGVkIGFjY2VwdGluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgZW51bSBMb2NhbERhdGFTdG9yZUNsb3NlUmVhc29uIHtcbiAgLyoqXG4gICAqIFRoZSBicm93c2VyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiBvbiBpdHMgb3duLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCBvciB0aGUgc3RvcmFnZSB3YXNcbiAgICogY2xlYXJlZC5cbiAgICovXG4gIENsb3NlZEJ5QnJvd3NlciA9ICdjbG9zZWRCeUJyb3dzZXInLFxuICAvKipcbiAgICogVGhlIG93bmVyIGNhbGxlZCB7QGxpbmsgTG9jYWxEYXRhU3RvcmUuY2xvc2V9LCB1c3VhbGx5IGJlY2F1c2UgaXQgdW5sb2FkZWQuXG4gICAqL1xuICBDbG9zZWRCeU93bmVyID0gJ2Nsb3NlZEJ5T3duZXInLFxuICAvKipcbiAgICogQW5vdGhlciBjb25uZWN0aW9uIGFza2VkIGZvciBhIG5ld2VyIHNjaGVtYSB2ZXJzaW9uLCBzbyB0aGlzIG9uZSBjbG9zZWQgdG8gbGV0IGl0IHVwZ3JhZGUuXG4gICAqL1xuICBWZXJzaW9uQ2hhbmdlID0gJ3ZlcnNpb25DaGFuZ2UnXG59XG5cbi8qKlxuICogT3B0aW9ucyBvZiBhIHtAbGluayBMb2NhbERhdGFTdG9yZUNsb3NlZEVycm9yfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbERhdGFTdG9yZUNsb3NlZEVycm9yQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBJbmRleGVkREIgZXJyb3IgdGhlIGNsb3NlZC1zdG9yZSBlcnJvciByZXBsYWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNhdXNlPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBBdG9taWMgbXV0YXRpb25zIG9mIGEgbG9jYWwgcmVjb3JkIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsRGF0YVN0b3JlQ29tbWl0UGFyYW1zIHtcbiAgLyoqXG4gICAqIEtleS92YWx1ZSBwYWlycyB0byB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IChyZWFkb25seSBbc3RyaW5nLCB1bmtub3duXSlbXTtcbiAgLyoqXG4gICAqIEtleXMgcmVtb3ZlZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcyB0aGUgd3JpdGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSByZW1vdmVkS2V5cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogRGVsZXRlcyBldmVyeSByZWNvcmQgb2YgdGhpcyBzdG9yZSBmaXJzdCwgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIHdyaXRlcy5cbiAgICpcbiAgICogRWl0aGVyIHRoZSBzdG9yZSBpcyByZXBsYWNlZCBieSBgZW50cmllc2AgYXMgYSB3aG9sZSwgb3IsIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGZhaWxzLCBldmVyeSBwcmV2aW91cyByZWNvcmQgc3Vydml2ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZENsZWFyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcGVuaW5nIGEgbG9jYWwgc3RvcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxEYXRhU3RvcmVPcGVuUGFyYW1zIHtcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBpbXBsZW1lbnRhdGlvbiwgaW5qZWN0YWJsZSBmb3IgdGVzdHMuXG4gICAqL1xuICByZWFkb25seSBmYWN0b3J5PzogSURCRmFjdG9yeTtcbiAgLyoqXG4gICAqIFBsdWdpbiBtYW5pZmVzdCBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdG9yZSBuYW1lIGFuZCBzY2hlbWEgdmVyc2lvbiBjaG9zZW4gYnkgdGhlIGNvbnN1bWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVJZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RhYmxlLCBkZXZpY2UtbG9jYWwgdmF1bHQgaWRlbnRpdHk7IG5ldmVyIHRoZSB2YXVsdCBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSB2YXVsdElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBsb2NhbCBzdG9yZSBob2xkcyBzdHJ1Y3R1cmVkLWNsb25lYWJsZSB2YWx1ZXM7IGl0IG5ldmVyIHdyaXRlcyB0byB0aGUgdmF1bHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbERhdGFTdG9yZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCBvciBjbG9zaW5nLCBzbyBubyBmdXJ0aGVyIG9wZXJhdGlvbiBjYW4gcnVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgb25jZSB7QGxpbmsgTG9jYWxEYXRhU3RvcmUuY2xvc2V9IHdhcyBjYWxsZWQsIG9yIHRoZSBicm93c2VyIG9yIGEgc2NoZW1hIHVwZ3JhZGUgY2xvc2VkIHRoZVxuICAgKiAgIGNvbm5lY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlUmVhc29uICE9PSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVJlYXNvbjogTG9jYWxEYXRhU3RvcmVDbG9zZVJlYXNvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkYXRhYmFzZTogSURCRGF0YWJhc2UpIHtcbiAgICBkYXRhYmFzZS5vbnZlcnNpb25jaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLm1hcmtDbG9zZWQoTG9jYWxEYXRhU3RvcmVDbG9zZVJlYXNvbi5WZXJzaW9uQ2hhbmdlKTtcbiAgICAgIGRhdGFiYXNlLmNsb3NlKCk7XG4gICAgfTtcbiAgICAvLyBGaXJlZCBvbmx5IHdoZW4gdGhlIGJyb3dzZXIgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGFibm9ybWFsbHksIG5ldmVyIGFmdGVyIGBjbG9zZSgpYC5cbiAgICBkYXRhYmFzZS5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMubWFya0Nsb3NlZChMb2NhbERhdGFTdG9yZUNsb3NlUmVhc29uLkNsb3NlZEJ5QnJvd3Nlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYW4gaXNvbGF0ZWQgZGF0YWJhc2UuIFdyaXRlcyByZXNvbHZlIG9ubHkgb25jZSB0aGVpciB0cmFuc2FjdGlvbiBjb21taXRzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gU3RvcmUgaWRlbnRpdHkgYW5kIG9wdGlvbmFsIEluZGV4ZWREQiBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGNvbm5lY3RlZCBzdG9yZTsgY2xvc2UgaXQgd2hlbiBpdHMgb3duZXIgdW5sb2Fkcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgb3BlbihwYXJhbXM6IExvY2FsRGF0YVN0b3JlT3BlblBhcmFtcyk6IFByb21pc2U8TG9jYWxEYXRhU3RvcmU+IHtcbiAgICBjb25zdCBuYW1lID0gYG9ic2lkaWFuLWxpYjoke0pTT04uc3RyaW5naWZ5KFtwYXJhbXMudmF1bHRJZCwgcGFyYW1zLnBsdWdpbklkLCBwYXJhbXMuc3RvcmVJZF0pfWA7XG4gICAgY29uc3QgcmVxdWVzdCA9IChwYXJhbXMuZmFjdG9yeSA/PyBpbmRleGVkREIpLm9wZW4obmFtZSwgMSk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICByZXF1ZXN0LnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSgncmVjb3JkcycpO1xuICAgICAgfTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBvcGVuIGxvY2FsIGRhdGEgc3RvcmUnLCB7IGNhdXNlOiByZXF1ZXN0LmVycm9yIH0pKTtcbiAgICAgIH0pO1xuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUobmV3IExvY2FsRGF0YVN0b3JlKHJlcXVlc3QucmVzdWx0KSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIGluIHRoaXMgc3RvcmUgb25seS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmNsZWFyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIGNvbm5lY3Rpb24gd2l0aG91dCBkZWxldGluZyBpdHMgcmVjb3Jkcy4gRXZlcnkgbGF0ZXIgb3BlcmF0aW9uIHJlamVjdHMgd2l0aFxuICAgKiB7QGxpbmsgTG9jYWxEYXRhU3RvcmVDbG9zZWRFcnJvcn0uIENsb3NpbmcgdHdpY2UgaXMgaGFybWxlc3MuXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQ2xvc2VkKExvY2FsRGF0YVN0b3JlQ2xvc2VSZWFzb24uQ2xvc2VkQnlPd25lcik7XG4gICAgdGhpcy5kYXRhYmFzZS5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdHMgc2V2ZXJhbCByZWNvcmQgY2hhbmdlcyBhdG9taWNhbGx5IHdpdGhvdXQgc2VyaWFsaXppbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gV3JpdGVzIGFuZCBkZWxldGlvbnMgaW4gb25lIHRyYW5zYWN0aW9uLCBvcHRpb25hbGx5IGFmdGVyIGNsZWFyaW5nIHRoZSBzdG9yZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25seSBhZnRlciBhbGwgY2hhbmdlcyBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tbWl0KHBhcmFtczogTG9jYWxEYXRhU3RvcmVDb21taXRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJ1bigncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICBpZiAocGFyYW1zLnNob3VsZENsZWFyKSB7XG4gICAgICAgIHN0b3JlLmNsZWFyKCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXJhbXMucmVtb3ZlZEtleXMgPz8gW10pIHtcbiAgICAgICAgc3RvcmUuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwYXJhbXMuZW50cmllcykge1xuICAgICAgICBzdG9yZS5wdXQodmFsdWUsIGtleSk7XG4gICAgICB9XG4gICAgICAvLyBObyByZXF1ZXN0IHRvIHJlc29sdmUgd2l0aDogYSBjbG9zaW5nIGBzdG9yZS5jb3VudCgpYCB3b3VsZCB3YWxrIGV2ZXJ5IHJlY29yZCBvZiB0aGUgc3RvcmUgb24gZWFjaCBjb21taXQuXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHJlY29yZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJ1bigncmVhZHdyaXRlJywgKHN0b3JlKSA9PiBzdG9yZS5kZWxldGUoa2V5KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYWxsIHJlY29yZHMgaW4ga2V5IG9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXRhY2hlZCBrZXkvdmFsdWUgcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW50cmllcygpOiBQcm9taXNlPFtzdHJpbmcsIHVua25vd25dW10+IHtcbiAgICBjb25zdCByZWNvcmRzOiBbc3RyaW5nLCB1bmtub3duXVtdID0gW107XG4gICAgLy8gVHdvIGJ1bGsgcmVhZHMgaW4gb25lIHRyYW5zYWN0aW9uIHNlZSB0aGUgc2FtZSBzbmFwc2hvdCBpbiB0aGUgc2FtZSBrZXkgb3JkZXIsIHNvIHRoZXkgcGFpciB1cCBieSBpbmRleC5cbiAgICAvLyBBIGN1cnNvciBkaXNwYXRjaGVzIG9uZSBldmVudCBwZXIgcmVjb3JkIGluc3RlYWQ7IGF0IDkwLDAwMCByZWNvcmRzIGluIE9ic2lkaWFuIGl0IHRvb2sgMS41IHRvIDIgdGltZXMgYXMgbG9uZy5cbiAgICBhd2FpdCB0aGlzLnJ1bigncmVhZG9ubHknLCAoc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IGtleXNSZXF1ZXN0ID0gc3RvcmUuZ2V0QWxsS2V5cygpO1xuICAgICAgY29uc3QgdmFsdWVzUmVxdWVzdCA9IHN0b3JlLmdldEFsbCgpO1xuICAgICAgdmFsdWVzUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBrZXlzUmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlc1JlcXVlc3QucmVzdWx0O1xuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwga2V5XSBvZiBrZXlzLmVudHJpZXMoKSkge1xuICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTG9jYWwgZGF0YS1zdG9yZSBrZXkgaXMgbm90IGEgc3RyaW5nJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlY29yZHMucHVzaChba2V5LCB2YWx1ZXNbaW5kZXhdXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdmFsdWVzUmVxdWVzdDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgc2hhcmVkLXN0b3JlIG9wZXJhdGlvbiBhY3Jvc3MgY29ubmVjdGlvbnMsIHdpbmRvd3MgYW5kIGJ1bmRsZWQgbGlicmFyeSBjb3BpZXMuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gV29yayBwZXJmb3JtZWQgd2hpbGUgaG9sZGluZyB0aGlzIGRhdGFiYXNlJ3MgV2ViIExvY2suXG4gICAqIEByZXR1cm5zIFRoZSBjYWxsYmFjayByZXN1bHQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBsb2NrLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4Y2x1c2l2ZTxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cubmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QodGhpcy5kYXRhYmFzZS5uYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYSByZWNvcmQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBSZWNvcmQga2V5LlxuICAgKiBAcmV0dXJucyBJdHMgdmFsdWUsIG9yIGB1bmRlZmluZWRgIHdoZW4gYWJzZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bjx1bmtub3duPigncmVhZG9ubHknLCAoc3RvcmUpID0+IHN0b3JlLmdldChrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhIHJlY29yZCBvbmNlLCBhdG9taWNhbGx5IGFjcm9zcyBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHVzZWQgb25seSB3aGVuIHRoZSBrZXkgaXMgYWJzZW50LlxuICAgKiBAcmV0dXJucyBUaGUgZXhpc3Rpbmcgb3IgbmV3bHkgY29tbWl0dGVkIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE9yQ3JlYXRlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bjx1bmtub3duPigncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KGtleSk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3QucmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdG9yZS5wdXQodmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9KS50aGVuKChleGlzdGluZykgPT4gZXhpc3RpbmcgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogZXhpc3RpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBhIHN0cnVjdHVyZWQtY2xvbmVhYmxlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gcGVyc2lzdC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJ1bigncmVhZHdyaXRlJywgKHN0b3JlKSA9PiBzdG9yZS5wdXQodmFsdWUsIGtleSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQ2xvc2VkKHJlYXNvbjogTG9jYWxEYXRhU3RvcmVDbG9zZVJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VSZWFzb24gPz89IHJlYXNvbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVuZGVmaW5lZC1yZXR1cm4tdHlwZSAtLSBNaXJyb3JzIEluZGV4ZWREQjogYSBtaXNzaW5nIHJlY29yZCByZWFkcyBhcyBgdW5kZWZpbmVkYCwgd2hpY2ggYSBzdG9yZWQgYG51bGxgIG11c3Qgc3RheSBkaXN0aW5jdCBmcm9tLlxuICBwcml2YXRlIGFzeW5jIHJ1bjxUPihtb2RlOiBJREJUcmFuc2FjdGlvbk1vZGUsIGFjdGlvbjogKHN0b3JlOiBJREJPYmplY3RTdG9yZSkgPT4gSURCUmVxdWVzdDxUPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgdHJhbnNhY3Rpb246IElEQlRyYW5zYWN0aW9uO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VSZWFzb24gIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxEYXRhU3RvcmVDbG9zZWRFcnJvcih0aGlzLmRhdGFiYXNlLm5hbWUsIHRoaXMuY2xvc2VSZWFzb24pO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbigncmVjb3JkcycsIG1vZGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KHRoaXMudG9DbG9zZWRFcnJvcihlcnJvcikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcmVxdWVzdDogSURCUmVxdWVzdDxUPiB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QgPSBhY3Rpb24odHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3JlY29yZHMnKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0cmFuc2FjdGlvbi5hYm9ydCgpO1xuICAgICAgICByZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIHRyYW5zYWN0aW9uIGZhaWxlZCcsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLy8gQW4gYWN0aW9uIHRoYXQgaXNzdWVkIG5vIHJlcXVlc3Qgb2YgaXRzIG93biByZXNvbHZlcyB3aXRoIGB1bmRlZmluZWRgIG9uY2UgaXRzIHdyaXRlcyBjb21taXQuXG4gICAgICAgIHJlc29sdmUocmVxdWVzdD8ucmVzdWx0KTtcbiAgICAgIH07XG4gICAgICB0cmFuc2FjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTG9jYWwgZGF0YS1zdG9yZSB0cmFuc2FjdGlvbiBhYm9ydGVkJywgeyBjYXVzZTogdHJhbnNhY3Rpb24uZXJyb3IgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHRvQ2xvc2VkRXJyb3IoZXJyb3I6IHVua25vd24pOiBFcnJvciB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTG9jYWxEYXRhU3RvcmVDbG9zZWRFcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICAvLyBBIGNsb3NpbmcgY29ubmVjdGlvbiBtYWtlcyBgdHJhbnNhY3Rpb24oKWAgdGhyb3cgYEludmFsaWRTdGF0ZUVycm9yYCBzeW5jaHJvbm91c2x5LlxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdJbnZhbGlkU3RhdGVFcnJvcicpIHtcbiAgICAgIHJldHVybiBuZXcgTG9jYWxEYXRhU3RvcmVDbG9zZWRFcnJvcih0aGlzLmRhdGFiYXNlLm5hbWUsIHRoaXMuY2xvc2VSZWFzb24gPz8gTG9jYWxEYXRhU3RvcmVDbG9zZVJlYXNvbi5DbG9zZWRCeUJyb3dzZXIsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIHRyYW5zYWN0aW9uIGZhaWxlZCcsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIGJ5IGV2ZXJ5IG9wZXJhdGlvbiBvZiBhIHtAbGluayBMb2NhbERhdGFTdG9yZX0gd2hvc2UgY29ubmVjdGlvbiBpcyBjbG9zZWQgb3IgY2xvc2luZy5cbiAqXG4gKiBJdCByZXBsYWNlcyBJbmRleGVkREIncyByYXcgYEludmFsaWRTdGF0ZUVycm9yYCAoXCJUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nXCIpLCB3aGljaCBuYW1lcyBuZWl0aGVyIHRoZVxuICogc3RvcmUgbm9yIHRoZSBjYXVzZS4gVGhlIHVzdWFsIGNhdXNlIGlzIHdvcmsgdGhhdCBvdXRsaXZlZCBpdHMgb3duZXI6IGEgZGVib3VuY2VkIG9yIHNjaGVkdWxlZCBzYXZlIHRoYXQgcnVucyBhZnRlclxuICogdGhlIHBsdWdpbiB1bmxvYWRlZCBhbmQgY2xvc2VkIGl0cyBzdG9yZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsRGF0YVN0b3JlQ2xvc2VkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEge0BsaW5rIExvY2FsRGF0YVN0b3JlQ2xvc2VkRXJyb3J9LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YWJhc2VOYW1lIC0gVGhlIEluZGV4ZWREQiBkYXRhYmFzZSBuYW1lIG9mIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIHJlYXNvbiAtIFdoeSB0aGUgY29ubmVjdGlvbiBjbG9zZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIEluZGV4ZWREQiBlcnJvciB0aGlzIG9uZSByZXBsYWNlcywgYXMgaXRzIGBjYXVzZWAuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSByZWFzb246IExvY2FsRGF0YVN0b3JlQ2xvc2VSZWFzb24sXG4gICAgb3B0aW9ucz86IExvY2FsRGF0YVN0b3JlQ2xvc2VkRXJyb3JDb25zdHJ1Y3Rvck9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoYFRoZSBsb2NhbCBkYXRhIHN0b3JlIFwiJHtkYXRhYmFzZU5hbWV9XCIgaXMgY2xvc2VkICgke3JlYXNvbn0pLCBzbyB0aGUgb3BlcmF0aW9uIHdhcyBub3QgcnVuLmAsIG9wdGlvbnMpO1xuICAgIHRoaXMubmFtZSA9ICdMb2NhbERhdGFTdG9yZUNsb3NlZEVycm9yJztcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTTyxJQUFLLDRCQUFMLGtCQUFLQSwrQkFBTDtBQUtMLEVBQUFBLDJCQUFBLHFCQUFrQjtBQUlsQixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFJaEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBYk4sU0FBQUE7QUFBQSxHQUFBO0FBMkVMLE1BQU0sZUFBZTtBQUFBLEVBYWxCLFlBQTZCLFVBQXVCO0FBQXZCO0FBQ25DLGFBQVMsa0JBQWtCLE1BQVk7QUFDckMsV0FBSyxXQUFXLG1DQUF1QztBQUN2RCxlQUFTLE1BQU07QUFBQSxJQUNqQjtBQUVBLGFBQVMsaUJBQWlCLFNBQVMsTUFBWTtBQUM3QyxXQUFLLFdBQVcsdUNBQXlDO0FBQUEsSUFDM0QsQ0FBQztBQUFBLEVBQ0g7QUFBQSxFQVRxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTnJDLElBQVcsV0FBb0I7QUFDN0IsV0FBTyxLQUFLLGdCQUFnQjtBQUFBLEVBQzlCO0FBQUEsRUFFUSxjQUFnRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBbUJ4RCxhQUFvQixLQUFLLFFBQTJEO0FBQ2xGLFVBQU0sT0FBTyxnQkFBZ0IsS0FBSyxVQUFVLENBQUMsT0FBTyxTQUFTLE9BQU8sVUFBVSxPQUFPLE9BQU8sQ0FBQyxDQUFDO0FBQzlGLFVBQU0sV0FBVyxPQUFPLFdBQVcsV0FBVyxLQUFLLE1BQU0sQ0FBQztBQUMxRCxXQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzVDLGNBQVEsa0JBQWtCLE1BQVk7QUFDcEMsZ0JBQVEsT0FBTyxrQkFBa0IsU0FBUztBQUFBLE1BQzVDO0FBQ0EsY0FBUSxpQkFBaUIsU0FBUyxNQUFZO0FBQzVDLGVBQU8sSUFBSSxNQUFNLG1DQUFtQyxFQUFFLE9BQU8sUUFBUSxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQy9FLENBQUM7QUFDRCxjQUFRLFlBQVksTUFBWTtBQUM5QixnQkFBUSxJQUFJLGVBQWUsUUFBUSxNQUFNLENBQUM7QUFBQSxNQUM1QztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFhLFFBQXVCO0FBQ2xDLFVBQU0sS0FBSyxJQUFJLGFBQWEsQ0FBQyxVQUFVLE1BQU0sTUFBTSxDQUFDO0FBQUEsRUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sUUFBYztBQUNuQixTQUFLLFdBQVcsbUNBQXVDO0FBQ3ZELFNBQUssU0FBUyxNQUFNO0FBQUEsRUFDdEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWEsT0FBTyxRQUFtRDtBQUNyRSxVQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsVUFBVTtBQUNyQyxVQUFJLE9BQU8sYUFBYTtBQUN0QixjQUFNLE1BQU07QUFBQSxNQUNkO0FBQ0EsaUJBQVcsT0FBTyxPQUFPLGVBQWUsQ0FBQyxHQUFHO0FBQzFDLGNBQU0sT0FBTyxHQUFHO0FBQUEsTUFDbEI7QUFDQSxpQkFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sU0FBUztBQUN6QyxjQUFNLElBQUksT0FBTyxHQUFHO0FBQUEsTUFDdEI7QUFBQSxJQUVGLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLE9BQU8sS0FBNEI7QUFDOUMsVUFBTSxLQUFLLElBQUksYUFBYSxDQUFDLFVBQVUsTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUFBLEVBQzFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBYSxVQUF3QztBQUNuRCxVQUFNLFVBQStCLENBQUM7QUFHdEMsVUFBTSxLQUFLLElBQUksWUFBWSxDQUFDLFVBQVU7QUFDcEMsWUFBTSxjQUFjLE1BQU0sV0FBVztBQUNyQyxZQUFNLGdCQUFnQixNQUFNLE9BQU87QUFDbkMsb0JBQWMsWUFBWSxNQUFZO0FBQ3BDLGNBQU0sT0FBTyxZQUFZO0FBQ3pCLGNBQU0sU0FBUyxjQUFjO0FBQzdCLG1CQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFDekMsY0FBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixrQkFBTSxJQUFJLFVBQVUsc0NBQXNDO0FBQUEsVUFDNUQ7QUFDQSxrQkFBUSxLQUFLLENBQUMsS0FBSyxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDbkM7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBLElBQ1QsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE1BQWEsVUFBYSxVQUF3QztBQUNoRSxXQUFPLE1BQU0sT0FBTyxVQUFVLE1BQU0sUUFBUSxLQUFLLFNBQVMsTUFBTSxRQUFRO0FBQUEsRUFDMUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWEsSUFBSSxLQUErQjtBQUM5QyxXQUFPLE1BQU0sS0FBSyxJQUFhLFlBQVksQ0FBQyxVQUFVLE1BQU0sSUFBSSxHQUFHLENBQUM7QUFBQSxFQUN0RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTQSxNQUFhLFlBQVksS0FBYSxPQUFrQztBQUN0RSxXQUFPLE1BQU0sS0FBSyxJQUFhLGFBQWEsQ0FBQyxVQUFVO0FBQ3JELFlBQU0sVUFBVSxNQUFNLElBQUksR0FBRztBQUM3QixjQUFRLFlBQVksTUFBWTtBQUM5QixZQUFJLFFBQVEsV0FBVyxRQUFXO0FBQ2hDLGdCQUFNLElBQUksT0FBTyxHQUFHO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBLElBQ1QsQ0FBQyxFQUFFLEtBQUssQ0FBQyxhQUFhLGFBQWEsU0FBWSxRQUFRLFFBQVE7QUFBQSxFQUNqRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTQSxNQUFhLElBQUksS0FBYSxPQUErQjtBQUMzRCxVQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsVUFBVSxNQUFNLElBQUksT0FBTyxHQUFHLENBQUM7QUFBQSxFQUM5RDtBQUFBLEVBRVEsV0FBVyxRQUF5QztBQUMxRCxTQUFLLGdCQUFnQjtBQUFBLEVBQ3ZCO0FBQUE7QUFBQSxFQUdBLE1BQWMsSUFBTyxNQUEwQixRQUFzRjtBQUNuSSxXQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzVDLFVBQUk7QUFDSixVQUFJO0FBQ0YsWUFBSSxLQUFLLGdCQUFnQixNQUFNO0FBQzdCLGdCQUFNLElBQUksMEJBQTBCLEtBQUssU0FBUyxNQUFNLEtBQUssV0FBVztBQUFBLFFBQzFFO0FBQ0Esc0JBQWMsS0FBSyxTQUFTLFlBQVksV0FBVyxJQUFJO0FBQUEsTUFDekQsU0FBUyxPQUFPO0FBQ2QsZUFBTyxLQUFLLGNBQWMsS0FBSyxDQUFDO0FBQ2hDO0FBQUEsTUFDRjtBQUNBLFVBQUk7QUFDSixVQUFJO0FBQ0Ysa0JBQVUsT0FBTyxZQUFZLFlBQVksU0FBUyxDQUFDO0FBQUEsTUFDckQsU0FBUyxPQUFPO0FBQ2Qsb0JBQVksTUFBTTtBQUNsQixlQUFPLGlCQUFpQixRQUFRLFFBQVEsSUFBSSxNQUFNLHVDQUF1QyxFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDMUc7QUFBQSxNQUNGO0FBQ0Esa0JBQVksYUFBYSxNQUFZO0FBRW5DLGdCQUFRLFNBQVMsTUFBTTtBQUFBLE1BQ3pCO0FBQ0Esa0JBQVksaUJBQWlCLFNBQVMsTUFBWTtBQUNoRCxlQUFPLElBQUksTUFBTSx3Q0FBd0MsRUFBRSxPQUFPLFlBQVksTUFBTSxDQUFDLENBQUM7QUFBQSxNQUN4RixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRVEsY0FBYyxPQUF1QjtBQUMzQyxRQUFJLGlCQUFpQiwyQkFBMkI7QUFDOUMsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGlCQUFpQixTQUFTLE1BQU0sU0FBUyxxQkFBcUI7QUFDaEUsYUFBTyxJQUFJLDBCQUEwQixLQUFLLFNBQVMsTUFBTSxLQUFLLGVBQWUseUNBQTJDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxJQUMxSTtBQUNBLFdBQU8saUJBQWlCLFFBQVEsUUFBUSxJQUFJLE1BQU0sdUNBQXVDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxFQUMzRztBQUNGO0FBU08sTUFBTSxrQ0FBa0MsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRNUMsWUFDVyxjQUNBLFFBQ2hCLFNBQ0E7QUFDQSxVQUFNLHlCQUF5QixZQUFZLGdCQUFnQixNQUFNLG9DQUFvQyxPQUFPO0FBSjVGO0FBQ0E7QUFJaEIsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUFBLEVBTmtCO0FBQUEsRUFDQTtBQU1wQjsiLAogICJuYW1lcyI6IFsiTG9jYWxEYXRhU3RvcmVDbG9zZVJlYXNvbiJdCn0K
@@ -90,6 +90,7 @@ export declare class SharedDataStore {
90
90
  private readonly knownTransportRoots;
91
91
  private readonly localRecords;
92
92
  private readonly locations;
93
+ private readonly ownSegments;
93
94
  private replica;
94
95
  private time;
95
96
  private readonly vector;
@@ -152,7 +153,7 @@ export declare class SharedDataStore {
152
153
  */
153
154
  set(key: string, value: JsonValue): Promise<void>;
154
155
  /**
155
- * Publishes a batch of register writes, split into bounded immutable segments.
156
+ * Publishes a batch of register writes, appended to this device's open journal segment and split into bounded ones.
156
157
  * Segments are individually durable; a failed batch can have a published prefix and can be retried safely.
157
158
  *
158
159
  * @param entries - Register writes or set additions.
@@ -184,6 +185,22 @@ export declare class SharedDataStore {
184
185
  private mergeFiles;
185
186
  private mergeTransport;
186
187
  private observeClock;
188
+ /**
189
+ * Picks the segment the next operation may extend: this device's newest one in the active transport, when it ends
190
+ * exactly at the device's last sequence and is still small enough that rewriting it stays cheap.
191
+ *
192
+ * @returns The open segment, or `null` when the next operation starts a new file.
193
+ */
194
+ private openSegment;
195
+ private openSegmentBytes;
187
196
  private persist;
188
197
  private publish;
198
+ /**
199
+ * Rewrites `have` only when another device's acknowledged sequence moved, or the stored copy is due a refresh.
200
+ * Other devices read only their own entry from it, so this device's own sequence never forces a write.
201
+ *
202
+ * @returns A promise that resolves once the acknowledgement is current.
203
+ */
204
+ private publishAcknowledgement;
205
+ private segmentPath;
189
206
  }