obsidian-dev-utils 88.8.0 → 90.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/demo-vault-helper/main.js +20 -23
  3. package/dist/integration-test-plugin/main.js +2229 -1734
  4. package/dist/lib/cjs/__merged.cjs +57 -35
  5. package/dist/lib/cjs/__merged.d.cts +12 -10
  6. package/dist/lib/cjs/abort-controller.cjs +15 -22
  7. package/dist/lib/cjs/array.cjs +27 -26
  8. package/dist/lib/cjs/array.d.cts +25 -7
  9. package/dist/lib/cjs/async-events.cjs +87 -91
  10. package/dist/lib/cjs/async-events.d.cts +50 -50
  11. package/dist/lib/cjs/async.cjs +80 -80
  12. package/dist/lib/cjs/async.d.cts +23 -23
  13. package/dist/lib/cjs/beeper.cjs +11 -15
  14. package/dist/lib/cjs/blob.cjs +14 -25
  15. package/dist/lib/cjs/codemirror/index.cjs +11 -15
  16. package/dist/lib/cjs/codemirror/state-field-spec.cjs +11 -15
  17. package/dist/lib/cjs/debug-controller.cjs +11 -15
  18. package/dist/lib/cjs/debug.cjs +24 -32
  19. package/dist/lib/cjs/debug.d.cts +1 -1
  20. package/dist/lib/cjs/disposable.cjs +59 -43
  21. package/dist/lib/cjs/disposable.d.cts +27 -8
  22. package/dist/lib/cjs/enum.cjs +11 -15
  23. package/dist/lib/cjs/error.cjs +28 -33
  24. package/dist/lib/cjs/function.cjs +30 -34
  25. package/dist/lib/cjs/function.d.cts +26 -26
  26. package/dist/lib/cjs/generated-during-build.cjs +12 -16
  27. package/dist/lib/cjs/html-element.cjs +84 -89
  28. package/dist/lib/cjs/html-element.d.cts +15 -15
  29. package/dist/lib/cjs/index.cjs +11 -15
  30. package/dist/lib/cjs/integration-test-setup.cjs +11 -15
  31. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +11 -15
  32. package/dist/lib/cjs/jest-setup.cjs +11 -15
  33. package/dist/lib/cjs/library.cjs +11 -15
  34. package/dist/lib/cjs/object-utils.cjs +120 -117
  35. package/dist/lib/cjs/object-utils.d.cts +27 -27
  36. package/dist/lib/cjs/obsidian/@types/dataview/data-model/value.d.cts +1 -1
  37. package/dist/lib/cjs/obsidian/@types/dataview/expression/field.d.cts +1 -1
  38. package/dist/lib/cjs/obsidian/@types/dataview/expression/functions.d.cts +4 -4
  39. package/dist/lib/cjs/obsidian/active-file-provider.cjs +11 -15
  40. package/dist/lib/cjs/obsidian/app.cjs +11 -15
  41. package/dist/lib/cjs/obsidian/async-with-notice.cjs +28 -32
  42. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +2 -2
  43. package/dist/lib/cjs/obsidian/attachment-path.cjs +20 -24
  44. package/dist/lib/cjs/obsidian/attachment-path.d.cts +5 -5
  45. package/dist/lib/cjs/obsidian/backlink.cjs +12 -16
  46. package/dist/lib/cjs/obsidian/bases-view-registrar.cjs +11 -15
  47. package/dist/lib/cjs/obsidian/callout.cjs +27 -26
  48. package/dist/lib/cjs/obsidian/callout.d.cts +9 -3
  49. package/dist/lib/cjs/obsidian/canvas.cjs +13 -16
  50. package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +18 -20
  51. package/dist/lib/cjs/obsidian/code-block-markdown-information.cjs +11 -15
  52. package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +2 -2
  53. package/dist/lib/cjs/obsidian/code-block-reg-exp.cjs +11 -15
  54. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +18 -16
  55. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +5 -0
  56. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +54 -32
  57. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +45 -8
  58. package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +24 -15
  59. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +18 -0
  60. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +26 -30
  61. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +8 -8
  62. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +12 -16
  63. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +12 -16
  64. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +13 -17
  65. package/dist/lib/cjs/obsidian/command-handlers/index.cjs +11 -15
  66. package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +11 -15
  67. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +11 -15
  68. package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs +11 -15
  69. package/dist/lib/cjs/obsidian/command-registrar.cjs +11 -15
  70. package/dist/lib/cjs/obsidian/community-plugins.cjs +28 -25
  71. package/dist/lib/cjs/obsidian/community-plugins.d.cts +19 -5
  72. package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +11 -15
  73. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +11 -15
  74. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +4 -4
  75. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +13 -16
  76. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +11 -15
  77. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +11 -15
  78. package/dist/lib/cjs/obsidian/components/component-ex.cjs +26 -28
  79. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +3 -3
  80. package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +14 -18
  81. package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -2
  82. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +11 -15
  83. package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +11 -15
  84. package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +11 -15
  85. package/dist/lib/cjs/obsidian/components/index.cjs +14 -15
  86. package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
  87. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +11 -15
  88. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +11 -15
  89. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +29 -33
  90. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +55 -55
  91. package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.cjs +297 -0
  92. package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.d.cts +139 -0
  93. package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +11 -15
  94. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +28 -31
  95. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +26 -30
  96. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +8 -8
  97. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +11 -15
  98. package/dist/lib/cjs/obsidian/components/pointer-position-component.cjs +13 -17
  99. package/dist/lib/cjs/obsidian/components/registry-component.cjs +11 -15
  100. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +72 -62
  101. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +12 -1
  102. package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.cjs +16 -20
  103. package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.d.cts +8 -8
  104. package/dist/lib/cjs/obsidian/constructors/get-dom-events-handlers-constructor.cjs +14 -18
  105. package/dist/lib/cjs/obsidian/constructors/index.cjs +11 -15
  106. package/dist/lib/cjs/obsidian/css-class.cjs +11 -15
  107. package/dist/lib/cjs/obsidian/data-handler.cjs +11 -15
  108. package/dist/lib/cjs/obsidian/dataview-link.cjs +13 -17
  109. package/dist/lib/cjs/obsidian/dataview.cjs +35 -41
  110. package/dist/lib/cjs/obsidian/dataview.d.cts +2 -2
  111. package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +13 -17
  112. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +22 -26
  113. package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +23 -21
  114. package/dist/lib/cjs/obsidian/editor-extension-registrar.cjs +11 -15
  115. package/dist/lib/cjs/obsidian/editor-suggest-registrar.cjs +11 -15
  116. package/dist/lib/cjs/obsidian/editor.cjs +17 -19
  117. package/dist/lib/cjs/obsidian/events.cjs +12 -16
  118. package/dist/lib/cjs/obsidian/events.d.cts +2 -2
  119. package/dist/lib/cjs/obsidian/extensions-registrar.cjs +11 -15
  120. package/dist/lib/cjs/obsidian/file-change.cjs +76 -80
  121. package/dist/lib/cjs/obsidian/file-change.d.cts +3 -3
  122. package/dist/lib/cjs/obsidian/file-manager.cjs +33 -22
  123. package/dist/lib/cjs/obsidian/file-manager.d.cts +20 -1
  124. package/dist/lib/cjs/obsidian/file-system.cjs +15 -19
  125. package/dist/lib/cjs/obsidian/file-system.d.cts +3 -3
  126. package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.cjs +11 -15
  127. package/dist/lib/cjs/obsidian/frontmatter.cjs +15 -19
  128. package/dist/lib/cjs/obsidian/hover-link-source-registrar.cjs +11 -15
  129. package/dist/lib/cjs/obsidian/html-element.cjs +13 -17
  130. package/dist/lib/cjs/obsidian/html-element.d.cts +2 -2
  131. package/dist/lib/cjs/obsidian/i18n/custom-type-options.cjs +11 -15
  132. package/dist/lib/cjs/obsidian/i18n/default-translations.cjs +11 -15
  133. package/dist/lib/cjs/obsidian/i18n/i18n.cjs +13 -16
  134. package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +7 -0
  135. package/dist/lib/cjs/obsidian/i18n/index.cjs +11 -15
  136. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +11 -15
  137. package/dist/lib/cjs/obsidian/i18n/locales/index.cjs +11 -15
  138. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.cjs +11 -15
  139. package/dist/lib/cjs/obsidian/index.cjs +14 -15
  140. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  141. package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +11 -15
  142. package/dist/lib/cjs/obsidian/link-update-progress.cjs +11 -15
  143. package/dist/lib/cjs/obsidian/link.cjs +91 -81
  144. package/dist/lib/cjs/obsidian/link.d.cts +22 -22
  145. package/dist/lib/cjs/obsidian/logger.cjs +21 -25
  146. package/dist/lib/cjs/obsidian/logger.d.cts +5 -5
  147. package/dist/lib/cjs/obsidian/loop.cjs +14 -18
  148. package/dist/lib/cjs/obsidian/loop.d.cts +1 -1
  149. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.cjs +12 -16
  150. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +3 -3
  151. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +35 -40
  152. package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +3 -3
  153. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +12 -16
  154. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +3 -3
  155. package/dist/lib/cjs/obsidian/markdown-view.cjs +11 -15
  156. package/dist/lib/cjs/obsidian/markdown.cjs +22 -24
  157. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +11 -15
  158. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
  159. package/dist/lib/cjs/obsidian/metadata-cache.cjs +16 -20
  160. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +2 -2
  161. package/dist/lib/cjs/obsidian/modals/alert.cjs +11 -15
  162. package/dist/lib/cjs/obsidian/modals/confirm.cjs +11 -15
  163. package/dist/lib/cjs/obsidian/modals/index.cjs +11 -15
  164. package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +28 -32
  165. package/dist/lib/cjs/obsidian/modals/modal.cjs +11 -15
  166. package/dist/lib/cjs/obsidian/modals/prompt.cjs +11 -15
  167. package/dist/lib/cjs/obsidian/modals/select-item.cjs +16 -20
  168. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -1
  169. package/dist/lib/cjs/obsidian/modals/select-option.cjs +11 -15
  170. package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.cjs +26 -28
  171. package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.d.cts +5 -5
  172. package/dist/lib/cjs/obsidian/notebook-navigator.cjs +155 -0
  173. package/dist/lib/cjs/obsidian/notebook-navigator.d.cts +132 -0
  174. package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.cjs +11 -15
  175. package/dist/lib/cjs/obsidian/obsidian-settings.cjs +11 -15
  176. package/dist/lib/cjs/obsidian/parse-link.cjs +61 -62
  177. package/dist/lib/cjs/obsidian/parse-link.d.cts +4 -4
  178. package/dist/lib/cjs/obsidian/path-settings.cjs +27 -25
  179. package/dist/lib/cjs/obsidian/pdf.cjs +13 -17
  180. package/dist/lib/cjs/obsidian/pdf.d.cts +2 -2
  181. package/dist/lib/cjs/obsidian/plugin/index.cjs +11 -15
  182. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +11 -15
  183. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +156 -52
  184. package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +17 -21
  185. package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +2 -2
  186. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +20 -24
  187. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +11 -9
  188. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +29 -33
  189. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +33 -16
  190. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +11 -1
  191. package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.cjs +11 -15
  192. package/dist/lib/cjs/obsidian/popovers/field-popover.cjs +11 -15
  193. package/dist/lib/cjs/obsidian/popovers/index.cjs +11 -15
  194. package/dist/lib/cjs/obsidian/popovers/popover-anchor.cjs +14 -18
  195. package/dist/lib/cjs/obsidian/popovers/popover-anchor.d.cts +2 -2
  196. package/dist/lib/cjs/obsidian/popovers/popover.cjs +19 -23
  197. package/dist/lib/cjs/obsidian/queue.cjs +16 -20
  198. package/dist/lib/cjs/obsidian/queue.d.cts +2 -2
  199. package/dist/lib/cjs/obsidian/react/app-context.cjs +11 -15
  200. package/dist/lib/cjs/obsidian/react/index.cjs +11 -15
  201. package/dist/lib/cjs/obsidian/reference.cjs +11 -15
  202. package/dist/lib/cjs/obsidian/resource-lock.cjs +157 -78
  203. package/dist/lib/cjs/obsidian/resource-lock.d.cts +5 -0
  204. package/dist/lib/cjs/obsidian/resource-url.cjs +12 -16
  205. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.cjs +11 -15
  206. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +2 -2
  207. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +18 -22
  208. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +5 -5
  209. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +28 -31
  210. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +2 -2
  211. package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +14 -18
  212. package/dist/lib/cjs/obsidian/setting-components/date-component.d.cts +2 -2
  213. package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +14 -18
  214. package/dist/lib/cjs/obsidian/setting-components/date-time-component.d.cts +2 -2
  215. package/dist/lib/cjs/obsidian/setting-components/email-component.cjs +14 -18
  216. package/dist/lib/cjs/obsidian/setting-components/email-component.d.cts +2 -2
  217. package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +11 -15
  218. package/dist/lib/cjs/obsidian/setting-components/index.cjs +11 -15
  219. package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +14 -18
  220. package/dist/lib/cjs/obsidian/setting-components/month-component.d.cts +2 -2
  221. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +17 -21
  222. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +2 -2
  223. package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +14 -18
  224. package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.d.cts +2 -2
  225. package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +12 -16
  226. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +15 -19
  227. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +2 -2
  228. package/dist/lib/cjs/obsidian/setting-components/number-component.cjs +14 -18
  229. package/dist/lib/cjs/obsidian/setting-components/number-component.d.cts +2 -2
  230. package/dist/lib/cjs/obsidian/setting-components/password-component.cjs +14 -18
  231. package/dist/lib/cjs/obsidian/setting-components/password-component.d.cts +2 -2
  232. package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.cjs +16 -20
  233. package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.d.cts +2 -2
  234. package/dist/lib/cjs/obsidian/setting-components/telephone-component.cjs +14 -18
  235. package/dist/lib/cjs/obsidian/setting-components/telephone-component.d.cts +2 -2
  236. package/dist/lib/cjs/obsidian/setting-components/text-based-component.cjs +16 -20
  237. package/dist/lib/cjs/obsidian/setting-components/text-based-component.d.cts +2 -2
  238. package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +14 -18
  239. package/dist/lib/cjs/obsidian/setting-components/time-component.d.cts +2 -2
  240. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +15 -19
  241. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +2 -2
  242. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +16 -20
  243. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +2 -2
  244. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +18 -22
  245. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +2 -2
  246. package/dist/lib/cjs/obsidian/setting-components/typed-range-text-component.cjs +11 -15
  247. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +16 -19
  248. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +4 -4
  249. package/dist/lib/cjs/obsidian/setting-components/url-component.cjs +14 -18
  250. package/dist/lib/cjs/obsidian/setting-components/url-component.d.cts +2 -2
  251. package/dist/lib/cjs/obsidian/setting-components/validator-component.cjs +45 -49
  252. package/dist/lib/cjs/obsidian/setting-components/validator-component.d.cts +2 -2
  253. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +11 -15
  254. package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +14 -18
  255. package/dist/lib/cjs/obsidian/setting-components/week-component.d.cts +2 -2
  256. package/dist/lib/cjs/obsidian/setting-ex.cjs +76 -80
  257. package/dist/lib/cjs/obsidian/setting-ex.d.cts +42 -42
  258. package/dist/lib/cjs/obsidian/setting-group-ex.cjs +14 -18
  259. package/dist/lib/cjs/obsidian/setting-group-ex.d.cts +2 -2
  260. package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +11 -15
  261. package/dist/lib/cjs/obsidian/validation.cjs +11 -15
  262. package/dist/lib/cjs/obsidian/vault-delete.cjs +23 -20
  263. package/dist/lib/cjs/obsidian/vault-delete.d.cts +16 -2
  264. package/dist/lib/cjs/obsidian/vault-transaction.cjs +17 -18
  265. package/dist/lib/cjs/obsidian/vault.cjs +81 -63
  266. package/dist/lib/cjs/obsidian/vault.d.cts +32 -11
  267. package/dist/lib/cjs/obsidian/view-registrar.cjs +11 -15
  268. package/dist/lib/cjs/obsidian/workspace.cjs +12 -16
  269. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +11 -15
  270. package/dist/lib/cjs/path.cjs +18 -22
  271. package/dist/lib/cjs/path.d.cts +1 -1
  272. package/dist/lib/cjs/reg-exp.cjs +38 -35
  273. package/dist/lib/cjs/reg-exp.d.cts +4 -4
  274. package/dist/lib/cjs/script-utils/build.cjs +21 -25
  275. package/dist/lib/cjs/script-utils/build.d.cts +1 -1
  276. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +24 -28
  277. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +36 -34
  278. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +11 -15
  279. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +20 -24
  280. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +13 -17
  281. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +16 -20
  282. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.cjs +11 -15
  283. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +11 -15
  284. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +6 -2
  285. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +32 -36
  286. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.cjs +11 -15
  287. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +11 -15
  288. package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +11 -15
  289. package/dist/lib/cjs/script-utils/bundlers/index.cjs +11 -15
  290. package/dist/lib/cjs/script-utils/check-project-types.cjs +13 -17
  291. package/dist/lib/cjs/script-utils/check-project-types.d.cts +12 -4
  292. package/dist/lib/cjs/script-utils/cli-utils.cjs +39 -47
  293. package/dist/lib/cjs/script-utils/cli-utils.d.cts +6 -6
  294. package/dist/lib/cjs/script-utils/code-generator.cjs +11 -15
  295. package/dist/lib/cjs/script-utils/commitlint-config.cjs +11 -15
  296. package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +22 -23
  297. package/dist/lib/cjs/script-utils/demo-vault.cjs +11 -15
  298. package/dist/lib/cjs/script-utils/env-toggle.cjs +13 -17
  299. package/dist/lib/cjs/script-utils/exec.cjs +40 -44
  300. package/dist/lib/cjs/script-utils/exec.d.cts +4 -4
  301. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +12 -16
  302. package/dist/lib/cjs/script-utils/formatters/index.cjs +11 -15
  303. package/dist/lib/cjs/script-utils/fs.cjs +13 -17
  304. package/dist/lib/cjs/script-utils/git.cjs +11 -15
  305. package/dist/lib/cjs/script-utils/index.cjs +11 -15
  306. package/dist/lib/cjs/script-utils/json.cjs +15 -19
  307. package/dist/lib/cjs/script-utils/json.d.cts +2 -2
  308. package/dist/lib/cjs/script-utils/linters/cspell.cjs +12 -16
  309. package/dist/lib/cjs/script-utils/linters/eslint-agnostic-core-boundary.cjs +11 -15
  310. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +402 -16
  311. package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +11 -15
  312. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +11 -15
  313. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +27 -31
  314. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -1
  315. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +27 -31
  316. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -1
  317. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +21 -25
  318. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -1
  319. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +11 -15
  320. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +109 -113
  321. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -1
  322. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +13 -17
  323. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -1
  324. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +21 -25
  325. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -1
  326. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +51 -55
  327. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +9 -3
  328. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +25 -27
  329. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +6 -2
  330. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +33 -37
  331. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -1
  332. package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.cjs +11 -15
  333. package/dist/lib/cjs/script-utils/linters/eslint.cjs +14 -18
  334. package/dist/lib/cjs/script-utils/linters/index.cjs +14 -15
  335. package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
  336. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +18 -17
  337. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.d.cts +2 -2
  338. package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.cjs +138 -0
  339. package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.d.cts +35 -0
  340. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +20 -23
  341. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +18 -22
  342. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +54 -18
  343. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +11 -15
  344. package/dist/lib/cjs/script-utils/npm-publish.cjs +11 -15
  345. package/dist/lib/cjs/script-utils/npm-run.cjs +20 -17
  346. package/dist/lib/cjs/script-utils/npm-run.d.cts +16 -2
  347. package/dist/lib/cjs/script-utils/npm.cjs +21 -25
  348. package/dist/lib/cjs/script-utils/npm.d.cts +11 -11
  349. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +11 -15
  350. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +165 -55
  351. package/dist/lib/cjs/script-utils/root.cjs +11 -15
  352. package/dist/lib/cjs/script-utils/test-runners/index.cjs +11 -15
  353. package/dist/lib/cjs/script-utils/test-runners/integration-test-plugin.cjs +11 -15
  354. package/dist/lib/cjs/script-utils/test-runners/vitest-config.cjs +12 -15
  355. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +11 -15
  356. package/dist/lib/cjs/script-utils/validate-declarations.cjs +11 -15
  357. package/dist/lib/cjs/script-utils/version.cjs +62 -63
  358. package/dist/lib/cjs/script-utils/version.d.cts +21 -21
  359. package/dist/lib/cjs/script-utils/warnings-as-errors.cjs +11 -15
  360. package/dist/lib/cjs/setup.cjs +11 -15
  361. package/dist/lib/cjs/setup.d.cts +1 -1
  362. package/dist/lib/cjs/strict-proxy.cjs +30 -34
  363. package/dist/lib/cjs/strict-proxy.d.cts +2 -2
  364. package/dist/lib/cjs/string.cjs +90 -93
  365. package/dist/lib/cjs/string.d.cts +60 -60
  366. package/dist/lib/cjs/transformers/date-transformer.cjs +11 -15
  367. package/dist/lib/cjs/transformers/duration-transformer.cjs +11 -15
  368. package/dist/lib/cjs/transformers/group-transformer.cjs +11 -15
  369. package/dist/lib/cjs/transformers/index.cjs +11 -15
  370. package/dist/lib/cjs/transformers/map-transformer.cjs +12 -16
  371. package/dist/lib/cjs/transformers/set-transformer.cjs +12 -16
  372. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +11 -15
  373. package/dist/lib/cjs/transformers/transformer.cjs +11 -15
  374. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +12 -16
  375. package/dist/lib/cjs/transformers/typed-transformer.cjs +11 -15
  376. package/dist/lib/cjs/two-way-map.cjs +11 -15
  377. package/dist/lib/cjs/type-guards.cjs +16 -20
  378. package/dist/lib/cjs/type-guards.d.cts +6 -6
  379. package/dist/lib/cjs/type.cjs +13 -17
  380. package/dist/lib/cjs/type.d.cts +2 -2
  381. package/dist/lib/cjs/url.cjs +18 -22
  382. package/dist/lib/cjs/url.d.cts +4 -4
  383. package/dist/lib/cjs/value-provider.cjs +15 -19
  384. package/dist/lib/cjs/value-provider.d.cts +6 -6
  385. package/dist/lib/cjs/value-wrapper.cjs +11 -15
  386. package/dist/lib/cjs/vitest-setup.cjs +11 -15
  387. package/dist/lib/esm/__merged.d.mts +12 -10
  388. package/dist/lib/esm/__merged.mjs +51 -23
  389. package/dist/lib/esm/abort-controller.mjs +5 -8
  390. package/dist/lib/esm/array.d.mts +25 -7
  391. package/dist/lib/esm/array.mjs +16 -12
  392. package/dist/lib/esm/async-events.d.mts +50 -50
  393. package/dist/lib/esm/async-events.mjs +81 -78
  394. package/dist/lib/esm/async.d.mts +23 -23
  395. package/dist/lib/esm/async.mjs +70 -66
  396. package/dist/lib/esm/blob.mjs +4 -11
  397. package/dist/lib/esm/debug.d.mts +1 -1
  398. package/dist/lib/esm/debug.mjs +14 -18
  399. package/dist/lib/esm/disposable.d.mts +27 -8
  400. package/dist/lib/esm/disposable.mjs +47 -29
  401. package/dist/lib/esm/error.mjs +18 -19
  402. package/dist/lib/esm/function.d.mts +26 -26
  403. package/dist/lib/esm/function.mjs +20 -20
  404. package/dist/lib/esm/generated-during-build.mjs +1 -1
  405. package/dist/lib/esm/html-element.d.mts +15 -15
  406. package/dist/lib/esm/html-element.mjs +74 -75
  407. package/dist/lib/esm/object-utils.d.mts +27 -27
  408. package/dist/lib/esm/object-utils.mjs +109 -102
  409. package/dist/lib/esm/obsidian/@types/dataview/data-model/value.d.mts +1 -1
  410. package/dist/lib/esm/obsidian/@types/dataview/expression/field.d.mts +1 -1
  411. package/dist/lib/esm/obsidian/@types/dataview/expression/functions.d.mts +4 -4
  412. package/dist/lib/esm/obsidian/app.mjs +1 -1
  413. package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
  414. package/dist/lib/esm/obsidian/async-with-notice.mjs +18 -18
  415. package/dist/lib/esm/obsidian/attachment-path.d.mts +5 -5
  416. package/dist/lib/esm/obsidian/attachment-path.mjs +10 -10
  417. package/dist/lib/esm/obsidian/backlink.mjs +2 -2
  418. package/dist/lib/esm/obsidian/callout.d.mts +9 -3
  419. package/dist/lib/esm/obsidian/callout.mjs +17 -12
  420. package/dist/lib/esm/obsidian/canvas.mjs +3 -2
  421. package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +8 -6
  422. package/dist/lib/esm/obsidian/code-block-markdown-information.d.mts +2 -2
  423. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +5 -0
  424. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +8 -2
  425. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +45 -8
  426. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +44 -18
  427. package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +18 -0
  428. package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +14 -1
  429. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +8 -8
  430. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +16 -16
  431. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +2 -2
  432. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +2 -2
  433. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +3 -3
  434. package/dist/lib/esm/obsidian/community-plugins.d.mts +19 -5
  435. package/dist/lib/esm/obsidian/community-plugins.mjs +17 -11
  436. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +4 -4
  437. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
  438. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -2
  439. package/dist/lib/esm/obsidian/components/component-ex.d.mts +3 -3
  440. package/dist/lib/esm/obsidian/components/component-ex.mjs +16 -14
  441. package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -2
  442. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +4 -4
  443. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  444. package/dist/lib/esm/obsidian/components/index.mjs +3 -1
  445. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +5 -5
  446. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +55 -55
  447. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +19 -19
  448. package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.d.mts +139 -0
  449. package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.mjs +196 -0
  450. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +18 -17
  451. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +8 -8
  452. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +18 -18
  453. package/dist/lib/esm/obsidian/components/pointer-position-component.mjs +3 -3
  454. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +12 -1
  455. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +62 -48
  456. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.d.mts +8 -8
  457. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.mjs +6 -6
  458. package/dist/lib/esm/obsidian/constructors/get-dom-events-handlers-constructor.mjs +4 -4
  459. package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
  460. package/dist/lib/esm/obsidian/dataview-link.mjs +3 -3
  461. package/dist/lib/esm/obsidian/dataview.d.mts +2 -2
  462. package/dist/lib/esm/obsidian/dataview.mjs +25 -27
  463. package/dist/lib/esm/obsidian/demo-vault-helper.mjs +4 -3
  464. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +12 -12
  465. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +13 -7
  466. package/dist/lib/esm/obsidian/editor.mjs +7 -5
  467. package/dist/lib/esm/obsidian/events.d.mts +2 -2
  468. package/dist/lib/esm/obsidian/events.mjs +2 -2
  469. package/dist/lib/esm/obsidian/file-change.d.mts +3 -3
  470. package/dist/lib/esm/obsidian/file-change.mjs +67 -67
  471. package/dist/lib/esm/obsidian/file-manager.d.mts +20 -1
  472. package/dist/lib/esm/obsidian/file-manager.mjs +22 -8
  473. package/dist/lib/esm/obsidian/file-system.d.mts +3 -3
  474. package/dist/lib/esm/obsidian/file-system.mjs +4 -4
  475. package/dist/lib/esm/obsidian/frontmatter.mjs +5 -5
  476. package/dist/lib/esm/obsidian/html-element.d.mts +2 -2
  477. package/dist/lib/esm/obsidian/html-element.mjs +3 -3
  478. package/dist/lib/esm/obsidian/i18n/i18n.d.mts +7 -0
  479. package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -2
  480. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  481. package/dist/lib/esm/obsidian/index.mjs +3 -1
  482. package/dist/lib/esm/obsidian/link.d.mts +22 -22
  483. package/dist/lib/esm/obsidian/link.mjs +76 -62
  484. package/dist/lib/esm/obsidian/logger.d.mts +5 -5
  485. package/dist/lib/esm/obsidian/logger.mjs +11 -11
  486. package/dist/lib/esm/obsidian/loop.d.mts +1 -1
  487. package/dist/lib/esm/obsidian/loop.mjs +4 -4
  488. package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +3 -3
  489. package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +2 -2
  490. package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
  491. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +25 -26
  492. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -3
  493. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +2 -2
  494. package/dist/lib/esm/obsidian/markdown.mjs +12 -10
  495. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -1
  496. package/dist/lib/esm/obsidian/metadata-cache.d.mts +2 -2
  497. package/dist/lib/esm/obsidian/metadata-cache.mjs +6 -6
  498. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
  499. package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +18 -18
  500. package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
  501. package/dist/lib/esm/obsidian/modals/select-item.mjs +6 -6
  502. package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.d.mts +5 -5
  503. package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.mjs +16 -14
  504. package/dist/lib/esm/obsidian/notebook-navigator.d.mts +132 -0
  505. package/dist/lib/esm/obsidian/notebook-navigator.mjs +49 -0
  506. package/dist/lib/esm/obsidian/parse-link.d.mts +4 -4
  507. package/dist/lib/esm/obsidian/parse-link.mjs +51 -48
  508. package/dist/lib/esm/obsidian/path-settings.mjs +17 -11
  509. package/dist/lib/esm/obsidian/pdf.d.mts +2 -2
  510. package/dist/lib/esm/obsidian/pdf.mjs +3 -3
  511. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +156 -52
  512. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +1 -1
  513. package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +2 -2
  514. package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +7 -7
  515. package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +11 -9
  516. package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +10 -10
  517. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +20 -20
  518. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +11 -1
  519. package/dist/lib/esm/obsidian/plugin/plugin.mjs +23 -2
  520. package/dist/lib/esm/obsidian/popovers/popover-anchor.d.mts +2 -2
  521. package/dist/lib/esm/obsidian/popovers/popover-anchor.mjs +4 -4
  522. package/dist/lib/esm/obsidian/popovers/popover.mjs +9 -9
  523. package/dist/lib/esm/obsidian/queue.d.mts +2 -2
  524. package/dist/lib/esm/obsidian/queue.mjs +6 -6
  525. package/dist/lib/esm/obsidian/resource-lock.d.mts +5 -0
  526. package/dist/lib/esm/obsidian/resource-lock.mjs +147 -64
  527. package/dist/lib/esm/obsidian/resource-url.mjs +2 -2
  528. package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +2 -2
  529. package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
  530. package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +5 -5
  531. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +8 -8
  532. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +2 -2
  533. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +18 -17
  534. package/dist/lib/esm/obsidian/setting-components/date-component.d.mts +2 -2
  535. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +4 -4
  536. package/dist/lib/esm/obsidian/setting-components/date-time-component.d.mts +2 -2
  537. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +4 -4
  538. package/dist/lib/esm/obsidian/setting-components/email-component.d.mts +2 -2
  539. package/dist/lib/esm/obsidian/setting-components/email-component.mjs +4 -4
  540. package/dist/lib/esm/obsidian/setting-components/month-component.d.mts +2 -2
  541. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +4 -4
  542. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +2 -2
  543. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +7 -7
  544. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.d.mts +2 -2
  545. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +4 -4
  546. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +2 -2
  547. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +2 -2
  548. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +5 -5
  549. package/dist/lib/esm/obsidian/setting-components/number-component.d.mts +2 -2
  550. package/dist/lib/esm/obsidian/setting-components/number-component.mjs +4 -4
  551. package/dist/lib/esm/obsidian/setting-components/password-component.d.mts +2 -2
  552. package/dist/lib/esm/obsidian/setting-components/password-component.mjs +4 -4
  553. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.d.mts +2 -2
  554. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +6 -6
  555. package/dist/lib/esm/obsidian/setting-components/telephone-component.d.mts +2 -2
  556. package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +4 -4
  557. package/dist/lib/esm/obsidian/setting-components/text-based-component.d.mts +2 -2
  558. package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +6 -6
  559. package/dist/lib/esm/obsidian/setting-components/time-component.d.mts +2 -2
  560. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +4 -4
  561. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +2 -2
  562. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +5 -5
  563. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +2 -2
  564. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +6 -6
  565. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +2 -2
  566. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -8
  567. package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +4 -4
  568. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +6 -5
  569. package/dist/lib/esm/obsidian/setting-components/url-component.d.mts +2 -2
  570. package/dist/lib/esm/obsidian/setting-components/url-component.mjs +4 -4
  571. package/dist/lib/esm/obsidian/setting-components/validator-component.d.mts +2 -2
  572. package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +35 -35
  573. package/dist/lib/esm/obsidian/setting-components/week-component.d.mts +2 -2
  574. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +4 -4
  575. package/dist/lib/esm/obsidian/setting-ex.d.mts +42 -42
  576. package/dist/lib/esm/obsidian/setting-ex.mjs +66 -66
  577. package/dist/lib/esm/obsidian/setting-group-ex.d.mts +2 -2
  578. package/dist/lib/esm/obsidian/setting-group-ex.mjs +4 -4
  579. package/dist/lib/esm/obsidian/vault-delete.d.mts +16 -2
  580. package/dist/lib/esm/obsidian/vault-delete.mjs +12 -6
  581. package/dist/lib/esm/obsidian/vault-transaction.mjs +8 -4
  582. package/dist/lib/esm/obsidian/vault.d.mts +32 -11
  583. package/dist/lib/esm/obsidian/vault.mjs +67 -47
  584. package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
  585. package/dist/lib/esm/obsidian/workspace.mjs +2 -2
  586. package/dist/lib/esm/path.d.mts +1 -1
  587. package/dist/lib/esm/path.mjs +7 -7
  588. package/dist/lib/esm/reg-exp.d.mts +4 -4
  589. package/dist/lib/esm/reg-exp.mjs +28 -21
  590. package/dist/lib/esm/script-utils/build.d.mts +1 -1
  591. package/dist/lib/esm/script-utils/build.mjs +15 -12
  592. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +14 -14
  593. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +26 -20
  594. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +10 -10
  595. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -3
  596. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -6
  597. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +6 -2
  598. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
  599. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +20 -20
  600. package/dist/lib/esm/script-utils/check-project-types.d.mts +12 -4
  601. package/dist/lib/esm/script-utils/check-project-types.mjs +3 -3
  602. package/dist/lib/esm/script-utils/cli-utils.d.mts +6 -6
  603. package/dist/lib/esm/script-utils/cli-utils.mjs +29 -33
  604. package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +12 -9
  605. package/dist/lib/esm/script-utils/env-toggle.mjs +3 -3
  606. package/dist/lib/esm/script-utils/exec.d.mts +4 -4
  607. package/dist/lib/esm/script-utils/exec.mjs +32 -32
  608. package/dist/lib/esm/script-utils/formatters/dprint.mjs +2 -2
  609. package/dist/lib/esm/script-utils/fs.mjs +3 -3
  610. package/dist/lib/esm/script-utils/json.d.mts +2 -2
  611. package/dist/lib/esm/script-utils/json.mjs +5 -5
  612. package/dist/lib/esm/script-utils/linters/cspell.mjs +2 -2
  613. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +392 -2
  614. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -1
  615. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +17 -17
  616. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -1
  617. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +17 -17
  618. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -1
  619. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +11 -11
  620. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -1
  621. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +99 -99
  622. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -1
  623. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +3 -3
  624. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -1
  625. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +11 -11
  626. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +9 -3
  627. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +41 -41
  628. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +6 -2
  629. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +15 -13
  630. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -1
  631. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +23 -23
  632. package/dist/lib/esm/script-utils/linters/eslint.mjs +4 -4
  633. package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
  634. package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
  635. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.d.mts +2 -2
  636. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +8 -3
  637. package/dist/lib/esm/script-utils/linters/markdownlint-ignores.d.mts +35 -0
  638. package/dist/lib/esm/script-utils/linters/markdownlint-ignores.mjs +33 -0
  639. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +13 -9
  640. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +54 -18
  641. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +8 -8
  642. package/dist/lib/esm/script-utils/npm-run.d.mts +16 -2
  643. package/dist/lib/esm/script-utils/npm-run.mjs +9 -3
  644. package/dist/lib/esm/script-utils/npm.d.mts +11 -11
  645. package/dist/lib/esm/script-utils/npm.mjs +11 -11
  646. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +165 -55
  647. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +1 -1
  648. package/dist/lib/esm/script-utils/test-runners/vitest-config.mjs +2 -1
  649. package/dist/lib/esm/script-utils/validate-declarations.mjs +1 -1
  650. package/dist/lib/esm/script-utils/version.d.mts +21 -21
  651. package/dist/lib/esm/script-utils/version.mjs +48 -45
  652. package/dist/lib/esm/setup.d.mts +1 -1
  653. package/dist/lib/esm/setup.mjs +1 -1
  654. package/dist/lib/esm/strict-proxy.d.mts +2 -2
  655. package/dist/lib/esm/strict-proxy.mjs +20 -20
  656. package/dist/lib/esm/string.d.mts +60 -60
  657. package/dist/lib/esm/string.mjs +80 -79
  658. package/dist/lib/esm/transformers/map-transformer.mjs +2 -2
  659. package/dist/lib/esm/transformers/set-transformer.mjs +2 -2
  660. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +2 -2
  661. package/dist/lib/esm/type-guards.d.mts +6 -6
  662. package/dist/lib/esm/type-guards.mjs +6 -6
  663. package/dist/lib/esm/type.d.mts +2 -2
  664. package/dist/lib/esm/type.mjs +3 -3
  665. package/dist/lib/esm/url.d.mts +4 -4
  666. package/dist/lib/esm/url.mjs +8 -8
  667. package/dist/lib/esm/value-provider.d.mts +6 -6
  668. package/dist/lib/esm/value-provider.mjs +5 -5
  669. package/obsidian/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
  670. package/obsidian/notebook-navigator/package.json +6 -0
  671. package/package.json +17 -33
  672. package/script-utils/linters/markdownlint-ignores/package.json +6 -0
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -125,6 +121,7 @@ var __copyProps = (to, from, except, desc) => {
125
121
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
122
  var community_plugins_exports = {};
127
123
  __export(community_plugins_exports, {
124
+ ConfigureCommunityPluginResult: () => ConfigureCommunityPluginResult,
128
125
  configureCommunityPlugin: () => configureCommunityPlugin,
129
126
  disableCommunityPlugin: () => disableCommunityPlugin,
130
127
  enableCommunityPlugin: () => enableCommunityPlugin,
@@ -143,6 +140,11 @@ var import_obsidian_dev_utils_state = require('../obsidian-dev-utils-state.cjs')
143
140
  const COMMUNITY_PLUGINS_STATE_KEY = "communityPluginEntriesPromise";
144
141
  const COMMUNITY_PLUGINS_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
145
142
  const DATA_JSON_INDENT = 2;
143
+ var ConfigureCommunityPluginResult = /* @__PURE__ */ ((ConfigureCommunityPluginResult2) => {
144
+ ConfigureCommunityPluginResult2["Skipped"] = "skipped";
145
+ ConfigureCommunityPluginResult2["Success"] = "success";
146
+ return ConfigureCommunityPluginResult2;
147
+ })(ConfigureCommunityPluginResult || {});
146
148
  async function configureCommunityPlugin(params) {
147
149
  const { app, settings } = params;
148
150
  const pluginId = await resolveCommunityPluginId(params);
@@ -157,12 +159,12 @@ async function configureCommunityPlugin(params) {
157
159
  const serializedBefore = JSON.stringify(data);
158
160
  Object.assign(data, settings);
159
161
  if (JSON.stringify(data) === serializedBefore) {
160
- return false;
162
+ return "skipped" /* Skipped */;
161
163
  }
162
164
  const serialized = String(JSON.stringify(data, null, DATA_JSON_INDENT));
163
165
  await app.vault.adapter.write(dataPath, `${serialized}
164
166
  `);
165
- return true;
167
+ return "success" /* Success */;
166
168
  }
167
169
  async function disableCommunityPlugin(params) {
168
170
  const { app } = params;
@@ -193,7 +195,7 @@ async function getLatestReleaseVersion(repo) {
193
195
  async function installCommunityPlugin(params) {
194
196
  const { app } = params;
195
197
  const pluginId = await resolveCommunityPluginId(params);
196
- if (app.plugins.manifests[pluginId]) {
198
+ if (Object.hasOwn(app.plugins.manifests, pluginId)) {
197
199
  return;
198
200
  }
199
201
  const repo = await getCommunityPluginRepo(pluginId);
@@ -207,7 +209,7 @@ async function installCommunityPlugin(params) {
207
209
  async function installConfigureEnableCommunityPlugin(params) {
208
210
  const { app, settings } = params;
209
211
  await installCommunityPlugin(params);
210
- const didSettingsChange = settings ? await configureCommunityPlugin({ ...params, settings }) : false;
212
+ const didSettingsChange = settings ? await configureCommunityPlugin({ ...params, settings }) === "success" /* Success */ : false;
211
213
  const pluginId = await resolveCommunityPluginId(params);
212
214
  if (!app.plugins.enabledPlugins.has(pluginId)) {
213
215
  await enableCommunityPlugin(params);
@@ -243,7 +245,7 @@ async function toggleInstallCommunityPlugin(params) {
243
245
  async function uninstallCommunityPlugin(params) {
244
246
  const { app } = params;
245
247
  const pluginId = await resolveCommunityPluginId(params);
246
- if (!app.plugins.manifests[pluginId]) {
248
+ if (!Object.hasOwn(app.plugins.manifests, pluginId)) {
247
249
  return;
248
250
  }
249
251
  await app.plugins.uninstallPlugin(pluginId);
@@ -266,19 +268,20 @@ async function getPluginManifest(repo, version) {
266
268
  const response = await (0, import_obsidian.requestUrl)(`https://github.com/${repo}/releases/download/${version}/manifest.json`);
267
269
  return response.json;
268
270
  }
269
- async function resolveCommunityPluginId(ref) {
270
- if ("pluginId" in ref) {
271
- return ref.pluginId;
271
+ async function resolveCommunityPluginId(reference) {
272
+ if ("pluginId" in reference) {
273
+ return reference.pluginId;
272
274
  }
273
275
  const entries = await getCommunityPluginEntries();
274
- const entry = entries.find((candidate) => candidate.name === ref.pluginName);
276
+ const entry = entries.find((candidate) => candidate.name === reference.pluginName);
275
277
  if (!entry) {
276
- throw new Error(`Plugin named '${ref.pluginName}' was not found in the Obsidian community plugins registry.`);
278
+ throw new Error(`Plugin named '${reference.pluginName}' was not found in the Obsidian community plugins registry.`);
277
279
  }
278
280
  return entry.id;
279
281
  }
280
282
  // Annotate the CommonJS export names for ESM import in node:
281
283
  0 && (module.exports = {
284
+ ConfigureCommunityPluginResult,
282
285
  configureCommunityPlugin,
283
286
  disableCommunityPlugin,
284
287
  enableCommunityPlugin,
@@ -291,4 +294,4 @@ async function resolveCommunityPluginId(ref) {
291
294
  toggleInstallCommunityPlugin,
292
295
  uninstallCommunityPlugin
293
296
  });
294
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgXG4gKiBvciBgcGx1Z2luTmFtZWA7IGBzZXR0aW5nc2AgaXMgb3B0aW9uYWwgKG9taXQgZm9yIGEgcGx1Z2luIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgUGFydGlhbDxDb21tdW5pdHlQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBpZC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5SWRSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGRpc3BsYXkgbmFtZSAoYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5KS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gYXV0aG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSBhIGNvbW11bml0eS1wbHVnaW4gb3BlcmF0aW9uIHJ1bnMgYWdhaW5zdC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0byBtZXJnZSBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG9iamVjdCBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBwbHVnaW4ncyBleGlzdGluZyBgZGF0YS5qc29uYCAodGhlIGZpbGUgaXMgY3JlYXRlZCBpZlxuICAgKiBhYnNlbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGU6IGB0cnVlYCBlbmFibGVzIHRoZSBwbHVnaW4sIGBmYWxzZWAgZGlzYWJsZXMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlOiBgdHJ1ZWAgaW5zdGFsbHMgdGhlIHBsdWdpbiwgYGZhbHNlYCB1bmluc3RhbGxzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnN0YWxsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBhIEdpdEh1YiByZWxlYXNlIHdlIHJlYWQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZywgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFnX25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZID0gJ2NvbW11bml0eVBsdWdpbkVudHJpZXNQcm9taXNlJztcbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuY29uc3QgREFUQV9KU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogV3JpdGVzIHNldHRpbmdzIGludG8gYSBjb21tdW5pdHkgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIHNoYWxsb3ctbWVyZ2luZyB0aGVtIG92ZXIgYW55IGV4aXN0aW5nIHNldHRpbmdzXG4gKiAoY3JlYXRpbmcgdGhlIGZpbGUgaWYgYWJzZW50KS4gV3JpdGluZyBzZXR0aW5ncyBCRUZPUkUgdGhlIHBsdWdpbiBpcyBlbmFibGVkIG1ha2VzIGl0IGxvYWQgYWxyZWFkeVxuICogY29uZmlndXJlZCwgd2l0aCBubyByZWxvYWQuIEEgbm8tb3Agd3JpdGUgaXMgc2tpcHBlZDogd2hlbiB0aGUgbWVyZ2UgY2hhbmdlcyBub3RoaW5nLCB0aGUgZmlsZSBpcyBsZWZ0XG4gKiB1bnRvdWNoZWQgYW5kIGBmYWxzZWAgaXMgcmV0dXJuZWQsIHNvIGEgY2FsbGVyIGNhbiBhdm9pZCByZWxvYWRpbmcgYW4gYWxyZWFkeS1jb3JyZWN0bHktY29uZmlndXJlZFxuICogcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgYGRhdGEuanNvbmAgY29udGVudCBjaGFuZ2VkIChhbmQgd2FzXG4gKiB3cml0dGVuKSwgb3IgYGZhbHNlYCBpZiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IHByZXNlbnQgKG5vdGhpbmcgd3JpdHRlbikuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBjb25zdCBkYXRhUGF0aCA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHtwbHVnaW5JZH0vZGF0YS5qc29uYDtcblxuICBsZXQgZGF0YTogb2JqZWN0ID0ge307XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoZGF0YVBhdGgpKSB7XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5yZWFkKGRhdGFQYXRoKSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0Jykge1xuICAgICAgZGF0YSA9IHBhcnNlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkQmVmb3JlID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIE9iamVjdC5hc3NpZ24oZGF0YSwgc2V0dGluZ3MpO1xuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGF0YSkgPT09IHNlcmlhbGl6ZWRCZWZvcmUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkID0gU3RyaW5nKEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIERBVEFfSlNPTl9JTkRFTlQpKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoZGF0YVBhdGgsIGAke3NlcmlhbGl6ZWR9XFxuYCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZGlzYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgb2YgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gT2JzaWRpYW4ncyBwdWJsaWNcbiAqIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgZmV0Y2hlZCBvbmNlIGFuZCBjYWNoZWQgb24gdGhlIHNoYXJlZCBwbHVnaW4gc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHM7IGEgZmFpbGVkXG4gKiBmZXRjaCBpcyBub3QgY2FjaGVkLCBzbyBhIGxhdGVyIGNhbGwgcmV0cmllcy5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIGlkIHRvIGxvb2sgdXAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCByZXBvc2l0b3J5LCBvciBgbnVsbGAgaWYgdGhlXG4gKiBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBwbHVnaW5JZCk7XG4gIHJldHVybiBlbnRyeT8ucmVwbyA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uICh0aGUgcmVsZWFzZSBgdGFnX25hbWVgLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2ApIG9mIGFcbiAqIEdpdEh1YiByZXBvc2l0b3J5LlxuICpcbiAqIEBwYXJhbSByZXBvIC0gVGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICBjb25zdCByZWxlYXNlID0gcmVzcG9uc2UuanNvbiBhcyBHaXRIdWJSZWxlYXNlO1xuICByZXR1cm4gcmVsZWFzZS50YWdfbmFtZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSB0aGUgb2ZmaWNpYWwgc3RvcmUgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhXG4gKiBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5IGZyb20gT2JzaWRpYW4nc1xuICogY29tbXVuaXR5IHJlZ2lzdHJ5LCByZWFkcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiBhbmQgaXRzIG1hbmlmZXN0LCBhbmQgaW5zdGFsbHMgaXQgdGhyb3VnaFxuICogT2JzaWRpYW4ncyBvd24gYGluc3RhbGxQbHVnaW5gIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXBvID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZCk7XG4gIGlmICghcmVwbykge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICcke3BsdWdpbklkfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbyk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZ2V0UGx1Z2luTWFuaWZlc3QocmVwbywgdmVyc2lvbik7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4ocmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiwgd3JpdGVzIGl0cyBzZXR0aW5ncywgVEhFTiBlbmFibGVzIGl0IFx1MjAxNCBpbiB0aGF0IG9yZGVyIFx1MjAxNCBzbyB0aGUgcGx1Z2luXG4gKiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgKGEgcGx1Z2luIGVuYWJsZWQgYmVmb3JlIGl0IGlzIGNvbmZpZ3VyZWQgcnVucyBpdHMgYG9ubG9hZGAgd2l0aCBkZWZhdWx0XG4gKiBzZXR0aW5ncyBhbmQgZG9lcyBub3RoaW5nIHVzZWZ1bCkuIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkIGFuZCB0aGUgc2V0dGluZ3MgY2hhbmdlZCwgaXQgaXNcbiAqIGRpc2FibGVkIGFuZCByZS1lbmFibGVkIHNvIHRoZSBuZXcgc2V0dGluZ3MgdGFrZSBlZmZlY3QuIGBzZXR0aW5nc2AgaXMgb3B0aW9uYWw6IG9taXQgaXQgZm9yIGEgcGx1Z2luXG4gKiB0aGF0IG5lZWRzIG5vIGNvbmZpZ3VyYXRpb24uIENvbXBvc2VzIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwge0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0sXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSBhbmQge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkIGFuZCBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIGNvbnN0IGRpZFNldHRpbmdzQ2hhbmdlID0gc2V0dGluZ3MgPyBhd2FpdCBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4oeyAuLi5wYXJhbXMsIHNldHRpbmdzIH0pIDogZmFsc2U7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKGRpZFNldHRpbmdzQ2hhbmdlKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgT2JzaWRpYW4ncyBwdWJsaWMgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnksIHJldHVybmluZyB0aGUgaWQgYW5kIGRpc3BsYXkgbmFtZSBvZiBldmVyeVxuICogcGx1Z2luIHdob3NlIGlkLCBuYW1lLCBhdXRob3Igb3IgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHF1ZXJ5IChjYXNlLWluc2Vuc2l0aXZlKS4gQW4gZW1wdHkgcXVlcnlcbiAqIG1hdGNoZXMgZXZlcnkgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG1hdGNoaW5nIHBsdWdpbnMnIHtAbGluayBDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHR9cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbW11bml0eVBsdWdpbnMocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChlbnRyeSkgPT5cbiAgICAgIGVudHJ5LmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmF1dGhvci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgIClcbiAgICAubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWVcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0VuYWJsZWQpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyBvciB1bmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBpbnN0YWxsaW5nIGFuZCB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBpZiBpdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpc1xuICogbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgdW5pbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMubWFuaWZlc3RzW3BsdWdpbklkXSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChDT01NVU5JVFlfUExVR0lOU19VUkwpO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbiBhcyBDb21tdW5pdHlQbHVnaW5FbnRyeVtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCBjYWNoZSA9IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChyZWY6IENvbW11bml0eVBsdWdpblJlZik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICgncGx1Z2luSWQnIGluIHJlZikge1xuICAgIHJldHVybiByZWYucGx1Z2luSWQ7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gcmVmLnBsdWdpbk5hbWUpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbmFtZWQgJyR7cmVmLnBsdWdpbk5hbWV9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuaWQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxzQkFBMkI7QUFFM0Isc0NBQXlDO0FBNEt6QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLG1CQUFtQjtBQWN6QixlQUFzQix5QkFBeUIsUUFBMEQ7QUFDdkcsUUFBTSxFQUFFLEtBQUssU0FBUyxJQUFJO0FBQzFCLFFBQU0sV0FBVyxNQUFNLHlCQUF5QixNQUFNO0FBQ3RELFFBQU0sV0FBVyxHQUFHLElBQUksTUFBTSxTQUFTLFlBQVksUUFBUTtBQUUzRCxNQUFJLE9BQWUsQ0FBQztBQUNwQixNQUFJLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTyxRQUFRLEdBQUc7QUFDNUMsVUFBTSxTQUFrQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUN6RSxRQUFJLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVTtBQUNqRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQixLQUFLLFVBQVUsSUFBSTtBQUM1QyxTQUFPLE9BQU8sTUFBTSxRQUFRO0FBQzVCLE1BQUksS0FBSyxVQUFVLElBQUksTUFBTSxrQkFBa0I7QUFD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
297
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgXG4gKiBvciBgcGx1Z2luTmFtZWA7IGBzZXR0aW5nc2AgaXMgb3B0aW9uYWwgKG9taXQgZm9yIGEgcGx1Z2luIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgUGFydGlhbDxDb21tdW5pdHlQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBpZC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5SWRSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGRpc3BsYXkgbmFtZSAoYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5KS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gYXV0aG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSBhIGNvbW11bml0eS1wbHVnaW4gb3BlcmF0aW9uIHJ1bnMgYWdhaW5zdC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0byBtZXJnZSBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG9iamVjdCBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBwbHVnaW4ncyBleGlzdGluZyBgZGF0YS5qc29uYCAodGhlIGZpbGUgaXMgY3JlYXRlZCBpZlxuICAgKiBhYnNlbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGU6IGB0cnVlYCBlbmFibGVzIHRoZSBwbHVnaW4sIGBmYWxzZWAgZGlzYWJsZXMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlOiBgdHJ1ZWAgaW5zdGFsbHMgdGhlIHBsdWdpbiwgYGZhbHNlYCB1bmluc3RhbGxzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnN0YWxsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBhIEdpdEh1YiByZWxlYXNlIHdlIHJlYWQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZywgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFnX25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZID0gJ2NvbW11bml0eVBsdWdpbkVudHJpZXNQcm9taXNlJztcbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuY29uc3QgREFUQV9KU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuZXhwb3J0IGVudW0gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIHNvIG5vdGhpbmcgd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTa2lwcGVkID0gJ3NraXBwZWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3Mgd2VyZSBtZXJnZWQgaW50byB0aGUgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIHdoaWNoIHdhcyB3cml0dGVuLlxuICAgKi9cbiAgU3VjY2VzcyA9ICdzdWNjZXNzJ1xufVxuXG4vKipcbiAqIFdyaXRlcyBzZXR0aW5ncyBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLCBzaGFsbG93LW1lcmdpbmcgdGhlbSBvdmVyIGFueSBleGlzdGluZyBzZXR0aW5nc1xuICogKGNyZWF0aW5nIHRoZSBmaWxlIGlmIGFic2VudCkuIFdyaXRpbmcgc2V0dGluZ3MgQkVGT1JFIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBtYWtlcyBpdCBsb2FkIGFscmVhZHlcbiAqIGNvbmZpZ3VyZWQsIHdpdGggbm8gcmVsb2FkLiBBIG5vLW9wIHdyaXRlIGlzIHNraXBwZWQ6IHdoZW4gdGhlIG1lcmdlIGNoYW5nZXMgbm90aGluZywgdGhlIGZpbGUgaXMgbGVmdFxuICogdW50b3VjaGVkIGFuZCB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWR9IGlzIHJldHVybmVkLCBzbyBhIGNhbGxlciBjYW4gYXZvaWRcbiAqIHJlbG9hZGluZyBhbiBhbHJlYWR5LWNvcnJlY3RseS1jb25maWd1cmVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3N9IGlmIHRoZVxuICogYGRhdGEuanNvbmAgY29udGVudCBjaGFuZ2VkIChhbmQgd2FzIHdyaXR0ZW4pLCBvciB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlNraXBwZWR9IGlmIHRoZVxuICogc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IHByZXNlbnQgKG5vdGhpbmcgd3JpdHRlbikuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGNvbnN0IGRhdGFQYXRoID0gYCR7YXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3BsdWdpbklkfS9kYXRhLmpzb25gO1xuXG4gIGxldCBkYXRhOiBvYmplY3QgPSB7fTtcbiAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkYXRhUGF0aCkpIHtcbiAgICBjb25zdCBwYXJzZWQ6IHVua25vd24gPSBKU09OLnBhcnNlKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZGF0YVBhdGgpKTtcbiAgICBpZiAocGFyc2VkICE9PSBudWxsICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gcGFyc2VkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWRCZWZvcmUgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgT2JqZWN0LmFzc2lnbihkYXRhLCBzZXR0aW5ncyk7XG4gIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gc2VyaWFsaXplZEJlZm9yZSkge1xuICAgIHJldHVybiBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU2tpcHBlZDtcbiAgfVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBTdHJpbmcoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgREFUQV9KU09OX0lOREVOVCkpO1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci53cml0ZShkYXRhUGF0aCwgYCR7c2VyaWFsaXplZH1cXG5gKTtcbiAgcmV0dXJuIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzO1xufVxuXG4vKipcbiAqIERpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZGlzYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgb2YgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gT2JzaWRpYW4ncyBwdWJsaWNcbiAqIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgZmV0Y2hlZCBvbmNlIGFuZCBjYWNoZWQgb24gdGhlIHNoYXJlZCBwbHVnaW4gc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHM7IGEgZmFpbGVkXG4gKiBmZXRjaCBpcyBub3QgY2FjaGVkLCBzbyBhIGxhdGVyIGNhbGwgcmV0cmllcy5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIGlkIHRvIGxvb2sgdXAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCByZXBvc2l0b3J5LCBvciBgbnVsbGAgaWYgdGhlXG4gKiBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBwbHVnaW5JZCk7XG4gIHJldHVybiBlbnRyeT8ucmVwbyA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uICh0aGUgcmVsZWFzZSBgdGFnX25hbWVgLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2ApIG9mIGFcbiAqIEdpdEh1YiByZXBvc2l0b3J5LlxuICpcbiAqIEBwYXJhbSByZXBvIC0gVGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICBjb25zdCByZWxlYXNlID0gcmVzcG9uc2UuanNvbiBhcyBHaXRIdWJSZWxlYXNlO1xuICByZXR1cm4gcmVsZWFzZS50YWdfbmFtZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSB0aGUgb2ZmaWNpYWwgc3RvcmUgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhXG4gKiBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5IGZyb20gT2JzaWRpYW4nc1xuICogY29tbXVuaXR5IHJlZ2lzdHJ5LCByZWFkcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiBhbmQgaXRzIG1hbmlmZXN0LCBhbmQgaW5zdGFsbHMgaXQgdGhyb3VnaFxuICogT2JzaWRpYW4ncyBvd24gYGluc3RhbGxQbHVnaW5gIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKE9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMubWFuaWZlc3RzLCBwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXBvID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZCk7XG4gIGlmICghcmVwbykge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICcke3BsdWdpbklkfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbyk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZ2V0UGx1Z2luTWFuaWZlc3QocmVwbywgdmVyc2lvbik7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4ocmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiwgd3JpdGVzIGl0cyBzZXR0aW5ncywgVEhFTiBlbmFibGVzIGl0IFx1MjAxNCBpbiB0aGF0IG9yZGVyIFx1MjAxNCBzbyB0aGUgcGx1Z2luXG4gKiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgKGEgcGx1Z2luIGVuYWJsZWQgYmVmb3JlIGl0IGlzIGNvbmZpZ3VyZWQgcnVucyBpdHMgYG9ubG9hZGAgd2l0aCBkZWZhdWx0XG4gKiBzZXR0aW5ncyBhbmQgZG9lcyBub3RoaW5nIHVzZWZ1bCkuIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkIGFuZCB0aGUgc2V0dGluZ3MgY2hhbmdlZCwgaXQgaXNcbiAqIGRpc2FibGVkIGFuZCByZS1lbmFibGVkIHNvIHRoZSBuZXcgc2V0dGluZ3MgdGFrZSBlZmZlY3QuIGBzZXR0aW5nc2AgaXMgb3B0aW9uYWw6IG9taXQgaXQgZm9yIGEgcGx1Z2luXG4gKiB0aGF0IG5lZWRzIG5vIGNvbmZpZ3VyYXRpb24uIENvbXBvc2VzIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwge0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0sXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSBhbmQge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkIGFuZCBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIGNvbnN0IGRpZFNldHRpbmdzQ2hhbmdlID0gc2V0dGluZ3MgPyBhd2FpdCBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4oeyAuLi5wYXJhbXMsIHNldHRpbmdzIH0pID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2VzcyA6IGZhbHNlO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIGlmIChkaWRTZXR0aW5nc0NoYW5nZSkge1xuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaGVzIE9ic2lkaWFuJ3MgcHVibGljIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIGlkIGFuZCBkaXNwbGF5IG5hbWUgb2YgZXZlcnlcbiAqIHBsdWdpbiB3aG9zZSBpZCwgbmFtZSwgYXV0aG9yIG9yIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBxdWVyeSAoY2FzZS1pbnNlbnNpdGl2ZSkuIEFuIGVtcHR5IHF1ZXJ5XG4gKiBtYXRjaGVzIGV2ZXJ5IHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcXVlcnkgLSBUaGUgc2VhcmNoIHF1ZXJ5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBtYXRjaGluZyBwbHVnaW5zJyB7QGxpbmsgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0fXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWFyY2hDb21tdW5pdHlQbHVnaW5zKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdFtdPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBlbnRyaWVzXG4gICAgLmZpbHRlcigoZW50cnkpID0+XG4gICAgICBlbnRyeS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5hdXRob3IudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICApXG4gICAgLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICBpZDogZW50cnkuaWQsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IC8ge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LCBzbyBpdCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNFbmFibGVkKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbHMgb3IgdW5pbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59IC8ge0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgaW5zdGFsbGluZyBhbmQgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGFyYW1zLmlzSW5zdGFsbGVkKSB7XG4gICAgYXdhaXQgaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHVuaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogVW5pbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gaWYgaXQgaXMgY3VycmVudGx5IGluc3RhbGxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXNcbiAqIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIHVuaW5zdGFsbGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIU9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMubWFuaWZlc3RzLCBwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMudW5pbnN0YWxsUGx1Z2luKHBsdWdpbklkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoQ09NTVVOSVRZX1BMVUdJTlNfVVJMKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgQ29tbXVuaXR5UGx1Z2luRW50cnlbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgY2FjaGUgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8bnVsbCB8IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4+KENPTU1VTklUWV9QTFVHSU5TX1NUQVRFX0tFWSwgbnVsbCk7XG4gIGNhY2hlLnZhbHVlID8/PSBmZXRjaENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjYWNoZS52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYWNoZS52YWx1ZSA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luTWFuaWZlc3QocmVwbzogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPFBsdWdpbk1hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9naXRodWIuY29tLyR7cmVwb30vcmVsZWFzZXMvZG93bmxvYWQvJHt2ZXJzaW9ufS9tYW5pZmVzdC5qc29uYCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIFBsdWdpbk1hbmlmZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmZXJlbmNlOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZmVyZW5jZS5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZmVyZW5jZS5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -126,19 +126,33 @@ interface CommunityPluginToggleInstallState {
126
126
  */
127
127
  readonly isInstalled: boolean;
128
128
  }
129
+ /**
130
+ * The result of {@link configureCommunityPlugin}.
131
+ */
132
+ export declare enum ConfigureCommunityPluginResult {
133
+ /**
134
+ * The settings were already present in the plugin's `data.json`, so nothing was written.
135
+ */
136
+ Skipped = "skipped",
137
+ /**
138
+ * The settings were merged into the plugin's `data.json`, which was written.
139
+ */
140
+ Success = "success"
141
+ }
129
142
  /**
130
143
  * Writes settings into a community plugin's `data.json`, shallow-merging them over any existing settings
131
144
  * (creating the file if absent). Writing settings BEFORE the plugin is enabled makes it load already
132
145
  * configured, with no reload. A no-op write is skipped: when the merge changes nothing, the file is left
133
- * untouched and `false` is returned, so a caller can avoid reloading an already-correctly-configured
134
- * plugin.
146
+ * untouched and {@link ConfigureCommunityPluginResult.Skipped} is returned, so a caller can avoid
147
+ * reloading an already-correctly-configured plugin.
135
148
  *
136
149
  * @param params - The {@link ConfigureCommunityPluginParams}.
137
- * @returns A {@link Promise} that resolves to `true` if the `data.json` content changed (and was
138
- * written), or `false` if the settings were already present (nothing written).
150
+ * @returns A {@link Promise} that resolves to {@link ConfigureCommunityPluginResult.Success} if the
151
+ * `data.json` content changed (and was written), or {@link ConfigureCommunityPluginResult.Skipped} if the
152
+ * settings were already present (nothing written).
139
153
  * @throws If selected by `pluginName` and the name is not listed in Obsidian's community plugins registry.
140
154
  */
141
- export declare function configureCommunityPlugin(params: ConfigureCommunityPluginParams): Promise<boolean>;
155
+ export declare function configureCommunityPlugin(params: ConfigureCommunityPluginParams): Promise<ConfigureCommunityPluginResult>;
142
156
  /**
143
157
  * Disables a community plugin (persisting the change) if it is currently enabled. Idempotent — a no-op
144
158
  * when the plugin is already disabled.
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -162,4 +158,4 @@ class AbortSignalComponent extends import_component_ex.ComponentEx {
162
158
  0 && (module.exports = {
163
159
  AbortSignalComponent
164
160
  });
165
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGFuIEFib3J0U2lnbmFsIGZvciBjYW5jZWxsaW5nIGxvbmctcnVubmluZyBvcGVyYXRpb25zIG9uIHBsdWdpbiB1bmxvYWQuXG4gKi9cblxuaW1wb3J0IHsgU2lsZW50RXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvci50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBQcm92aWRlcyBhbiB7QGxpbmsgQWJvcnRTaWduYWx9IHRoYXQgaXMgYWJvcnRlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBYm9ydFNpZ25hbENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWJvcnRTaWduYWx9IHRoYXQgaXMgYWJvcnRlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFib3J0U2lnbmFsKCk6IEFib3J0U2lnbmFsIHtcbiAgICByZXR1cm4gdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhYm9ydCBzaWduYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIElEICh1c2VkIGluIHRoZSBhYm9ydCByZWFzb24gbWVzc2FnZSkuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFib3J0cyB0aGUgc2lnbmFsIG9uIHVubG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgU2lsZW50RXJyb3IoYFBsdWdpbiAke3RoaXMucGx1Z2luSWR9IGhhZCBiZWVuIHVubG9hZGVkYCkpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxtQkFBNEI7QUFDNUIsMEJBQTRCO0FBS3JCLE1BQU0sNkJBQTZCLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBaUI3QyxZQUErQixVQUFrQjtBQUN0RCxVQUFNO0FBRDhCO0FBRXBDLFNBQUssa0JBQWtCLElBQUksZ0JBQWdCO0FBQUEsRUFDN0M7QUFBQSxFQUhzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVh0QyxJQUFXLGNBQTJCO0FBQ3BDLFdBQU8sS0FBSyxnQkFBZ0I7QUFBQSxFQUM5QjtBQUFBLEVBRWlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFlRCxXQUFpQjtBQUMvQixTQUFLLGdCQUFnQixNQUFNLElBQUkseUJBQVksVUFBVSxLQUFLLFFBQVEsb0JBQW9CLENBQUM7QUFBQSxFQUN6RjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
161
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGFuIEFib3J0U2lnbmFsIGZvciBjYW5jZWxsaW5nIGxvbmctcnVubmluZyBvcGVyYXRpb25zIG9uIHBsdWdpbiB1bmxvYWQuXG4gKi9cblxuaW1wb3J0IHsgU2lsZW50RXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvci50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBQcm92aWRlcyBhbiB7QGxpbmsgQWJvcnRTaWduYWx9IHRoYXQgaXMgYWJvcnRlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBYm9ydFNpZ25hbENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWJvcnRTaWduYWx9IHRoYXQgaXMgYWJvcnRlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFib3J0U2lnbmFsKCk6IEFib3J0U2lnbmFsIHtcbiAgICByZXR1cm4gdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhYm9ydCBzaWduYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIElEICh1c2VkIGluIHRoZSBhYm9ydCByZWFzb24gbWVzc2FnZSkuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFib3J0cyB0aGUgc2lnbmFsIG9uIHVubG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgU2lsZW50RXJyb3IoYFBsdWdpbiAke3RoaXMucGx1Z2luSWR9IGhhZCBiZWVuIHVubG9hZGVkYCkpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLG1CQUE0QjtBQUM1QiwwQkFBNEI7QUFLckIsTUFBTSw2QkFBNkIsZ0NBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQjdDLFlBQStCLFVBQWtCO0FBQ3RELFVBQU07QUFEOEI7QUFFcEMsU0FBSyxrQkFBa0IsSUFBSSxnQkFBZ0I7QUFBQSxFQUM3QztBQUFBLEVBSHNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBWHRDLElBQVcsY0FBMkI7QUFDcEMsV0FBTyxLQUFLLGdCQUFnQjtBQUFBLEVBQzlCO0FBQUEsRUFFaUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWVELFdBQWlCO0FBQy9CLFNBQUssZ0JBQWdCLE1BQU0sSUFBSSx5QkFBWSxVQUFVLEtBQUssUUFBUSxvQkFBb0IsQ0FBQztBQUFBLEVBQ3pGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -206,4 +202,4 @@ class AllWindowsEventComponent extends import_component_ex.ComponentEx {
206
202
  0 && (module.exports = {
207
203
  AllWindowsEventComponent
208
204
  });
209
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGFuZGxlcyByZWdpc3RlcmluZyBET00gZXZlbnRzIGFuZCBoYW5kbGVycyBmb3IgYWxsIHdpbmRvd3MgKG1haW4gd2luZG93IGFuZCBhbGwgZXhpc3RpbmcvZnV0dXJlIHBvcHVwIHdpbmRvd3MpIGFuZCB0aGVpciBkb2N1bWVudHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldEFsbERvbVdpbmRvd3MgfSBmcm9tICcuLi93b3Jrc3BhY2UudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDYWxsYmFja0xheW91dFJlYWR5Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtcmVhZHktY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsRG9jdW1lbnRzRG9tRXZlbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gRG9jdW1lbnRFdmVudFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50UmVnaXN0ZXJBbGxEb2N1bWVudHNEb21FdmVudFBhcmFtczxEb2N1bWVudEV2ZW50VHlwZSBleHRlbmRzIGtleW9mIERvY3VtZW50RXZlbnRNYXA+IHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gZXZ0IC0gVGhlIGV2ZW50LlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIGNhbGxiYWNrKHRoaXM6IEhUTUxFbGVtZW50LCBldnQ6IERvY3VtZW50RXZlbnRNYXBbRG9jdW1lbnRFdmVudFR5cGVdKTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG9wdGlvbnMgZm9yIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IERvY3VtZW50RXZlbnRUeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnQucmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gV2luZG93RXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsbFdpbmRvd3NFdmVudENvbXBvbmVudFJlZ2lzdGVyQWxsV2luZG93c0RvbUV2ZW50UGFyYW1zPFdpbmRvd0V2ZW50VHlwZSBleHRlbmRzIGtleW9mIFdpbmRvd0V2ZW50TWFwPiB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGV2dCAtIFRoZSBldmVudC5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBjYWxsYmFjayh0aGlzOiBIVE1MRWxlbWVudCwgZXZ0OiBXaW5kb3dFdmVudE1hcFtXaW5kb3dFdmVudFR5cGVdKTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG9wdGlvbnMgZm9yIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFdpbmRvd0V2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHJlZ2lzdGVyaW5nIERPTSBldmVudHMgYW5kIGhhbmRsZXJzIGZvciBhbGwgd2luZG93cyAobWFpbiB3aW5kb3cgYW5kIGFsbCBleGlzdGluZy9mdXR1cmUgcG9wdXAgd2luZG93cykgYW5kIHRoZWlyIGRvY3VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsbFdpbmRvd3NFdmVudENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnRgIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIERPTSBldmVudCBmb3IgYWxsIGRvY3VtZW50cyAobWFpbiB3aW5kb3cgZG9jdW1lbnQgYW5kIGFsbCBleGlzdGluZy9mdXR1cmUgcG9wdXAgd2luZG93IGRvY3VtZW50cykuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRG9jdW1lbnRFdmVudFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgdGhlIERPTSBldmVudC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFsbERvY3VtZW50c0RvbUV2ZW50PERvY3VtZW50RXZlbnRUeXBlIGV4dGVuZHMga2V5b2YgRG9jdW1lbnRFdmVudE1hcD4oXG4gICAgcGFyYW1zOiBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnRSZWdpc3RlckFsbERvY3VtZW50c0RvbUV2ZW50UGFyYW1zPERvY3VtZW50RXZlbnRUeXBlPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIFRoZSBjYWxsYmFjayBpcyBhIERPTSBldmVudCBoYW5kbGVyIGZvcndhcmRlZCB0byByZWdpc3RlckRvbUV2ZW50LCB3aGljaCBiaW5kcyB0aGlzIHRvIHRoZSBlbGVtZW50LlxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zLFxuICAgICAgdHlwZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJBbGxXaW5kb3dzSGFuZGxlcigod2luKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRG9tRXZlbnQod2luLmRvY3VtZW50LCB0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgRE9NIGV2ZW50IGZvciBhbGwgd2luZG93cyAobWFpbiB3aW5kb3cgYW5kIGFsbCBleGlzdGluZy9mdXR1cmUgcG9wdXAgd2luZG93cykuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gV2luZG93RXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBET00gZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnQ8V2luZG93RXZlbnRUeXBlIGV4dGVuZHMga2V5b2YgV2luZG93RXZlbnRNYXA+KFxuICAgIHBhcmFtczogQWxsV2luZG93c0V2ZW50Q29tcG9uZW50UmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnRQYXJhbXM8V2luZG93RXZlbnRUeXBlPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIFRoZSBjYWxsYmFjayBpcyBhIERPTSBldmVudCBoYW5kbGVyIGZvcndhcmRlZCB0byByZWdpc3RlckRvbUV2ZW50LCB3aGljaCBiaW5kcyB0aGlzIHRvIHRoZSBlbGVtZW50LlxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zLFxuICAgICAgdHlwZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJBbGxXaW5kb3dzSGFuZGxlcigod2luKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRG9tRXZlbnQod2luLCB0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgaGFuZGxlciBmb3IgYWxsIHdpbmRvd3MgKG1haW4gd2luZG93IGFuZCBhbGwgZXhpc3RpbmcvZnV0dXJlIHBvcHVwIHdpbmRvd3MpLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsV2luZG93c0hhbmRsZXIgLSBUaGUgaGFuZGxlciBjYWxsZWQgZm9yIGVhY2ggd2luZG93IChtYWluICsgcG9wdXBzKS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFsbFdpbmRvd3NIYW5kbGVyKGFsbFdpbmRvd3NIYW5kbGVyOiAod2luOiBXaW5kb3cpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgbWFpbldpbmRvdyA9IGFjdGl2ZVdpbmRvdztcbiAgICBhbGxXaW5kb3dzSGFuZGxlcihtYWluV2luZG93KTtcblxuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHdpbiBvZiBnZXRBbGxEb21XaW5kb3dzKHRoaXMuYXBwKSkge1xuICAgICAgICAgIGlmICh3aW4gPT09IG1haW5XaW5kb3cpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFsbFdpbmRvd3NIYW5kbGVyKHdpbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCd3aW5kb3ctb3BlbicsICh3b3Jrc3BhY2VXaW5kb3cpID0+IHtcbiAgICAgICAgICBhbGxXaW5kb3dzSGFuZGxlcih3b3Jrc3BhY2VXaW5kb3cud2luKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSx1QkFBaUM7QUFDakMsMEJBQTRCO0FBQzVCLG9DQUE2QztBQXVEdEMsTUFBTSxpQ0FBaUMsZ0NBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNakQsWUFBK0IsS0FBVTtBQUM5QyxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVS9CLDZCQUNMLFFBQ007QUFDTixVQUFNO0FBQUE7QUFBQSxNQUVKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixTQUFLLGFBQWE7QUFFbEIsU0FBSywwQkFBMEIsQ0FBQyxRQUFRO0FBQ3RDLFdBQUssaUJBQWlCLElBQUksVUFBVSxNQUFNLFVBQVUsT0FBTztBQUFBLElBQzdELENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTywyQkFDTCxRQUNNO0FBQ04sVUFBTTtBQUFBO0FBQUEsTUFFSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQ0osU0FBSyxhQUFhO0FBRWxCLFNBQUssMEJBQTBCLENBQUMsUUFBUTtBQUN0QyxXQUFLLGlCQUFpQixLQUFLLE1BQU0sVUFBVSxPQUFPO0FBQUEsSUFDcEQsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTywwQkFBMEIsbUJBQWdEO0FBQy9FLFNBQUssYUFBYTtBQUVsQixVQUFNLGFBQWE7QUFDbkIsc0JBQWtCLFVBQVU7QUFFNUIsU0FBSztBQUFBLE1BQ0gsSUFBSSwyREFBNkIsS0FBSyxLQUFLLE1BQU07QUFDL0MsbUJBQVcsV0FBTyxtQ0FBaUIsS0FBSyxHQUFHLEdBQUc7QUFDNUMsY0FBSSxRQUFRLFlBQVk7QUFDdEI7QUFBQSxVQUNGO0FBRUEsNEJBQWtCLEdBQUc7QUFBQSxRQUN2QjtBQUVBLGFBQUssY0FBYyxLQUFLLElBQUksVUFBVSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0I7QUFDM0UsNEJBQWtCLGdCQUFnQixHQUFHO0FBQUEsUUFDdkMsQ0FBQyxDQUFDO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
205
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGFuZGxlcyByZWdpc3RlcmluZyBET00gZXZlbnRzIGFuZCBoYW5kbGVycyBmb3IgYWxsIHdpbmRvd3MgKG1haW4gd2luZG93IGFuZCBhbGwgZXhpc3RpbmcvZnV0dXJlIHBvcHVwIHdpbmRvd3MpIGFuZCB0aGVpciBkb2N1bWVudHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldEFsbERvbVdpbmRvd3MgfSBmcm9tICcuLi93b3Jrc3BhY2UudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDYWxsYmFja0xheW91dFJlYWR5Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtcmVhZHktY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsRG9jdW1lbnRzRG9tRXZlbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gRG9jdW1lbnRFdmVudFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50UmVnaXN0ZXJBbGxEb2N1bWVudHNEb21FdmVudFBhcmFtczxEb2N1bWVudEV2ZW50VHlwZSBleHRlbmRzIGtleW9mIERvY3VtZW50RXZlbnRNYXA+IHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gJGV2ZW50IC0gVGhlIGV2ZW50LlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIGNhbGxiYWNrKHRoaXM6IEhUTUxFbGVtZW50LCAkZXZlbnQ6IERvY3VtZW50RXZlbnRNYXBbRG9jdW1lbnRFdmVudFR5cGVdKTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG9wdGlvbnMgZm9yIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IERvY3VtZW50RXZlbnRUeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnQucmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gV2luZG93RXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsbFdpbmRvd3NFdmVudENvbXBvbmVudFJlZ2lzdGVyQWxsV2luZG93c0RvbUV2ZW50UGFyYW1zPFdpbmRvd0V2ZW50VHlwZSBleHRlbmRzIGtleW9mIFdpbmRvd0V2ZW50TWFwPiB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtICRldmVudCAtIFRoZSBldmVudC5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBjYWxsYmFjayh0aGlzOiBIVE1MRWxlbWVudCwgJGV2ZW50OiBXaW5kb3dFdmVudE1hcFtXaW5kb3dFdmVudFR5cGVdKTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG9wdGlvbnMgZm9yIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFdpbmRvd0V2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHJlZ2lzdGVyaW5nIERPTSBldmVudHMgYW5kIGhhbmRsZXJzIGZvciBhbGwgd2luZG93cyAobWFpbiB3aW5kb3cgYW5kIGFsbCBleGlzdGluZy9mdXR1cmUgcG9wdXAgd2luZG93cykgYW5kIHRoZWlyIGRvY3VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsbFdpbmRvd3NFdmVudENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnRgIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIERPTSBldmVudCBmb3IgYWxsIGRvY3VtZW50cyAobWFpbiB3aW5kb3cgZG9jdW1lbnQgYW5kIGFsbCBleGlzdGluZy9mdXR1cmUgcG9wdXAgd2luZG93IGRvY3VtZW50cykuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRG9jdW1lbnRFdmVudFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgdGhlIERPTSBldmVudC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFsbERvY3VtZW50c0RvbUV2ZW50PERvY3VtZW50RXZlbnRUeXBlIGV4dGVuZHMga2V5b2YgRG9jdW1lbnRFdmVudE1hcD4oXG4gICAgcGFyYW1zOiBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnRSZWdpc3RlckFsbERvY3VtZW50c0RvbUV2ZW50UGFyYW1zPERvY3VtZW50RXZlbnRUeXBlPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIFRoZSBjYWxsYmFjayBpcyBhIERPTSBldmVudCBoYW5kbGVyIGZvcndhcmRlZCB0byByZWdpc3RlckRvbUV2ZW50LCB3aGljaCBiaW5kcyB0aGlzIHRvIHRoZSBlbGVtZW50LlxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zLFxuICAgICAgdHlwZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJBbGxXaW5kb3dzSGFuZGxlcigod2luKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRG9tRXZlbnQod2luLmRvY3VtZW50LCB0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgRE9NIGV2ZW50IGZvciBhbGwgd2luZG93cyAobWFpbiB3aW5kb3cgYW5kIGFsbCBleGlzdGluZy9mdXR1cmUgcG9wdXAgd2luZG93cykuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gV2luZG93RXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBET00gZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnQ8V2luZG93RXZlbnRUeXBlIGV4dGVuZHMga2V5b2YgV2luZG93RXZlbnRNYXA+KFxuICAgIHBhcmFtczogQWxsV2luZG93c0V2ZW50Q29tcG9uZW50UmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnRQYXJhbXM8V2luZG93RXZlbnRUeXBlPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIFRoZSBjYWxsYmFjayBpcyBhIERPTSBldmVudCBoYW5kbGVyIGZvcndhcmRlZCB0byByZWdpc3RlckRvbUV2ZW50LCB3aGljaCBiaW5kcyB0aGlzIHRvIHRoZSBlbGVtZW50LlxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zLFxuICAgICAgdHlwZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJBbGxXaW5kb3dzSGFuZGxlcigod2luKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRG9tRXZlbnQod2luLCB0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgaGFuZGxlciBmb3IgYWxsIHdpbmRvd3MgKG1haW4gd2luZG93IGFuZCBhbGwgZXhpc3RpbmcvZnV0dXJlIHBvcHVwIHdpbmRvd3MpLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsV2luZG93c0hhbmRsZXIgLSBUaGUgaGFuZGxlciBjYWxsZWQgZm9yIGVhY2ggd2luZG93IChtYWluICsgcG9wdXBzKS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFsbFdpbmRvd3NIYW5kbGVyKGFsbFdpbmRvd3NIYW5kbGVyOiAod2luOiBXaW5kb3cpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgbWFpbldpbmRvdyA9IGFjdGl2ZVdpbmRvdztcbiAgICBhbGxXaW5kb3dzSGFuZGxlcihtYWluV2luZG93KTtcblxuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHdpbiBvZiBnZXRBbGxEb21XaW5kb3dzKHRoaXMuYXBwKSkge1xuICAgICAgICAgIGlmICh3aW4gPT09IG1haW5XaW5kb3cpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFsbFdpbmRvd3NIYW5kbGVyKHdpbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCd3aW5kb3ctb3BlbicsICh3b3Jrc3BhY2VXaW5kb3cpID0+IHtcbiAgICAgICAgICBhbGxXaW5kb3dzSGFuZGxlcih3b3Jrc3BhY2VXaW5kb3cud2luKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHVCQUFpQztBQUNqQywwQkFBNEI7QUFDNUIsb0NBQTZDO0FBdUR0QyxNQUFNLGlDQUFpQyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRCxZQUErQixLQUFVO0FBQzlDLFVBQU07QUFEOEI7QUFBQSxFQUV0QztBQUFBLEVBRnNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVL0IsNkJBQ0wsUUFDTTtBQUNOLFVBQU07QUFBQTtBQUFBLE1BRUo7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSTtBQUNKLFNBQUssYUFBYTtBQUVsQixTQUFLLDBCQUEwQixDQUFDLFFBQVE7QUFDdEMsV0FBSyxpQkFBaUIsSUFBSSxVQUFVLE1BQU0sVUFBVSxPQUFPO0FBQUEsSUFDN0QsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLDJCQUNMLFFBQ007QUFDTixVQUFNO0FBQUE7QUFBQSxNQUVKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixTQUFLLGFBQWE7QUFFbEIsU0FBSywwQkFBMEIsQ0FBQyxRQUFRO0FBQ3RDLFdBQUssaUJBQWlCLEtBQUssTUFBTSxVQUFVLE9BQU87QUFBQSxJQUNwRCxDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLDBCQUEwQixtQkFBZ0Q7QUFDL0UsU0FBSyxhQUFhO0FBRWxCLFVBQU0sYUFBYTtBQUNuQixzQkFBa0IsVUFBVTtBQUU1QixTQUFLO0FBQUEsTUFDSCxJQUFJLDJEQUE2QixLQUFLLEtBQUssTUFBTTtBQUMvQyxtQkFBVyxXQUFPLG1DQUFpQixLQUFLLEdBQUcsR0FBRztBQUM1QyxjQUFJLFFBQVEsWUFBWTtBQUN0QjtBQUFBLFVBQ0Y7QUFFQSw0QkFBa0IsR0FBRztBQUFBLFFBQ3ZCO0FBRUEsYUFBSyxjQUFjLEtBQUssSUFBSSxVQUFVLEdBQUcsZUFBZSxDQUFDLG9CQUFvQjtBQUMzRSw0QkFBa0IsZ0JBQWdCLEdBQUc7QUFBQSxRQUN2QyxDQUFDLENBQUM7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -15,10 +15,10 @@ export interface AllWindowsEventComponentRegisterAllDocumentsDomEventParams<Docu
15
15
  /**
16
16
  * The callback to execute.
17
17
  *
18
- * @param evt - The event.
18
+ * @param $event - The event.
19
19
  * @returns The result of the callback.
20
20
  */
21
- callback(this: HTMLElement, evt: DocumentEventMap[DocumentEventType]): unknown;
21
+ callback(this: HTMLElement, $event: DocumentEventMap[DocumentEventType]): unknown;
22
22
  /**
23
23
  * The options for the event.
24
24
  */
@@ -37,10 +37,10 @@ export interface AllWindowsEventComponentRegisterAllWindowsDomEventParams<Window
37
37
  /**
38
38
  * The callback to execute.
39
39
  *
40
- * @param evt - The event.
40
+ * @param $event - The event.
41
41
  * @returns The result of the callback.
42
42
  */
43
- callback(this: HTMLElement, evt: WindowEventMap[WindowEventType]): unknown;
43
+ callback(this: HTMLElement, $event: WindowEventMap[WindowEventType]): unknown;
44
44
  /**
45
45
  * The options for the event.
46
46
  */
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -128,6 +124,7 @@ __export(async_error_handler_component_exports, {
128
124
  AsyncErrorHandlerComponent: () => AsyncErrorHandlerComponent
129
125
  });
130
126
  module.exports = __toCommonJS(async_error_handler_component_exports);
127
+ var import_disposable = require('../../disposable.cjs');
131
128
  var import_error = require('../../error.cjs');
132
129
  var import_i18n = require('../i18n/i18n.cjs');
133
130
  var import_component_ex = require('./component-ex.cjs');
@@ -149,7 +146,7 @@ class AsyncErrorHandlerComponent extends import_component_ex.ComponentEx {
149
146
  onload() {
150
147
  const asyncErrorHandlerDisposable = (0, import_error.registerAsyncErrorEventHandler)(this.handleAsyncError.bind(this));
151
148
  this.register(() => {
152
- asyncErrorHandlerDisposable[Symbol.dispose]();
149
+ (0, import_disposable.dispose)(asyncErrorHandlerDisposable);
153
150
  });
154
151
  }
155
152
  /**
@@ -165,4 +162,4 @@ class AsyncErrorHandlerComponent extends import_component_ex.ComponentEx {
165
162
  0 && (module.exports = {
166
163
  AsyncErrorHandlerComponent
167
164
  });
168
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBoYW5kbGVzIGFzeW5jIGVycm9ycyBieSBzaG93aW5nIGEgbm90aWNlIHRvIHRoZSB1c2VyLlxuICovXG5cbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBnbG9iYWwgYXN5bmMgZXJyb3IgaGFuZGxlciB0aGF0IHNob3dzIGEgbm90aWNlIHRvIHRoZSB1c2VyLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luTm90aWNlQ29tcG9uZW50IC0gVGhlIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBlcnJvciBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhc3luY0Vycm9ySGFuZGxlckRpc3Bvc2FibGUgPSByZWdpc3RlckFzeW5jRXJyb3JFdmVudEhhbmRsZXIodGhpcy5oYW5kbGVBc3luY0Vycm9yLmJpbmQodGhpcykpO1xuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgYXN5bmNFcnJvckhhbmRsZXJEaXNwb3NhYmxlW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGFuIGFzeW5jIGVycm9yIG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIF9hc3luY0Vycm9yIC0gVGhlIGFzeW5jIGVycm9yLlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZUFzeW5jRXJyb3IoX2FzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5ub3RpY2VzLnVuaGFuZGxlZEVycm9yKSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLG1CQUErQztBQUMvQyxrQkFBa0I7QUFDbEIsMEJBQTRCO0FBQzVCLHFDQUFzQztBQUsvQixNQUFNLG1DQUFtQyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1uRCxZQUErQix1QkFBOEM7QUFDbEYsVUFBTTtBQUQ4QjtBQUFBLEVBRXRDO0FBQUEsRUFGc0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU90QixTQUFlO0FBQzdCLFVBQU0sa0NBQThCLDZDQUErQixLQUFLLGlCQUFpQixLQUFLLElBQUksQ0FBQztBQUNuRyxTQUFLLFNBQVMsTUFBTTtBQUNsQixrQ0FBNEIsT0FBTyxPQUFPLEVBQUU7QUFBQSxJQUM5QyxDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9VLGlCQUFpQixhQUE0QjtBQUNyRCxTQUFLLHNCQUFzQixlQUFXLGVBQUUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsY0FBYyxDQUFDO0FBQUEsRUFDM0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
165
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBoYW5kbGVzIGFzeW5jIGVycm9ycyBieSBzaG93aW5nIGEgbm90aWNlIHRvIHRoZSB1c2VyLlxuICovXG5cbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBnbG9iYWwgYXN5bmMgZXJyb3IgaGFuZGxlciB0aGF0IHNob3dzIGEgbm90aWNlIHRvIHRoZSB1c2VyLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luTm90aWNlQ29tcG9uZW50IC0gVGhlIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBlcnJvciBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhc3luY0Vycm9ySGFuZGxlckRpc3Bvc2FibGUgPSByZWdpc3RlckFzeW5jRXJyb3JFdmVudEhhbmRsZXIodGhpcy5oYW5kbGVBc3luY0Vycm9yLmJpbmQodGhpcykpO1xuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgZGlzcG9zZShhc3luY0Vycm9ySGFuZGxlckRpc3Bvc2FibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGFuIGFzeW5jIGVycm9yIG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIF9hc3luY0Vycm9yIC0gVGhlIGFzeW5jIGVycm9yLlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZUFzeW5jRXJyb3IoX2FzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5ub3RpY2VzLnVuaGFuZGxlZEVycm9yKSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsd0JBQXdCO0FBQ3hCLG1CQUErQztBQUMvQyxrQkFBa0I7QUFDbEIsMEJBQTRCO0FBQzVCLHFDQUFzQztBQUsvQixNQUFNLG1DQUFtQyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1uRCxZQUErQix1QkFBOEM7QUFDbEYsVUFBTTtBQUQ4QjtBQUFBLEVBRXRDO0FBQUEsRUFGc0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU90QixTQUFlO0FBQzdCLFVBQU0sa0NBQThCLDZDQUErQixLQUFLLGlCQUFpQixLQUFLLElBQUksQ0FBQztBQUNuRyxTQUFLLFNBQVMsTUFBTTtBQUNsQixxQ0FBUSwyQkFBMkI7QUFBQSxJQUNyQyxDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9VLGlCQUFpQixhQUE0QjtBQUNyRCxTQUFLLHNCQUFzQixlQUFXLGVBQUUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsY0FBYyxDQUFDO0FBQUEsRUFDM0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K