obsidian-dev-utils 81.0.0 → 82.0.0-beta.1

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 (315) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/lib/cjs/abort-controller.cjs +12 -9
  3. package/dist/lib/cjs/abort-controller.d.cts +2 -2
  4. package/dist/lib/cjs/async-events.d.cts +1 -1
  5. package/dist/lib/cjs/async.cjs +5 -1
  6. package/dist/lib/cjs/async.d.cts +20 -2
  7. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -1
  8. package/dist/lib/cjs/css-class.cjs +6 -1
  9. package/dist/lib/cjs/css-class.d.cts +20 -0
  10. package/dist/lib/cjs/debug.d.cts +1 -1
  11. package/dist/lib/cjs/disposable.cjs +234 -0
  12. package/dist/lib/cjs/disposable.d.cts +124 -0
  13. package/dist/lib/cjs/error.cjs +26 -14
  14. package/dist/lib/cjs/error.d.cts +4 -3
  15. package/dist/lib/cjs/function.d.cts +1 -1
  16. package/dist/lib/cjs/html-element.cjs +9 -6
  17. package/dist/lib/cjs/html-element.d.cts +3 -3
  18. package/dist/lib/cjs/index.cjs +4 -1
  19. package/dist/lib/cjs/index.d.cts +1 -0
  20. package/dist/lib/cjs/library.cjs +2 -2
  21. package/dist/lib/cjs/object-utils.cjs +1 -1
  22. package/dist/lib/cjs/object-utils.d.cts +19 -9
  23. package/dist/lib/cjs/obsidian/@types/dataview/api/plugin-api.d.cts +1 -1
  24. package/dist/lib/cjs/obsidian/@types/dataview/data-index/index.d.cts +1 -1
  25. package/dist/lib/cjs/obsidian/@types/dataview/data-model/markdown.d.cts +2 -2
  26. package/dist/lib/cjs/obsidian/@types/dataview/data-model/serialized/markdown.d.cts +2 -2
  27. package/dist/lib/cjs/obsidian/@types/dataview/index.d.cts +1 -1
  28. package/dist/lib/cjs/obsidian/@types/dataview/query/engine.d.cts +1 -1
  29. package/dist/lib/cjs/obsidian/@types/dataview/typings/obsidian-ex.d.cts +1 -1
  30. package/dist/lib/cjs/obsidian/@types/dataview/ui/lp-render.d.cts +1 -1
  31. package/dist/lib/cjs/obsidian/@types/dataview/ui/markdown.d.cts +1 -1
  32. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/calendar-view.d.cts +1 -1
  33. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/inline-view.d.cts +1 -1
  34. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/list-view.d.cts +2 -2
  35. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/table-view.d.cts +2 -2
  36. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/task-view.d.cts +1 -1
  37. package/dist/lib/cjs/obsidian/active-file-provider.d.cts +1 -1
  38. package/dist/lib/cjs/obsidian/app.d.cts +1 -1
  39. package/dist/lib/cjs/obsidian/async-with-notice.cjs +3 -3
  40. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +7 -3
  41. package/dist/lib/cjs/obsidian/attachment-path.cjs +1 -1
  42. package/dist/lib/cjs/obsidian/attachment-path.d.cts +9 -1
  43. package/dist/lib/cjs/obsidian/backlink.cjs +1 -1
  44. package/dist/lib/cjs/obsidian/backlink.d.cts +6 -2
  45. package/dist/lib/cjs/obsidian/bases-view-registrar.d.cts +1 -1
  46. package/dist/lib/cjs/obsidian/callout.cjs +1 -1
  47. package/dist/lib/cjs/obsidian/callout.d.cts +8 -0
  48. package/dist/lib/cjs/obsidian/case-insensitive-file-index.d.cts +1 -1
  49. package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +1 -1
  50. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +1 -1
  51. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +4 -2
  52. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +1 -1
  53. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +1 -1
  54. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +4 -2
  55. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +2 -2
  56. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +2 -2
  57. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +2 -2
  58. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +1 -1
  59. package/dist/lib/cjs/obsidian/command-registrar.d.cts +1 -1
  60. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +1 -1
  61. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +5 -2
  62. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.d.cts +1 -1
  63. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +5 -10
  64. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +0 -7
  65. package/dist/lib/cjs/obsidian/components/embed-extensions-component.d.cts +2 -2
  66. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +2 -2
  67. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +1 -1
  68. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +1 -1
  69. package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +1 -1
  70. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +1 -1
  71. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -2
  72. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +1 -1
  73. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +1 -1
  74. package/dist/lib/cjs/obsidian/components/registry-component.d.cts +1 -1
  75. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +73 -29
  76. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +1 -1
  77. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.d.cts +2 -2
  78. package/dist/lib/cjs/obsidian/data-handler.d.cts +1 -1
  79. package/dist/lib/cjs/obsidian/dataview-link.cjs +1 -1
  80. package/dist/lib/cjs/obsidian/dataview-link.d.cts +3 -1
  81. package/dist/lib/cjs/obsidian/dataview.cjs +1 -1
  82. package/dist/lib/cjs/obsidian/dataview.d.cts +13 -3
  83. package/dist/lib/cjs/obsidian/editor-extension-registrar.d.cts +1 -1
  84. package/dist/lib/cjs/obsidian/editor-lock.cjs +247 -0
  85. package/dist/lib/cjs/obsidian/editor-lock.d.cts +57 -0
  86. package/dist/lib/cjs/obsidian/editor.cjs +7 -1
  87. package/dist/lib/cjs/obsidian/editor.d.cts +3 -2
  88. package/dist/lib/cjs/obsidian/file-change.cjs +1 -1
  89. package/dist/lib/cjs/obsidian/file-change.d.cts +5 -1
  90. package/dist/lib/cjs/obsidian/file-manager.d.cts +2 -2
  91. package/dist/lib/cjs/obsidian/file-system.cjs +1 -1
  92. package/dist/lib/cjs/obsidian/file-system.d.cts +28 -8
  93. package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.d.cts +1 -1
  94. package/dist/lib/cjs/obsidian/hover-link-source-registrar.d.cts +1 -1
  95. package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +1 -1
  96. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +4 -1
  97. package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +3 -0
  98. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +3 -0
  99. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  100. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  101. package/dist/lib/cjs/obsidian/link.cjs +63 -10
  102. package/dist/lib/cjs/obsidian/link.d.cts +50 -17
  103. package/dist/lib/cjs/obsidian/logger.d.cts +1 -1
  104. package/dist/lib/cjs/obsidian/loop.cjs +1 -1
  105. package/dist/lib/cjs/obsidian/loop.d.cts +22 -8
  106. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +2 -2
  107. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +1 -1
  108. package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +16 -6
  109. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +1 -1
  110. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +5 -3
  111. package/dist/lib/cjs/obsidian/markdown-view.d.cts +1 -1
  112. package/dist/lib/cjs/obsidian/markdown.cjs +1 -1
  113. package/dist/lib/cjs/obsidian/markdown.d.cts +9 -1
  114. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
  115. package/dist/lib/cjs/obsidian/metadata-cache.cjs +67 -25
  116. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +9 -59
  117. package/dist/lib/cjs/obsidian/modals/alert.cjs +1 -1
  118. package/dist/lib/cjs/obsidian/modals/alert.d.cts +2 -0
  119. package/dist/lib/cjs/obsidian/modals/confirm.cjs +1 -1
  120. package/dist/lib/cjs/obsidian/modals/confirm.d.cts +2 -0
  121. package/dist/lib/cjs/obsidian/modals/index.cjs +4 -1
  122. package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -0
  123. package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +235 -0
  124. package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +74 -0
  125. package/dist/lib/cjs/obsidian/modals/modal.d.cts +1 -1
  126. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -1
  127. package/dist/lib/cjs/obsidian/modals/prompt.d.cts +7 -1
  128. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -1
  129. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +2 -0
  130. package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.d.cts +2 -2
  131. package/dist/lib/cjs/obsidian/obsidian-settings.d.cts +1 -1
  132. package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +1 -1
  133. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +1 -1
  134. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +1 -1
  135. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +12 -6
  136. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +20 -15
  137. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +3 -3
  138. package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.d.cts +2 -2
  139. package/dist/lib/cjs/obsidian/queue.cjs +1 -1
  140. package/dist/lib/cjs/obsidian/queue.d.cts +15 -3
  141. package/dist/lib/cjs/obsidian/react/app-context.d.cts +1 -1
  142. package/dist/lib/cjs/obsidian/reference.d.cts +1 -1
  143. package/dist/lib/cjs/obsidian/resource-url.d.cts +1 -1
  144. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +1 -1
  145. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -1
  146. package/dist/lib/cjs/obsidian/setting-ex.d.cts +1 -1
  147. package/dist/lib/cjs/obsidian/vault-delete.d.cts +1 -1
  148. package/dist/lib/cjs/obsidian/vault.cjs +1 -1
  149. package/dist/lib/cjs/obsidian/vault.d.cts +10 -4
  150. package/dist/lib/cjs/obsidian/view-registrar.d.cts +1 -1
  151. package/dist/lib/cjs/obsidian/workspace.d.cts +1 -1
  152. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -1
  153. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +1 -1
  154. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -1
  155. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -1
  156. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +1 -1
  157. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +1 -1
  158. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  159. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.d.cts +1 -1
  160. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
  161. package/dist/lib/cjs/script-utils/check-project-types.cjs +5 -1
  162. package/dist/lib/cjs/script-utils/check-project-types.d.cts +10 -2
  163. package/dist/lib/cjs/script-utils/cli-utils.d.cts +1 -1
  164. package/dist/lib/cjs/script-utils/commitlint-config.d.cts +1 -1
  165. package/dist/lib/cjs/script-utils/exec.cjs +1 -1
  166. package/dist/lib/cjs/script-utils/exec.d.cts +12 -0
  167. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +1 -1
  168. package/dist/lib/cjs/script-utils/formatters/dprint.d.cts +2 -0
  169. package/dist/lib/cjs/script-utils/fs.d.cts +1 -1
  170. package/dist/lib/cjs/script-utils/json.cjs +1 -1
  171. package/dist/lib/cjs/script-utils/json.d.cts +3 -1
  172. package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +1 -1
  173. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -1
  174. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +1 -1
  175. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -1
  176. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +1 -1
  177. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +1 -1
  178. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +1 -1
  179. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -1
  180. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +1 -1
  181. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +1 -1
  182. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +1 -1
  183. package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.d.cts +2 -2
  184. package/dist/lib/cjs/script-utils/linters/eslint.cjs +1 -1
  185. package/dist/lib/cjs/script-utils/linters/eslint.d.cts +2 -0
  186. package/dist/lib/cjs/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -1
  187. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +1 -1
  188. package/dist/lib/cjs/script-utils/linters/markdownlint.d.cts +2 -0
  189. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +1 -1
  190. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +9 -1
  191. package/dist/lib/cjs/script-utils/npm.cjs +1 -1
  192. package/dist/lib/cjs/script-utils/npm.d.cts +3 -1
  193. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +1 -1
  194. package/dist/lib/cjs/script-utils/test-runners/vitest.d.cts +2 -0
  195. package/dist/lib/cjs/script-utils/validate-declarations.cjs +5 -42
  196. package/dist/lib/cjs/script-utils/validate-declarations.d.cts +22 -9
  197. package/dist/lib/cjs/script-utils/version.cjs +1 -1
  198. package/dist/lib/cjs/script-utils/version.d.cts +20 -7
  199. package/dist/lib/cjs/string.cjs +1 -1
  200. package/dist/lib/cjs/string.d.cts +6 -0
  201. package/dist/lib/cjs/value-provider.d.cts +1 -1
  202. package/dist/lib/esm/abort-controller.d.mts +2 -2
  203. package/dist/lib/esm/abort-controller.mjs +12 -9
  204. package/dist/lib/esm/async.d.mts +19 -1
  205. package/dist/lib/esm/async.mjs +5 -1
  206. package/dist/lib/esm/css-class.d.mts +20 -0
  207. package/dist/lib/esm/css-class.mjs +6 -1
  208. package/dist/lib/esm/disposable.d.mts +124 -0
  209. package/dist/lib/esm/disposable.mjs +122 -0
  210. package/dist/lib/esm/error.d.mts +4 -3
  211. package/dist/lib/esm/error.mjs +26 -14
  212. package/dist/lib/esm/html-element.d.mts +2 -2
  213. package/dist/lib/esm/html-element.mjs +9 -6
  214. package/dist/lib/esm/index.d.mts +1 -0
  215. package/dist/lib/esm/index.mjs +3 -1
  216. package/dist/lib/esm/library.mjs +2 -2
  217. package/dist/lib/esm/object-utils.d.mts +18 -8
  218. package/dist/lib/esm/object-utils.mjs +1 -1
  219. package/dist/lib/esm/obsidian/async-with-notice.d.mts +6 -2
  220. package/dist/lib/esm/obsidian/async-with-notice.mjs +3 -3
  221. package/dist/lib/esm/obsidian/attachment-path.d.mts +8 -0
  222. package/dist/lib/esm/obsidian/attachment-path.mjs +1 -1
  223. package/dist/lib/esm/obsidian/backlink.d.mts +6 -2
  224. package/dist/lib/esm/obsidian/backlink.mjs +1 -1
  225. package/dist/lib/esm/obsidian/callout.d.mts +8 -0
  226. package/dist/lib/esm/obsidian/callout.mjs +1 -1
  227. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +2 -0
  228. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +1 -1
  229. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +2 -0
  230. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +1 -1
  231. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +5 -2
  232. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +0 -7
  233. package/dist/lib/esm/obsidian/components/disposable-component.mjs +3 -7
  234. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -2
  235. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +1 -1
  236. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +74 -32
  237. package/dist/lib/esm/obsidian/dataview-link.d.mts +3 -1
  238. package/dist/lib/esm/obsidian/dataview-link.mjs +1 -1
  239. package/dist/lib/esm/obsidian/dataview.d.mts +12 -2
  240. package/dist/lib/esm/obsidian/dataview.mjs +1 -1
  241. package/dist/lib/esm/obsidian/editor-lock.d.mts +57 -0
  242. package/dist/lib/esm/obsidian/editor-lock.mjs +143 -0
  243. package/dist/lib/esm/obsidian/editor.d.mts +2 -1
  244. package/dist/lib/esm/obsidian/editor.mjs +7 -1
  245. package/dist/lib/esm/obsidian/file-change.d.mts +4 -0
  246. package/dist/lib/esm/obsidian/file-change.mjs +1 -1
  247. package/dist/lib/esm/obsidian/file-system.d.mts +27 -7
  248. package/dist/lib/esm/obsidian/file-system.mjs +1 -1
  249. package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +3 -0
  250. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +4 -1
  251. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +3 -0
  252. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  253. package/dist/lib/esm/obsidian/index.mjs +3 -1
  254. package/dist/lib/esm/obsidian/link.d.mts +48 -15
  255. package/dist/lib/esm/obsidian/link.mjs +64 -11
  256. package/dist/lib/esm/obsidian/loop.d.mts +21 -7
  257. package/dist/lib/esm/obsidian/loop.mjs +1 -1
  258. package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +15 -5
  259. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +1 -1
  260. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -1
  261. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +1 -1
  262. package/dist/lib/esm/obsidian/markdown.d.mts +8 -0
  263. package/dist/lib/esm/obsidian/markdown.mjs +1 -1
  264. package/dist/lib/esm/obsidian/metadata-cache.d.mts +7 -57
  265. package/dist/lib/esm/obsidian/metadata-cache.mjs +67 -23
  266. package/dist/lib/esm/obsidian/modals/alert.d.mts +2 -0
  267. package/dist/lib/esm/obsidian/modals/alert.mjs +1 -1
  268. package/dist/lib/esm/obsidian/modals/confirm.d.mts +2 -0
  269. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
  270. package/dist/lib/esm/obsidian/modals/index.d.mts +1 -0
  271. package/dist/lib/esm/obsidian/modals/index.mjs +3 -1
  272. package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +74 -0
  273. package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +127 -0
  274. package/dist/lib/esm/obsidian/modals/prompt.d.mts +6 -0
  275. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -1
  276. package/dist/lib/esm/obsidian/modals/select-item.d.mts +2 -0
  277. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -1
  278. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +9 -3
  279. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +1 -1
  280. package/dist/lib/esm/obsidian/plugin/plugin.mjs +20 -15
  281. package/dist/lib/esm/obsidian/queue.d.mts +14 -2
  282. package/dist/lib/esm/obsidian/queue.mjs +1 -1
  283. package/dist/lib/esm/obsidian/vault.d.mts +9 -3
  284. package/dist/lib/esm/obsidian/vault.mjs +1 -1
  285. package/dist/lib/esm/script-utils/check-project-types.d.mts +9 -1
  286. package/dist/lib/esm/script-utils/check-project-types.mjs +5 -1
  287. package/dist/lib/esm/script-utils/exec.d.mts +12 -0
  288. package/dist/lib/esm/script-utils/exec.mjs +1 -1
  289. package/dist/lib/esm/script-utils/formatters/dprint.d.mts +2 -0
  290. package/dist/lib/esm/script-utils/formatters/dprint.mjs +1 -1
  291. package/dist/lib/esm/script-utils/json.d.mts +2 -0
  292. package/dist/lib/esm/script-utils/json.mjs +1 -1
  293. package/dist/lib/esm/script-utils/linters/eslint.d.mts +2 -0
  294. package/dist/lib/esm/script-utils/linters/eslint.mjs +1 -1
  295. package/dist/lib/esm/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -1
  296. package/dist/lib/esm/script-utils/linters/markdownlint.d.mts +2 -0
  297. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +1 -1
  298. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +8 -0
  299. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +1 -1
  300. package/dist/lib/esm/script-utils/npm.d.mts +2 -0
  301. package/dist/lib/esm/script-utils/npm.mjs +1 -1
  302. package/dist/lib/esm/script-utils/test-runners/vitest.d.mts +2 -0
  303. package/dist/lib/esm/script-utils/test-runners/vitest.mjs +1 -1
  304. package/dist/lib/esm/script-utils/validate-declarations.d.mts +22 -9
  305. package/dist/lib/esm/script-utils/validate-declarations.mjs +5 -49
  306. package/dist/lib/esm/script-utils/version.d.mts +20 -7
  307. package/dist/lib/esm/script-utils/version.mjs +1 -1
  308. package/dist/lib/esm/string.d.mts +6 -0
  309. package/dist/lib/esm/string.mjs +1 -1
  310. package/dist/styles.css +54 -1
  311. package/obsidian/Modals/minimizable-modal/package.json +6 -0
  312. package/obsidian/editor-lock/package.json +6 -0
  313. package/package.json +1 -1
  314. package/dist/dev/main.js +0 -30208
  315. package/dist/dev/manifest.json +0 -9
@@ -0,0 +1,124 @@
1
+ /// <reference path="./library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Disposable utilities for `using` / `await using` declarations.
6
+ */
7
+ import type { Promisable } from 'type-fest';
8
+ /**
9
+ * Determines how a {@link CallbackDisposable} or {@link AsyncCallbackDisposable} behaves when it is
10
+ * disposed more than once.
11
+ */
12
+ export declare enum MultipleDisposeBehavior {
13
+ /**
14
+ * Invoke the callback on every dispose.
15
+ */
16
+ Invoke = 0,
17
+ /**
18
+ * Invoke the callback on the first dispose only; subsequent disposes are no-ops.
19
+ */
20
+ Ignore = 1,
21
+ /**
22
+ * Invoke the callback on the first dispose only; subsequent disposes throw.
23
+ */
24
+ Throw = 2
25
+ }
26
+ /**
27
+ * The parameters for constructing an {@link AsyncCallbackDisposable}.
28
+ */
29
+ export interface AsyncCallbackDisposableConstructorParams {
30
+ /**
31
+ * The callback to execute when disposed.
32
+ */
33
+ readonly callback: AsyncDisposeCallback;
34
+ /**
35
+ * How the disposable behaves when disposed more than once.
36
+ *
37
+ * @default {@link MultipleDisposeBehavior.Invoke}
38
+ */
39
+ readonly multipleDisposeBehavior?: MultipleDisposeBehavior;
40
+ }
41
+ /**
42
+ * A callback invoked when an {@link AsyncCallbackDisposable} is disposed.
43
+ */
44
+ export type AsyncDisposeCallback = (this: void) => Promisable<void>;
45
+ /**
46
+ * The parameters for constructing a {@link CallbackDisposable}.
47
+ */
48
+ export interface CallbackDisposableConstructorParams {
49
+ /**
50
+ * The callback to execute when disposed.
51
+ */
52
+ readonly callback: DisposeCallback;
53
+ /**
54
+ * How the disposable behaves when disposed more than once.
55
+ *
56
+ * @default {@link MultipleDisposeBehavior.Invoke}
57
+ */
58
+ readonly multipleDisposeBehavior?: MultipleDisposeBehavior;
59
+ }
60
+ /**
61
+ * A callback invoked when a {@link CallbackDisposable} is disposed.
62
+ */
63
+ export type DisposeCallback = (this: void) => void;
64
+ /**
65
+ * An async disposable that executes a callback when disposed via `await using` (or a manual
66
+ * `await disposable[Symbol.asyncDispose]()`).
67
+ */
68
+ export declare class AsyncCallbackDisposable implements AsyncDisposable {
69
+ private readonly callback;
70
+ private isDisposed;
71
+ private readonly multipleDisposeBehavior;
72
+ /**
73
+ * Creates a new instance of {@link AsyncCallbackDisposable}.
74
+ *
75
+ * @param params - The parameters.
76
+ */
77
+ constructor(params: AsyncCallbackDisposableConstructorParams);
78
+ /**
79
+ * Disposes the object by executing the callback.
80
+ *
81
+ * This method is called automatically when the object is used in an `await using` declaration. It
82
+ * can also be called manually. The behavior on a second and later dispose is controlled by
83
+ * {@link AsyncCallbackDisposableConstructorParams.multipleDisposeBehavior}.
84
+ *
85
+ * @returns A {@link Promise} that resolves once the callback completes.
86
+ */
87
+ [Symbol.asyncDispose](): Promise<void>;
88
+ }
89
+ /**
90
+ * A disposable that executes a callback when disposed.
91
+ */
92
+ export declare class CallbackDisposable implements Disposable {
93
+ private readonly callback;
94
+ private isDisposed;
95
+ private readonly multipleDisposeBehavior;
96
+ /**
97
+ * Creates a new instance of {@link CallbackDisposable}.
98
+ *
99
+ * @param params - The parameters.
100
+ */
101
+ constructor(params: CallbackDisposableConstructorParams);
102
+ /**
103
+ * Disposes the object by executing the callback.
104
+ *
105
+ * This method is called automatically when the object is used in a `using` declaration. It can also
106
+ * be called manually. The behavior on a second and later dispose is controlled by
107
+ * {@link CallbackDisposableConstructorParams.multipleDisposeBehavior}.
108
+ */
109
+ [Symbol.dispose](): void;
110
+ }
111
+ /**
112
+ * Type guard to check if an object implements the {@link AsyncDisposable} interface.
113
+ *
114
+ * @param obj - the object to check for the {@link AsyncDisposable} interface
115
+ * @returns Whether the object implements the {@link AsyncDisposable} interface
116
+ */
117
+ export declare function isAsyncDisposable(obj: unknown): obj is AsyncDisposable;
118
+ /**
119
+ * Type guard to check if an object implements the {@link Disposable} interface.
120
+ *
121
+ * @param obj - the object to check for the {@link Disposable} interface
122
+ * @returns Whether the object implements the {@link Disposable} interface
123
+ */
124
+ export declare function isDisposable(obj: unknown): obj is Disposable;
@@ -0,0 +1,122 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ import { assertNever } from "./type-guards.mjs";
25
+ var MultipleDisposeBehavior = /* @__PURE__ */ ((MultipleDisposeBehavior2) => {
26
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Invoke"] = 0] = "Invoke";
27
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Ignore"] = 1] = "Ignore";
28
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Throw"] = 2] = "Throw";
29
+ return MultipleDisposeBehavior2;
30
+ })(MultipleDisposeBehavior || {});
31
+ class AsyncCallbackDisposable {
32
+ callback;
33
+ isDisposed = false;
34
+ multipleDisposeBehavior;
35
+ /**
36
+ * Creates a new instance of {@link AsyncCallbackDisposable}.
37
+ *
38
+ * @param params - The parameters.
39
+ */
40
+ constructor(params) {
41
+ this.callback = params.callback;
42
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 0 /* Invoke */;
43
+ }
44
+ /**
45
+ * Disposes the object by executing the callback.
46
+ *
47
+ * This method is called automatically when the object is used in an `await using` declaration. It
48
+ * can also be called manually. The behavior on a second and later dispose is controlled by
49
+ * {@link AsyncCallbackDisposableConstructorParams.multipleDisposeBehavior}.
50
+ *
51
+ * @returns A {@link Promise} that resolves once the callback completes.
52
+ */
53
+ async [Symbol.asyncDispose]() {
54
+ if (this.isDisposed) {
55
+ switch (this.multipleDisposeBehavior) {
56
+ case 1 /* Ignore */:
57
+ return;
58
+ case 0 /* Invoke */:
59
+ break;
60
+ case 2 /* Throw */:
61
+ throw new Error("This AsyncCallbackDisposable has already been disposed.");
62
+ default:
63
+ assertNever(this.multipleDisposeBehavior);
64
+ }
65
+ }
66
+ this.isDisposed = true;
67
+ await this.callback();
68
+ }
69
+ }
70
+ class CallbackDisposable {
71
+ callback;
72
+ isDisposed = false;
73
+ multipleDisposeBehavior;
74
+ /**
75
+ * Creates a new instance of {@link CallbackDisposable}.
76
+ *
77
+ * @param params - The parameters.
78
+ */
79
+ constructor(params) {
80
+ this.callback = params.callback;
81
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 0 /* Invoke */;
82
+ }
83
+ /**
84
+ * Disposes the object by executing the callback.
85
+ *
86
+ * This method is called automatically when the object is used in a `using` declaration. It can also
87
+ * be called manually. The behavior on a second and later dispose is controlled by
88
+ * {@link CallbackDisposableConstructorParams.multipleDisposeBehavior}.
89
+ */
90
+ [Symbol.dispose]() {
91
+ if (this.isDisposed) {
92
+ switch (this.multipleDisposeBehavior) {
93
+ case 1 /* Ignore */:
94
+ return;
95
+ case 0 /* Invoke */:
96
+ break;
97
+ case 2 /* Throw */:
98
+ throw new Error("This CallbackDisposable has already been disposed.");
99
+ default:
100
+ assertNever(this.multipleDisposeBehavior);
101
+ }
102
+ }
103
+ this.isDisposed = true;
104
+ this.callback();
105
+ }
106
+ }
107
+ function isAsyncDisposable(obj) {
108
+ const asyncDisposable = obj;
109
+ return !!asyncDisposable[Symbol.asyncDispose];
110
+ }
111
+ function isDisposable(obj) {
112
+ const disposable = obj;
113
+ return !!disposable[Symbol.dispose];
114
+ }
115
+ export {
116
+ AsyncCallbackDisposable,
117
+ CallbackDisposable,
118
+ MultipleDisposeBehavior,
119
+ isAsyncDisposable,
120
+ isDisposable
121
+ };
122
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rpc3Bvc2FibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgYSB7QGxpbmsgQ2FsbGJhY2tEaXNwb3NhYmxlfSBvciB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGJlaGF2ZXMgd2hlbiBpdCBpc1xuICogZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gKi9cbmV4cG9ydCBlbnVtIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gZXZlcnkgZGlzcG9zZS5cbiAgICovXG4gIEludm9rZSxcblxuICAvKipcbiAgICogSW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgZmlyc3QgZGlzcG9zZSBvbmx5OyBzdWJzZXF1ZW50IGRpc3Bvc2VzIGFyZSBuby1vcHMuXG4gICAqL1xuICBJZ25vcmUsXG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIGZpcnN0IGRpc3Bvc2Ugb25seTsgc3Vic2VxdWVudCBkaXNwb3NlcyB0aHJvdy5cbiAgICovXG4gIFRocm93XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrOiBBc3luY0Rpc3Bvc2VDYWxsYmFjaztcblxuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogQSBjYWxsYmFjayBpbnZva2VkIHdoZW4gYW4ge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfSBpcyBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNEaXNwb3NlQ2FsbGJhY2sgPSAodGhpczogdm9pZCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2tEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrOiBEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICh0aGlzOiB2b2lkKSA9PiB2b2lkO1xuXG4vKipcbiAqIEFuIGFzeW5jIGRpc3Bvc2FibGUgdGhhdCBleGVjdXRlcyBhIGNhbGxiYWNrIHdoZW4gZGlzcG9zZWQgdmlhIGBhd2FpdCB1c2luZ2AgKG9yIGEgbWFudWFsXG4gKiBgYXdhaXQgZGlzcG9zYWJsZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZSBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsbGJhY2s6IEFzeW5jRGlzcG9zZUNhbGxiYWNrO1xuICBwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuY2FsbGJhY2sgPSBwYXJhbXMuY2FsbGJhY2s7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2U7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIG9iamVjdCBieSBleGVjdXRpbmcgdGhlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBvYmplY3QgaXMgdXNlZCBpbiBhbiBgYXdhaXQgdXNpbmdgIGRlY2xhcmF0aW9uLiBJdFxuICAgKiBjYW4gYWxzbyBiZSBjYWxsZWQgbWFudWFsbHkuIFRoZSBiZWhhdmlvciBvbiBhIHNlY29uZCBhbmQgbGF0ZXIgZGlzcG9zZSBpcyBjb250cm9sbGVkIGJ5XG4gICAqIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjYWxsYmFjayBjb21wbGV0ZXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvcikge1xuICAgICAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTpcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSW52b2tlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLlRocm93OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydE5ldmVyKHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5jYWxsYmFjaygpO1xuICB9XG59XG5cbi8qKlxuICogQSBkaXNwb3NhYmxlIHRoYXQgZXhlY3V0ZXMgYSBjYWxsYmFjayB3aGVuIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgY2xhc3MgQ2FsbGJhY2tEaXNwb3NhYmxlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsbGJhY2s6IERpc3Bvc2VDYWxsYmFjaztcbiAgcHJpdmF0ZSBpc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuY2FsbGJhY2sgPSBwYXJhbXMuY2FsbGJhY2s7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2U7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIG9iamVjdCBieSBleGVjdXRpbmcgdGhlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBvYmplY3QgaXMgdXNlZCBpbiBhIGB1c2luZ2AgZGVjbGFyYXRpb24uIEl0IGNhbiBhbHNvXG4gICAqIGJlIGNhbGxlZCBtYW51YWxseS4gVGhlIGJlaGF2aW9yIG9uIGEgc2Vjb25kIGFuZCBsYXRlciBkaXNwb3NlIGlzIGNvbnRyb2xsZWQgYnlcbiAgICoge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfS5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvcikge1xuICAgICAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTpcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSW52b2tlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLlRocm93OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBDYWxsYmFja0Rpc3Bvc2FibGUgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZC4nKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnROZXZlcih0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUob2JqOiB1bmtub3duKTogb2JqIGlzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZSA9IG9iaiBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIHJldHVybiAhIWFzeW5jRGlzcG9zYWJsZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBvYmogLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlfSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlzcG9zYWJsZShvYmo6IHVua25vd24pOiBvYmogaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSBvYmogYXMgUGFydGlhbDxEaXNwb3NhYmxlPjtcbiAgcmV0dXJuICEhZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsbUJBQW1CO0FBTXJCLElBQUssMEJBQUwsa0JBQUtBLDZCQUFMO0FBSUwsRUFBQUEsa0RBQUE7QUFLQSxFQUFBQSxrREFBQTtBQUtBLEVBQUFBLGtEQUFBO0FBZFUsU0FBQUE7QUFBQSxHQUFBO0FBaUVMLE1BQU0sd0JBQW1EO0FBQUEsRUFDN0M7QUFBQSxFQUNULGFBQWE7QUFBQSxFQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUFrRDtBQUNuRSxTQUFLLFdBQVcsT0FBTztBQUN2QixTQUFLLDBCQUEwQixPQUFPLDJCQUEyQjtBQUFBLEVBQ25FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxRQUFJLEtBQUssWUFBWTtBQUNuQixjQUFRLEtBQUsseUJBQXlCO0FBQUEsUUFDcEMsS0FBSztBQUNIO0FBQUEsUUFDRixLQUFLO0FBQ0g7QUFBQSxRQUNGLEtBQUs7QUFDSCxnQkFBTSxJQUFJLE1BQU0seURBQXlEO0FBQUEsUUFDM0U7QUFDRSxzQkFBWSxLQUFLLHVCQUF1QjtBQUFBLE1BQzVDO0FBQUEsSUFDRjtBQUVBLFNBQUssYUFBYTtBQUNsQixVQUFNLEtBQUssU0FBUztBQUFBLEVBQ3RCO0FBQ0Y7QUFLTyxNQUFNLG1CQUF5QztBQUFBLEVBQ25DO0FBQUEsRUFDVCxhQUFhO0FBQUEsRUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBNkM7QUFDOUQsU0FBSyxXQUFXLE9BQU87QUFDdkIsU0FBSywwQkFBMEIsT0FBTywyQkFBMkI7QUFBQSxFQUNuRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTQSxDQUFRLE9BQU8sT0FBTyxJQUFVO0FBQzlCLFFBQUksS0FBSyxZQUFZO0FBQ25CLGNBQVEsS0FBSyx5QkFBeUI7QUFBQSxRQUNwQyxLQUFLO0FBQ0g7QUFBQSxRQUNGLEtBQUs7QUFDSDtBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLElBQUksTUFBTSxvREFBb0Q7QUFBQSxRQUN0RTtBQUNFLHNCQUFZLEtBQUssdUJBQXVCO0FBQUEsTUFDNUM7QUFBQSxJQUNGO0FBRUEsU0FBSyxhQUFhO0FBQ2xCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQ0Y7QUFRTyxTQUFTLGtCQUFrQixLQUFzQztBQUN0RSxRQUFNLGtCQUFrQjtBQUN4QixTQUFPLENBQUMsQ0FBQyxnQkFBZ0IsT0FBTyxZQUFZO0FBQzlDO0FBUU8sU0FBUyxhQUFhLEtBQWlDO0FBQzVELFFBQU0sYUFBYTtBQUNuQixTQUFPLENBQUMsQ0FBQyxXQUFXLE9BQU8sT0FBTztBQUNwQzsiLAogICJuYW1lcyI6IFsiTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IiXQp9Cg==
@@ -74,7 +74,8 @@ export declare class SilentError extends Error {
74
74
  */
75
75
  export declare function emitAsyncErrorEvent(asyncError: unknown): void;
76
76
  /**
77
- * Converts an error to a string representation, including nested causes with indentation.
77
+ * Converts an error to a string representation, including nested causes and the aggregated errors of
78
+ * an `AggregateError`, with indentation.
78
79
  *
79
80
  * @param error - The error to convert to a string.
80
81
  * @returns The string representation of the error.
@@ -98,9 +99,9 @@ export declare function printError(error: unknown, console?: Console): void;
98
99
  * Registers an event handler for asynchronous errors.
99
100
  *
100
101
  * @param handler - The handler function to be called when an asynchronous error event occurs.
101
- * @returns A function to unregister the handler.
102
+ * @returns A {@link Disposable} that unregisters the handler when disposed, for use with `using`.
102
103
  */
103
- export declare function registerAsyncErrorEventHandler(handler: (asyncError: unknown) => void): () => void;
104
+ export declare function registerAsyncErrorEventHandler(handler: (asyncError: unknown) => void): Disposable;
104
105
  /**
105
106
  * Throws an error with the specified message.
106
107
  *
@@ -22,6 +22,7 @@ if you want to view the source, please visit the github repository of this plugi
22
22
  })();
23
23
 
24
24
  import { AsyncEvents } from "./async-events.mjs";
25
+ import { CallbackDisposable } from "./disposable.mjs";
25
26
  import { ensureNonNullable } from "./type-guards.mjs";
26
27
  const errorAsyncEvents = new AsyncEvents();
27
28
  errorAsyncEvents.on("asyncError", handleAsyncError);
@@ -101,16 +102,12 @@ function errorToString(error) {
101
102
  }
102
103
  let message = error.stack ?? `${error.name}: ${error.message}`;
103
104
  if (error.cause !== void 0) {
104
- const causeStrLines = errorToString(error.cause).split("\n");
105
- message += `
106
- ${generateStackTraceLine("Caused by:")}`;
107
- for (const line of causeStrLines) {
108
- if (!line.trim()) {
109
- continue;
110
- }
111
- message += line.startsWith(STACK_TRACE_PREFIX) ? `
112
- ${line}` : `
113
- ${generateStackTraceLine(line)}`;
105
+ message = appendNestedError(message, error.cause, "Caused by:");
106
+ }
107
+ if (error instanceof AggregateError) {
108
+ const aggregatedErrors = error.errors;
109
+ for (const [index, aggregatedError] of aggregatedErrors.entries()) {
110
+ message = appendNestedError(message, aggregatedError, `Aggregated error #${String(index + 1)}:`);
114
111
  }
115
112
  }
116
113
  return message;
@@ -127,13 +124,28 @@ function printError(error, console) {
127
124
  }
128
125
  function registerAsyncErrorEventHandler(handler) {
129
126
  const eventRef = errorAsyncEvents.on("asyncError", handler);
130
- return () => {
131
- errorAsyncEvents.offref(eventRef);
132
- };
127
+ return new CallbackDisposable({
128
+ callback: () => {
129
+ errorAsyncEvents.offref(eventRef);
130
+ }
131
+ });
133
132
  }
134
133
  function throwExpression(error) {
135
134
  throw error;
136
135
  }
136
+ function appendNestedError(message, nestedError, title) {
137
+ let result = `${message}
138
+ ${generateStackTraceLine(title)}`;
139
+ for (const line of errorToString(nestedError).split("\n")) {
140
+ if (!line.trim()) {
141
+ continue;
142
+ }
143
+ result += line.startsWith(STACK_TRACE_PREFIX) ? `
144
+ ${line}` : `
145
+ ${generateStackTraceLine(line)}`;
146
+ }
147
+ return result;
148
+ }
137
149
  function generateStackTraceLine(title) {
138
150
  return `${STACK_TRACE_PREFIX} --- ${title} --- (0)`;
139
151
  }
@@ -152,4 +164,4 @@ export {
152
164
  registerAsyncErrorEventHandler,
153
165
  throwExpression
154
166
  };
155
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG4vKipcbiAqIEEgbWVzc2FnZSBvZiB0aGUgQXN5bmNXcmFwcGVyRXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UgPSAnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkIGV4ZWN1dGluZyBhc3luYyBvcGVyYXRpb24nO1xuXG5jb25zdCBTVEFDS19UUkFDRV9QUkVGSVggPSAnICAgIGF0JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIEN1c3RvbVN0YWNrVHJhY2VFcnJvcn0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tU3RhY2tUcmFjZUVycm9yQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNhdXNlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHJlYWRvbmx5IGNhdXNlOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tU3RhY2tUcmFjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ3VzdG9tU3RhY2tUcmFjZUVycm9yQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBjb25zdCB7IGNhdXNlLCBtZXNzYWdlLCBzdGFja1RyYWNlIH0gPSBwYXJhbXM7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQ3VzdG9tU3RhY2tUcmFjZUVycm9yJztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIGA/LmAgaXMgdXNlZCB0byBzdXBwb3J0IGlPUyBiZWZvcmUgMTcuMi5cbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT8uKHRoaXMsIEN1c3RvbVN0YWNrVHJhY2VFcnJvcik7XG5cbiAgICBsZXQgcm9vdENhdXNlID0gY2F1c2U7XG4gICAgY29uc3QgcGFyZW50Q2F1c2VzID0gbmV3IFNldDxDdXN0b21TdGFja1RyYWNlRXJyb3I+KCk7XG4gICAgd2hpbGUgKHJvb3RDYXVzZSBpbnN0YW5jZW9mIEN1c3RvbVN0YWNrVHJhY2VFcnJvcikge1xuICAgICAgaWYgKHBhcmVudENhdXNlcy5oYXMocm9vdENhdXNlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NpcmN1bGFyIGNhdXNlIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgICBwYXJlbnRDYXVzZXMuYWRkKHJvb3RDYXVzZSk7XG4gICAgICByb290Q2F1c2UgPSByb290Q2F1c2UuY2F1c2U7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxTdGFja0xpbmVzID0gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5zdGFjaykuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCBFUlJPUl9IRUFERVJfUkVHX0VYUCA9IC9eXFx3KkVycm9yKD86OiB8JCkvO1xuICAgIGlmIChFUlJPUl9IRUFERVJfUkVHX0VYUC50ZXN0KGVuc3VyZU5vbk51bGxhYmxlKHN0YWNrTGluZXNbMF0pKSkge1xuICAgICAgc3RhY2tMaW5lcy5zcGxpY2UoMCwgMSk7XG4gICAgfVxuICAgIG9yaWdpbmFsU3RhY2tMaW5lcy5zcGxpY2UoMSwgb3JpZ2luYWxTdGFja0xpbmVzLmxlbmd0aCAtIDEsIC4uLnN0YWNrTGluZXMpO1xuICAgIHRoaXMuc3RhY2sgPSBvcmlnaW5hbFN0YWNrTGluZXMuam9pbignXFxuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGEgbm9uLWBFcnJvcmAgdmFsdWUgdGhhdCB3YXMgdGhyb3duLCBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBgY2F1c2VgLlxuICovXG5leHBvcnQgY2xhc3MgRXJyb3JXcmFwcGVyIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBFcnJvcldyYXBwZXIuXG4gICAqXG4gICAqIEBwYXJhbSB0aHJvd25WYWx1ZSAtIFRoZSBvcmlnaW5hbCBub24tYEVycm9yYCB2YWx1ZSB0aGF0IHdhcyB0aHJvd24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGhyb3duVmFsdWU6IHVua25vd24pIHtcbiAgICBzdXBlcihgQSBub24tRXJyb3IgdmFsdWUgd2FzIHRocm93bjogJHtTdHJpbmcodGhyb3duVmFsdWUpfWAsIHsgY2F1c2U6IHRocm93blZhbHVlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdFcnJvcldyYXBwZXInO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gYD8uYCBpcyB1c2VkIHRvIHN1cHBvcnQgaU9TIGJlZm9yZSAxNy4yLlxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPy4odGhpcywgRXJyb3JXcmFwcGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGFueSB0aHJvd24gdmFsdWUgdG8gYW4gYEVycm9yYC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgdW5jaGFuZ2VkIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIHdyYXBzIGl0IGluIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgdGhyb3duIHZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgQW4gYEVycm9yYCBpbnN0YW5jZTogdGhlIG9yaWdpbmFsIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGhyb3duVmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gICAgcmV0dXJuIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB0aHJvd25WYWx1ZSA6IG5ldyBFcnJvcldyYXBwZXIodGhyb3duVmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCBpcyBub3QgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpbGVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTaWxlbnRFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NpbGVudEVycm9yJztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIGA/LmAgaXMgdXNlZCB0byBzdXBwb3J0IGlPUyBiZWZvcmUgMTcuMi5cbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT8uKHRoaXMsIFNpbGVudEVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBlcnJvciB0byBlbWl0IGFzIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRBc3luY0Vycm9yRXZlbnQoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBlcnJvckFzeW5jRXZlbnRzLnRyaWdnZXIoJ2FzeW5jRXJyb3InLCBhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlcnJvciB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgd2l0aCBpbmRlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydCB0byBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cblxuICBsZXQgbWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgaWYgKGVycm9yLmNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjYXVzZVN0ckxpbmVzID0gZXJyb3JUb1N0cmluZyhlcnJvci5jYXVzZSkuc3BsaXQoJ1xcbicpO1xuICAgIG1lc3NhZ2UgKz0gYFxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZSgnQ2F1c2VkIGJ5OicpfWA7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGNhdXNlU3RyTGluZXMpIHtcbiAgICAgIGlmICghbGluZS50cmltKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtZXNzYWdlICs9IGxpbmUuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpXG4gICAgICAgID8gYFxcbiR7bGluZX1gXG4gICAgICAgIDogYFxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZShsaW5lKX1gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyBFcnJvciBwcmVmaXggYW5kIGBnZXRTdGFja1RyYWNlYCBmdW5jdGlvbiBjYWxsXG4gIGNvbnN0IEFERElUSU9OQUxfRlJBTUVTX1RPX1NLSVAgPSAyO1xuICBjb25zdCBzdGFjayA9IGVuc3VyZU5vbk51bGxhYmxlKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5zbGljZShmcmFtZXNUb1NraXAgKyBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYW4gZXJyb3IgdG8gdGhlIGNvbnNvbGUsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIGFuZCBvcHRpb25hbCBBTlNJIHNlcXVlbmNlIGNsZWFyaW5nLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwcmludC5cbiAqIEBwYXJhbSBjb25zb2xlIC0gVGhlIGNvbnNvbGUgdG8gcHJpbnQgdG8gKGRlZmF1bHQ6IGBnbG9iYWxUaGlzLmNvbnNvbGVgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50RXJyb3IoZXJyb3I6IHVua25vd24sIGNvbnNvbGU/OiBDb25zb2xlKTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzIC0tIEFjdGl2ZWx5IHVzZSBnbG9iYWxUaGlzLlxuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50IG9jY3Vycy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gdW5yZWdpc3RlciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBldmVudFJlZiA9IGVycm9yQXN5bmNFdmVudHMub24oJ2FzeW5jRXJyb3InLCBoYW5kbGVyKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBlcnJvckFzeW5jRXZlbnRzLm9mZnJlZihldmVudFJlZik7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byB0aHJvdy5cbiAqIEB0aHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXhwcmVzc2lvbihlcnJvcjogdW5rbm93bik6IG5ldmVyIHtcbiAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhY2tUcmFjZUxpbmUodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTVEFDS19UUkFDRV9QUkVGSVh9IC0tLSAke3RpdGxlfSAtLS0gKDApYDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGFzeW5jaHJvbm91cyBlcnJvcnMgYnkgcHJpbnRpbmcgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgdG8gaGFuZGxlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVBc3luY0Vycm9yKGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgcHJpbnRFcnJvcihhc3luY0Vycm9yKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7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
167
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbmludGVyZmFjZSBFcnJvckFzeW5jRXZlbnRNYXAge1xuICBhc3luY0Vycm9yOiBbZXJyb3I6IHVua25vd25dO1xufVxuXG5jb25zdCBlcnJvckFzeW5jRXZlbnRzID0gbmV3IEFzeW5jRXZlbnRzPEVycm9yQXN5bmNFdmVudE1hcD4oKTtcbmVycm9yQXN5bmNFdmVudHMub24oJ2FzeW5jRXJyb3InLCBoYW5kbGVBc3luY0Vycm9yKTtcblxuLyoqXG4gKiBBIG1lc3NhZ2Ugb2YgdGhlIEFzeW5jV3JhcHBlckVycm9yLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfV1JBUFBFUl9FUlJPUl9NRVNTQUdFID0gJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZCBleGVjdXRpbmcgYXN5bmMgb3BlcmF0aW9uJztcblxuY29uc3QgU1RBQ0tfVFJBQ0VfUFJFRklYID0gJyAgICBhdCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBDdXN0b21TdGFja1RyYWNlRXJyb3J9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVN0YWNrVHJhY2VFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgd3JhcHMgYW4gZXJyb3Igd2l0aCBhIGN1c3RvbSBzdGFjayB0cmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbVN0YWNrVHJhY2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEN1c3RvbVN0YWNrVHJhY2VFcnJvckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgbWVzc2FnZSwgc3RhY2tUcmFjZSB9ID0gcGFyYW1zO1xuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0N1c3RvbVN0YWNrVHJhY2VFcnJvcic7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBgPy5gIGlzIHVzZWQgdG8gc3VwcG9ydCBpT1MgYmVmb3JlIDE3LjIuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/Lih0aGlzLCBDdXN0b21TdGFja1RyYWNlRXJyb3IpO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsU3RhY2tMaW5lcyA9IGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuc3RhY2spLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCBzdGFja0xpbmVzID0gc3RhY2tUcmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgRVJST1JfSEVBREVSX1JFR19FWFAgPSAvXlxcdypFcnJvcig/OjogfCQpLztcbiAgICBpZiAoRVJST1JfSEVBREVSX1JFR19FWFAudGVzdChlbnN1cmVOb25OdWxsYWJsZShzdGFja0xpbmVzWzBdKSkpIHtcbiAgICAgIHN0YWNrTGluZXMuc3BsaWNlKDAsIDEpO1xuICAgIH1cbiAgICBvcmlnaW5hbFN0YWNrTGluZXMuc3BsaWNlKDEsIG9yaWdpbmFsU3RhY2tMaW5lcy5sZW5ndGggLSAxLCAuLi5zdGFja0xpbmVzKTtcbiAgICB0aGlzLnN0YWNrID0gb3JpZ2luYWxTdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhIG5vbi1gRXJyb3JgIHZhbHVlIHRoYXQgd2FzIHRocm93biwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYGNhdXNlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9yV3JhcHBlciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXJyb3JXcmFwcGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgb3JpZ2luYWwgbm9uLWBFcnJvcmAgdmFsdWUgdGhhdCB3YXMgdGhyb3duLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRocm93blZhbHVlOiB1bmtub3duKSB7XG4gICAgc3VwZXIoYEEgbm9uLUVycm9yIHZhbHVlIHdhcyB0aHJvd246ICR7U3RyaW5nKHRocm93blZhbHVlKX1gLCB7IGNhdXNlOiB0aHJvd25WYWx1ZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnRXJyb3JXcmFwcGVyJztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIGA/LmAgaXMgdXNlZCB0byBzdXBwb3J0IGlPUyBiZWZvcmUgMTcuMi5cbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT8uKHRoaXMsIEVycm9yV3JhcHBlcik7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhbnkgdGhyb3duIHZhbHVlIHRvIGFuIGBFcnJvcmAuXG4gICAqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIHVuY2hhbmdlZCBpZiBpdCBpcyBhbHJlYWR5IGFuIGBFcnJvcmAsIG90aGVyd2lzZSB3cmFwcyBpdCBpbiBhbiB7QGxpbmsgRXJyb3JXcmFwcGVyfS5cbiAgICpcbiAgICogQHBhcmFtIHRocm93blZhbHVlIC0gVGhlIHRocm93biB2YWx1ZSB0byBub3JtYWxpemUuXG4gICAqIEByZXR1cm5zIEFuIGBFcnJvcmAgaW5zdGFuY2U6IHRoZSBvcmlnaW5hbCB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IGFuIGBFcnJvcmAsIG90aGVyd2lzZSBhbiB7QGxpbmsgRXJyb3JXcmFwcGVyfS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHRocm93blZhbHVlOiB1bmtub3duKTogRXJyb3Ige1xuICAgIHJldHVybiB0aHJvd25WYWx1ZSBpbnN0YW5jZW9mIEVycm9yID8gdGhyb3duVmFsdWUgOiBuZXcgRXJyb3JXcmFwcGVyKHRocm93blZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgbm90IHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaWxlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2lsZW50RXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTaWxlbnRFcnJvcic7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBgPy5gIGlzIHVzZWQgdG8gc3VwcG9ydCBpT1MgYmVmb3JlIDE3LjIuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/Lih0aGlzLCBTaWxlbnRFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgZXJyb3IgdG8gZW1pdCBhcyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgZXJyb3JBc3luY0V2ZW50cy50cmlnZ2VyKCdhc3luY0Vycm9yJywgYXN5bmNFcnJvcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXJyb3IgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIGFuZCB0aGUgYWdncmVnYXRlZCBlcnJvcnMgb2ZcbiAqIGFuIGBBZ2dyZWdhdGVFcnJvcmAsIHdpdGggaW5kZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSBlcnJvci5zdGFjayA/PyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbWVzc2FnZSA9IGFwcGVuZE5lc3RlZEVycm9yKG1lc3NhZ2UsIGVycm9yLmNhdXNlLCAnQ2F1c2VkIGJ5OicpO1xuICB9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yKSB7XG4gICAgY29uc3QgYWdncmVnYXRlZEVycm9yczogcmVhZG9ubHkgdW5rbm93bltdID0gZXJyb3IuZXJyb3JzO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBhZ2dyZWdhdGVkRXJyb3JdIG9mIGFnZ3JlZ2F0ZWRFcnJvcnMuZW50cmllcygpKSB7XG4gICAgICBtZXNzYWdlID0gYXBwZW5kTmVzdGVkRXJyb3IobWVzc2FnZSwgYWdncmVnYXRlZEVycm9yLCBgQWdncmVnYXRlZCBlcnJvciAjJHtTdHJpbmcoaW5kZXggKyAxKX06YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXNzYWdlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgYXMgYSBzdHJpbmcsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICpcbiAqIEBwYXJhbSBmcmFtZXNUb1NraXAgLSBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YWNrVHJhY2UoZnJhbWVzVG9Ta2lwID0gMCk6IHN0cmluZyB7XG4gIC8vIFNraXBwaW5nIEVycm9yIHByZWZpeCBhbmQgYGdldFN0YWNrVHJhY2VgIGZ1bmN0aW9uIGNhbGxcbiAgY29uc3QgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCA9IDI7XG4gIGNvbnN0IHN0YWNrID0gZW5zdXJlTm9uTnVsbGFibGUobmV3IEVycm9yKCkuc3RhY2spO1xuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgcmV0dXJuIGxpbmVzLnNsaWNlKGZyYW1lc1RvU2tpcCArIEFERElUSU9OQUxfRlJBTUVTX1RPX1NLSVApLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIFByaW50cyBhbiBlcnJvciB0byB0aGUgY29uc29sZSwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgYW5kIG9wdGlvbmFsIEFOU0kgc2VxdWVuY2UgY2xlYXJpbmcuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHByaW50LlxuICogQHBhcmFtIGNvbnNvbGUgLSBUaGUgY29uc29sZSB0byBwcmludCB0byAoZGVmYXVsdDogYGdsb2JhbFRoaXMuY29uc29sZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRFcnJvcihlcnJvcjogdW5rbm93biwgY29uc29sZT86IENvbnNvbGUpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvbm8tZ2xvYmFsLXRoaXMgLS0gQWN0aXZlbHkgdXNlIGdsb2JhbFRoaXMuXG4gIGNvbnNvbGUgPz89IGdsb2JhbFRoaXMuY29uc29sZTtcbiAgY29uc29sZS5lcnJvcihlcnJvclRvU3RyaW5nKGVycm9yKSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGhhbmRsZXIgZm9yIGFzeW5jaHJvbm91cyBlcnJvcnMuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQgb2NjdXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICBjb25zdCBldmVudFJlZiA9IGVycm9yQXN5bmNFdmVudHMub24oJ2FzeW5jRXJyb3InLCBoYW5kbGVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBlcnJvckFzeW5jRXZlbnRzLm9mZnJlZihldmVudFJlZik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHRocm93LlxuICogQHRocm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFeHByZXNzaW9uKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICB0aHJvdyBlcnJvcjtcbn1cblxuZnVuY3Rpb24gYXBwZW5kTmVzdGVkRXJyb3IobWVzc2FnZTogc3RyaW5nLCBuZXN0ZWRFcnJvcjogdW5rbm93biwgdGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCByZXN1bHQgPSBgJHttZXNzYWdlfVxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZSl9YDtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGVycm9yVG9TdHJpbmcobmVzdGVkRXJyb3IpLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmICghbGluZS50cmltKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXN1bHQgKz0gbGluZS5zdGFydHNXaXRoKFNUQUNLX1RSQUNFX1BSRUZJWClcbiAgICAgID8gYFxcbiR7bGluZX1gXG4gICAgICA6IGBcXG4ke2dlbmVyYXRlU3RhY2tUcmFjZUxpbmUobGluZSl9YDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7U1RBQ0tfVFJBQ0VfUFJFRklYfSAtLS0gJHt0aXRsZX0gLS0tICgwKWA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBhc3luY2hyb25vdXMgZXJyb3JzIGJ5IHByaW50aW5nIHRoZW0uXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgYXN5bmNocm9ub3VzIGVycm9yIHRvIGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQXN5bmNFcnJvcihhc3luY0Vycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIHByaW50RXJyb3IoYXN5bmNFcnJvcik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMseUJBQXlCO0FBTWxDLE1BQU0sbUJBQW1CLElBQUksWUFBZ0M7QUFDN0QsaUJBQWlCLEdBQUcsY0FBYyxnQkFBZ0I7QUFLM0MsTUFBTSw4QkFBOEI7QUFFM0MsTUFBTSxxQkFBcUI7QUF5QnBCLE1BQU0sOEJBQThCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNeEMsWUFBWSxRQUFnRDtBQUNqRSxVQUFNLEVBQUUsT0FBTyxTQUFTLFdBQVcs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
@@ -115,9 +115,9 @@ export declare function isLoaded(el: Element): boolean;
115
115
  *
116
116
  * @param node - The node to add the event listener to.
117
117
  * @param callback - The callback to call when the event is triggered.
118
- * @returns A function to remove the event listener.
118
+ * @returns A {@link Disposable} that removes the event listeners when disposed, for use with `using`.
119
119
  */
120
- export declare function onAncestorScrollOrResize(node: Node, callback: () => void): () => void;
120
+ export declare function onAncestorScrollOrResize(node: Node, callback: () => void): Disposable;
121
121
  /**
122
122
  * Converts a number to a string with 'px' appended.
123
123
  *
@@ -21,6 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
+ import { CallbackDisposable } from "./disposable.mjs";
24
25
  function appendCodeBlock(el, code) {
25
26
  el.createEl("strong", { cls: "markdown-rendered code" }, (strong) => {
26
27
  strong.createEl("code", { text: code });
@@ -130,12 +131,14 @@ function onAncestorScrollOrResize(node, callback) {
130
131
  ancestor.addEventListener("scroll", callbackSmooth, { capture: true });
131
132
  ancestor.addEventListener("resize", callbackSmooth, { capture: true });
132
133
  }
133
- return () => {
134
- for (const ancestor of ancestors) {
135
- ancestor.removeEventListener("scroll", callbackSmooth, { capture: true });
136
- ancestor.removeEventListener("resize", callbackSmooth, { capture: true });
134
+ return new CallbackDisposable({
135
+ callback: () => {
136
+ for (const ancestor of ancestors) {
137
+ ancestor.removeEventListener("scroll", callbackSmooth, { capture: true });
138
+ ancestor.removeEventListener("resize", callbackSmooth, { capture: true });
139
+ }
137
140
  }
138
- };
141
+ });
139
142
  function callbackSmooth() {
140
143
  if (isEventTriggered) {
141
144
  return;
@@ -182,4 +185,4 @@ export {
182
185
  toPx,
183
186
  waitUntilConnected
184
187
  };
185
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhlbHBlcnMgZm9yIHdvcmtpbmcgd2l0aCBIVE1MIGVsZW1lbnRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbi8qKlxuICogQSBIVE1MIGVsZW1lbnQgdGhhdCBjYW4gYmUgdmFsaWRhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRvckVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaXMgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgY2hlY2tWYWxpZGl0eSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHJlcG9ydFZhbGlkaXR5KCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3I6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFuIGVycm9yIG1lc3NhZ2Ugb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGVuZHMgYSBjb2RlIGJsb2NrIHRvIHRoZSBnaXZlbiBEb2N1bWVudEZyYWdtZW50IG9yIEhUTUxFbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBEb2N1bWVudEZyYWdtZW50IG9yIEhUTUxFbGVtZW50IHRvIGFwcGVuZCB0aGUgY29kZSBibG9jayB0by5cbiAqIEBwYXJhbSBjb2RlIC0gVGhlIGNvZGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29kZUJsb2NrKGVsOiBEb2N1bWVudEZyYWdtZW50IHwgSFRNTEVsZW1lbnQsIGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5jcmVhdGVFbCgnc3Ryb25nJywgeyBjbHM6ICdtYXJrZG93bi1yZW5kZXJlZCBjb2RlJyB9LCAoc3Ryb25nKSA9PiB7XG4gICAgc3Ryb25nLmNyZWF0ZUVsKCdjb2RlJywgeyB0ZXh0OiBjb2RlIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogRG9tRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVEaXYobyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI2NyZWF0ZUVsfSAob3IgY3JlYXRlU3ZnLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRWxBc3luYzxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogRG9tRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10pID0+IFByb21pc2FibGU8dm9pZD5cbik6IFByb21pc2U8SFRNTEVsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IGVsID0gY3JlYXRlRWwodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihlbCk7XG4gIHJldHVybiBlbDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRG9jdW1lbnRGcmFnbWVudCBhc3luY2hyb25vdXNseS5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBEb2N1bWVudEZyYWdtZW50IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBEb2N1bWVudEZyYWdtZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRBc3luYyhjYWxsYmFjaz86IChlbDogRG9jdW1lbnRGcmFnbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPik6IFByb21pc2U8RG9jdW1lbnRGcmFnbWVudD4ge1xuICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBEb21FbGVtZW50SW5mbyB8IHN0cmluZyxcbiAgY2FsbGJhY2s/OiAoZWw6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZVNwYW4obyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIHtAbGluayBvYnNpZGlhbiNjcmVhdGVTdmd9IChvciBjcmVhdGVFbCwgY29ycmVzcG9uZGluZ2x5KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVN2Z0FzeW5jPEsgZXh0ZW5kcyBrZXlvZiBTVkdFbGVtZW50VGFnTmFtZU1hcD4oXG4gIHRhZzogSyxcbiAgbz86IHN0cmluZyB8IFN2Z0VsZW1lbnRJbmZvLFxuICBjYWxsYmFjaz86IChlbDogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10pID0+IFByb21pc2FibGU8dm9pZD5cbik6IFByb21pc2U8U1ZHRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3Qgc3ZnID0gY3JlYXRlU3ZnKHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3ZnKTtcbiAgcmV0dXJuIHN2Zztcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdGhlIGdpdmVuIGVsZW1lbnQgaXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGVuc3VyZSBpcyBsb2FkZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTG9hZGVkKGVsOiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgIGVsLmluc3RhbmNlT2YoSFRNTEJvZHlFbGVtZW50KVxuICAgIHx8IGVsLmluc3RhbmNlT2YoSFRNTEltYWdlRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxJRnJhbWVFbGVtZW50KVxuICAgIHx8IGVsLmluc3RhbmNlT2YoSFRNTEVtYmVkRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxMaW5rRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxPYmplY3RFbGVtZW50KVxuICAgIHx8IGVsLmluc3RhbmNlT2YoSFRNTFN0eWxlRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxUcmFja0VsZW1lbnQpXG4gICkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgcmVzb2x2ZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWwpLm1hcChlbnN1cmVMb2FkZWQpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB6LWluZGV4IG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGdldCB0aGUgei1pbmRleCBvZi5cbiAqIEByZXR1cm5zIFRoZSB6LWluZGV4IG9mIHRoZSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0WkluZGV4KGVsOiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsMjogRWxlbWVudCB8IG51bGwgPSBlbDtcblxuICB3aGlsZSAoZWwyKSB7XG4gICAgY29uc3QgekluZGV4U3RyID0gZ2V0Q29tcHV0ZWRTdHlsZShlbDIpLnpJbmRleDtcbiAgICBjb25zdCB6SW5kZXggPSBOdW1iZXIucGFyc2VJbnQoekluZGV4U3RyLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oekluZGV4KSkge1xuICAgICAgcmV0dXJuIHpJbmRleDtcbiAgICB9XG4gICAgZWwyID0gZWwyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWwgLSBUaGUgZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBvZmZzZXQgcGFyZW50LCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGVJbk9mZnNldFBhcmVudChlbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50RWwgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gIGlmICghcGFyZW50RWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgcGFyZW50RWxSZWN0ID0gcGFyZW50RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbFJlY3QudG9wIDw9IGVsUmVjdC50b3BcbiAgICAmJiBlbFJlY3QuYm90dG9tIDw9IHBhcmVudEVsUmVjdC5ib3R0b21cbiAgICAmJiBwYXJlbnRFbFJlY3QubGVmdCA8PSBlbFJlY3QubGVmdFxuICAgICYmIGVsUmVjdC5yaWdodCA8PSBwYXJlbnRFbFJlY3QucmlnaHRcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MQm9keUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGFjdGl2ZURvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgYWN0aXZlRG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJztcbiAgfVxuXG4gIGlmIChlbC5pbnN0YW5jZU9mKEhUTUxJbWFnZUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsLmNvbXBsZXRlICYmIGVsLm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbC5jb250ZW50RG9jdW1lbnQ7XG4gIH1cblxuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MRW1iZWRFbGVtZW50KSkge1xuICAgIHJldHVybiAhIWVsLmdldFNWR0RvY3VtZW50KCk7XG4gIH1cblxuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MTGlua0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsLnJlbCA9PT0gJ3N0eWxlc2hlZXQnID8gZWwuc2hlZXQgIT09IG51bGwgOiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsLmluc3RhbmNlT2YoSFRNTE9iamVjdEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWwuY29udGVudERvY3VtZW50IHx8ICEhZWwuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChlbC5pbnN0YW5jZU9mKEhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsLmluc3RhbmNlT2YoSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbC5zaGVldDtcbiAgfVxuXG4gIGlmIChlbC5pbnN0YW5jZU9mKEhUTUxUcmFja0VsZW1lbnQpKSB7XG4gICAgY29uc3QgUkVBRFlfU1RBVEVfTE9BREVEID0gMjtcbiAgICByZXR1cm4gZWwucmVhZHlTdGF0ZSA9PT0gUkVBRFlfU1RBVEVfTE9BREVEO1xuICB9XG5cbiAgcmV0dXJuIGdldExvYWRhYmxlRWxlbWVudHMoZWwpLmV2ZXJ5KGlzTG9hZGVkKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBhbmNlc3RvciBub2RlcyBvZiB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIGFkZCB0aGUgZXZlbnQgbGlzdGVuZXIgdG8uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkFuY2VzdG9yU2Nyb2xsT3JSZXNpemUobm9kZTogTm9kZSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgYW5jZXN0b3JzOiBFdmVudFRhcmdldFtdID0gW107XG4gIGFuY2VzdG9ycy5wdXNoKGFjdGl2ZURvY3VtZW50KTtcbiAgYW5jZXN0b3JzLnB1c2goYWN0aXZlV2luZG93KTtcblxuICBsZXQgY3VycmVudE5vZGU6IE5vZGUgfCBudWxsID0gbm9kZTtcblxuICB3aGlsZSAoY3VycmVudE5vZGUpIHtcbiAgICBhbmNlc3RvcnMucHVzaChjdXJyZW50Tm9kZSk7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgbGV0IGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNhbGxiYWNrU21vb3RoLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBhbmNlc3RvciBvZiBhbmNlc3RvcnMpIHtcbiAgICAgIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNhbGxiYWNrU21vb3RoLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBjYWxsYmFja1Ntb290aCgpOiB2b2lkIHtcbiAgICBpZiAoaXNFdmVudFRyaWdnZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcgd2l0aCAncHgnIGFwcGVuZGVkLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgYXMgYSBzdHJpbmcgd2l0aCAncHgnIGFwcGVuZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QeCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1N0cmluZyh2YWx1ZSl9cHhgO1xufVxuXG4vKipcbiAqIFdhaXRzIHVudGlsIHRoZSBnaXZlbiBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VW50aWxDb25uZWN0ZWQoZWw6IEhUTUxFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmIChlbC5pc0Nvbm5lY3RlZCkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5vbk5vZGVJbnNlcnRlZCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldExvYWRhYmxlRWxlbWVudHMoZWw6IEVsZW1lbnQpOiBFbGVtZW50W10ge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5LCBpbWcsIGlmcmFtZSwgZW1iZWQsIGxpbmssIG9iamVjdCwgc2NyaXB0LCBzdHlsZSwgdHJhY2snKSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJDTyxTQUFTLGdCQUFnQixJQUFvQyxNQUFvQjtBQUN0RixLQUFHLFNBQVMsVUFBVSxFQUFFLEtBQUsseUJBQXlCLEdBQUcsQ0FBQyxXQUFXO0FBQ25FLFdBQU8sU0FBUyxRQUFRLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBQ0g7QUFTQSxlQUFzQixlQUNwQixHQUNBLFVBQ3lCO0FBQ3pCLFFBQU0sTUFBTSxVQUFVLENBQUM7QUFDdkIsUUFBTSxXQUFXLEdBQUc7QUFDcEIsU0FBTztBQUNUO0FBWUEsZUFBc0IsY0FDcEIsS0FDQSxHQUNBLFVBQ21DO0FBQ25DLFFBQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUMxQixRQUFNLFdBQVcsRUFB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R0FBRyxXQUFXLGdCQUFnQixHQUFHO0FBQ25DLFVBQU0scUJBQXFCO0FBQzNCLFdBQU8sR0FBRyxlQUFlO0FBQUEsRUFDM0I7QUFFQSxTQUFPLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxRQUFRO0FBQy9DO0FBU08sU0FBUyx5QkFBeUIsTUFBWSxVQUFrQztBQUNyRixRQUFNLFlBQTJCLENBQUM7QUFDbEMsWUFBVSxLQUFLLGNBQWM7QUFDN0IsWUFBVSxLQUFLLFlBQVk7QUFFM0IsTUFBSSxjQUEyQjtBQUUvQixTQUFPLGFBQWE7QUFDbEIsY0FBVSxLQUFLLFdBQVc7QUFDMUIsa0JBQWMsWUFBWTtBQUFBLEVBQzVCO0FBRUEsTUFBSSxtQkFBbUI7QUFFdkIsYUFBVyxZQUFZLFdBQVc7QUFDaEMsYUFBUyxpQkFBaUIsVUFBVSxnQkFBZ0IsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUNyRSxhQUFTLGlCQUFpQixVQUFVLGdCQUFnQixFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQUEsRUFDdkU7QUFFQSxTQUFPLE1BQU07QUFDWCxlQUFXLFlBQVksV0FBVztBQUNoQyxlQUFTLG9CQUFvQixVQUFVLGdCQUFnQixFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQ3hFLGVBQVMsb0JBQW9CLFVBQVUsZ0JBQWdCLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxJQUMxRTtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlCQUF1QjtBQUM5QixRQUFJLGtCQUFrQjtBQUNwQjtBQUFBLElBQ0Y7QUFFQSx1QkFBbUI7QUFFbkIsV0FBTyxzQkFBc0IsTUFBTTtBQUNqQyxVQUFJO0FBQ0YsaUJBQVM7QUFBQSxNQUNYLFVBQUU7QUFDQSwyQkFBbUI7QUFBQSxNQUNyQjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQVFPLFNBQVMsS0FBSyxPQUF1QjtBQUMxQyxTQUFPLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDekI7QUFRTyxTQUFTLG1CQUFtQixJQUFnQztBQUNqRSxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsUUFBSSxHQUFHLGFBQWE7QUFDbEIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMLFNBQUcsZUFBZSxNQUFNO0FBQ3RCLGdCQUFRO0FBQUEsTUFDVixHQUFHLElBQUk7QUFBQSxJQUNUO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLG9CQUFvQixJQUF3QjtBQUNuRCxTQUFPLE1BQU0sS0FBSyxHQUFHLGlCQUFpQiw4REFBOEQsQ0FBQztBQUN2RzsiLAogICJuYW1lcyI6IFtdCn0K
188
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhlbHBlcnMgZm9yIHdvcmtpbmcgd2l0aCBIVE1MIGVsZW1lbnRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IENhbGxiYWNrRGlzcG9zYWJsZSB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5cbi8qKlxuICogQSBIVE1MIGVsZW1lbnQgdGhhdCBjYW4gYmUgdmFsaWRhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRvckVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaXMgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgY2hlY2tWYWxpZGl0eSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHJlcG9ydFZhbGlkaXR5KCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3I6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFuIGVycm9yIG1lc3NhZ2Ugb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGVuZHMgYSBjb2RlIGJsb2NrIHRvIHRoZSBnaXZlbiBEb2N1bWVudEZyYWdtZW50IG9yIEhUTUxFbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBEb2N1bWVudEZyYWdtZW50IG9yIEhUTUxFbGVtZW50IHRvIGFwcGVuZCB0aGUgY29kZSBibG9jayB0by5cbiAqIEBwYXJhbSBjb2RlIC0gVGhlIGNvZGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29kZUJsb2NrKGVsOiBEb2N1bWVudEZyYWdtZW50IHwgSFRNTEVsZW1lbnQsIGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5jcmVhdGVFbCgnc3Ryb25nJywgeyBjbHM6ICdtYXJrZG93bi1yZW5kZXJlZCBjb2RlJyB9LCAoc3Ryb25nKSA9PiB7XG4gICAgc3Ryb25nLmNyZWF0ZUVsKCdjb2RlJywgeyB0ZXh0OiBjb2RlIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogRG9tRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVEaXYobyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI2NyZWF0ZUVsfSAob3IgY3JlYXRlU3ZnLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRWxBc3luYzxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogRG9tRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10pID0+IFByb21pc2FibGU8dm9pZD5cbik6IFByb21pc2U8SFRNTEVsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IGVsID0gY3JlYXRlRWwodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihlbCk7XG4gIHJldHVybiBlbDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRG9jdW1lbnRGcmFnbWVudCBhc3luY2hyb25vdXNseS5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBEb2N1bWVudEZyYWdtZW50IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBEb2N1bWVudEZyYWdtZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRBc3luYyhjYWxsYmFjaz86IChlbDogRG9jdW1lbnRGcmFnbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPik6IFByb21pc2U8RG9jdW1lbnRGcmFnbWVudD4ge1xuICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBEb21FbGVtZW50SW5mbyB8IHN0cmluZyxcbiAgY2FsbGJhY2s/OiAoZWw6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZVNwYW4obyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIHtAbGluayBvYnNpZGlhbiNjcmVhdGVTdmd9IChvciBjcmVhdGVFbCwgY29ycmVzcG9uZGluZ2x5KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVN2Z0FzeW5jPEsgZXh0ZW5kcyBrZXlvZiBTVkdFbGVtZW50VGFnTmFtZU1hcD4oXG4gIHRhZzogSyxcbiAgbz86IHN0cmluZyB8IFN2Z0VsZW1lbnRJbmZvLFxuICBjYWxsYmFjaz86IChlbDogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10pID0+IFByb21pc2FibGU8dm9pZD5cbik6IFByb21pc2U8U1ZHRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3Qgc3ZnID0gY3JlYXRlU3ZnKHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3ZnKTtcbiAgcmV0dXJuIHN2Zztcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdGhlIGdpdmVuIGVsZW1lbnQgaXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGVuc3VyZSBpcyBsb2FkZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTG9hZGVkKGVsOiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgIGVsLmluc3RhbmNlT2YoSFRNTEJvZHlFbGVtZW50KVxuICAgIHx8IGVsLmluc3RhbmNlT2YoSFRNTEltYWdlRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxJRnJhbWVFbGVtZW50KVxuICAgIHx8IGVsLmluc3RhbmNlT2YoSFRNTEVtYmVkRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxMaW5rRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxPYmplY3RFbGVtZW50KVxuICAgIHx8IGVsLmluc3RhbmNlT2YoSFRNTFN0eWxlRWxlbWVudClcbiAgICB8fCBlbC5pbnN0YW5jZU9mKEhUTUxUcmFja0VsZW1lbnQpXG4gICkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgcmVzb2x2ZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWwpLm1hcChlbnN1cmVMb2FkZWQpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB6LWluZGV4IG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGdldCB0aGUgei1pbmRleCBvZi5cbiAqIEByZXR1cm5zIFRoZSB6LWluZGV4IG9mIHRoZSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0WkluZGV4KGVsOiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsMjogRWxlbWVudCB8IG51bGwgPSBlbDtcblxuICB3aGlsZSAoZWwyKSB7XG4gICAgY29uc3QgekluZGV4U3RyID0gZ2V0Q29tcHV0ZWRTdHlsZShlbDIpLnpJbmRleDtcbiAgICBjb25zdCB6SW5kZXggPSBOdW1iZXIucGFyc2VJbnQoekluZGV4U3RyLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oekluZGV4KSkge1xuICAgICAgcmV0dXJuIHpJbmRleDtcbiAgICB9XG4gICAgZWwyID0gZWwyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWwgLSBUaGUgZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBvZmZzZXQgcGFyZW50LCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGVJbk9mZnNldFBhcmVudChlbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50RWwgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gIGlmICghcGFyZW50RWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgcGFyZW50RWxSZWN0ID0gcGFyZW50RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbFJlY3QudG9wIDw9IGVsUmVjdC50b3BcbiAgICAmJiBlbFJlY3QuYm90dG9tIDw9IHBhcmVudEVsUmVjdC5ib3R0b21cbiAgICAmJiBwYXJlbnRFbFJlY3QubGVmdCA8PSBlbFJlY3QubGVmdFxuICAgICYmIGVsUmVjdC5yaWdodCA8PSBwYXJlbnRFbFJlY3QucmlnaHRcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MQm9keUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGFjdGl2ZURvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgYWN0aXZlRG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJztcbiAgfVxuXG4gIGlmIChlbC5pbnN0YW5jZU9mKEhUTUxJbWFnZUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsLmNvbXBsZXRlICYmIGVsLm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbC5jb250ZW50RG9jdW1lbnQ7XG4gIH1cblxuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MRW1iZWRFbGVtZW50KSkge1xuICAgIHJldHVybiAhIWVsLmdldFNWR0RvY3VtZW50KCk7XG4gIH1cblxuICBpZiAoZWwuaW5zdGFuY2VPZihIVE1MTGlua0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsLnJlbCA9PT0gJ3N0eWxlc2hlZXQnID8gZWwuc2hlZXQgIT09IG51bGwgOiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsLmluc3RhbmNlT2YoSFRNTE9iamVjdEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWwuY29udGVudERvY3VtZW50IHx8ICEhZWwuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChlbC5pbnN0YW5jZU9mKEhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsLmluc3RhbmNlT2YoSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbC5zaGVldDtcbiAgfVxuXG4gIGlmIChlbC5pbnN0YW5jZU9mKEhUTUxUcmFja0VsZW1lbnQpKSB7XG4gICAgY29uc3QgUkVBRFlfU1RBVEVfTE9BREVEID0gMjtcbiAgICByZXR1cm4gZWwucmVhZHlTdGF0ZSA9PT0gUkVBRFlfU1RBVEVfTE9BREVEO1xuICB9XG5cbiAgcmV0dXJuIGdldExvYWRhYmxlRWxlbWVudHMoZWwpLmV2ZXJ5KGlzTG9hZGVkKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBhbmNlc3RvciBub2RlcyBvZiB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIGFkZCB0aGUgZXZlbnQgbGlzdGVuZXIgdG8uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uQW5jZXN0b3JTY3JvbGxPclJlc2l6ZShub2RlOiBOb2RlLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICBjb25zdCBhbmNlc3RvcnM6IEV2ZW50VGFyZ2V0W10gPSBbXTtcbiAgYW5jZXN0b3JzLnB1c2goYWN0aXZlRG9jdW1lbnQpO1xuICBhbmNlc3RvcnMucHVzaChhY3RpdmVXaW5kb3cpO1xuXG4gIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICBsZXQgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgYW5jZXN0b3JzKSB7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FsbGJhY2tTbW9vdGgoKTogdm9pZCB7XG4gICAgaWYgKGlzRXZlbnRUcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcblxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIGFzIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfXB4YDtcbn1cblxuLyoqXG4gKiBXYWl0cyB1bnRpbCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0gZWwgLSBUaGUgZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FpdFVudGlsQ29ubmVjdGVkKGVsOiBIVE1MRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBpZiAoZWwuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwub25Ob2RlSW5zZXJ0ZWQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsOiBFbGVtZW50KTogRWxlbWVudFtdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWwucXVlcnlTZWxlY3RvckFsbCgnYm9keSwgaW1nLCBpZnJhbWUsIGVtYmVkLCBsaW5rLCBvYmplY3QsIHNjcmlwdCwgc3R5bGUsIHRyYWNrJykpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLDBCQUEwQjtBQXFDNUIsU0FBUyxnQkFBZ0IsSUFBb0MsTUFBb0I7QUFDdEYsS0FBRyxTQUFTLFVBQVUsRUFBRSxLQUFLLHlCQUF5QixHQUFHLENBQUMsV0FBVztBQUNuRSxXQUFPLFNBQVMsUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQUEsRUFD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
@@ -8,6 +8,7 @@ export * as 'codemirror' from './codemirror/index.mjs';
8
8
  export * as 'css-class' from './css-class.mjs';
9
9
  export * as 'debug-controller' from './debug-controller.mjs';
10
10
  export * as 'debug' from './debug.mjs';
11
+ export * as 'disposable' from './disposable.mjs';
11
12
  export * as 'enum' from './enum.mjs';
12
13
  export * as 'error' from './error.mjs';
13
14
  export * as 'function' from './function.mjs';
@@ -30,6 +30,7 @@ import * as codemirror from "./codemirror/index.mjs";
30
30
  import * as css_class from "./css-class.mjs";
31
31
  import * as debug_controller from "./debug-controller.mjs";
32
32
  import * as debug from "./debug.mjs";
33
+ import * as disposable from "./disposable.mjs";
33
34
  import * as enum2 from "./enum.mjs";
34
35
  import * as error from "./error.mjs";
35
36
  import * as function2 from "./function.mjs";
@@ -59,6 +60,7 @@ export {
59
60
  css_class as "css-class",
60
61
  debug,
61
62
  debug_controller as "debug-controller",
63
+ disposable,
62
64
  enum2 as enum,
63
65
  error,
64
66
  function2 as function,
@@ -79,4 +81,4 @@ export {
79
81
  value_provider as "value-provider",
80
82
  value_wrapper as "value-wrapper"
81
83
  };
82
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2Fib3J0LWNvbnRyb2xsZXInIGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5leHBvcnQgKiBhcyAnYXJyYXknIGZyb20gJy4vYXJyYXkudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jLWV2ZW50cycgZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jJyBmcm9tICcuL2FzeW5jLnRzJztcbmV4cG9ydCAqIGFzICdibG9iJyBmcm9tICcuL2Jsb2IudHMnO1xuZXhwb3J0ICogYXMgJ2NvZGVtaXJyb3InIGZyb20gJy4vY29kZW1pcnJvci9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY3NzLWNsYXNzJyBmcm9tICcuL2Nzcy1jbGFzcy50cyc7XG5leHBvcnQgKiBhcyAnZGVidWctY29udHJvbGxlcicgZnJvbSAnLi9kZWJ1Zy1jb250cm9sbGVyLnRzJztcbmV4cG9ydCAqIGFzICdkZWJ1ZycgZnJvbSAnLi9kZWJ1Zy50cyc7XG5leHBvcnQgKiBhcyAnZW51bScgZnJvbSAnLi9lbnVtLnRzJztcbmV4cG9ydCAqIGFzICdlcnJvcicgZnJvbSAnLi9lcnJvci50cyc7XG5leHBvcnQgKiBhcyAnZnVuY3Rpb24nIGZyb20gJy4vZnVuY3Rpb24udHMnO1xuZXhwb3J0ICogYXMgJ2h0bWwtZWxlbWVudCcgZnJvbSAnLi9odG1sLWVsZW1lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2xpYnJhcnknIGZyb20gJy4vbGlicmFyeS50cyc7XG5leHBvcnQgKiBhcyAnb2JqZWN0LXV0aWxzJyBmcm9tICcuL29iamVjdC11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4nIGZyb20gJy4vb2JzaWRpYW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLWRldi11dGlscy1zdGF0ZScgZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuZXhwb3J0ICogYXMgJ3BhdGgnIGZyb20gJy4vcGF0aC50cyc7XG5leHBvcnQgKiBhcyAncmVnLWV4cCcgZnJvbSAnLi9yZWctZXhwLnRzJztcbmV4cG9ydCAqIGFzICdzdHJpY3QtcHJveHknIGZyb20gJy4vc3RyaWN0LXByb3h5LnRzJztcbmV4cG9ydCAqIGFzICdzdHJpbmcnIGZyb20gJy4vc3RyaW5nLnRzJztcbmV4cG9ydCAqIGFzICd0cmFuc2Zvcm1lcnMnIGZyb20gJy4vdHJhbnNmb3JtZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd0d28td2F5LW1hcCcgZnJvbSAnLi90d28td2F5LW1hcC50cyc7XG5leHBvcnQgKiBhcyAndHlwZS1ndWFyZHMnIGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuZXhwb3J0ICogYXMgJ3R5cGUnIGZyb20gJy4vdHlwZS50cyc7XG5leHBvcnQgKiBhcyAndXJsJyBmcm9tICcuL3VybC50cyc7XG5leHBvcnQgKiBhcyAndmFsdWUtcHJvdmlkZXInIGZyb20gJy4vdmFsdWUtcHJvdmlkZXIudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbHVlLXdyYXBwZXInIGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFlBQVlBLHNCQUF3QjtBQUNwQyxZQUFZLFdBQWE7QUFDekIsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVksV0FBYTtBQUN6QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsc0JBQXdCO0FBQ3BDLFlBQVksV0FBYTtBQUN6QixZQUFZQyxXQUFZO0FBQ3hCLFlBQVksV0FBYTtBQUN6QixZQUFZQyxlQUFnQjtBQUM1QixZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLGNBQWdCO0FBQzVCLFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZLFVBQVk7QUFDeEIsWUFBWUMsYUFBZTtBQUMzQixZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWSxZQUFjO0FBQzFCLFlBQVksa0JBQW9CO0FBQ2hDLFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWSxVQUFZO0FBQ3hCLFlBQVksU0FBVztBQUN2QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMsbUJBQXFCOyIsCiAgIm5hbWVzIjogWyJhYm9ydC1jb250cm9sbGVyIiwgImFzeW5jLWV2ZW50cyIsICJjc3MtY2xhc3MiLCAiZGVidWctY29udHJvbGxlciIsICJlbnVtIiwgImZ1bmN0aW9uIiwgImh0bWwtZWxlbWVudCIsICJvYmplY3QtdXRpbHMiLCAib2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlIiwgInJlZy1leHAiLCAic3RyaWN0LXByb3h5IiwgInR3by13YXktbWFwIiwgInR5cGUtZ3VhcmRzIiwgInZhbHVlLXByb3ZpZGVyIiwgInZhbHVlLXdyYXBwZXIiXQp9Cg==
84
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2Fib3J0LWNvbnRyb2xsZXInIGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5leHBvcnQgKiBhcyAnYXJyYXknIGZyb20gJy4vYXJyYXkudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jLWV2ZW50cycgZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jJyBmcm9tICcuL2FzeW5jLnRzJztcbmV4cG9ydCAqIGFzICdibG9iJyBmcm9tICcuL2Jsb2IudHMnO1xuZXhwb3J0ICogYXMgJ2NvZGVtaXJyb3InIGZyb20gJy4vY29kZW1pcnJvci9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY3NzLWNsYXNzJyBmcm9tICcuL2Nzcy1jbGFzcy50cyc7XG5leHBvcnQgKiBhcyAnZGVidWctY29udHJvbGxlcicgZnJvbSAnLi9kZWJ1Zy1jb250cm9sbGVyLnRzJztcbmV4cG9ydCAqIGFzICdkZWJ1ZycgZnJvbSAnLi9kZWJ1Zy50cyc7XG5leHBvcnQgKiBhcyAnZGlzcG9zYWJsZScgZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmV4cG9ydCAqIGFzICdlbnVtJyBmcm9tICcuL2VudW0udHMnO1xuZXhwb3J0ICogYXMgJ2Vycm9yJyBmcm9tICcuL2Vycm9yLnRzJztcbmV4cG9ydCAqIGFzICdmdW5jdGlvbicgZnJvbSAnLi9mdW5jdGlvbi50cyc7XG5leHBvcnQgKiBhcyAnaHRtbC1lbGVtZW50JyBmcm9tICcuL2h0bWwtZWxlbWVudC50cyc7XG5leHBvcnQgKiBhcyAnbGlicmFyeScgZnJvbSAnLi9saWJyYXJ5LnRzJztcbmV4cG9ydCAqIGFzICdvYmplY3QtdXRpbHMnIGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbicgZnJvbSAnLi9vYnNpZGlhbi9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5leHBvcnQgKiBhcyAncGF0aCcgZnJvbSAnLi9wYXRoLnRzJztcbmV4cG9ydCAqIGFzICdyZWctZXhwJyBmcm9tICcuL3JlZy1leHAudHMnO1xuZXhwb3J0ICogYXMgJ3N0cmljdC1wcm94eScgZnJvbSAnLi9zdHJpY3QtcHJveHkudHMnO1xuZXhwb3J0ICogYXMgJ3N0cmluZycgZnJvbSAnLi9zdHJpbmcudHMnO1xuZXhwb3J0ICogYXMgJ3RyYW5zZm9ybWVycycgZnJvbSAnLi90cmFuc2Zvcm1lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3R3by13YXktbWFwJyBmcm9tICcuL3R3by13YXktbWFwLnRzJztcbmV4cG9ydCAqIGFzICd0eXBlLWd1YXJkcycgZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5leHBvcnQgKiBhcyAndHlwZScgZnJvbSAnLi90eXBlLnRzJztcbmV4cG9ydCAqIGFzICd1cmwnIGZyb20gJy4vdXJsLnRzJztcbmV4cG9ydCAqIGFzICd2YWx1ZS1wcm92aWRlcicgZnJvbSAnLi92YWx1ZS1wcm92aWRlci50cyc7XG5leHBvcnQgKiBhcyAndmFsdWUtd3JhcHBlcicgZnJvbSAnLi92YWx1ZS13cmFwcGVyLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsc0JBQXdCO0FBQ3BDLFlBQVksV0FBYTtBQUN6QixZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWSxXQUFhO0FBQ3pCLFlBQVksVUFBWTtBQUN4QixZQUFZLGdCQUFrQjtBQUM5QixZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxzQkFBd0I7QUFDcEMsWUFBWSxXQUFhO0FBQ3pCLFlBQVksZ0JBQWtCO0FBQzlCLFlBQVlDLFdBQVk7QUFDeEIsWUFBWSxXQUFhO0FBQ3pCLFlBQVlDLGVBQWdCO0FBQzVCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVksY0FBZ0I7QUFDNUIsWUFBWUMsOEJBQWdDO0FBQzVDLFlBQVksVUFBWTtBQUN4QixZQUFZQyxhQUFlO0FBQzNCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLFlBQWM7QUFDMUIsWUFBWSxrQkFBb0I7QUFDaEMsWUFBWUMsaUJBQW1CO0FBQy9CLFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZLFVBQVk7QUFDeEIsWUFBWSxTQUFXO0FBQ3ZCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyxtQkFBcUI7IiwKICAibmFtZXMiOiBbImFib3J0LWNvbnRyb2xsZXIiLCAiYXN5bmMtZXZlbnRzIiwgImNzcy1jbGFzcyIsICJkZWJ1Zy1jb250cm9sbGVyIiwgImVudW0iLCAiZnVuY3Rpb24iLCAiaHRtbC1lbGVtZW50IiwgIm9iamVjdC11dGlscyIsICJvYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUiLCAicmVnLWV4cCIsICJzdHJpY3QtcHJveHkiLCAidHdvLXdheS1tYXAiLCAidHlwZS1ndWFyZHMiLCAidmFsdWUtcHJvdmlkZXIiLCAidmFsdWUtd3JhcHBlciJdCn0K