@mnaoumov/obsidian-lib 0.0.0 → 1.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 (1044) hide show
  1. package/@types/dataview/api/data-array/package.json +4 -0
  2. package/@types/dataview/api/extensions/package.json +4 -0
  3. package/@types/dataview/api/inline-api/package.json +4 -0
  4. package/@types/dataview/api/plugin-api/package.json +4 -0
  5. package/@types/dataview/api/result/package.json +4 -0
  6. package/@types/dataview/data-import/common/package.json +4 -0
  7. package/@types/dataview/data-import/csv/package.json +4 -0
  8. package/@types/dataview/data-import/inline-field/package.json +4 -0
  9. package/@types/dataview/data-import/markdown-file/package.json +4 -0
  10. package/@types/dataview/data-import/persister/package.json +4 -0
  11. package/@types/dataview/data-import/web-worker/import-entry/package.json +4 -0
  12. package/@types/dataview/data-import/web-worker/import-impl/package.json +4 -0
  13. package/@types/dataview/data-import/web-worker/import-manager/package.json +4 -0
  14. package/@types/dataview/data-index/index/package.json +4 -0
  15. package/@types/dataview/data-index/package.json +4 -0
  16. package/@types/dataview/data-index/resolver/package.json +4 -0
  17. package/@types/dataview/data-index/source/package.json +4 -0
  18. package/@types/dataview/data-model/markdown/package.json +4 -0
  19. package/@types/dataview/data-model/serialized/markdown/package.json +4 -0
  20. package/@types/dataview/data-model/transferable/package.json +4 -0
  21. package/@types/dataview/data-model/value/package.json +4 -0
  22. package/@types/dataview/expression/binaryop/package.json +4 -0
  23. package/@types/dataview/expression/context/package.json +4 -0
  24. package/@types/dataview/expression/field/package.json +4 -0
  25. package/@types/dataview/expression/functions/package.json +4 -0
  26. package/@types/dataview/expression/parse/package.json +4 -0
  27. package/@types/dataview/index/package.json +4 -0
  28. package/@types/dataview/main/package.json +4 -0
  29. package/@types/dataview/package.json +4 -0
  30. package/@types/dataview/query/engine/package.json +4 -0
  31. package/@types/dataview/query/parse/package.json +4 -0
  32. package/@types/dataview/query/query/package.json +4 -0
  33. package/@types/dataview/settings/package.json +4 -0
  34. package/@types/dataview/typings/obsidian-ex/package.json +4 -0
  35. package/@types/dataview/typings/workers/package.json +4 -0
  36. package/@types/dataview/ui/export/markdown/package.json +4 -0
  37. package/@types/dataview/ui/lp-render/package.json +4 -0
  38. package/@types/dataview/ui/markdown/package.json +4 -0
  39. package/@types/dataview/ui/refreshable-view/package.json +4 -0
  40. package/@types/dataview/ui/render/package.json +4 -0
  41. package/@types/dataview/ui/views/calendar-view/package.json +4 -0
  42. package/@types/dataview/ui/views/inline-field-live-preview/package.json +4 -0
  43. package/@types/dataview/ui/views/inline-view/package.json +4 -0
  44. package/@types/dataview/ui/views/js-view/package.json +4 -0
  45. package/@types/dataview/ui/views/list-view/package.json +4 -0
  46. package/@types/dataview/ui/views/table-view/package.json +4 -0
  47. package/@types/dataview/ui/views/task-view/package.json +4 -0
  48. package/@types/dataview/util/hash/package.json +4 -0
  49. package/@types/dataview/util/locale/package.json +4 -0
  50. package/@types/dataview/util/media/package.json +4 -0
  51. package/@types/dataview/util/normalize/package.json +4 -0
  52. package/@types/i18next/package.json +4 -0
  53. package/@types/obsidian-integration-testing/package.json +4 -0
  54. package/@types/original-fs/package.json +4 -0
  55. package/LICENSE +21 -0
  56. package/README.md +7 -1
  57. package/codemirror/index/package.json +6 -0
  58. package/codemirror/package.json +6 -0
  59. package/codemirror/state-field-spec/package.json +6 -0
  60. package/command-handlers/abstract-file-command-handler/package.json +6 -0
  61. package/command-handlers/command-handler/package.json +6 -0
  62. package/command-handlers/command-handler-component/package.json +6 -0
  63. package/command-handlers/editor-command-handler/package.json +6 -0
  64. package/command-handlers/file-command-handler/package.json +6 -0
  65. package/command-handlers/folder-command-handler/package.json +6 -0
  66. package/command-handlers/global-command-handler/package.json +6 -0
  67. package/command-handlers/index/package.json +6 -0
  68. package/command-handlers/open-demo-vault-command-handler/package.json +6 -0
  69. package/command-handlers/open-settings-command-handler/package.json +6 -0
  70. package/command-handlers/package.json +6 -0
  71. package/command-handlers/unlock-active-note-command-handler/package.json +6 -0
  72. package/components/abort-signal-component/package.json +6 -0
  73. package/components/all-windows-event-component/package.json +6 -0
  74. package/components/async-error-handler-component/package.json +6 -0
  75. package/components/async-events-component/package.json +6 -0
  76. package/components/case-insensitive-file-index-component/package.json +6 -0
  77. package/components/component-ex/package.json +6 -0
  78. package/components/console-debug-component/package.json +6 -0
  79. package/components/core-plugin-toggle-component/package.json +6 -0
  80. package/components/disposable-component/package.json +6 -0
  81. package/components/embed-extensions-component/package.json +6 -0
  82. package/components/generate-markdown-link-default-params-component/package.json +6 -0
  83. package/components/index/package.json +6 -0
  84. package/components/layout-ready-component/package.json +6 -0
  85. package/components/menu-event-registrar-component/package.json +6 -0
  86. package/components/monkey-around-component/package.json +6 -0
  87. package/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
  88. package/components/package.json +6 -0
  89. package/components/plugin-context-component/package.json +6 -0
  90. package/components/plugin-gate-component/package.json +6 -0
  91. package/components/plugin-notice-component/package.json +6 -0
  92. package/components/plugin-settings-component/package.json +6 -0
  93. package/components/plugin-settings-tab-component/package.json +6 -0
  94. package/components/plugin-suggestion-component/package.json +6 -0
  95. package/components/pointer-position-component/package.json +6 -0
  96. package/components/registry-component/package.json +6 -0
  97. package/components/release-notes-component/package.json +6 -0
  98. package/components/rename-delete-handler-component/package.json +6 -0
  99. package/components/rmdir-guard-component/package.json +6 -0
  100. package/components/settings-migration-component/package.json +6 -0
  101. package/components/syntax-highlighting-component/package.json +6 -0
  102. package/components/templates-language-component/package.json +6 -0
  103. package/constructors/get-dom-events-handlers-constructor/package.json +6 -0
  104. package/constructors/index/package.json +6 -0
  105. package/constructors/package.json +6 -0
  106. package/dist/lib/cjs/@types/dataview/api/data-array.d.cts +137 -0
  107. package/dist/lib/cjs/@types/dataview/api/extensions.d.cts +16 -0
  108. package/dist/lib/cjs/@types/dataview/api/inline-api.d.cts +187 -0
  109. package/dist/lib/cjs/@types/dataview/api/plugin-api.d.cts +210 -0
  110. package/dist/lib/cjs/@types/dataview/api/result.d.cts +39 -0
  111. package/dist/lib/cjs/@types/dataview/data-import/common.d.cts +4 -0
  112. package/dist/lib/cjs/@types/dataview/data-import/csv.d.cts +4 -0
  113. package/dist/lib/cjs/@types/dataview/data-import/inline-field.d.cts +43 -0
  114. package/dist/lib/cjs/@types/dataview/data-import/markdown-file.d.cts +53 -0
  115. package/dist/lib/cjs/@types/dataview/data-import/persister.d.cts +33 -0
  116. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-entry.d.cts +2 -0
  117. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-impl.d.cts +7 -0
  118. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-manager.d.cts +38 -0
  119. package/dist/lib/cjs/@types/dataview/data-index/index.d.cts +187 -0
  120. package/dist/lib/cjs/@types/dataview/data-index/resolver.d.cts +24 -0
  121. package/dist/lib/cjs/@types/dataview/data-index/source.d.cts +72 -0
  122. package/dist/lib/cjs/@types/dataview/data-model/markdown.d.cts +116 -0
  123. package/dist/lib/cjs/@types/dataview/data-model/serialized/markdown.d.cts +107 -0
  124. package/dist/lib/cjs/@types/dataview/data-model/transferable.d.cts +8 -0
  125. package/dist/lib/cjs/@types/dataview/data-model/value.d.cts +176 -0
  126. package/dist/lib/cjs/@types/dataview/expression/binaryop.d.cts +44 -0
  127. package/dist/lib/cjs/@types/dataview/expression/context.d.cts +50 -0
  128. package/dist/lib/cjs/@types/dataview/expression/field.d.cts +83 -0
  129. package/dist/lib/cjs/@types/dataview/expression/functions.d.cts +150 -0
  130. package/dist/lib/cjs/@types/dataview/expression/parse.d.cts +164 -0
  131. package/dist/lib/cjs/@types/dataview/index.d.cts +56 -0
  132. package/dist/lib/cjs/@types/dataview/main.d.cts +53 -0
  133. package/dist/lib/cjs/@types/dataview/query/engine.d.cts +104 -0
  134. package/dist/lib/cjs/@types/dataview/query/parse.d.cts +45 -0
  135. package/dist/lib/cjs/@types/dataview/query/query.d.cts +96 -0
  136. package/dist/lib/cjs/@types/dataview/settings.d.cts +61 -0
  137. package/dist/lib/cjs/@types/dataview/typings/obsidian-ex.d.cts +29 -0
  138. package/dist/lib/cjs/@types/dataview/typings/workers.d.cts +5 -0
  139. package/dist/lib/cjs/@types/dataview/ui/export/markdown.d.cts +16 -0
  140. package/dist/lib/cjs/@types/dataview/ui/lp-render.d.cts +38 -0
  141. package/dist/lib/cjs/@types/dataview/ui/markdown.d.cts +87 -0
  142. package/dist/lib/cjs/@types/dataview/ui/refreshable-view.d.cts +19 -0
  143. package/dist/lib/cjs/@types/dataview/ui/render.d.cts +34 -0
  144. package/dist/lib/cjs/@types/dataview/ui/views/calendar-view.d.cts +18 -0
  145. package/dist/lib/cjs/@types/dataview/ui/views/inline-field-live-preview.d.cts +43 -0
  146. package/dist/lib/cjs/@types/dataview/ui/views/inline-view.d.cts +29 -0
  147. package/dist/lib/cjs/@types/dataview/ui/views/js-view.d.cts +24 -0
  148. package/dist/lib/cjs/@types/dataview/ui/views/list-view.d.cts +26 -0
  149. package/dist/lib/cjs/@types/dataview/ui/views/table-view.d.cts +29 -0
  150. package/dist/lib/cjs/@types/dataview/ui/views/task-view.d.cts +52 -0
  151. package/dist/lib/cjs/@types/dataview/util/hash.d.cts +2 -0
  152. package/dist/lib/cjs/@types/dataview/util/locale.d.cts +3 -0
  153. package/dist/lib/cjs/@types/dataview/util/media.d.cts +7 -0
  154. package/dist/lib/cjs/@types/dataview/util/normalize.d.cts +45 -0
  155. package/dist/lib/cjs/@types/i18next.d.cts +14 -0
  156. package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +29 -0
  157. package/dist/lib/cjs/@types/original-fs.d.cts +15 -0
  158. package/dist/lib/cjs/__merged.cjs +1680 -0
  159. package/dist/lib/cjs/__merged.d.cts +205 -0
  160. package/dist/lib/cjs/active-file-provider.cjs +185 -0
  161. package/dist/lib/cjs/active-file-provider.d.cts +36 -0
  162. package/dist/lib/cjs/app.cjs +177 -0
  163. package/dist/lib/cjs/app.d.cts +17 -0
  164. package/dist/lib/cjs/async-with-notice.cjs +259 -0
  165. package/dist/lib/cjs/async-with-notice.d.cts +113 -0
  166. package/dist/lib/cjs/attachment-path.cjs +403 -0
  167. package/dist/lib/cjs/attachment-path.d.cts +341 -0
  168. package/dist/lib/cjs/attachment-unit-folder.cjs +192 -0
  169. package/dist/lib/cjs/attachment-unit-folder.d.cts +103 -0
  170. package/dist/lib/cjs/backlink-index.cjs +273 -0
  171. package/dist/lib/cjs/backlink-index.d.cts +51 -0
  172. package/dist/lib/cjs/backlink.cjs +241 -0
  173. package/dist/lib/cjs/backlink.d.cts +66 -0
  174. package/dist/lib/cjs/bases-view-registrar.cjs +186 -0
  175. package/dist/lib/cjs/bases-view-registrar.d.cts +52 -0
  176. package/dist/lib/cjs/callout.cjs +244 -0
  177. package/dist/lib/cjs/callout.d.cts +76 -0
  178. package/dist/lib/cjs/canvas.cjs +239 -0
  179. package/dist/lib/cjs/canvas.d.cts +28 -0
  180. package/dist/lib/cjs/case-insensitive-file-index.cjs +268 -0
  181. package/dist/lib/cjs/case-insensitive-file-index.d.cts +92 -0
  182. package/dist/lib/cjs/code-block-markdown-information.cjs +155 -0
  183. package/dist/lib/cjs/code-block-markdown-information.d.cts +48 -0
  184. package/dist/lib/cjs/code-block-reg-exp.cjs +169 -0
  185. package/dist/lib/cjs/code-block-reg-exp.d.cts +39 -0
  186. package/dist/lib/cjs/codemirror/index.cjs +177 -0
  187. package/dist/lib/cjs/codemirror/index.d.cts +2 -0
  188. package/dist/lib/cjs/codemirror/state-field-spec.cjs +155 -0
  189. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +72 -0
  190. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +440 -0
  191. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +274 -0
  192. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +302 -0
  193. package/dist/lib/cjs/command-handlers/command-handler-component.d.cts +146 -0
  194. package/dist/lib/cjs/command-handlers/command-handler.cjs +224 -0
  195. package/dist/lib/cjs/command-handlers/command-handler.d.cts +107 -0
  196. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +372 -0
  197. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +208 -0
  198. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +309 -0
  199. package/dist/lib/cjs/command-handlers/file-command-handler.d.cts +143 -0
  200. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +317 -0
  201. package/dist/lib/cjs/command-handlers/folder-command-handler.d.cts +149 -0
  202. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +209 -0
  203. package/dist/lib/cjs/command-handlers/global-command-handler.d.cts +40 -0
  204. package/dist/lib/cjs/command-handlers/index.cjs +204 -0
  205. package/dist/lib/cjs/command-handlers/index.d.cts +11 -0
  206. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +233 -0
  207. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.d.cts +73 -0
  208. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +198 -0
  209. package/dist/lib/cjs/command-handlers/open-settings-command-handler.d.cts +44 -0
  210. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +211 -0
  211. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.d.cts +54 -0
  212. package/dist/lib/cjs/command-registrar.cjs +193 -0
  213. package/dist/lib/cjs/command-registrar.d.cts +48 -0
  214. package/dist/lib/cjs/community-plugins.cjs +346 -0
  215. package/dist/lib/cjs/community-plugins.d.cts +270 -0
  216. package/dist/lib/cjs/components/abort-signal-component.cjs +196 -0
  217. package/dist/lib/cjs/components/abort-signal-component.d.cts +30 -0
  218. package/dist/lib/cjs/components/all-windows-event-component.cjs +238 -0
  219. package/dist/lib/cjs/components/all-windows-event-component.d.cts +84 -0
  220. package/dist/lib/cjs/components/async-error-handler-component.cjs +200 -0
  221. package/dist/lib/cjs/components/async-error-handler-component.d.cts +30 -0
  222. package/dist/lib/cjs/components/async-events-component.cjs +172 -0
  223. package/dist/lib/cjs/components/async-events-component.d.cts +15 -0
  224. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +210 -0
  225. package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +36 -0
  226. package/dist/lib/cjs/components/component-ex.cjs +528 -0
  227. package/dist/lib/cjs/components/component-ex.d.cts +229 -0
  228. package/dist/lib/cjs/components/console-debug-component.cjs +194 -0
  229. package/dist/lib/cjs/components/console-debug-component.d.cts +30 -0
  230. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +226 -0
  231. package/dist/lib/cjs/components/core-plugin-toggle-component.d.cts +102 -0
  232. package/dist/lib/cjs/components/disposable-component.cjs +178 -0
  233. package/dist/lib/cjs/components/disposable-component.d.cts +24 -0
  234. package/dist/lib/cjs/components/embed-extensions-component.cjs +198 -0
  235. package/dist/lib/cjs/components/embed-extensions-component.d.cts +38 -0
  236. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +194 -0
  237. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.d.cts +42 -0
  238. package/dist/lib/cjs/components/index.cjs +261 -0
  239. package/dist/lib/cjs/components/index.d.cts +30 -0
  240. package/dist/lib/cjs/components/layout-ready-component.cjs +235 -0
  241. package/dist/lib/cjs/components/layout-ready-component.d.cts +48 -0
  242. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +220 -0
  243. package/dist/lib/cjs/components/menu-event-registrar-component.d.cts +52 -0
  244. package/dist/lib/cjs/components/monkey-around-component.cjs +269 -0
  245. package/dist/lib/cjs/components/monkey-around-component.d.cts +241 -0
  246. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +345 -0
  247. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.d.cts +150 -0
  248. package/dist/lib/cjs/components/plugin-context-component.cjs +204 -0
  249. package/dist/lib/cjs/components/plugin-context-component.d.cts +36 -0
  250. package/dist/lib/cjs/components/plugin-gate-component.cjs +572 -0
  251. package/dist/lib/cjs/components/plugin-gate-component.d.cts +332 -0
  252. package/dist/lib/cjs/components/plugin-notice-component.cjs +653 -0
  253. package/dist/lib/cjs/components/plugin-notice-component.d.cts +362 -0
  254. package/dist/lib/cjs/components/plugin-settings-component.cjs +668 -0
  255. package/dist/lib/cjs/components/plugin-settings-component.d.cts +362 -0
  256. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +194 -0
  257. package/dist/lib/cjs/components/plugin-settings-tab-component.d.cts +39 -0
  258. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +302 -0
  259. package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +162 -0
  260. package/dist/lib/cjs/components/pointer-position-component.cjs +190 -0
  261. package/dist/lib/cjs/components/pointer-position-component.d.cts +29 -0
  262. package/dist/lib/cjs/components/registry-component.cjs +211 -0
  263. package/dist/lib/cjs/components/registry-component.d.cts +37 -0
  264. package/dist/lib/cjs/components/release-notes-component.cjs +249 -0
  265. package/dist/lib/cjs/components/release-notes-component.d.cts +129 -0
  266. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +1299 -0
  267. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +165 -0
  268. package/dist/lib/cjs/components/rmdir-guard-component.cjs +214 -0
  269. package/dist/lib/cjs/components/rmdir-guard-component.d.cts +76 -0
  270. package/dist/lib/cjs/components/settings-migration-component.cjs +246 -0
  271. package/dist/lib/cjs/components/settings-migration-component.d.cts +120 -0
  272. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +272 -0
  273. package/dist/lib/cjs/components/syntax-highlighting-component.d.cts +149 -0
  274. package/dist/lib/cjs/components/templates-language-component.cjs +300 -0
  275. package/dist/lib/cjs/components/templates-language-component.d.cts +124 -0
  276. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +270 -0
  277. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.d.cts +22 -0
  278. package/dist/lib/cjs/constructors/index.cjs +177 -0
  279. package/dist/lib/cjs/constructors/index.d.cts +2 -0
  280. package/dist/lib/cjs/css-class.cjs +232 -0
  281. package/dist/lib/cjs/css-class.d.cts +278 -0
  282. package/dist/lib/cjs/data-handler.cjs +194 -0
  283. package/dist/lib/cjs/data-handler.d.cts +49 -0
  284. package/dist/lib/cjs/dataview-link.cjs +184 -0
  285. package/dist/lib/cjs/dataview-link.d.cts +42 -0
  286. package/dist/lib/cjs/dataview.cjs +403 -0
  287. package/dist/lib/cjs/dataview.d.cts +249 -0
  288. package/dist/lib/cjs/debug.cjs +172 -0
  289. package/dist/lib/cjs/debug.d.cts +19 -0
  290. package/dist/lib/cjs/demo-vault-helper-settings.cjs +155 -0
  291. package/dist/lib/cjs/demo-vault-helper-settings.d.cts +29 -0
  292. package/dist/lib/cjs/demo-vault-helper.cjs +256 -0
  293. package/dist/lib/cjs/demo-vault-helper.d.cts +61 -0
  294. package/dist/lib/cjs/demo-vault-naming.cjs +181 -0
  295. package/dist/lib/cjs/demo-vault-naming.d.cts +54 -0
  296. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +372 -0
  297. package/dist/lib/cjs/desktop-demo-vault-opener.d.cts +76 -0
  298. package/dist/lib/cjs/desktop-trusted-input.cjs +325 -0
  299. package/dist/lib/cjs/desktop-trusted-input.d.cts +288 -0
  300. package/dist/lib/cjs/editor-extension-registrar.cjs +186 -0
  301. package/dist/lib/cjs/editor-extension-registrar.d.cts +37 -0
  302. package/dist/lib/cjs/editor-suggest-registrar.cjs +186 -0
  303. package/dist/lib/cjs/editor-suggest-registrar.d.cts +36 -0
  304. package/dist/lib/cjs/editor.cjs +224 -0
  305. package/dist/lib/cjs/editor.d.cts +45 -0
  306. package/dist/lib/cjs/events.cjs +196 -0
  307. package/dist/lib/cjs/events.d.cts +98 -0
  308. package/dist/lib/cjs/extensions-registrar.cjs +186 -0
  309. package/dist/lib/cjs/extensions-registrar.d.cts +51 -0
  310. package/dist/lib/cjs/file-change.cjs +582 -0
  311. package/dist/lib/cjs/file-change.d.cts +156 -0
  312. package/dist/lib/cjs/file-explorer.cjs +181 -0
  313. package/dist/lib/cjs/file-explorer.d.cts +34 -0
  314. package/dist/lib/cjs/file-manager.cjs +275 -0
  315. package/dist/lib/cjs/file-manager.d.cts +123 -0
  316. package/dist/lib/cjs/file-system.cjs +595 -0
  317. package/dist/lib/cjs/file-system.d.cts +554 -0
  318. package/dist/lib/cjs/folder-note.cjs +285 -0
  319. package/dist/lib/cjs/folder-note.d.cts +166 -0
  320. package/dist/lib/cjs/frontmatter-formatting.cjs +472 -0
  321. package/dist/lib/cjs/frontmatter-formatting.d.cts +44 -0
  322. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +183 -0
  323. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +34 -0
  324. package/dist/lib/cjs/frontmatter.cjs +295 -0
  325. package/dist/lib/cjs/frontmatter.d.cts +145 -0
  326. package/dist/lib/cjs/generated-during-build.cjs +170 -0
  327. package/dist/lib/cjs/generated-during-build.d.cts +19 -0
  328. package/dist/lib/cjs/hover-link-source-registrar.cjs +186 -0
  329. package/dist/lib/cjs/hover-link-source-registrar.d.cts +52 -0
  330. package/dist/lib/cjs/html-element.cjs +207 -0
  331. package/dist/lib/cjs/html-element.d.cts +98 -0
  332. package/dist/lib/cjs/i18n/custom-type-options.cjs +156 -0
  333. package/dist/lib/cjs/i18n/custom-type-options.d.cts +38 -0
  334. package/dist/lib/cjs/i18n/default-translations.cjs +156 -0
  335. package/dist/lib/cjs/i18n/default-translations.d.cts +15 -0
  336. package/dist/lib/cjs/i18n/i18n.cjs +216 -0
  337. package/dist/lib/cjs/i18n/i18n.d.cts +38 -0
  338. package/dist/lib/cjs/i18n/index.cjs +186 -0
  339. package/dist/lib/cjs/i18n/index.d.cts +5 -0
  340. package/dist/lib/cjs/i18n/locales/en.cjs +248 -0
  341. package/dist/lib/cjs/i18n/locales/en.d.cts +91 -0
  342. package/dist/lib/cjs/i18n/locales/index.cjs +180 -0
  343. package/dist/lib/cjs/i18n/locales/index.d.cts +3 -0
  344. package/dist/lib/cjs/i18n/locales/translations-map.cjs +174 -0
  345. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +100 -0
  346. package/dist/lib/cjs/index.cjs +459 -0
  347. package/dist/lib/cjs/index.d.cts +96 -0
  348. package/dist/lib/cjs/is-in-obsidian.cjs +178 -0
  349. package/dist/lib/cjs/is-in-obsidian.d.cts +12 -0
  350. package/dist/lib/cjs/library-styles.cjs +197 -0
  351. package/dist/lib/cjs/library-styles.d.cts +56 -0
  352. package/dist/lib/cjs/library.cjs +205 -0
  353. package/dist/lib/cjs/library.d.cts +57 -0
  354. package/dist/lib/cjs/link-name.cjs +169 -0
  355. package/dist/lib/cjs/link-name.d.cts +23 -0
  356. package/dist/lib/cjs/link-update-progress.cjs +155 -0
  357. package/dist/lib/cjs/link-update-progress.d.cts +32 -0
  358. package/dist/lib/cjs/link.cjs +1077 -0
  359. package/dist/lib/cjs/link.d.cts +1369 -0
  360. package/dist/lib/cjs/logger.cjs +236 -0
  361. package/dist/lib/cjs/logger.d.cts +37 -0
  362. package/dist/lib/cjs/loop.cjs +267 -0
  363. package/dist/lib/cjs/loop.d.cts +104 -0
  364. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +190 -0
  365. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +62 -0
  366. package/dist/lib/cjs/markdown-code-block-processor.cjs +468 -0
  367. package/dist/lib/cjs/markdown-code-block-processor.d.cts +137 -0
  368. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +187 -0
  369. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +59 -0
  370. package/dist/lib/cjs/markdown-view.cjs +175 -0
  371. package/dist/lib/cjs/markdown-view.d.cts +14 -0
  372. package/dist/lib/cjs/markdown.cjs +494 -0
  373. package/dist/lib/cjs/markdown.d.cts +226 -0
  374. package/dist/lib/cjs/menu-event-registrar.cjs +155 -0
  375. package/dist/lib/cjs/menu-event-registrar.d.cts +84 -0
  376. package/dist/lib/cjs/metadata-cache.cjs +568 -0
  377. package/dist/lib/cjs/metadata-cache.d.cts +359 -0
  378. package/dist/lib/cjs/mobile-trusted-input.cjs +209 -0
  379. package/dist/lib/cjs/mobile-trusted-input.d.cts +98 -0
  380. package/dist/lib/cjs/modals/alert.cjs +202 -0
  381. package/dist/lib/cjs/modals/alert.d.cts +35 -0
  382. package/dist/lib/cjs/modals/confirm.cjs +212 -0
  383. package/dist/lib/cjs/modals/confirm.d.cts +39 -0
  384. package/dist/lib/cjs/modals/index.cjs +201 -0
  385. package/dist/lib/cjs/modals/index.d.cts +10 -0
  386. package/dist/lib/cjs/modals/minimizable-modal.cjs +465 -0
  387. package/dist/lib/cjs/modals/minimizable-modal.d.cts +129 -0
  388. package/dist/lib/cjs/modals/modal-command-builder.cjs +482 -0
  389. package/dist/lib/cjs/modals/modal-command-builder.d.cts +285 -0
  390. package/dist/lib/cjs/modals/modal.cjs +200 -0
  391. package/dist/lib/cjs/modals/modal.d.cts +64 -0
  392. package/dist/lib/cjs/modals/prompt.cjs +280 -0
  393. package/dist/lib/cjs/modals/prompt.d.cts +83 -0
  394. package/dist/lib/cjs/modals/select-item.cjs +225 -0
  395. package/dist/lib/cjs/modals/select-item.d.cts +55 -0
  396. package/dist/lib/cjs/modals/select-option.cjs +213 -0
  397. package/dist/lib/cjs/modals/select-option.d.cts +65 -0
  398. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +168 -0
  399. package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +35 -0
  400. package/dist/lib/cjs/note-priority.cjs +258 -0
  401. package/dist/lib/cjs/note-priority.d.cts +154 -0
  402. package/dist/lib/cjs/notebook-navigator.cjs +187 -0
  403. package/dist/lib/cjs/notebook-navigator.d.cts +132 -0
  404. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +199 -0
  405. package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +42 -0
  406. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +189 -0
  407. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +55 -0
  408. package/dist/lib/cjs/obsidian-settings.cjs +206 -0
  409. package/dist/lib/cjs/obsidian-settings.d.cts +62 -0
  410. package/dist/lib/cjs/parse-link.cjs +562 -0
  411. package/dist/lib/cjs/parse-link.d.cts +288 -0
  412. package/dist/lib/cjs/path-settings.cjs +293 -0
  413. package/dist/lib/cjs/path-settings.d.cts +56 -0
  414. package/dist/lib/cjs/pdf.cjs +197 -0
  415. package/dist/lib/cjs/pdf.d.cts +26 -0
  416. package/dist/lib/cjs/plugin/index.cjs +198 -0
  417. package/dist/lib/cjs/plugin/index.d.cts +9 -0
  418. package/dist/lib/cjs/plugin/plugin-api.cjs +543 -0
  419. package/dist/lib/cjs/plugin/plugin-api.d.cts +413 -0
  420. package/dist/lib/cjs/plugin/plugin-context.cjs +215 -0
  421. package/dist/lib/cjs/plugin/plugin-context.d.cts +27 -0
  422. package/dist/lib/cjs/plugin/plugin-event-source.cjs +250 -0
  423. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +97 -0
  424. package/dist/lib/cjs/plugin/plugin-install-state.cjs +219 -0
  425. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +113 -0
  426. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +175 -0
  427. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +127 -0
  428. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +635 -0
  429. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +368 -0
  430. package/dist/lib/cjs/plugin/plugin.cjs +730 -0
  431. package/dist/lib/cjs/plugin/plugin.d.cts +363 -0
  432. package/dist/lib/cjs/plugin/settings-migration-api.cjs +155 -0
  433. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +91 -0
  434. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +187 -0
  435. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +64 -0
  436. package/dist/lib/cjs/popovers/field-popover.cjs +206 -0
  437. package/dist/lib/cjs/popovers/field-popover.d.cts +75 -0
  438. package/dist/lib/cjs/popovers/index.cjs +183 -0
  439. package/dist/lib/cjs/popovers/index.d.cts +4 -0
  440. package/dist/lib/cjs/popovers/popover-anchor.cjs +206 -0
  441. package/dist/lib/cjs/popovers/popover-anchor.d.cts +67 -0
  442. package/dist/lib/cjs/popovers/popover.cjs +253 -0
  443. package/dist/lib/cjs/popovers/popover.d.cts +78 -0
  444. package/dist/lib/cjs/property-entry.cjs +196 -0
  445. package/dist/lib/cjs/property-entry.d.cts +43 -0
  446. package/dist/lib/cjs/queue.cjs +236 -0
  447. package/dist/lib/cjs/queue.d.cts +93 -0
  448. package/dist/lib/cjs/react/app-context.cjs +175 -0
  449. package/dist/lib/cjs/react/app-context.d.cts +24 -0
  450. package/dist/lib/cjs/react/index.cjs +177 -0
  451. package/dist/lib/cjs/react/index.d.cts +2 -0
  452. package/dist/lib/cjs/reference.cjs +210 -0
  453. package/dist/lib/cjs/reference.d.cts +116 -0
  454. package/dist/lib/cjs/resource-lock.cjs +1120 -0
  455. package/dist/lib/cjs/resource-lock.d.cts +318 -0
  456. package/dist/lib/cjs/resource-url.cjs +180 -0
  457. package/dist/lib/cjs/resource-url.d.cts +31 -0
  458. package/dist/lib/cjs/ribbon-icon-registrar.cjs +187 -0
  459. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +60 -0
  460. package/dist/lib/cjs/setting-components/checkbox-component.cjs +240 -0
  461. package/dist/lib/cjs/setting-components/checkbox-component.d.cts +69 -0
  462. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +402 -0
  463. package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +132 -0
  464. package/dist/lib/cjs/setting-components/date-component.cjs +204 -0
  465. package/dist/lib/cjs/setting-components/date-component.d.cts +38 -0
  466. package/dist/lib/cjs/setting-components/date-time-component.cjs +204 -0
  467. package/dist/lib/cjs/setting-components/date-time-component.d.cts +38 -0
  468. package/dist/lib/cjs/setting-components/email-component.cjs +215 -0
  469. package/dist/lib/cjs/setting-components/email-component.d.cts +49 -0
  470. package/dist/lib/cjs/setting-components/file-component.cjs +207 -0
  471. package/dist/lib/cjs/setting-components/file-component.d.cts +43 -0
  472. package/dist/lib/cjs/setting-components/index.cjs +252 -0
  473. package/dist/lib/cjs/setting-components/index.d.cts +27 -0
  474. package/dist/lib/cjs/setting-components/month-component.cjs +212 -0
  475. package/dist/lib/cjs/setting-components/month-component.d.cts +51 -0
  476. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +277 -0
  477. package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +92 -0
  478. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +201 -0
  479. package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +38 -0
  480. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +209 -0
  481. package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +43 -0
  482. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +296 -0
  483. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +109 -0
  484. package/dist/lib/cjs/setting-components/number-component.cjs +225 -0
  485. package/dist/lib/cjs/setting-components/number-component.d.cts +56 -0
  486. package/dist/lib/cjs/setting-components/password-component.cjs +201 -0
  487. package/dist/lib/cjs/setting-components/password-component.d.cts +38 -0
  488. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +184 -0
  489. package/dist/lib/cjs/setting-components/setting-component-wrapper.d.cts +13 -0
  490. package/dist/lib/cjs/setting-components/telephone-component.cjs +215 -0
  491. package/dist/lib/cjs/setting-components/telephone-component.d.cts +51 -0
  492. package/dist/lib/cjs/setting-components/text-based-component.cjs +194 -0
  493. package/dist/lib/cjs/setting-components/text-based-component.d.cts +38 -0
  494. package/dist/lib/cjs/setting-components/time-component.cjs +209 -0
  495. package/dist/lib/cjs/setting-components/time-component.d.cts +38 -0
  496. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +241 -0
  497. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +69 -0
  498. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +286 -0
  499. package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +97 -0
  500. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +288 -0
  501. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +99 -0
  502. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +199 -0
  503. package/dist/lib/cjs/setting-components/typed-range-text-component.d.cts +35 -0
  504. package/dist/lib/cjs/setting-components/typed-text-component.cjs +256 -0
  505. package/dist/lib/cjs/setting-components/typed-text-component.d.cts +100 -0
  506. package/dist/lib/cjs/setting-components/url-component.cjs +215 -0
  507. package/dist/lib/cjs/setting-components/url-component.d.cts +49 -0
  508. package/dist/lib/cjs/setting-components/validator-component.cjs +254 -0
  509. package/dist/lib/cjs/setting-components/validator-component.d.cts +23 -0
  510. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +155 -0
  511. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.d.cts +20 -0
  512. package/dist/lib/cjs/setting-components/week-component.cjs +212 -0
  513. package/dist/lib/cjs/setting-components/week-component.d.cts +51 -0
  514. package/dist/lib/cjs/setting-ex.cjs +396 -0
  515. package/dist/lib/cjs/setting-ex.d.cts +198 -0
  516. package/dist/lib/cjs/setting-group-ex.cjs +189 -0
  517. package/dist/lib/cjs/setting-group-ex.d.cts +26 -0
  518. package/dist/lib/cjs/status-bar-item-registrar.cjs +186 -0
  519. package/dist/lib/cjs/status-bar-item-registrar.d.cts +36 -0
  520. package/dist/lib/cjs/templater.cjs +303 -0
  521. package/dist/lib/cjs/templater.d.cts +284 -0
  522. package/dist/lib/cjs/transformers/duration-transformer.cjs +206 -0
  523. package/dist/lib/cjs/transformers/duration-transformer.d.cts +39 -0
  524. package/dist/lib/cjs/transformers/index.cjs +177 -0
  525. package/dist/lib/cjs/transformers/index.d.cts +2 -0
  526. package/dist/lib/cjs/trusted-input.cjs +220 -0
  527. package/dist/lib/cjs/trusted-input.d.cts +131 -0
  528. package/dist/lib/cjs/validation.cjs +213 -0
  529. package/dist/lib/cjs/validation.d.cts +87 -0
  530. package/dist/lib/cjs/vault-delete.cjs +246 -0
  531. package/dist/lib/cjs/vault-delete.d.cts +82 -0
  532. package/dist/lib/cjs/vault-transaction.cjs +436 -0
  533. package/dist/lib/cjs/vault-transaction.d.cts +163 -0
  534. package/dist/lib/cjs/vault.cjs +725 -0
  535. package/dist/lib/cjs/vault.d.cts +506 -0
  536. package/dist/lib/cjs/view-registrar.cjs +186 -0
  537. package/dist/lib/cjs/view-registrar.d.cts +52 -0
  538. package/dist/lib/cjs/workspace.cjs +210 -0
  539. package/dist/lib/cjs/workspace.d.cts +81 -0
  540. package/dist/lib/esm/@types/dataview/api/data-array.d.mts +137 -0
  541. package/dist/lib/esm/@types/dataview/api/extensions.d.mts +16 -0
  542. package/dist/lib/esm/@types/dataview/api/inline-api.d.mts +187 -0
  543. package/dist/lib/esm/@types/dataview/api/plugin-api.d.mts +210 -0
  544. package/dist/lib/esm/@types/dataview/api/result.d.mts +39 -0
  545. package/dist/lib/esm/@types/dataview/data-import/common.d.mts +4 -0
  546. package/dist/lib/esm/@types/dataview/data-import/csv.d.mts +4 -0
  547. package/dist/lib/esm/@types/dataview/data-import/inline-field.d.mts +43 -0
  548. package/dist/lib/esm/@types/dataview/data-import/markdown-file.d.mts +53 -0
  549. package/dist/lib/esm/@types/dataview/data-import/persister.d.mts +33 -0
  550. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-entry.d.mts +2 -0
  551. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-impl.d.mts +7 -0
  552. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-manager.d.mts +38 -0
  553. package/dist/lib/esm/@types/dataview/data-index/index.d.mts +187 -0
  554. package/dist/lib/esm/@types/dataview/data-index/resolver.d.mts +24 -0
  555. package/dist/lib/esm/@types/dataview/data-index/source.d.mts +72 -0
  556. package/dist/lib/esm/@types/dataview/data-model/markdown.d.mts +116 -0
  557. package/dist/lib/esm/@types/dataview/data-model/serialized/markdown.d.mts +107 -0
  558. package/dist/lib/esm/@types/dataview/data-model/transferable.d.mts +8 -0
  559. package/dist/lib/esm/@types/dataview/data-model/value.d.mts +176 -0
  560. package/dist/lib/esm/@types/dataview/expression/binaryop.d.mts +44 -0
  561. package/dist/lib/esm/@types/dataview/expression/context.d.mts +50 -0
  562. package/dist/lib/esm/@types/dataview/expression/field.d.mts +83 -0
  563. package/dist/lib/esm/@types/dataview/expression/functions.d.mts +150 -0
  564. package/dist/lib/esm/@types/dataview/expression/parse.d.mts +164 -0
  565. package/dist/lib/esm/@types/dataview/index.d.mts +56 -0
  566. package/dist/lib/esm/@types/dataview/main.d.mts +53 -0
  567. package/dist/lib/esm/@types/dataview/query/engine.d.mts +104 -0
  568. package/dist/lib/esm/@types/dataview/query/parse.d.mts +45 -0
  569. package/dist/lib/esm/@types/dataview/query/query.d.mts +96 -0
  570. package/dist/lib/esm/@types/dataview/settings.d.mts +61 -0
  571. package/dist/lib/esm/@types/dataview/typings/obsidian-ex.d.mts +29 -0
  572. package/dist/lib/esm/@types/dataview/typings/workers.d.mts +5 -0
  573. package/dist/lib/esm/@types/dataview/ui/export/markdown.d.mts +16 -0
  574. package/dist/lib/esm/@types/dataview/ui/lp-render.d.mts +38 -0
  575. package/dist/lib/esm/@types/dataview/ui/markdown.d.mts +87 -0
  576. package/dist/lib/esm/@types/dataview/ui/refreshable-view.d.mts +19 -0
  577. package/dist/lib/esm/@types/dataview/ui/render.d.mts +34 -0
  578. package/dist/lib/esm/@types/dataview/ui/views/calendar-view.d.mts +18 -0
  579. package/dist/lib/esm/@types/dataview/ui/views/inline-field-live-preview.d.mts +43 -0
  580. package/dist/lib/esm/@types/dataview/ui/views/inline-view.d.mts +29 -0
  581. package/dist/lib/esm/@types/dataview/ui/views/js-view.d.mts +24 -0
  582. package/dist/lib/esm/@types/dataview/ui/views/list-view.d.mts +26 -0
  583. package/dist/lib/esm/@types/dataview/ui/views/table-view.d.mts +29 -0
  584. package/dist/lib/esm/@types/dataview/ui/views/task-view.d.mts +52 -0
  585. package/dist/lib/esm/@types/dataview/util/hash.d.mts +2 -0
  586. package/dist/lib/esm/@types/dataview/util/locale.d.mts +3 -0
  587. package/dist/lib/esm/@types/dataview/util/media.d.mts +7 -0
  588. package/dist/lib/esm/@types/dataview/util/normalize.d.mts +45 -0
  589. package/dist/lib/esm/@types/i18next.d.mts +14 -0
  590. package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +29 -0
  591. package/dist/lib/esm/@types/original-fs.d.mts +15 -0
  592. package/dist/lib/esm/__merged.d.mts +205 -0
  593. package/dist/lib/esm/__merged.mjs +1532 -0
  594. package/dist/lib/esm/active-file-provider.d.mts +36 -0
  595. package/dist/lib/esm/active-file-provider.mjs +72 -0
  596. package/dist/lib/esm/app.d.mts +17 -0
  597. package/dist/lib/esm/app.mjs +64 -0
  598. package/dist/lib/esm/async-with-notice.d.mts +113 -0
  599. package/dist/lib/esm/async-with-notice.mjs +149 -0
  600. package/dist/lib/esm/attachment-path.d.mts +341 -0
  601. package/dist/lib/esm/attachment-path.mjs +302 -0
  602. package/dist/lib/esm/attachment-unit-folder.d.mts +103 -0
  603. package/dist/lib/esm/attachment-unit-folder.mjs +78 -0
  604. package/dist/lib/esm/backlink-index.d.mts +51 -0
  605. package/dist/lib/esm/backlink-index.mjs +160 -0
  606. package/dist/lib/esm/backlink.d.mts +66 -0
  607. package/dist/lib/esm/backlink.mjs +131 -0
  608. package/dist/lib/esm/bases-view-registrar.d.mts +52 -0
  609. package/dist/lib/esm/bases-view-registrar.mjs +73 -0
  610. package/dist/lib/esm/callout.d.mts +76 -0
  611. package/dist/lib/esm/callout.mjs +132 -0
  612. package/dist/lib/esm/canvas.d.mts +28 -0
  613. package/dist/lib/esm/canvas.mjs +129 -0
  614. package/dist/lib/esm/case-insensitive-file-index.d.mts +92 -0
  615. package/dist/lib/esm/case-insensitive-file-index.mjs +152 -0
  616. package/dist/lib/esm/code-block-markdown-information.d.mts +48 -0
  617. package/dist/lib/esm/code-block-markdown-information.mjs +50 -0
  618. package/dist/lib/esm/code-block-reg-exp.d.mts +39 -0
  619. package/dist/lib/esm/code-block-reg-exp.mjs +56 -0
  620. package/dist/lib/esm/codemirror/index.d.mts +2 -0
  621. package/dist/lib/esm/codemirror/index.mjs +54 -0
  622. package/dist/lib/esm/codemirror/state-field-spec.d.mts +72 -0
  623. package/dist/lib/esm/codemirror/state-field-spec.mjs +50 -0
  624. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +274 -0
  625. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +330 -0
  626. package/dist/lib/esm/command-handlers/command-handler-component.d.mts +146 -0
  627. package/dist/lib/esm/command-handlers/command-handler-component.mjs +193 -0
  628. package/dist/lib/esm/command-handlers/command-handler.d.mts +107 -0
  629. package/dist/lib/esm/command-handlers/command-handler.mjs +111 -0
  630. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +208 -0
  631. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +262 -0
  632. package/dist/lib/esm/command-handlers/file-command-handler.d.mts +143 -0
  633. package/dist/lib/esm/command-handlers/file-command-handler.mjs +200 -0
  634. package/dist/lib/esm/command-handlers/folder-command-handler.d.mts +149 -0
  635. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +208 -0
  636. package/dist/lib/esm/command-handlers/global-command-handler.d.mts +40 -0
  637. package/dist/lib/esm/command-handlers/global-command-handler.mjs +96 -0
  638. package/dist/lib/esm/command-handlers/index.d.mts +11 -0
  639. package/dist/lib/esm/command-handlers/index.mjs +72 -0
  640. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.d.mts +73 -0
  641. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +110 -0
  642. package/dist/lib/esm/command-handlers/open-settings-command-handler.d.mts +44 -0
  643. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +85 -0
  644. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.d.mts +54 -0
  645. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +98 -0
  646. package/dist/lib/esm/command-registrar.d.mts +48 -0
  647. package/dist/lib/esm/command-registrar.mjs +80 -0
  648. package/dist/lib/esm/community-plugins.d.mts +270 -0
  649. package/dist/lib/esm/community-plugins.mjs +222 -0
  650. package/dist/lib/esm/components/abort-signal-component.d.mts +30 -0
  651. package/dist/lib/esm/components/abort-signal-component.mjs +83 -0
  652. package/dist/lib/esm/components/all-windows-event-component.d.mts +84 -0
  653. package/dist/lib/esm/components/all-windows-event-component.mjs +125 -0
  654. package/dist/lib/esm/components/async-error-handler-component.d.mts +30 -0
  655. package/dist/lib/esm/components/async-error-handler-component.mjs +87 -0
  656. package/dist/lib/esm/components/async-events-component.d.mts +15 -0
  657. package/dist/lib/esm/components/async-events-component.mjs +59 -0
  658. package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +36 -0
  659. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +101 -0
  660. package/dist/lib/esm/components/component-ex.d.mts +229 -0
  661. package/dist/lib/esm/components/component-ex.mjs +421 -0
  662. package/dist/lib/esm/components/console-debug-component.d.mts +30 -0
  663. package/dist/lib/esm/components/console-debug-component.mjs +81 -0
  664. package/dist/lib/esm/components/core-plugin-toggle-component.d.mts +102 -0
  665. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +113 -0
  666. package/dist/lib/esm/components/disposable-component.d.mts +24 -0
  667. package/dist/lib/esm/components/disposable-component.mjs +65 -0
  668. package/dist/lib/esm/components/embed-extensions-component.d.mts +38 -0
  669. package/dist/lib/esm/components/embed-extensions-component.mjs +85 -0
  670. package/dist/lib/esm/components/generate-markdown-link-default-params-component.d.mts +42 -0
  671. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +81 -0
  672. package/dist/lib/esm/components/index.d.mts +30 -0
  673. package/dist/lib/esm/components/index.mjs +110 -0
  674. package/dist/lib/esm/components/layout-ready-component.d.mts +48 -0
  675. package/dist/lib/esm/components/layout-ready-component.mjs +121 -0
  676. package/dist/lib/esm/components/menu-event-registrar-component.d.mts +52 -0
  677. package/dist/lib/esm/components/menu-event-registrar-component.mjs +107 -0
  678. package/dist/lib/esm/components/monkey-around-component.d.mts +241 -0
  679. package/dist/lib/esm/components/monkey-around-component.mjs +154 -0
  680. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.d.mts +150 -0
  681. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +235 -0
  682. package/dist/lib/esm/components/plugin-context-component.d.mts +36 -0
  683. package/dist/lib/esm/components/plugin-context-component.mjs +94 -0
  684. package/dist/lib/esm/components/plugin-gate-component.d.mts +332 -0
  685. package/dist/lib/esm/components/plugin-gate-component.mjs +472 -0
  686. package/dist/lib/esm/components/plugin-notice-component.d.mts +362 -0
  687. package/dist/lib/esm/components/plugin-notice-component.mjs +543 -0
  688. package/dist/lib/esm/components/plugin-settings-component.d.mts +362 -0
  689. package/dist/lib/esm/components/plugin-settings-component.mjs +562 -0
  690. package/dist/lib/esm/components/plugin-settings-tab-component.d.mts +39 -0
  691. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +81 -0
  692. package/dist/lib/esm/components/plugin-suggestion-component.d.mts +162 -0
  693. package/dist/lib/esm/components/plugin-suggestion-component.mjs +192 -0
  694. package/dist/lib/esm/components/pointer-position-component.d.mts +29 -0
  695. package/dist/lib/esm/components/pointer-position-component.mjs +77 -0
  696. package/dist/lib/esm/components/registry-component.d.mts +37 -0
  697. package/dist/lib/esm/components/registry-component.mjs +98 -0
  698. package/dist/lib/esm/components/release-notes-component.d.mts +129 -0
  699. package/dist/lib/esm/components/release-notes-component.mjs +136 -0
  700. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +165 -0
  701. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1238 -0
  702. package/dist/lib/esm/components/rmdir-guard-component.d.mts +76 -0
  703. package/dist/lib/esm/components/rmdir-guard-component.mjs +100 -0
  704. package/dist/lib/esm/components/settings-migration-component.d.mts +120 -0
  705. package/dist/lib/esm/components/settings-migration-component.mjs +133 -0
  706. package/dist/lib/esm/components/syntax-highlighting-component.d.mts +149 -0
  707. package/dist/lib/esm/components/syntax-highlighting-component.mjs +159 -0
  708. package/dist/lib/esm/components/templates-language-component.d.mts +124 -0
  709. package/dist/lib/esm/components/templates-language-component.mjs +187 -0
  710. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.d.mts +22 -0
  711. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +157 -0
  712. package/dist/lib/esm/constructors/index.d.mts +2 -0
  713. package/dist/lib/esm/constructors/index.mjs +54 -0
  714. package/dist/lib/esm/css-class.d.mts +278 -0
  715. package/dist/lib/esm/css-class.mjs +119 -0
  716. package/dist/lib/esm/data-handler.d.mts +49 -0
  717. package/dist/lib/esm/data-handler.mjs +81 -0
  718. package/dist/lib/esm/dataview-link.d.mts +42 -0
  719. package/dist/lib/esm/dataview-link.mjs +74 -0
  720. package/dist/lib/esm/dataview.d.mts +249 -0
  721. package/dist/lib/esm/dataview.mjs +288 -0
  722. package/dist/lib/esm/debug.d.mts +19 -0
  723. package/dist/lib/esm/debug.mjs +59 -0
  724. package/dist/lib/esm/demo-vault-helper-settings.d.mts +29 -0
  725. package/dist/lib/esm/demo-vault-helper-settings.mjs +50 -0
  726. package/dist/lib/esm/demo-vault-helper.d.mts +61 -0
  727. package/dist/lib/esm/demo-vault-helper.mjs +150 -0
  728. package/dist/lib/esm/demo-vault-naming.d.mts +54 -0
  729. package/dist/lib/esm/demo-vault-naming.mjs +67 -0
  730. package/dist/lib/esm/desktop-demo-vault-opener.d.mts +76 -0
  731. package/dist/lib/esm/desktop-demo-vault-opener.mjs +274 -0
  732. package/dist/lib/esm/desktop-trusted-input.d.mts +288 -0
  733. package/dist/lib/esm/desktop-trusted-input.mjs +206 -0
  734. package/dist/lib/esm/editor-extension-registrar.d.mts +37 -0
  735. package/dist/lib/esm/editor-extension-registrar.mjs +73 -0
  736. package/dist/lib/esm/editor-suggest-registrar.d.mts +36 -0
  737. package/dist/lib/esm/editor-suggest-registrar.mjs +76 -0
  738. package/dist/lib/esm/editor.d.mts +45 -0
  739. package/dist/lib/esm/editor.mjs +115 -0
  740. package/dist/lib/esm/events.d.mts +98 -0
  741. package/dist/lib/esm/events.mjs +81 -0
  742. package/dist/lib/esm/extensions-registrar.d.mts +51 -0
  743. package/dist/lib/esm/extensions-registrar.mjs +73 -0
  744. package/dist/lib/esm/file-change.d.mts +156 -0
  745. package/dist/lib/esm/file-change.mjs +481 -0
  746. package/dist/lib/esm/file-explorer.d.mts +34 -0
  747. package/dist/lib/esm/file-explorer.mjs +68 -0
  748. package/dist/lib/esm/file-manager.d.mts +123 -0
  749. package/dist/lib/esm/file-manager.mjs +169 -0
  750. package/dist/lib/esm/file-system.d.mts +554 -0
  751. package/dist/lib/esm/file-system.mjs +466 -0
  752. package/dist/lib/esm/folder-note.d.mts +166 -0
  753. package/dist/lib/esm/folder-note.mjs +169 -0
  754. package/dist/lib/esm/frontmatter-formatting.d.mts +44 -0
  755. package/dist/lib/esm/frontmatter-formatting.mjs +376 -0
  756. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +34 -0
  757. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +69 -0
  758. package/dist/lib/esm/frontmatter.d.mts +145 -0
  759. package/dist/lib/esm/frontmatter.mjs +182 -0
  760. package/dist/lib/esm/generated-during-build.d.mts +19 -0
  761. package/dist/lib/esm/generated-during-build.mjs +56 -0
  762. package/dist/lib/esm/hover-link-source-registrar.d.mts +52 -0
  763. package/dist/lib/esm/hover-link-source-registrar.mjs +73 -0
  764. package/dist/lib/esm/html-element.d.mts +98 -0
  765. package/dist/lib/esm/html-element.mjs +94 -0
  766. package/dist/lib/esm/i18n/custom-type-options.d.mts +38 -0
  767. package/dist/lib/esm/i18n/custom-type-options.mjs +51 -0
  768. package/dist/lib/esm/i18n/default-translations.d.mts +15 -0
  769. package/dist/lib/esm/i18n/default-translations.mjs +51 -0
  770. package/dist/lib/esm/i18n/i18n.d.mts +38 -0
  771. package/dist/lib/esm/i18n/i18n.mjs +97 -0
  772. package/dist/lib/esm/i18n/index.d.mts +5 -0
  773. package/dist/lib/esm/i18n/index.mjs +60 -0
  774. package/dist/lib/esm/i18n/locales/en.d.mts +91 -0
  775. package/dist/lib/esm/i18n/locales/en.mjs +135 -0
  776. package/dist/lib/esm/i18n/locales/index.d.mts +3 -0
  777. package/dist/lib/esm/i18n/locales/index.mjs +56 -0
  778. package/dist/lib/esm/i18n/locales/translations-map.d.mts +100 -0
  779. package/dist/lib/esm/i18n/locales/translations-map.mjs +60 -0
  780. package/dist/lib/esm/index.d.mts +96 -0
  781. package/dist/lib/esm/index.mjs +242 -0
  782. package/dist/lib/esm/is-in-obsidian.d.mts +12 -0
  783. package/dist/lib/esm/is-in-obsidian.mjs +67 -0
  784. package/dist/lib/esm/library-styles.d.mts +56 -0
  785. package/dist/lib/esm/library-styles.mjs +80 -0
  786. package/dist/lib/esm/library.d.mts +57 -0
  787. package/dist/lib/esm/library.mjs +91 -0
  788. package/dist/lib/esm/link-name.d.mts +23 -0
  789. package/dist/lib/esm/link-name.mjs +56 -0
  790. package/dist/lib/esm/link-update-progress.d.mts +32 -0
  791. package/dist/lib/esm/link-update-progress.mjs +50 -0
  792. package/dist/lib/esm/link.d.mts +1369 -0
  793. package/dist/lib/esm/link.mjs +996 -0
  794. package/dist/lib/esm/logger.d.mts +37 -0
  795. package/dist/lib/esm/logger.mjs +123 -0
  796. package/dist/lib/esm/loop.d.mts +104 -0
  797. package/dist/lib/esm/loop.mjs +159 -0
  798. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +62 -0
  799. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +77 -0
  800. package/dist/lib/esm/markdown-code-block-processor.d.mts +137 -0
  801. package/dist/lib/esm/markdown-code-block-processor.mjs +364 -0
  802. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +59 -0
  803. package/dist/lib/esm/markdown-post-processor-registrar.mjs +74 -0
  804. package/dist/lib/esm/markdown-view.d.mts +14 -0
  805. package/dist/lib/esm/markdown-view.mjs +62 -0
  806. package/dist/lib/esm/markdown.d.mts +226 -0
  807. package/dist/lib/esm/markdown.mjs +399 -0
  808. package/dist/lib/esm/menu-event-registrar.d.mts +84 -0
  809. package/dist/lib/esm/menu-event-registrar.mjs +50 -0
  810. package/dist/lib/esm/metadata-cache.d.mts +359 -0
  811. package/dist/lib/esm/metadata-cache.mjs +462 -0
  812. package/dist/lib/esm/mobile-trusted-input.d.mts +98 -0
  813. package/dist/lib/esm/mobile-trusted-input.mjs +90 -0
  814. package/dist/lib/esm/modals/alert.d.mts +35 -0
  815. package/dist/lib/esm/modals/alert.mjs +92 -0
  816. package/dist/lib/esm/modals/confirm.d.mts +39 -0
  817. package/dist/lib/esm/modals/confirm.mjs +102 -0
  818. package/dist/lib/esm/modals/index.d.mts +10 -0
  819. package/dist/lib/esm/modals/index.mjs +70 -0
  820. package/dist/lib/esm/modals/minimizable-modal.d.mts +129 -0
  821. package/dist/lib/esm/modals/minimizable-modal.mjs +356 -0
  822. package/dist/lib/esm/modals/modal-command-builder.d.mts +285 -0
  823. package/dist/lib/esm/modals/modal-command-builder.mjs +371 -0
  824. package/dist/lib/esm/modals/modal.d.mts +64 -0
  825. package/dist/lib/esm/modals/modal.mjs +86 -0
  826. package/dist/lib/esm/modals/prompt.d.mts +83 -0
  827. package/dist/lib/esm/modals/prompt.mjs +176 -0
  828. package/dist/lib/esm/modals/select-item.d.mts +55 -0
  829. package/dist/lib/esm/modals/select-item.mjs +112 -0
  830. package/dist/lib/esm/modals/select-option.d.mts +65 -0
  831. package/dist/lib/esm/modals/select-option.mjs +103 -0
  832. package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +35 -0
  833. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +55 -0
  834. package/dist/lib/esm/note-priority.d.mts +154 -0
  835. package/dist/lib/esm/note-priority.mjs +143 -0
  836. package/dist/lib/esm/notebook-navigator.d.mts +132 -0
  837. package/dist/lib/esm/notebook-navigator.mjs +72 -0
  838. package/dist/lib/esm/obsidian-dev-utils-state.d.mts +42 -0
  839. package/dist/lib/esm/obsidian-dev-utils-state.mjs +84 -0
  840. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +55 -0
  841. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +76 -0
  842. package/dist/lib/esm/obsidian-settings.d.mts +62 -0
  843. package/dist/lib/esm/obsidian-settings.mjs +89 -0
  844. package/dist/lib/esm/parse-link.d.mts +288 -0
  845. package/dist/lib/esm/parse-link.mjs +436 -0
  846. package/dist/lib/esm/path-settings.d.mts +56 -0
  847. package/dist/lib/esm/path-settings.mjs +184 -0
  848. package/dist/lib/esm/pdf.d.mts +26 -0
  849. package/dist/lib/esm/pdf.mjs +84 -0
  850. package/dist/lib/esm/plugin/index.d.mts +9 -0
  851. package/dist/lib/esm/plugin/index.mjs +68 -0
  852. package/dist/lib/esm/plugin/plugin-api.d.mts +413 -0
  853. package/dist/lib/esm/plugin/plugin-api.mjs +430 -0
  854. package/dist/lib/esm/plugin/plugin-context.d.mts +27 -0
  855. package/dist/lib/esm/plugin/plugin-context.mjs +109 -0
  856. package/dist/lib/esm/plugin/plugin-event-source.d.mts +97 -0
  857. package/dist/lib/esm/plugin/plugin-event-source.mjs +137 -0
  858. package/dist/lib/esm/plugin/plugin-install-state.d.mts +113 -0
  859. package/dist/lib/esm/plugin/plugin-install-state.mjs +109 -0
  860. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +127 -0
  861. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +60 -0
  862. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +368 -0
  863. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +535 -0
  864. package/dist/lib/esm/plugin/plugin.d.mts +363 -0
  865. package/dist/lib/esm/plugin/plugin.mjs +619 -0
  866. package/dist/lib/esm/plugin/settings-migration-api.d.mts +91 -0
  867. package/dist/lib/esm/plugin/settings-migration-api.mjs +50 -0
  868. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +64 -0
  869. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +74 -0
  870. package/dist/lib/esm/popovers/field-popover.d.mts +75 -0
  871. package/dist/lib/esm/popovers/field-popover.mjs +96 -0
  872. package/dist/lib/esm/popovers/index.d.mts +4 -0
  873. package/dist/lib/esm/popovers/index.mjs +58 -0
  874. package/dist/lib/esm/popovers/popover-anchor.d.mts +67 -0
  875. package/dist/lib/esm/popovers/popover-anchor.mjs +90 -0
  876. package/dist/lib/esm/popovers/popover.d.mts +78 -0
  877. package/dist/lib/esm/popovers/popover.mjs +140 -0
  878. package/dist/lib/esm/property-entry.d.mts +43 -0
  879. package/dist/lib/esm/property-entry.mjs +81 -0
  880. package/dist/lib/esm/queue.d.mts +93 -0
  881. package/dist/lib/esm/queue.mjs +130 -0
  882. package/dist/lib/esm/react/app-context.d.mts +24 -0
  883. package/dist/lib/esm/react/app-context.mjs +64 -0
  884. package/dist/lib/esm/react/index.d.mts +2 -0
  885. package/dist/lib/esm/react/index.mjs +54 -0
  886. package/dist/lib/esm/reference.d.mts +116 -0
  887. package/dist/lib/esm/reference.mjs +95 -0
  888. package/dist/lib/esm/resource-lock.d.mts +318 -0
  889. package/dist/lib/esm/resource-lock.mjs +1014 -0
  890. package/dist/lib/esm/resource-url.d.mts +31 -0
  891. package/dist/lib/esm/resource-url.mjs +67 -0
  892. package/dist/lib/esm/ribbon-icon-registrar.d.mts +60 -0
  893. package/dist/lib/esm/ribbon-icon-registrar.mjs +74 -0
  894. package/dist/lib/esm/setting-components/checkbox-component.d.mts +69 -0
  895. package/dist/lib/esm/setting-components/checkbox-component.mjs +127 -0
  896. package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +132 -0
  897. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +295 -0
  898. package/dist/lib/esm/setting-components/date-component.d.mts +38 -0
  899. package/dist/lib/esm/setting-components/date-component.mjs +91 -0
  900. package/dist/lib/esm/setting-components/date-time-component.d.mts +38 -0
  901. package/dist/lib/esm/setting-components/date-time-component.mjs +91 -0
  902. package/dist/lib/esm/setting-components/email-component.d.mts +49 -0
  903. package/dist/lib/esm/setting-components/email-component.mjs +102 -0
  904. package/dist/lib/esm/setting-components/file-component.d.mts +43 -0
  905. package/dist/lib/esm/setting-components/file-component.mjs +94 -0
  906. package/dist/lib/esm/setting-components/index.d.mts +27 -0
  907. package/dist/lib/esm/setting-components/index.mjs +104 -0
  908. package/dist/lib/esm/setting-components/month-component.d.mts +51 -0
  909. package/dist/lib/esm/setting-components/month-component.mjs +99 -0
  910. package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +92 -0
  911. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +167 -0
  912. package/dist/lib/esm/setting-components/multiple-email-component.d.mts +38 -0
  913. package/dist/lib/esm/setting-components/multiple-email-component.mjs +88 -0
  914. package/dist/lib/esm/setting-components/multiple-file-component.d.mts +43 -0
  915. package/dist/lib/esm/setting-components/multiple-file-component.mjs +96 -0
  916. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +109 -0
  917. package/dist/lib/esm/setting-components/multiple-text-component.mjs +186 -0
  918. package/dist/lib/esm/setting-components/number-component.d.mts +56 -0
  919. package/dist/lib/esm/setting-components/number-component.mjs +112 -0
  920. package/dist/lib/esm/setting-components/password-component.d.mts +38 -0
  921. package/dist/lib/esm/setting-components/password-component.mjs +88 -0
  922. package/dist/lib/esm/setting-components/setting-component-wrapper.d.mts +13 -0
  923. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +71 -0
  924. package/dist/lib/esm/setting-components/telephone-component.d.mts +51 -0
  925. package/dist/lib/esm/setting-components/telephone-component.mjs +102 -0
  926. package/dist/lib/esm/setting-components/text-based-component.d.mts +38 -0
  927. package/dist/lib/esm/setting-components/text-based-component.mjs +81 -0
  928. package/dist/lib/esm/setting-components/time-component.d.mts +38 -0
  929. package/dist/lib/esm/setting-components/time-component.mjs +96 -0
  930. package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +69 -0
  931. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +128 -0
  932. package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +97 -0
  933. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +176 -0
  934. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +99 -0
  935. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +175 -0
  936. package/dist/lib/esm/setting-components/typed-range-text-component.d.mts +35 -0
  937. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +86 -0
  938. package/dist/lib/esm/setting-components/typed-text-component.d.mts +100 -0
  939. package/dist/lib/esm/setting-components/typed-text-component.mjs +146 -0
  940. package/dist/lib/esm/setting-components/url-component.d.mts +49 -0
  941. package/dist/lib/esm/setting-components/url-component.mjs +102 -0
  942. package/dist/lib/esm/setting-components/validator-component.d.mts +23 -0
  943. package/dist/lib/esm/setting-components/validator-component.mjs +150 -0
  944. package/dist/lib/esm/setting-components/value-component-with-change-tracking.d.mts +20 -0
  945. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +50 -0
  946. package/dist/lib/esm/setting-components/week-component.d.mts +51 -0
  947. package/dist/lib/esm/setting-components/week-component.mjs +99 -0
  948. package/dist/lib/esm/setting-ex.d.mts +198 -0
  949. package/dist/lib/esm/setting-ex.mjs +282 -0
  950. package/dist/lib/esm/setting-group-ex.d.mts +26 -0
  951. package/dist/lib/esm/setting-group-ex.mjs +76 -0
  952. package/dist/lib/esm/status-bar-item-registrar.d.mts +36 -0
  953. package/dist/lib/esm/status-bar-item-registrar.mjs +73 -0
  954. package/dist/lib/esm/templater.d.mts +284 -0
  955. package/dist/lib/esm/templater.mjs +181 -0
  956. package/dist/lib/esm/transformers/duration-transformer.d.mts +39 -0
  957. package/dist/lib/esm/transformers/duration-transformer.mjs +93 -0
  958. package/dist/lib/esm/transformers/index.d.mts +2 -0
  959. package/dist/lib/esm/transformers/index.mjs +54 -0
  960. package/dist/lib/esm/trusted-input.d.mts +131 -0
  961. package/dist/lib/esm/trusted-input.mjs +91 -0
  962. package/dist/lib/esm/validation.d.mts +87 -0
  963. package/dist/lib/esm/validation.mjs +95 -0
  964. package/dist/lib/esm/vault-delete.d.mts +82 -0
  965. package/dist/lib/esm/vault-delete.mjs +140 -0
  966. package/dist/lib/esm/vault-transaction.d.mts +163 -0
  967. package/dist/lib/esm/vault-transaction.mjs +333 -0
  968. package/dist/lib/esm/vault.d.mts +506 -0
  969. package/dist/lib/esm/vault.mjs +612 -0
  970. package/dist/lib/esm/view-registrar.d.mts +52 -0
  971. package/dist/lib/esm/view-registrar.mjs +73 -0
  972. package/dist/lib/esm/workspace.d.mts +81 -0
  973. package/dist/lib/esm/workspace.mjs +92 -0
  974. package/dist/styles.css +497 -0
  975. package/i18n/custom-type-options/package.json +6 -0
  976. package/i18n/default-translations/package.json +6 -0
  977. package/i18n/i18n/package.json +6 -0
  978. package/i18n/index/package.json +6 -0
  979. package/i18n/locales/en/package.json +6 -0
  980. package/i18n/locales/index/package.json +6 -0
  981. package/i18n/locales/package.json +6 -0
  982. package/i18n/locales/translations-map/package.json +6 -0
  983. package/i18n/package.json +6 -0
  984. package/modals/alert/package.json +6 -0
  985. package/modals/confirm/package.json +6 -0
  986. package/modals/index/package.json +6 -0
  987. package/modals/minimizable-modal/package.json +6 -0
  988. package/modals/modal/package.json +6 -0
  989. package/modals/modal-command-builder/package.json +6 -0
  990. package/modals/package.json +6 -0
  991. package/modals/prompt/package.json +6 -0
  992. package/modals/select-item/package.json +6 -0
  993. package/modals/select-option/package.json +6 -0
  994. package/modals/suggest-modal-command-builder/package.json +6 -0
  995. package/package.json +488 -13
  996. package/plugin/index/package.json +6 -0
  997. package/plugin/package.json +6 -0
  998. package/plugin/plugin/package.json +6 -0
  999. package/plugin/plugin-api/package.json +6 -0
  1000. package/plugin/plugin-context/package.json +6 -0
  1001. package/plugin/plugin-event-source/package.json +6 -0
  1002. package/plugin/plugin-install-state/package.json +6 -0
  1003. package/plugin/plugin-lifecycle-events/package.json +6 -0
  1004. package/plugin/plugin-settings-tab/package.json +6 -0
  1005. package/plugin/settings-migration-api/package.json +6 -0
  1006. package/popovers/field-popover/package.json +6 -0
  1007. package/popovers/index/package.json +6 -0
  1008. package/popovers/package.json +6 -0
  1009. package/popovers/popover/package.json +6 -0
  1010. package/popovers/popover-anchor/package.json +6 -0
  1011. package/react/app-context/package.json +6 -0
  1012. package/react/index/package.json +6 -0
  1013. package/react/package.json +6 -0
  1014. package/setting-components/checkbox-component/package.json +6 -0
  1015. package/setting-components/code-highlighter-component/package.json +6 -0
  1016. package/setting-components/date-component/package.json +6 -0
  1017. package/setting-components/date-time-component/package.json +6 -0
  1018. package/setting-components/email-component/package.json +6 -0
  1019. package/setting-components/file-component/package.json +6 -0
  1020. package/setting-components/index/package.json +6 -0
  1021. package/setting-components/month-component/package.json +6 -0
  1022. package/setting-components/multiple-dropdown-component/package.json +6 -0
  1023. package/setting-components/multiple-email-component/package.json +6 -0
  1024. package/setting-components/multiple-file-component/package.json +6 -0
  1025. package/setting-components/multiple-text-component/package.json +6 -0
  1026. package/setting-components/number-component/package.json +6 -0
  1027. package/setting-components/package.json +6 -0
  1028. package/setting-components/password-component/package.json +6 -0
  1029. package/setting-components/setting-component-wrapper/package.json +6 -0
  1030. package/setting-components/telephone-component/package.json +6 -0
  1031. package/setting-components/text-based-component/package.json +6 -0
  1032. package/setting-components/time-component/package.json +6 -0
  1033. package/setting-components/tri-state-checkbox-component/package.json +6 -0
  1034. package/setting-components/typed-dropdown-component/package.json +6 -0
  1035. package/setting-components/typed-multiple-dropdown-component/package.json +6 -0
  1036. package/setting-components/typed-range-text-component/package.json +6 -0
  1037. package/setting-components/typed-text-component/package.json +6 -0
  1038. package/setting-components/url-component/package.json +6 -0
  1039. package/setting-components/validator-component/package.json +6 -0
  1040. package/setting-components/value-component-with-change-tracking/package.json +6 -0
  1041. package/setting-components/week-component/package.json +6 -0
  1042. package/transformers/duration-transformer/package.json +6 -0
  1043. package/transformers/index/package.json +6 -0
  1044. package/transformers/package.json +6 -0
@@ -0,0 +1,635 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ function keepName($unknown) {
45
+ return $unknown;
46
+ }
47
+
48
+ (function initCjs() {
49
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
+ const globalThisRecord = globalThis;
51
+ ensureDisposeSymbols();
52
+ globalThisRecord['__name'] ??= keepName;
53
+ globalThisRecord['__extractDefault'] ??= extractDefault;
54
+
55
+ ensureBrowserProcess();
56
+
57
+ // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
+ function extractDefault(module) {
59
+ return module && module.__esModule && 'default' in module ? module.default : module;
60
+ }
61
+ })();
62
+ })();
63
+ (function patchObsidianRequire() {
64
+ const originalRequire = require;
65
+ if (!originalRequire || originalRequire.__isPatched) {
66
+ return;
67
+ }
68
+
69
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
+ require = Object.assign(
71
+ (id) => requirePatched(id),
72
+ originalRequire,
73
+ {
74
+ __isPatched: true
75
+ }
76
+ );
77
+
78
+ function extractDefault(module) {
79
+ return module && module.__esModule && 'default' in module ? module.default : module;
80
+ }
81
+
82
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
+ '@codemirror/autocomplete',
84
+ '@codemirror/collab',
85
+ '@codemirror/commands',
86
+ '@codemirror/language',
87
+ '@codemirror/lint',
88
+ '@codemirror/search',
89
+ '@codemirror/state',
90
+ '@codemirror/text',
91
+ '@codemirror/view',
92
+ '@lezer/common',
93
+ '@lezer/highlight',
94
+ '@lezer/lr',
95
+ 'obsidian']
96
+ );
97
+
98
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
+ '@codemirror/closebrackets',
100
+ '@codemirror/comment',
101
+ '@codemirror/fold',
102
+ '@codemirror/gutter',
103
+ '@codemirror/highlight',
104
+ '@codemirror/history',
105
+ '@codemirror/matchbrackets',
106
+ '@codemirror/panel',
107
+ '@codemirror/rangeset',
108
+ '@codemirror/rectangular-selection',
109
+ '@codemirror/stream-parser',
110
+ '@codemirror/tooltip']
111
+ );
112
+
113
+ function requirePatched(id) {
114
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
+ return originalRequire?.(id);
116
+ }
117
+
118
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
+ if (globalThis.app.isMobile) {
120
+ if (id === 'process' || id === 'node:process') {
121
+ // eslint-disable-next-line no-console -- Valid usage.
122
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
+
124
+ return process;
125
+ }
126
+ } else {
127
+ const module = originalRequire?.(id);
128
+ if (module) {
129
+ return extractDefault(module);
130
+ }
131
+ }
132
+
133
+ // eslint-disable-next-line no-console -- Valid usage.
134
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
+ return {};
136
+ }
137
+ })();
138
+
139
+ "use strict";
140
+ var __defProp = Object.defineProperty;
141
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
142
+ var __getOwnPropNames = Object.getOwnPropertyNames;
143
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
144
+ var __export = (target, all) => {
145
+ for (var name in all)
146
+ __defProp(target, name, { get: all[name], enumerable: true });
147
+ };
148
+ var __copyProps = (to, from, except, desc) => {
149
+ if (from && typeof from === "object" || typeof from === "function") {
150
+ for (let key of __getOwnPropNames(from))
151
+ if (!__hasOwnProp.call(to, key) && key !== except)
152
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
153
+ }
154
+ return to;
155
+ };
156
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
157
+ var plugin_settings_tab_exports = {};
158
+ __export(plugin_settings_tab_exports, {
159
+ PluginSettingsTabBase: () => PluginSettingsTabBase,
160
+ SAVE_TO_FILE_CONTEXT: () => SAVE_TO_FILE_CONTEXT
161
+ });
162
+ module.exports = __toCommonJS(plugin_settings_tab_exports);
163
+ var import_async = require('@mnaoumov/typescript-lib/async');
164
+ var import_async_events = require('@mnaoumov/typescript-lib/async-events');
165
+ var import_function = require('@mnaoumov/typescript-lib/function');
166
+ var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
167
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
168
+ var import_obsidian = require('obsidian');
169
+ var import_async_events_component = require('../components/async-events-component.cjs');
170
+ var import_component_ex = require('../components/component-ex.cjs');
171
+ var import_css_class = require('../css-class.cjs');
172
+ var import_setting_component_wrapper = require('../setting-components/setting-component-wrapper.cjs');
173
+ var import_text_based_component = require('../setting-components/text-based-component.cjs');
174
+ var import_validator_component = require('../setting-components/validator-component.cjs');
175
+ var import_setting_ex = require('../setting-ex.cjs');
176
+ var import_validation = require('../validation.cjs');
177
+ var import_plugin_context = require('./plugin-context.cjs');
178
+ const SAVE_TO_FILE_CONTEXT = "PluginSettingsTab";
179
+ class PluginSettingsTabEventsComponent extends import_component_ex.ComponentEx {
180
+ params;
181
+ /**
182
+ * Creates a new component.
183
+ *
184
+ * @param params - The params.
185
+ */
186
+ constructor(params) {
187
+ super();
188
+ this.params = params;
189
+ }
190
+ /**
191
+ * Subscribes to the settings component's events.
192
+ */
193
+ onload() {
194
+ super.onload();
195
+ const { pluginSettingsComponent } = this.params;
196
+ (0, import_async_events_component.registerAsyncEvent)(this, pluginSettingsComponent.on("loadSettings", (loadedState, isInitialLoad) => this.params.onLoadSettings(loadedState, isInitialLoad)));
197
+ (0, import_async_events_component.registerAsyncEvent)(this, pluginSettingsComponent.on("saveSettings", (newState, oldState, context) => this.params.onSaveSettings(newState, oldState, context)));
198
+ }
199
+ }
200
+ class PluginSettingsTabBase extends (0, import_async_events.mixinAsyncEvents)()(import_obsidian.PluginSettingTab) {
201
+ /**
202
+ * Whether the plugin settings tab is open.
203
+ *
204
+ * @returns Whether the plugin settings tab is open.
205
+ */
206
+ get isOpen() {
207
+ return this._isOpen;
208
+ }
209
+ /**
210
+ * The settings manager.
211
+ */
212
+ pluginSettingsComponent;
213
+ /**
214
+ * A debounce timeout for saving settings.
215
+ *
216
+ * @returns The debounce timeout for saving settings.
217
+ */
218
+ get saveSettingsDebounceTimeoutInMilliseconds() {
219
+ const DEFAULT = 2e3;
220
+ return DEFAULT;
221
+ }
222
+ _isOpen = false;
223
+ component;
224
+ currentRenderComponent = null;
225
+ saveSettingsDebounced;
226
+ get pluginSettings() {
227
+ return this.pluginSettingsComponent.settingsState.inputValues;
228
+ }
229
+ /**
230
+ * Creates a new plugin settings tab.
231
+ *
232
+ * @param params - The params.
233
+ */
234
+ constructor(params) {
235
+ super(params.plugin.app, params.plugin);
236
+ this.pluginSettingsComponent = params.pluginSettingsComponent;
237
+ (0, import_plugin_context.addPluginCssClasses)(this.containerEl, import_css_class.CssClass.PluginSettingsTab);
238
+ this.saveSettingsDebounced = (0, import_obsidian.debounce)(
239
+ (0, import_async.convertAsyncToSync)(() => this.pluginSettingsComponent.saveToFile(SAVE_TO_FILE_CONTEXT)),
240
+ this.saveSettingsDebounceTimeoutInMilliseconds
241
+ );
242
+ this.component = new PluginSettingsTabEventsComponent({
243
+ onLoadSettings: (loadedState, isInitialLoad) => this.onLoadSettings(loadedState, isInitialLoad),
244
+ onSaveSettings: (newState, oldState, context) => this.onSaveSettings({ context, newState, oldState }),
245
+ pluginSettingsComponent: this.pluginSettingsComponent
246
+ });
247
+ }
248
+ /**
249
+ * Binds a value component to a plugin setting.
250
+ *
251
+ * @typeParam UIValue - The type of the value of the UI component.
252
+ * @typeParam TValueComponent - The type of the value component.
253
+ * @typeParam PropertyName - The property name of the plugin settings to bind to.
254
+ * @param params - The params for binding the value component.
255
+ * @returns The value component.
256
+ */
257
+ bind(params) {
258
+ const {
259
+ propertyName,
260
+ valueComponent,
261
+ ...options
262
+ } = params;
263
+ const DEFAULT_OPTIONS = {
264
+ componentToPluginSettingsValueConverter: (value) => value,
265
+ onChanged: import_function.noop,
266
+ pluginSettingsToComponentValueConverter: (value) => value,
267
+ shouldResetSettingWhenComponentIsEmpty: true,
268
+ shouldShowPlaceholderForDefaultValues: true,
269
+ shouldShowValidationMessage: true
270
+ };
271
+ const optionsExtension = { ...DEFAULT_OPTIONS, ...options };
272
+ const validatorEl = (0, import_validator_component.getValidatorComponent)(valueComponent)?.validatorEl;
273
+ const textBasedComponent = (0, import_text_based_component.getTextBasedComponentValue)(valueComponent);
274
+ const readonlyValue = this.getPluginSettingsProperty(propertyName);
275
+ const defaults = this.pluginSettingsComponent.defaultSettings;
276
+ const defaultValue = defaults[propertyName];
277
+ const defaultComponentValue = optionsExtension.pluginSettingsToComponentValueConverter(defaultValue);
278
+ textBasedComponent?.setPlaceholderValue(defaultComponentValue);
279
+ let validationMessage;
280
+ let tooltipEl = null;
281
+ let tooltipContentEl = null;
282
+ if (validatorEl) {
283
+ const wrapper = (0, import_setting_component_wrapper.ensureWrapped)(validatorEl);
284
+ tooltipEl = wrapper.createDiv();
285
+ (0, import_plugin_context.addPluginCssClasses)(tooltipEl, [import_css_class.CssClass.Tooltip, import_css_class.CssClass.TooltipValidator]);
286
+ tooltipContentEl = tooltipEl.createSpan();
287
+ const tooltipArrowEl = tooltipEl.createDiv();
288
+ (0, import_plugin_context.addPluginCssClasses)(tooltipArrowEl, import_css_class.CssClass.TooltipArrow);
289
+ tooltipEl.hide();
290
+ wrapper.append(tooltipEl);
291
+ }
292
+ (0, import_async_events_component.registerAsyncEvent)(
293
+ this.getRenderComponent(),
294
+ this.on("validationMessageChanged", (anotherPropertyName, anotherValidationMessage) => {
295
+ if (propertyName !== anotherPropertyName) {
296
+ return;
297
+ }
298
+ validationMessage = anotherValidationMessage;
299
+ updateValidatorElementDebounced();
300
+ })
301
+ );
302
+ let shouldEmptyOnBlur = false;
303
+ let shouldRevertToDefaultValueOnBlur = false;
304
+ if (textBasedComponent && optionsExtension.shouldShowPlaceholderForDefaultValues && (0, import_object_utils.isDeepEqual)(readonlyValue, defaultValue)) {
305
+ textBasedComponent.empty();
306
+ } else {
307
+ valueComponent.setValue(optionsExtension.pluginSettingsToComponentValueConverter(readonlyValue));
308
+ }
309
+ let shouldSkipOnChange = false;
310
+ const UPDATE_VALIDATOR_EL_TIMEOUT_IN_MILLISECONDS = 100;
311
+ const updateValidatorElementDebounced = (0, import_obsidian.debounce)(() => {
312
+ window.requestAnimationFrame(() => {
313
+ updateValidatorEl();
314
+ });
315
+ }, UPDATE_VALIDATOR_EL_TIMEOUT_IN_MILLISECONDS);
316
+ valueComponent.onChange((0, import_async.convertAsyncToSync)(async (uiValue) => {
317
+ if (shouldSkipOnChange) {
318
+ shouldSkipOnChange = false;
319
+ return;
320
+ }
321
+ shouldEmptyOnBlur = false;
322
+ const oldValue = this.getPluginSettingsProperty(propertyName);
323
+ let newValue;
324
+ let shouldSetProperty = true;
325
+ shouldRevertToDefaultValueOnBlur = !!textBasedComponent?.isEmpty() && optionsExtension.shouldResetSettingWhenComponentIsEmpty;
326
+ if (shouldRevertToDefaultValueOnBlur) {
327
+ newValue = defaultValue;
328
+ } else {
329
+ const convertedValue = optionsExtension.componentToPluginSettingsValueConverter(uiValue);
330
+ if ((0, import_validation.isValidationMessageHolder)(convertedValue)) {
331
+ validationMessage = convertedValue.validationMessage;
332
+ shouldSetProperty = false;
333
+ } else {
334
+ newValue = convertedValue;
335
+ }
336
+ }
337
+ if (shouldSetProperty) {
338
+ validationMessage = await this.pluginSettingsComponent.setProperty(propertyName, newValue);
339
+ if (textBasedComponent && optionsExtension.shouldShowPlaceholderForDefaultValues && !textBasedComponent.isEmpty() && (0, import_object_utils.isDeepEqual)(newValue, defaultValue)) {
340
+ shouldEmptyOnBlur = true;
341
+ }
342
+ }
343
+ updateValidatorElementDebounced();
344
+ if (shouldSetProperty) {
345
+ await optionsExtension.onChanged(newValue, oldValue);
346
+ }
347
+ this.saveSettingsDebounced();
348
+ }));
349
+ validatorEl?.addEventListener("focus", () => {
350
+ updateValidatorElementDebounced();
351
+ });
352
+ validatorEl?.addEventListener("blur", () => {
353
+ updateValidatorElementDebounced();
354
+ });
355
+ validatorEl?.addEventListener("click", () => {
356
+ window.requestAnimationFrame(() => {
357
+ updateValidatorElementDebounced();
358
+ });
359
+ });
360
+ const validationMessages = this.pluginSettingsComponent.settingsState.validationMessages;
361
+ validationMessage = validationMessages[propertyName] ?? "";
362
+ updateValidatorElementDebounced();
363
+ return valueComponent;
364
+ function updateValidatorEl() {
365
+ if (!validatorEl?.isActiveElement()) {
366
+ if (shouldEmptyOnBlur) {
367
+ shouldEmptyOnBlur = false;
368
+ if (!textBasedComponent?.isEmpty()) {
369
+ shouldSkipOnChange = true;
370
+ textBasedComponent?.empty();
371
+ }
372
+ } else if (shouldRevertToDefaultValueOnBlur) {
373
+ shouldRevertToDefaultValueOnBlur = false;
374
+ if (textBasedComponent?.isEmpty()) {
375
+ shouldSkipOnChange = true;
376
+ valueComponent.setValue(defaultComponentValue);
377
+ }
378
+ }
379
+ }
380
+ if (!validatorEl) {
381
+ return;
382
+ }
383
+ (0, import_type_guards.assertNonNullable)(tooltipContentEl);
384
+ if (validationMessage === "") {
385
+ validatorEl.setCustomValidity("");
386
+ validatorEl.checkValidity();
387
+ validationMessage = validatorEl.validationMessage;
388
+ }
389
+ validatorEl.setCustomValidity(validationMessage);
390
+ if (optionsExtension.shouldShowValidationMessage) {
391
+ tooltipContentEl.textContent = validationMessage;
392
+ tooltipEl?.toggle(!!validationMessage);
393
+ } else if (validationMessage) {
394
+ (0, import_obsidian.setTooltip)(validatorEl, validationMessage);
395
+ }
396
+ }
397
+ }
398
+ /**
399
+ * Renders the plugin settings tab.
400
+ */
401
+ display() {
402
+ this.displayLegacy();
403
+ }
404
+ /**
405
+ * Legacy way to render the plugin settings tab imperatively.
406
+ *
407
+ * The pre-declarative fallback: Obsidian only calls it when {@link getSettingDefinitions} returns an empty
408
+ * array, i.e. when the consumer has not overridden {@link getSettingDefinitionItems}. Such a consumer
409
+ * overrides this method and builds the UI with {@link SettingEx} and {@link bind}.
410
+ */
411
+ displayLegacy() {
412
+ this.beginRenderCycle();
413
+ this.containerEl.empty();
414
+ }
415
+ /**
416
+ * Reads the value backing a native `control` setting definition.
417
+ *
418
+ * Obsidian calls it on every render of a `control`-type definition. The inherited implementation reads
419
+ * `plugin.settings`, which a plugin built on {@link PluginSettingsComponentBase} never populates, so it is
420
+ * routed to the settings component instead.
421
+ *
422
+ * @param key - The settings property name.
423
+ * @returns The current value.
424
+ */
425
+ getControlValue(key) {
426
+ return this.getPluginSettingsProperty((0, import_object_utils.castTo)(key));
427
+ }
428
+ /**
429
+ * Returns the declarative setting definitions rendered by Obsidian 1.13+.
430
+ *
431
+ * Delegates to {@link getSettingDefinitionItems}. When a consumer has not overridden that hook it returns
432
+ * an empty array, and Obsidian falls back to the imperative {@link displayLegacy} path.
433
+ *
434
+ * @returns The setting definitions.
435
+ */
436
+ getSettingDefinitions() {
437
+ return this.getSettingDefinitionItems();
438
+ }
439
+ /**
440
+ * Hides the plugin settings tab.
441
+ */
442
+ hide() {
443
+ super.hide();
444
+ this.saveSettingsDebounced.cancel();
445
+ this._isOpen = false;
446
+ this.endRenderCycle();
447
+ this.component.unload();
448
+ (0, import_async.invokeAsyncSafely)(() => this.hideAsync());
449
+ }
450
+ /**
451
+ * Async actions to perform when the settings tab is being hidden.
452
+ *
453
+ * @returns A {@link Promise} that resolves when the settings tab is hidden.
454
+ */
455
+ async hideAsync() {
456
+ await this.pluginSettingsComponent.saveToFile(SAVE_TO_FILE_CONTEXT);
457
+ }
458
+ /**
459
+ * Re-renders the settings tab after the underlying state changed.
460
+ *
461
+ * Rebuilds the definitions and re-renders, which covers both paths: Obsidian renders the declarative
462
+ * definitions when {@link getSettingDefinitionItems} provides them, and falls back to
463
+ * {@link displayLegacy} when it does not. Nothing is rendered while the tab is not the one on screen.
464
+ *
465
+ * Use it only for changes that alter the STRUCTURE of the tab — rows added or removed. When only a
466
+ * {@link PluginSettingsTabBaseSettingExParams.disabled} / {@link PluginSettingsTabBaseSettingExParams.visible}
467
+ * predicate has to be re-evaluated, call the much cheaper {@link refreshDomState} instead, which toggles the
468
+ * rendered DOM in place.
469
+ */
470
+ refresh() {
471
+ this.update();
472
+ }
473
+ /**
474
+ * Persists the value of a native `control` setting definition.
475
+ *
476
+ * The counterpart of {@link getControlValue}: it routes the write to the settings component instead of the
477
+ * inherited `plugin.saveData` path, so validation, transformers and the debounced save all apply as they do
478
+ * for a {@link bind}-ed component.
479
+ *
480
+ * @param key - The settings property name.
481
+ * @param value - The value to persist.
482
+ * @returns A {@link Promise} that resolves when the value is set.
483
+ */
484
+ async setControlValue(key, value) {
485
+ await this.pluginSettingsComponent.setProperty((0, import_object_utils.castTo)(key), (0, import_object_utils.castTo)(value));
486
+ this.saveSettingsDebounced();
487
+ }
488
+ /**
489
+ * Shows the plugin settings tab.
490
+ */
491
+ show() {
492
+ this.app.setting.openTab(this);
493
+ }
494
+ /**
495
+ * The declarative setting definitions for the tab (Obsidian 1.13+).
496
+ *
497
+ * Consumers override this, typically building each row with {@link settingEx} and {@link bind} and grouping
498
+ * them with `settingGroupEx`. Returning an empty array — the default — makes Obsidian fall back to the
499
+ * imperative {@link displayLegacy} path.
500
+ *
501
+ * MUST be a pure builder. Obsidian calls it when the tab is registered (`addSettingTab`), long before the
502
+ * tab is ever opened, in order to index the settings for search. Anything with a side effect belongs inside
503
+ * a row's {@link PluginSettingsTabBaseSettingExParams.render} callback, which runs only when the row is
504
+ * actually rendered.
505
+ *
506
+ * @returns The setting definitions.
507
+ */
508
+ getSettingDefinitionItems() {
509
+ return [];
510
+ }
511
+ /**
512
+ * Called when the plugin settings are loaded.
513
+ *
514
+ * @param _loadedState - The loaded settings state.
515
+ * @param _isInitialLoad - Whether the settings are being loaded for the first time.
516
+ * @returns A {@link Promise} that resolves when the settings are loaded.
517
+ */
518
+ async onLoadSettings(_loadedState, _isInitialLoad) {
519
+ this.refresh();
520
+ await (0, import_function.noopAsync)();
521
+ }
522
+ /**
523
+ * Revalidates the settings.
524
+ *
525
+ * @returns A {@link Promise} that resolves when the settings are revalidated.
526
+ */
527
+ async revalidate() {
528
+ const validationMessages = await this.pluginSettingsComponent.revalidate();
529
+ await this.updateValidations(validationMessages);
530
+ }
531
+ /**
532
+ * Builds a search-indexable declarative row that is rendered imperatively.
533
+ *
534
+ * The bridge between the declarative API and this library's imperative building blocks: Obsidian owns the row (so it
535
+ * indexes it for search and evaluates its {@link PluginSettingsTabBaseSettingExParams.visible} /
536
+ * {@link PluginSettingsTabBaseSettingExParams.disabled} predicates on every
537
+ * {@link refreshDomState}), while {@link PluginSettingsTabBaseSettingExParams.render} fills it in with
538
+ * {@link SettingEx} adders and {@link bind} exactly as an imperative tab would.
539
+ *
540
+ * @param params - The row params.
541
+ * @returns The setting definition.
542
+ */
543
+ settingEx(params) {
544
+ return (0, import_object_utils.normalizeOptionalProperties)({
545
+ aliases: params.aliases,
546
+ desc: params.desc,
547
+ disabled: params.disabled,
548
+ name: params.name,
549
+ render: (setting, group) => this.renderSettingEx({ group, setting, settingExParams: params }),
550
+ searchable: params.searchable,
551
+ visible: params.visible
552
+ });
553
+ }
554
+ /**
555
+ * Builds a declarative heading group.
556
+ *
557
+ * The declarative counterpart of `SettingGroupEx`: where that class appends a group to a container
558
+ * imperatively, this returns the definition Obsidian renders, so a group-structured tab keeps its shape
559
+ * after the migration.
560
+ *
561
+ * @param params - The group params.
562
+ * @returns The group definition.
563
+ */
564
+ settingGroupEx(params) {
565
+ return (0, import_object_utils.normalizeOptionalProperties)({
566
+ ...params,
567
+ type: "group"
568
+ });
569
+ }
570
+ beginRenderCycle() {
571
+ this.endRenderCycle();
572
+ this.currentRenderComponent = this.createRenderComponent();
573
+ }
574
+ createRenderComponent() {
575
+ this._isOpen = true;
576
+ this.component.load();
577
+ return this.component.addChild(new import_component_ex.ComponentEx());
578
+ }
579
+ endRenderCycle() {
580
+ const renderComponent = this.currentRenderComponent;
581
+ if (!renderComponent) {
582
+ return;
583
+ }
584
+ this.currentRenderComponent = null;
585
+ this.component.removeChild(renderComponent);
586
+ }
587
+ getPluginSettingsProperty(propertyName) {
588
+ const settings = this.pluginSettings;
589
+ return settings[propertyName];
590
+ }
591
+ getRenderComponent() {
592
+ this.currentRenderComponent ??= this.createRenderComponent();
593
+ return this.currentRenderComponent;
594
+ }
595
+ async onSaveSettings(params) {
596
+ const {
597
+ context,
598
+ newState,
599
+ oldState: _oldState
600
+ } = params;
601
+ if (context === SAVE_TO_FILE_CONTEXT) {
602
+ await this.updateValidations(newState.validationMessages);
603
+ return;
604
+ }
605
+ this.refresh();
606
+ }
607
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- Mirrors Obsidian's `SettingDefinitionRender.render`, whose cleanup function is optional.
608
+ renderSettingEx(params) {
609
+ const rowComponent = this.createRenderComponent();
610
+ const previousRenderComponent = this.currentRenderComponent;
611
+ this.currentRenderComponent = rowComponent;
612
+ try {
613
+ const cleanup = params.settingExParams.render((0, import_setting_ex.adoptSettingEx)(params.setting), params.group);
614
+ return () => {
615
+ if (typeof cleanup === "function") {
616
+ cleanup();
617
+ }
618
+ this.component.removeChild(rowComponent);
619
+ };
620
+ } finally {
621
+ this.currentRenderComponent = previousRenderComponent;
622
+ }
623
+ }
624
+ async updateValidations(validationMessages) {
625
+ for (const [propertyName, validationMessage] of Object.entries(validationMessages)) {
626
+ await this.triggerAsync("validationMessageChanged", propertyName, validationMessage);
627
+ }
628
+ }
629
+ }
630
+ // Annotate the CommonJS export names for ESM import in node:
631
+ 0 && (module.exports = {
632
+ PluginSettingsTabBase,
633
+ SAVE_TO_FILE_CONTEXT
634
+ });
635
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tc2V0dGluZ3MtdGFiLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVib3VuY2VyLFxuICBQbHVnaW4sXG4gIFNldHRpbmcsXG4gIFNldHRpbmdEZWZpbml0aW9uR3JvdXAsXG4gIFNldHRpbmdEZWZpbml0aW9uSXRlbSxcbiAgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIsXG4gIFNldHRpbmdHcm91cFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIENvbmRpdGlvbmFsS2V5cyxcbiAgRXhjZXB0LFxuICBQcm9taXNhYmxlLFxuICBSZWFkb25seURlZXBcbn0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgbWl4aW5Bc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgUGx1Z2luU2V0dGluZ1RhYixcbiAgc2V0VG9vbHRpcFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGVcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsdWUtY29tcG9uZW50LXdpdGgtY2hhbmdlLXRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0V4IH0gZnJvbSAnLi4vc2V0dGluZy1leC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi50cyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGVuc3VyZVdyYXBwZWQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnQtd3JhcHBlci50cyc7XG5pbXBvcnQgeyBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSB9IGZyb20gJy4uL3NldHRpbmctY29tcG9uZW50cy90ZXh0LWJhc2VkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsaWRhdG9yLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBhZG9wdFNldHRpbmdFeCB9IGZyb20gJy4uL3NldHRpbmctZXgudHMnO1xuaW1wb3J0IHsgaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB9IGZyb20gJy4uL3ZhbGlkYXRpb24udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIEEgY29udGV4dCBwYXNzZWQgdG8gdGhlIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uuc2F2ZVRvRmlsZX0gbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgU0FWRV9UT19GSUxFX0NPTlRFWFQgPSAnUGx1Z2luU2V0dGluZ3NUYWInO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2VkPzogKG5ld1ZhbHVlOiBSZWFkb25seURlZXA8VD4sIG9sZFZhbHVlOiBSZWFkb25seURlZXA8VD4pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHNldHRpbmcgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGVtcHR5LlxuICAgKiBBcHBsaWNhYmxlIG9ubHkgdG8gdGV4dC1iYXNlZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBwbGFjZWhvbGRlciBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gICAqIEFwcGxpY2FibGUgb25seSB0byB0ZXh0LWJhc2VkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgb3B0aW9ucyBmb3IgYFBsdWdpblNldHRpbmdzVGFiQmFzZS5iaW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZSBiZWluZyBib3VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uc0V4dGVuZGVkPFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgVUlWYWx1ZSxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdIHwgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPikgPT4gVUlWYWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0gd2l0aCB2YWx1ZSBjb252ZXJ0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lIGJlaW5nIGJvdW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZUJpbmRFeHRlbmRlZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLmJpbmR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudFxuPiBleHRlbmRzIEJpbmRPcHRpb25zPFVJVmFsdWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IENvbmRpdGlvbmFsS2V5czxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT47XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gYmluZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpbnN0YW5jZSAobmVlZGVkIGJ5IE9ic2lkaWFuJ3MgUGx1Z2luU2V0dGluZ1RhYikuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nRXh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlYXJjaCB0ZXJtcyBmb3IgdGhlIHNldHRpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2V0dGluZy4gVXNlZCBmb3IgcmVuZGVyaW5nOyB0aGUgdGV4dCBjb250ZW50IG9mIGEgZnJhZ21lbnQgaXMgdXNlZCBmb3Igc2VhcmNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzYz86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNldHRpbmcgcm93IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGZvcm0gaXMgcmUtZXZhbHVhdGVkIG9uIGV2ZXJ5IHJlbmRlciBBTkQgb24gZXZlcnkge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZWZyZXNoRG9tU3RhdGV9XG4gICAqIGNhbGwsIHNvIGl0IGNhbiByZWZsZWN0IHJ1bnRpbWUgc3RhdGUuIE9ic2lkaWFuIGFwcGxpZXMgaXQgd2l0aCBgU2V0dGluZy5zZXREaXNhYmxlZGAsIHdoaWNoIGRpc2FibGVzIHRoZVxuICAgKiByb3cgYW5kIGV2ZXJ5IGNvbXBvbmVudCByZWdpc3RlcmVkIG9uIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzZXR0aW5nLiBVc2VkIGZvciByZW5kZXJpbmcgYW5kIHNlYXJjaC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc2V0dGluZyByb3cgaW1wZXJhdGl2ZWx5LCB0eXBpY2FsbHkgdmlhIHRoZSB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gICAqXG4gICAqIFRoZSBzZXR0aW5nIE9ic2lkaWFuIGNyZWF0ZXMgZm9yIHRoZSByb3cgaXMgYWRvcHRlZCBpbnRvIGEge0BsaW5rIFNldHRpbmdFeH0gYmVmb3JlIGl0IGlzIGhhbmRlZCBvdmVyLCBzb1xuICAgKiBhbiBpbXBlcmF0aXZlIHJvdyBib2R5IGNhcnJpZXMgb3ZlciB1bmNoYW5nZWQuIE1heSByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLCBpbnZva2VkIGJlZm9yZSB0aGUgcm93IGlzXG4gICAqIHRvcm4gZG93biBvciByZS1yZW5kZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIGdyb3VwIC0gVGhlIGdyb3VwIHRoZSBzZXR0aW5nIGJlbG9uZ3MgdG8uXG4gICAqIEByZXR1cm5zIEFuIG9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcmVhZG9ubHkgcmVuZGVyOiAoc2V0dGluZzogU2V0dGluZ0V4LCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIGlzIGluY2x1ZGVkIGluIHRoZSBzZXR0aW5ncyBzZWFyY2guIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaGFibGU/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIHJvdyBpcyByZW5kZXJlZC4gQSBmdW5jdGlvbiBmb3JtIGlzIHJlLWV2YWx1YXRlZCBvbiBldmVyeSByZW5kZXIgYW5kIG9uXG4gICAqIGV2ZXJ5IHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UucmVmcmVzaERvbVN0YXRlfSBjYWxsLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2Uuc2V0dGluZ0dyb3VwRXh9LlxuICpcbiAqIEV2ZXJ5IG1lbWJlciBvZiB7QGxpbmsgU2V0dGluZ0RlZmluaXRpb25Hcm91cH0gZXhjZXB0IGl0cyBkaXNjcmltaW5hdG9yLCB3aGljaFxuICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nR3JvdXBFeH0gc2V0cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMgPSBFeGNlcHQ8U2V0dGluZ0RlZmluaXRpb25Hcm91cCwgJ3R5cGUnPjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSBVSSBjb21wb25lbnQncyB2YWx1ZS5cbiAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUgYmVpbmcgYm91bmQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+O1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXAge1xuICB2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQ6IFtwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZ107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5vblNhdmVTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZW5kZXJTZXR0aW5nRXh9LlxuICovXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlUmVuZGVyU2V0dGluZ0V4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBncm91cCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBncm91cDogU2V0dGluZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZyBPYnNpZGlhbiBjcmVhdGVkIGZvciB0aGUgcm93LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZztcblxuICAvKipcbiAgICogVGhlIHBhcmFtcyB0aGUgcm93IHdhcyBkZWNsYXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ0V4UGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBvbkxvYWRTZXR0aW5nczogKGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBpc0luaXRpYWxMb2FkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2F2ZVNldHRpbmdzOiAoXG4gICAgbmV3U3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncz47XG59XG5cbi8qKlxuICogT3ducyB0aGUgdGFiJ3Mgc3Vic2NyaXB0aW9ucyB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50LlxuICpcbiAqIFRoZSBzdWJzY3JpcHRpb25zIGxpdmUgaW4ge0BsaW5rIG9ubG9hZH0gcmF0aGVyIHRoYW4gYXQgZWFjaCByZW5kZXIsIHNvIHRoYXQgYSBsb2FkL3VubG9hZCBwYWlyIHJlZ2lzdGVyc1xuICogdGhlbSBleGFjdGx5IG9uY2UuIFJlZ2lzdGVyaW5nIHRoZW0gcGVyIHJlbmRlciBpbnN0ZWFkIHdvdWxkIGFjY3VtdWxhdGUgYSBmcmVzaCBwYWlyIG9uIGV2ZXJ5IHJlbmRlciBjeWNsZSxcbiAqIGJlY2F1c2Uge0BsaW5rIENvbXBvbmVudEV4LmxvYWR9IGVhcmx5LXJldHVybnMgb25jZSB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgbm90aGluZyByZXNldHMgaW4gYmV0d2Vlbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5jbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCdzIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgeyBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudCB9ID0gdGhpcy5wYXJhbXM7XG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMsIHBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpID0+IHRoaXMucGFyYW1zLm9uTG9hZFNldHRpbmdzKGxvYWRlZFN0YXRlLCBpc0luaXRpYWxMb2FkKSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5wYXJhbXMub25TYXZlU2V0dGluZ3MobmV3U3RhdGUsIG9sZFN0YXRlLCBjb250ZXh0KSkpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmdzIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBQcm92aWRlcyBhIG1ldGhvZCBmb3IgYmluZGluZyB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxpbmcgY2hhbmdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NUYWJCYXNlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8UGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXA+KCkoUGx1Z2luU2V0dGluZ1RhYikge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYiBpcyBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGlzIG9wZW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBtYW5hZ2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBBIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2F2ZVNldHRpbmdzRGVib3VuY2VUaW1lb3V0SW5NaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBERUZBVUxUID0gMjAwMDtcbiAgICByZXR1cm4gREVGQVVMVDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIGN1cnJlbnRSZW5kZXJDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZVNldHRpbmdzRGVib3VuY2VkOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuXG4gIHByaXZhdGUgZ2V0IHBsdWdpblNldHRpbmdzKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3M8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLmlucHV0VmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyRWwsIENzc0NsYXNzLlBsdWdpblNldHRpbmdzVGFiKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCA9IGRlYm91bmNlKFxuICAgICAgY29udmVydEFzeW5jVG9TeW5jKCgpID0+IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCkpLFxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICk7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+KHtcbiAgICAgIG9uTG9hZFNldHRpbmdzOiAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25Mb2FkU2V0dGluZ3MobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpLFxuICAgICAgb25TYXZlU2V0dGluZ3M6IChuZXdTdGF0ZSwgb2xkU3RhdGUsIGNvbnRleHQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25TYXZlU2V0dGluZ3MoeyBjb250ZXh0LCBuZXdTdGF0ZSwgb2xkU3RhdGUgfSksXG4gICAgICBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudFxuICA+KFxuICAgIHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kRXh0ZW5kZWRQYXJhbXM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudCwgUHJvcGVydHlOYW1lPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50LCBQcm9wZXJ0eU5hbWU+IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gYmluZCBvdmVybG9hZCBzaGFyZXMgdGhlIEJpbmQqIHBhcmFtIGZhbWlseS5cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICB2YWx1ZUNvbXBvbmVudCxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0gcGFyYW1zO1xuICAgIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0ge1xuICAgICAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodmFsdWU6IFVJVmFsdWUpOiBQcm9wZXJ0eVR5cGUgPT4gdmFsdWUgYXMgUHJvcGVydHlUeXBlLFxuICAgICAgb25DaGFuZ2VkOiBub29wLFxuICAgICAgcGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyOiAodmFsdWU6IFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+KTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgICAgc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk6IHRydWUsXG4gICAgICBzaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzOiB0cnVlLFxuICAgICAgc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNFeHRlbnNpb246IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckVsID0gZ2V0VmFsaWRhdG9yQ29tcG9uZW50KHZhbHVlQ29tcG9uZW50KT8udmFsaWRhdG9yRWw7XG5cbiAgICBjb25zdCB0ZXh0QmFzZWRDb21wb25lbnQgPSBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSh2YWx1ZUNvbXBvbmVudCk7XG5cbiAgICBjb25zdCByZWFkb25seVZhbHVlID0gdGhpcy5nZXRQbHVnaW5TZXR0aW5nc1Byb3BlcnR5KHByb3BlcnR5TmFtZSk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LmRlZmF1bHRTZXR0aW5ncyBhcyBQbHVnaW5TZXR0aW5ncztcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdO1xuICAgIGNvbnN0IGRlZmF1bHRDb21wb25lbnRWYWx1ZSA9IG9wdGlvbnNFeHRlbnNpb24ucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKGRlZmF1bHRWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPik7XG4gICAgdGV4dEJhc2VkQ29tcG9uZW50Py5zZXRQbGFjZWhvbGRlclZhbHVlKGRlZmF1bHRDb21wb25lbnRWYWx1ZSk7XG5cbiAgICBsZXQgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgICBsZXQgdG9vbHRpcEVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCB0b29sdGlwQ29udGVudEVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh2YWxpZGF0b3JFbCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGVuc3VyZVdyYXBwZWQodmFsaWRhdG9yRWwpO1xuICAgICAgdG9vbHRpcEVsID0gd3JhcHBlci5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEVsLCBbQ3NzQ2xhc3MuVG9vbHRpcCwgQ3NzQ2xhc3MuVG9vbHRpcFZhbGlkYXRvcl0pO1xuICAgICAgdG9vbHRpcENvbnRlbnRFbCA9IHRvb2x0aXBFbC5jcmVhdGVTcGFuKCk7XG4gICAgICBjb25zdCB0b29sdGlwQXJyb3dFbCA9IHRvb2x0aXBFbC5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEFycm93RWwsIENzc0NsYXNzLlRvb2x0aXBBcnJvdyk7XG4gICAgICB0b29sdGlwRWwuaGlkZSgpO1xuICAgICAgd3JhcHBlci5hcHBlbmQodG9vbHRpcEVsKTtcbiAgICB9XG5cbiAgICByZWdpc3RlckFzeW5jRXZlbnQoXG4gICAgICB0aGlzLmdldFJlbmRlckNvbXBvbmVudCgpLFxuICAgICAgdGhpcy5vbigndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJywgKGFub3RoZXJQcm9wZXJ0eU5hbWUsIGFub3RoZXJWYWxpZGF0aW9uTWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSBhbm90aGVyUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhbm90aGVyVmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGxldCBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuICAgIGxldCBzaG91bGRSZXZlcnRUb0RlZmF1bHRWYWx1ZU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgaWYgKHRleHRCYXNlZENvbXBvbmVudCAmJiBvcHRpb25zRXh0ZW5zaW9uLnNob3VsZFNob3dQbGFjZWhvbGRlckZvckRlZmF1bHRWYWx1ZXMgJiYgaXNEZWVwRXF1YWwocmVhZG9ubHlWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgdGV4dEJhc2VkQ29tcG9uZW50LmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKG9wdGlvbnNFeHRlbnNpb24ucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKHJlYWRvbmx5VmFsdWUpKTtcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkU2tpcE9uQ2hhbmdlID0gZmFsc2U7XG4gICAgY29uc3QgVVBEQVRFX1ZBTElEQVRPUl9FTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDtcbiAgICBjb25zdCB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsKCk7XG4gICAgICB9KTtcbiAgICB9LCBVUERBVEVfVkFMSURBVE9SX0VMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHZhbHVlQ29tcG9uZW50Lm9uQ2hhbmdlKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAodWlWYWx1ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBPbkNoYW5nZSkge1xuICAgICAgICBzaG91bGRTa2lwT25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgbGV0IG5ld1ZhbHVlOiBQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2hvdWxkU2V0UHJvcGVydHkgPSB0cnVlO1xuICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSAhIXRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpICYmIG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk7XG4gICAgICBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IG9wdGlvbnNFeHRlbnNpb24uY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyKHVpVmFsdWUpO1xuICAgICAgICBpZiAoaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlcihjb252ZXJ0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGNvbnZlcnRlZFZhbHVlLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICAgIHNob3VsZFNldFByb3BlcnR5ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBjb252ZXJ0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkU2V0UHJvcGVydHkpIHtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbmV3VmFsdWUgYXMgUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSk7XG4gICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzICYmICF0ZXh0QmFzZWRDb21wb25lbnQuaXNFbXB0eSgpICYmIGlzRGVlcEVxdWFsKG5ld1ZhbHVlLCBkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIGlmIChzaG91bGRTZXRQcm9wZXJ0eSkge1xuICAgICAgICBhd2FpdCBvcHRpb25zRXh0ZW5zaW9uLm9uQ2hhbmdlZChuZXdWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPiwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZWQoKTtcbiAgICB9KSk7XG5cbiAgICB2YWxpZGF0b3JFbD8uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHZhbGlkYXRpb25NZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2VzW3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuXG4gICAgcmV0dXJuIHZhbHVlQ29tcG9uZW50O1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsaWRhdG9yRWwoKTogdm9pZCB7XG4gICAgICBpZiAoIXZhbGlkYXRvckVsPy5pc0FjdGl2ZUVsZW1lbnQoKSkge1xuICAgICAgICBpZiAoc2hvdWxkRW1wdHlPbkJsdXIpIHtcbiAgICAgICAgICBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKCF0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRleHRCYXNlZENvbXBvbmVudD8uZW1wdHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgICBzaG91bGRSZXZlcnRUb0RlZmF1bHRWYWx1ZU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBzaG91bGRTa2lwT25DaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgdmFsdWVDb21wb25lbnQuc2V0VmFsdWUoZGVmYXVsdENvbXBvbmVudFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0b3JFbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKHRvb2x0aXBDb250ZW50RWwpO1xuXG4gICAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2UgPT09ICcnKSB7XG4gICAgICAgIHZhbGlkYXRvckVsLnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICAgICAgdmFsaWRhdG9yRWwuY2hlY2tWYWxpZGl0eSgpO1xuICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IHZhbGlkYXRvckVsLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICB2YWxpZGF0b3JFbC5zZXRDdXN0b21WYWxpZGl0eSh2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBpZiAob3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgdG9vbHRpcENvbnRlbnRFbC50ZXh0Q29udGVudCA9IHZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICB0b29sdGlwRWw/LnRvZ2dsZSghIXZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgc2V0VG9vbHRpcCh2YWxpZGF0b3JFbCwgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5TGVnYWN5KCk7XG4gIH1cblxuICAvKipcbiAgICogTGVnYWN5IHdheSB0byByZW5kZXIgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIgaW1wZXJhdGl2ZWx5LlxuICAgKlxuICAgKiBUaGUgcHJlLWRlY2xhcmF0aXZlIGZhbGxiYWNrOiBPYnNpZGlhbiBvbmx5IGNhbGxzIGl0IHdoZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uc30gcmV0dXJucyBhbiBlbXB0eVxuICAgKiBhcnJheSwgaS5lLiB3aGVuIHRoZSBjb25zdW1lciBoYXMgbm90IG92ZXJyaWRkZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9LiBTdWNoIGEgY29uc3VtZXJcbiAgICogb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIGFuZCBidWlsZHMgdGhlIFVJIHdpdGgge0BsaW5rIFNldHRpbmdFeH0gYW5kIHtAbGluayBiaW5kfS5cbiAgICovXG4gIHB1YmxpYyBkaXNwbGF5TGVnYWN5KCk6IHZvaWQge1xuICAgIHRoaXMuYmVnaW5SZW5kZXJDeWNsZSgpO1xuICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgdmFsdWUgYmFja2luZyBhIG5hdGl2ZSBgY29udHJvbGAgc2V0dGluZyBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBPYnNpZGlhbiBjYWxscyBpdCBvbiBldmVyeSByZW5kZXIgb2YgYSBgY29udHJvbGAtdHlwZSBkZWZpbml0aW9uLiBUaGUgaW5oZXJpdGVkIGltcGxlbWVudGF0aW9uIHJlYWRzXG4gICAqIGBwbHVnaW4uc2V0dGluZ3NgLCB3aGljaCBhIHBsdWdpbiBidWlsdCBvbiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlfSBuZXZlciBwb3B1bGF0ZXMsIHNvIGl0IGlzXG4gICAqIHJvdXRlZCB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50IGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Q29udHJvbFZhbHVlKGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShjYXN0VG88U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlY2xhcmF0aXZlIHNldHRpbmcgZGVmaW5pdGlvbnMgcmVuZGVyZWQgYnkgT2JzaWRpYW4gMS4xMysuXG4gICAqXG4gICAqIERlbGVnYXRlcyB0byB7QGxpbmsgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtc30uIFdoZW4gYSBjb25zdW1lciBoYXMgbm90IG92ZXJyaWRkZW4gdGhhdCBob29rIGl0IHJldHVybnNcbiAgICogYW4gZW1wdHkgYXJyYXksIGFuZCBPYnNpZGlhbiBmYWxscyBiYWNrIHRvIHRoZSBpbXBlcmF0aXZlIHtAbGluayBkaXNwbGF5TGVnYWN5fSBwYXRoLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBkZWZpbml0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRTZXR0aW5nRGVmaW5pdGlvbnMoKTogU2V0dGluZ0RlZmluaXRpb25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdEZWZpbml0aW9uSXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBoaWRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmhpZGUoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZC5jYW5jZWwoKTtcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmVuZFJlbmRlckN5Y2xlKCk7XG4gICAgdGhpcy5jb21wb25lbnQudW5sb2FkKCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5oaWRlQXN5bmMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gdGhlIHNldHRpbmdzIHRhYiBpcyBiZWluZyBoaWRkZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgdGFiIGlzIGhpZGRlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoaWRlQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zYXZlVG9GaWxlKFNBVkVfVE9fRklMRV9DT05URVhUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1yZW5kZXJzIHRoZSBzZXR0aW5ncyB0YWIgYWZ0ZXIgdGhlIHVuZGVybHlpbmcgc3RhdGUgY2hhbmdlZC5cbiAgICpcbiAgICogUmVidWlsZHMgdGhlIGRlZmluaXRpb25zIGFuZCByZS1yZW5kZXJzLCB3aGljaCBjb3ZlcnMgYm90aCBwYXRoczogT2JzaWRpYW4gcmVuZGVycyB0aGUgZGVjbGFyYXRpdmVcbiAgICogZGVmaW5pdGlvbnMgd2hlbiB7QGxpbmsgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtc30gcHJvdmlkZXMgdGhlbSwgYW5kIGZhbGxzIGJhY2sgdG9cbiAgICoge0BsaW5rIGRpc3BsYXlMZWdhY3l9IHdoZW4gaXQgZG9lcyBub3QuIE5vdGhpbmcgaXMgcmVuZGVyZWQgd2hpbGUgdGhlIHRhYiBpcyBub3QgdGhlIG9uZSBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFVzZSBpdCBvbmx5IGZvciBjaGFuZ2VzIHRoYXQgYWx0ZXIgdGhlIFNUUlVDVFVSRSBvZiB0aGUgdGFiIFx1MjAxNCByb3dzIGFkZGVkIG9yIHJlbW92ZWQuIFdoZW4gb25seSBhXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMuZGlzYWJsZWR9IC8ge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy52aXNpYmxlfVxuICAgKiBwcmVkaWNhdGUgaGFzIHRvIGJlIHJlLWV2YWx1YXRlZCwgY2FsbCB0aGUgbXVjaCBjaGVhcGVyIHtAbGluayByZWZyZXNoRG9tU3RhdGV9IGluc3RlYWQsIHdoaWNoIHRvZ2dsZXMgdGhlXG4gICAqIHJlbmRlcmVkIERPTSBpbiBwbGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgdGhlIHZhbHVlIG9mIGEgbmF0aXZlIGBjb250cm9sYCBzZXR0aW5nIGRlZmluaXRpb24uXG4gICAqXG4gICAqIFRoZSBjb3VudGVycGFydCBvZiB7QGxpbmsgZ2V0Q29udHJvbFZhbHVlfTogaXQgcm91dGVzIHRoZSB3cml0ZSB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50IGluc3RlYWQgb2YgdGhlXG4gICAqIGluaGVyaXRlZCBgcGx1Z2luLnNhdmVEYXRhYCBwYXRoLCBzbyB2YWxpZGF0aW9uLCB0cmFuc2Zvcm1lcnMgYW5kIHRoZSBkZWJvdW5jZWQgc2F2ZSBhbGwgYXBwbHkgYXMgdGhleSBkb1xuICAgKiBmb3IgYSB7QGxpbmsgYmluZH0tZWQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwZXJzaXN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhbHVlIGlzIHNldC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBzZXRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHlwZSBQcm9wZXJ0eU5hbWUgPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPjtcbiAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KGNhc3RUbzxQcm9wZXJ0eU5hbWU+KGtleSksIGNhc3RUbzxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPih2YWx1ZSkpO1xuICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIuXG4gICAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW5UYWIodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlY2xhcmF0aXZlIHNldHRpbmcgZGVmaW5pdGlvbnMgZm9yIHRoZSB0YWIgKE9ic2lkaWFuIDEuMTMrKS5cbiAgICpcbiAgICogQ29uc3VtZXJzIG92ZXJyaWRlIHRoaXMsIHR5cGljYWxseSBidWlsZGluZyBlYWNoIHJvdyB3aXRoIHtAbGluayBzZXR0aW5nRXh9IGFuZCB7QGxpbmsgYmluZH0gYW5kIGdyb3VwaW5nXG4gICAqIHRoZW0gd2l0aCBgc2V0dGluZ0dyb3VwRXhgLiBSZXR1cm5pbmcgYW4gZW1wdHkgYXJyYXkgXHUyMDE0IHRoZSBkZWZhdWx0IFx1MjAxNCBtYWtlcyBPYnNpZGlhbiBmYWxsIGJhY2sgdG8gdGhlXG4gICAqIGltcGVyYXRpdmUge0BsaW5rIGRpc3BsYXlMZWdhY3l9IHBhdGguXG4gICAqXG4gICAqIE1VU1QgYmUgYSBwdXJlIGJ1aWxkZXIuIE9ic2lkaWFuIGNhbGxzIGl0IHdoZW4gdGhlIHRhYiBpcyByZWdpc3RlcmVkIChgYWRkU2V0dGluZ1RhYmApLCBsb25nIGJlZm9yZSB0aGVcbiAgICogdGFiIGlzIGV2ZXIgb3BlbmVkLCBpbiBvcmRlciB0byBpbmRleCB0aGUgc2V0dGluZ3MgZm9yIHNlYXJjaC4gQW55dGhpbmcgd2l0aCBhIHNpZGUgZWZmZWN0IGJlbG9uZ3MgaW5zaWRlXG4gICAqIGEgcm93J3Mge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy5yZW5kZXJ9IGNhbGxiYWNrLCB3aGljaCBydW5zIG9ubHkgd2hlbiB0aGUgcm93IGlzXG4gICAqIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBkZWZpbml0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zKCk6IFNldHRpbmdEZWZpbml0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2xvYWRlZFN0YXRlIC0gVGhlIGxvYWRlZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9pc0luaXRpYWxMb2FkIC0gV2hldGhlciB0aGUgc2V0dGluZ3MgYXJlIGJlaW5nIGxvYWRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIGxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRTZXR0aW5ncyhfbG9hZGVkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sIF9pc0luaXRpYWxMb2FkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2YWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSByZXZhbGlkYXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlcyA9IGF3YWl0IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQucmV2YWxpZGF0ZSgpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlVmFsaWRhdGlvbnModmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBzZWFyY2gtaW5kZXhhYmxlIGRlY2xhcmF0aXZlIHJvdyB0aGF0IGlzIHJlbmRlcmVkIGltcGVyYXRpdmVseS5cbiAgICpcbiAgICogVGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBkZWNsYXJhdGl2ZSBBUEkgYW5kIHRoaXMgbGlicmFyeSdzIGltcGVyYXRpdmUgYnVpbGRpbmcgYmxvY2tzOiBPYnNpZGlhbiBvd25zIHRoZSByb3cgKHNvIGl0XG4gICAqIGluZGV4ZXMgaXQgZm9yIHNlYXJjaCBhbmQgZXZhbHVhdGVzIGl0cyB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLnZpc2libGV9IC9cbiAgICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy5kaXNhYmxlZH0gcHJlZGljYXRlcyBvbiBldmVyeVxuICAgKiB7QGxpbmsgcmVmcmVzaERvbVN0YXRlfSksIHdoaWxlIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMucmVuZGVyfSBmaWxscyBpdCBpbiB3aXRoXG4gICAqIHtAbGluayBTZXR0aW5nRXh9IGFkZGVycyBhbmQge0BsaW5rIGJpbmR9IGV4YWN0bHkgYXMgYW4gaW1wZXJhdGl2ZSB0YWIgd291bGQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcm93IHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBzZXR0aW5nRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMpOiBTZXR0aW5nRGVmaW5pdGlvblJlbmRlciB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTZXR0aW5nRGVmaW5pdGlvblJlbmRlcj4oe1xuICAgICAgYWxpYXNlczogcGFyYW1zLmFsaWFzZXMsXG4gICAgICBkZXNjOiBwYXJhbXMuZGVzYyxcbiAgICAgIGRpc2FibGVkOiBwYXJhbXMuZGlzYWJsZWQsXG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIHJlbmRlcjogKHNldHRpbmc6IFNldHRpbmcsIGdyb3VwOiBTZXR0aW5nR3JvdXApID0+IHRoaXMucmVuZGVyU2V0dGluZ0V4KHsgZ3JvdXAsIHNldHRpbmcsIHNldHRpbmdFeFBhcmFtczogcGFyYW1zIH0pLFxuICAgICAgc2VhcmNoYWJsZTogcGFyYW1zLnNlYXJjaGFibGUsXG4gICAgICB2aXNpYmxlOiBwYXJhbXMudmlzaWJsZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGRlY2xhcmF0aXZlIGhlYWRpbmcgZ3JvdXAuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJhdGl2ZSBjb3VudGVycGFydCBvZiBgU2V0dGluZ0dyb3VwRXhgOiB3aGVyZSB0aGF0IGNsYXNzIGFwcGVuZHMgYSBncm91cCB0byBhIGNvbnRhaW5lclxuICAgKiBpbXBlcmF0aXZlbHksIHRoaXMgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBPYnNpZGlhbiByZW5kZXJzLCBzbyBhIGdyb3VwLXN0cnVjdHVyZWQgdGFiIGtlZXBzIGl0cyBzaGFwZVxuICAgKiBhZnRlciB0aGUgbWlncmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGdyb3VwIHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIGdyb3VwIGRlZmluaXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0dGluZ0dyb3VwRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nR3JvdXBFeFBhcmFtcyk6IFNldHRpbmdEZWZpbml0aW9uR3JvdXAge1xuICAgIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2V0dGluZ0RlZmluaXRpb25Hcm91cD4oe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgdHlwZTogJ2dyb3VwJ1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiZWdpblJlbmRlckN5Y2xlKCk6IHZvaWQge1xuICAgIHRoaXMuZW5kUmVuZGVyQ3ljbGUoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVJlbmRlckNvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZW5kZXJDb21wb25lbnQoKTogQ29tcG9uZW50RXgge1xuICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5jb21wb25lbnQubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5hZGRDaGlsZChuZXcgQ29tcG9uZW50RXgoKSk7XG4gIH1cblxuICBwcml2YXRlIGVuZFJlbmRlckN5Y2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudDtcbiAgICBpZiAoIXJlbmRlckNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IG51bGw7XG4gICAgdGhpcy5jb21wb25lbnQucmVtb3ZlQ2hpbGQocmVuZGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWVcbiAgKTogUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMucGx1Z2luU2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgcmV0dXJuIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gYXMgUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJDb21wb25lbnQoKTogQ29tcG9uZW50RXgge1xuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJDb21wb25lbnQoKTtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvblNhdmVTZXR0aW5ncyhwYXJhbXM6IFBsdWdpblNldHRpbmdzVGFiQmFzZU9uU2F2ZVNldHRpbmdzUGFyYW1zPFBsdWdpblNldHRpbmdzPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG9sZFN0YXRlOiBfb2xkU3RhdGVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmIChjb250ZXh0ID09PSBTQVZFX1RPX0ZJTEVfQ09OVEVYVCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWYWxpZGF0aW9ucyhuZXdTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgYXMgUmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUgLS0gTWlycm9ycyBPYnNpZGlhbidzIGBTZXR0aW5nRGVmaW5pdGlvblJlbmRlci5yZW5kZXJgLCB3aG9zZSBjbGVhbnVwIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLlxuICBwcml2YXRlIHJlbmRlclNldHRpbmdFeChwYXJhbXM6IFBsdWdpblNldHRpbmdzVGFiQmFzZVJlbmRlclNldHRpbmdFeFBhcmFtcyk6ICgoKSA9PiB2b2lkKSB8IHZvaWQge1xuICAgIGNvbnN0IHJvd0NvbXBvbmVudCA9IHRoaXMuY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk7XG4gICAgY29uc3QgcHJldmlvdXNSZW5kZXJDb21wb25lbnQgPSB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQ7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gcm93Q29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBwYXJhbXMuc2V0dGluZ0V4UGFyYW1zLnJlbmRlcihhZG9wdFNldHRpbmdFeChwYXJhbXMuc2V0dGluZyksIHBhcmFtcy5ncm91cCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW1vdmVDaGlsZChyb3dDb21wb25lbnQpO1xuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gcHJldmlvdXNSZW5kZXJDb21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVWYWxpZGF0aW9ucyh2YWxpZGF0aW9uTWVzc2FnZXM6IFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgdmFsaWRhdGlvbk1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRpb25NZXNzYWdlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJpZ2dlckFzeW5jKCd2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQnLCBwcm9wZXJ0eU5hbWUsIHZhbGlkYXRpb25NZXNzYWdlIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkEsbUJBR087QUFDUCwwQkFBaUM7QUFDakMsc0JBR087QUFDUCwwQkFJTztBQUNQLHlCQUFrQztBQUNsQyxzQkFJTztBQVdQLG9DQUFtQztBQUNuQywwQkFBNEI7QUFDNUIsdUJBQXlCO0FBQ3pCLHVDQUE4QjtBQUM5QixrQ0FBMkM7QUFDM0MsaUNBQXNDO0FBQ3RDLHdCQUErQjtBQUMvQix3QkFBMEM7QUFDMUMsNEJBQW9DO0FBSzdCLE1BQU0sdUJBQXVCO0FBNFNwQyxNQUFNLHlDQUF3RSxnQ0FBWTtBQUFBLEVBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEyRTtBQUM1RixVQUFNO0FBQ04sU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7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