obsidian-dev-utils 80.1.0 → 82.0.0-beta.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 (398) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/lib/cjs/abort-controller.cjs +12 -9
  3. package/dist/lib/cjs/abort-controller.d.cts +2 -2
  4. package/dist/lib/cjs/async-events.cjs +9 -1
  5. package/dist/lib/cjs/async-events.d.cts +9 -1
  6. package/dist/lib/cjs/async.cjs +93 -34
  7. package/dist/lib/cjs/async.d.cts +87 -17
  8. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -1
  9. package/dist/lib/cjs/css-class.cjs +6 -1
  10. package/dist/lib/cjs/css-class.d.cts +20 -0
  11. package/dist/lib/cjs/debug.cjs +26 -9
  12. package/dist/lib/cjs/debug.d.cts +24 -6
  13. package/dist/lib/cjs/disposable.cjs +234 -0
  14. package/dist/lib/cjs/disposable.d.cts +124 -0
  15. package/dist/lib/cjs/error.cjs +29 -18
  16. package/dist/lib/cjs/error.d.cts +23 -7
  17. package/dist/lib/cjs/function.d.cts +1 -1
  18. package/dist/lib/cjs/html-element.cjs +9 -6
  19. package/dist/lib/cjs/html-element.d.cts +5 -3
  20. package/dist/lib/cjs/index.cjs +4 -1
  21. package/dist/lib/cjs/index.d.cts +1 -0
  22. package/dist/lib/cjs/library.cjs +2 -2
  23. package/dist/lib/cjs/object-utils.cjs +233 -128
  24. package/dist/lib/cjs/object-utils.d.cts +38 -13
  25. package/dist/lib/cjs/obsidian/@types/dataview/api/plugin-api.d.cts +1 -1
  26. package/dist/lib/cjs/obsidian/@types/dataview/data-index/index.d.cts +1 -1
  27. package/dist/lib/cjs/obsidian/@types/dataview/data-model/markdown.d.cts +2 -2
  28. package/dist/lib/cjs/obsidian/@types/dataview/data-model/serialized/markdown.d.cts +2 -2
  29. package/dist/lib/cjs/obsidian/@types/dataview/index.d.cts +1 -1
  30. package/dist/lib/cjs/obsidian/@types/dataview/query/engine.d.cts +1 -1
  31. package/dist/lib/cjs/obsidian/@types/dataview/typings/obsidian-ex.d.cts +1 -1
  32. package/dist/lib/cjs/obsidian/@types/dataview/ui/lp-render.d.cts +1 -1
  33. package/dist/lib/cjs/obsidian/@types/dataview/ui/markdown.d.cts +1 -1
  34. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/calendar-view.d.cts +1 -1
  35. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/inline-view.d.cts +1 -1
  36. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/list-view.d.cts +2 -2
  37. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/table-view.d.cts +2 -2
  38. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/task-view.d.cts +1 -1
  39. package/dist/lib/cjs/obsidian/active-file-provider.d.cts +1 -1
  40. package/dist/lib/cjs/obsidian/app.d.cts +1 -1
  41. package/dist/lib/cjs/obsidian/async-with-notice.cjs +9 -6
  42. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +16 -3
  43. package/dist/lib/cjs/obsidian/attachment-path.cjs +45 -13
  44. package/dist/lib/cjs/obsidian/attachment-path.d.cts +47 -9
  45. package/dist/lib/cjs/obsidian/backlink.cjs +6 -6
  46. package/dist/lib/cjs/obsidian/backlink.d.cts +6 -2
  47. package/dist/lib/cjs/obsidian/bases-view-registrar.d.cts +1 -1
  48. package/dist/lib/cjs/obsidian/callout.cjs +1 -1
  49. package/dist/lib/cjs/obsidian/callout.d.cts +8 -0
  50. package/dist/lib/cjs/obsidian/case-insensitive-file-index.d.cts +1 -1
  51. package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +1 -1
  52. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +53 -16
  53. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +84 -10
  54. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +1 -1
  55. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +25 -5
  56. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +38 -2
  57. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +33 -19
  58. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +45 -19
  59. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +33 -19
  60. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +45 -19
  61. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +2 -2
  62. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +1 -1
  63. package/dist/lib/cjs/obsidian/command-registrar.d.cts +1 -1
  64. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +17 -9
  65. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +49 -9
  66. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +5 -2
  67. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.d.cts +1 -1
  68. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +5 -10
  69. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +0 -7
  70. package/dist/lib/cjs/obsidian/components/embed-extensions-component.d.cts +2 -2
  71. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +2 -2
  72. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +1 -1
  73. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +1 -1
  74. package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +1 -1
  75. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +1 -1
  76. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -2
  77. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +24 -8
  78. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +26 -5
  79. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +1 -1
  80. package/dist/lib/cjs/obsidian/components/registry-component.d.cts +1 -1
  81. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +195 -72
  82. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +4 -1
  83. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.d.cts +2 -2
  84. package/dist/lib/cjs/obsidian/data-handler.d.cts +1 -1
  85. package/dist/lib/cjs/obsidian/dataview-link.cjs +7 -2
  86. package/dist/lib/cjs/obsidian/dataview-link.d.cts +22 -5
  87. package/dist/lib/cjs/obsidian/dataview.cjs +27 -10
  88. package/dist/lib/cjs/obsidian/dataview.d.cts +32 -7
  89. package/dist/lib/cjs/obsidian/editor-extension-registrar.d.cts +1 -1
  90. package/dist/lib/cjs/obsidian/editor-lock.cjs +245 -0
  91. package/dist/lib/cjs/obsidian/editor-lock.d.cts +57 -0
  92. package/dist/lib/cjs/obsidian/editor.cjs +7 -1
  93. package/dist/lib/cjs/obsidian/editor.d.cts +3 -2
  94. package/dist/lib/cjs/obsidian/file-change.cjs +103 -27
  95. package/dist/lib/cjs/obsidian/file-change.d.cts +55 -14
  96. package/dist/lib/cjs/obsidian/file-manager.cjs +61 -32
  97. package/dist/lib/cjs/obsidian/file-manager.d.cts +65 -15
  98. package/dist/lib/cjs/obsidian/file-system.cjs +122 -23
  99. package/dist/lib/cjs/obsidian/file-system.d.cts +189 -40
  100. package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.d.cts +1 -1
  101. package/dist/lib/cjs/obsidian/frontmatter.cjs +7 -2
  102. package/dist/lib/cjs/obsidian/hover-link-source-registrar.d.cts +1 -1
  103. package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +1 -1
  104. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +4 -1
  105. package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +3 -0
  106. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +3 -0
  107. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  108. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  109. package/dist/lib/cjs/obsidian/link.cjs +326 -129
  110. package/dist/lib/cjs/obsidian/link.d.cts +133 -36
  111. package/dist/lib/cjs/obsidian/logger.cjs +48 -22
  112. package/dist/lib/cjs/obsidian/logger.d.cts +27 -6
  113. package/dist/lib/cjs/obsidian/loop.cjs +14 -4
  114. package/dist/lib/cjs/obsidian/loop.d.cts +27 -8
  115. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +2 -2
  116. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +155 -107
  117. package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +16 -6
  118. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +1 -1
  119. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +5 -3
  120. package/dist/lib/cjs/obsidian/markdown-view.d.cts +1 -1
  121. package/dist/lib/cjs/obsidian/markdown.cjs +40 -11
  122. package/dist/lib/cjs/obsidian/markdown.d.cts +85 -17
  123. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
  124. package/dist/lib/cjs/obsidian/metadata-cache.cjs +88 -32
  125. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +42 -32
  126. package/dist/lib/cjs/obsidian/modals/alert.cjs +1 -1
  127. package/dist/lib/cjs/obsidian/modals/alert.d.cts +2 -0
  128. package/dist/lib/cjs/obsidian/modals/confirm.cjs +1 -1
  129. package/dist/lib/cjs/obsidian/modals/confirm.d.cts +2 -0
  130. package/dist/lib/cjs/obsidian/modals/index.cjs +4 -1
  131. package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -0
  132. package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +234 -0
  133. package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +74 -0
  134. package/dist/lib/cjs/obsidian/modals/modal.d.cts +1 -1
  135. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -1
  136. package/dist/lib/cjs/obsidian/modals/prompt.d.cts +7 -1
  137. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -1
  138. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +2 -0
  139. package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.d.cts +2 -2
  140. package/dist/lib/cjs/obsidian/obsidian-settings.d.cts +1 -1
  141. package/dist/lib/cjs/obsidian/path-settings.cjs +5 -2
  142. package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +1 -1
  143. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +5 -1
  144. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +5 -1
  145. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +15 -7
  146. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +51 -14
  147. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +22 -16
  148. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +6 -6
  149. package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.d.cts +2 -2
  150. package/dist/lib/cjs/obsidian/queue.cjs +9 -7
  151. package/dist/lib/cjs/obsidian/queue.d.cts +15 -3
  152. package/dist/lib/cjs/obsidian/react/app-context.d.cts +1 -1
  153. package/dist/lib/cjs/obsidian/reference.d.cts +1 -1
  154. package/dist/lib/cjs/obsidian/resource-url.cjs +7 -2
  155. package/dist/lib/cjs/obsidian/resource-url.d.cts +20 -5
  156. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +1 -1
  157. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -1
  158. package/dist/lib/cjs/obsidian/setting-ex.d.cts +1 -1
  159. package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +4 -2
  160. package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +6 -2
  161. package/dist/lib/cjs/obsidian/vault-delete.cjs +19 -15
  162. package/dist/lib/cjs/obsidian/vault-delete.d.cts +12 -7
  163. package/dist/lib/cjs/obsidian/vault.cjs +116 -59
  164. package/dist/lib/cjs/obsidian/vault.d.cts +188 -45
  165. package/dist/lib/cjs/obsidian/view-registrar.d.cts +1 -1
  166. package/dist/lib/cjs/obsidian/workspace.d.cts +1 -1
  167. package/dist/lib/cjs/path.cjs +12 -5
  168. package/dist/lib/cjs/path.d.cts +15 -3
  169. package/dist/lib/cjs/reg-exp.cjs +101 -78
  170. package/dist/lib/cjs/script-utils/build.cjs +9 -5
  171. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +34 -14
  172. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -1
  173. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +20 -5
  174. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +24 -6
  175. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -1
  176. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +11 -4
  177. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +6 -2
  178. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -1
  179. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +31 -12
  180. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +20 -5
  181. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -7
  182. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +1 -1
  183. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +12 -3
  184. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  185. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.d.cts +1 -1
  186. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
  187. package/dist/lib/cjs/script-utils/check-project-types.cjs +5 -1
  188. package/dist/lib/cjs/script-utils/check-project-types.d.cts +10 -2
  189. package/dist/lib/cjs/script-utils/cli-utils.cjs +6 -2
  190. package/dist/lib/cjs/script-utils/cli-utils.d.cts +1 -1
  191. package/dist/lib/cjs/script-utils/commitlint-config.d.cts +1 -1
  192. package/dist/lib/cjs/script-utils/exec.cjs +47 -12
  193. package/dist/lib/cjs/script-utils/exec.d.cts +12 -0
  194. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
  195. package/dist/lib/cjs/script-utils/formatters/dprint.d.cts +2 -0
  196. package/dist/lib/cjs/script-utils/fs.d.cts +1 -1
  197. package/dist/lib/cjs/script-utils/json.cjs +9 -5
  198. package/dist/lib/cjs/script-utils/json.d.cts +41 -9
  199. package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +1 -1
  200. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -1
  201. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +8 -3
  202. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +1 -1
  203. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -1
  204. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +1 -1
  205. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +1 -1
  206. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +1 -1
  207. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -1
  208. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +27 -7
  209. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +1 -1
  210. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +7 -3
  211. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +1 -1
  212. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +8 -3
  213. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +1 -1
  214. package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.d.cts +2 -2
  215. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
  216. package/dist/lib/cjs/script-utils/linters/eslint.d.cts +2 -0
  217. package/dist/lib/cjs/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -1
  218. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
  219. package/dist/lib/cjs/script-utils/linters/markdownlint.d.cts +2 -0
  220. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +72 -30
  221. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +9 -1
  222. package/dist/lib/cjs/script-utils/npm-publish.cjs +2 -2
  223. package/dist/lib/cjs/script-utils/npm.cjs +18 -9
  224. package/dist/lib/cjs/script-utils/npm.d.cts +3 -1
  225. package/dist/lib/cjs/script-utils/root.cjs +20 -5
  226. package/dist/lib/cjs/script-utils/root.d.cts +45 -9
  227. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +1 -1
  228. package/dist/lib/cjs/script-utils/test-runners/vitest.d.cts +2 -0
  229. package/dist/lib/cjs/script-utils/validate-declarations.cjs +8 -44
  230. package/dist/lib/cjs/script-utils/validate-declarations.d.cts +22 -9
  231. package/dist/lib/cjs/script-utils/version.cjs +36 -19
  232. package/dist/lib/cjs/script-utils/version.d.cts +20 -7
  233. package/dist/lib/cjs/strict-proxy.cjs +10 -1
  234. package/dist/lib/cjs/string.cjs +63 -22
  235. package/dist/lib/cjs/string.d.cts +194 -40
  236. package/dist/lib/cjs/value-provider.d.cts +1 -1
  237. package/dist/lib/esm/abort-controller.d.mts +2 -2
  238. package/dist/lib/esm/abort-controller.mjs +12 -9
  239. package/dist/lib/esm/async-events.d.mts +8 -0
  240. package/dist/lib/esm/async-events.mjs +9 -1
  241. package/dist/lib/esm/async.d.mts +86 -16
  242. package/dist/lib/esm/async.mjs +93 -34
  243. package/dist/lib/esm/css-class.d.mts +20 -0
  244. package/dist/lib/esm/css-class.mjs +6 -1
  245. package/dist/lib/esm/debug.d.mts +23 -5
  246. package/dist/lib/esm/debug.mjs +26 -9
  247. package/dist/lib/esm/disposable.d.mts +124 -0
  248. package/dist/lib/esm/disposable.mjs +122 -0
  249. package/dist/lib/esm/error.d.mts +23 -7
  250. package/dist/lib/esm/error.mjs +29 -18
  251. package/dist/lib/esm/html-element.d.mts +4 -2
  252. package/dist/lib/esm/html-element.mjs +9 -6
  253. package/dist/lib/esm/index.d.mts +1 -0
  254. package/dist/lib/esm/index.mjs +3 -1
  255. package/dist/lib/esm/library.mjs +2 -2
  256. package/dist/lib/esm/object-utils.d.mts +37 -12
  257. package/dist/lib/esm/object-utils.mjs +233 -128
  258. package/dist/lib/esm/obsidian/async-with-notice.d.mts +15 -2
  259. package/dist/lib/esm/obsidian/async-with-notice.mjs +9 -6
  260. package/dist/lib/esm/obsidian/attachment-path.d.mts +46 -8
  261. package/dist/lib/esm/obsidian/attachment-path.mjs +45 -13
  262. package/dist/lib/esm/obsidian/backlink.d.mts +6 -2
  263. package/dist/lib/esm/obsidian/backlink.mjs +6 -6
  264. package/dist/lib/esm/obsidian/callout.d.mts +8 -0
  265. package/dist/lib/esm/obsidian/callout.mjs +1 -1
  266. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +83 -9
  267. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +53 -16
  268. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +37 -1
  269. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +25 -5
  270. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +43 -17
  271. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +33 -19
  272. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +43 -17
  273. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +33 -19
  274. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +48 -8
  275. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +17 -9
  276. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +5 -2
  277. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +0 -7
  278. package/dist/lib/esm/obsidian/components/disposable-component.mjs +3 -7
  279. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -2
  280. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +1 -1
  281. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +25 -4
  282. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +24 -8
  283. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
  284. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +197 -79
  285. package/dist/lib/esm/obsidian/dataview-link.d.mts +22 -5
  286. package/dist/lib/esm/obsidian/dataview-link.mjs +7 -2
  287. package/dist/lib/esm/obsidian/dataview.d.mts +31 -6
  288. package/dist/lib/esm/obsidian/dataview.mjs +27 -10
  289. package/dist/lib/esm/obsidian/editor-lock.d.mts +57 -0
  290. package/dist/lib/esm/obsidian/editor-lock.mjs +141 -0
  291. package/dist/lib/esm/obsidian/editor.d.mts +2 -1
  292. package/dist/lib/esm/obsidian/editor.mjs +7 -1
  293. package/dist/lib/esm/obsidian/file-change.d.mts +54 -13
  294. package/dist/lib/esm/obsidian/file-change.mjs +104 -27
  295. package/dist/lib/esm/obsidian/file-manager.d.mts +63 -13
  296. package/dist/lib/esm/obsidian/file-manager.mjs +65 -33
  297. package/dist/lib/esm/obsidian/file-system.d.mts +188 -39
  298. package/dist/lib/esm/obsidian/file-system.mjs +122 -23
  299. package/dist/lib/esm/obsidian/frontmatter.mjs +7 -2
  300. package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +3 -0
  301. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +4 -1
  302. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +3 -0
  303. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  304. package/dist/lib/esm/obsidian/index.mjs +3 -1
  305. package/dist/lib/esm/obsidian/link.d.mts +131 -34
  306. package/dist/lib/esm/obsidian/link.mjs +327 -130
  307. package/dist/lib/esm/obsidian/logger.d.mts +26 -5
  308. package/dist/lib/esm/obsidian/logger.mjs +48 -22
  309. package/dist/lib/esm/obsidian/loop.d.mts +26 -7
  310. package/dist/lib/esm/obsidian/loop.mjs +14 -4
  311. package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +15 -5
  312. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +155 -107
  313. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -1
  314. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +1 -1
  315. package/dist/lib/esm/obsidian/markdown.d.mts +84 -16
  316. package/dist/lib/esm/obsidian/markdown.mjs +40 -11
  317. package/dist/lib/esm/obsidian/metadata-cache.d.mts +40 -30
  318. package/dist/lib/esm/obsidian/metadata-cache.mjs +88 -30
  319. package/dist/lib/esm/obsidian/modals/alert.d.mts +2 -0
  320. package/dist/lib/esm/obsidian/modals/alert.mjs +1 -1
  321. package/dist/lib/esm/obsidian/modals/confirm.d.mts +2 -0
  322. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
  323. package/dist/lib/esm/obsidian/modals/index.d.mts +1 -0
  324. package/dist/lib/esm/obsidian/modals/index.mjs +3 -1
  325. package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +74 -0
  326. package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +126 -0
  327. package/dist/lib/esm/obsidian/modals/prompt.d.mts +6 -0
  328. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -1
  329. package/dist/lib/esm/obsidian/modals/select-item.d.mts +2 -0
  330. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -1
  331. package/dist/lib/esm/obsidian/path-settings.mjs +5 -2
  332. package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +4 -0
  333. package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +5 -1
  334. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +48 -11
  335. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +15 -7
  336. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +4 -4
  337. package/dist/lib/esm/obsidian/plugin/plugin.mjs +24 -21
  338. package/dist/lib/esm/obsidian/queue.d.mts +14 -2
  339. package/dist/lib/esm/obsidian/queue.mjs +9 -7
  340. package/dist/lib/esm/obsidian/resource-url.d.mts +19 -4
  341. package/dist/lib/esm/obsidian/resource-url.mjs +7 -2
  342. package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +6 -2
  343. package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +4 -2
  344. package/dist/lib/esm/obsidian/vault-delete.d.mts +11 -6
  345. package/dist/lib/esm/obsidian/vault-delete.mjs +19 -15
  346. package/dist/lib/esm/obsidian/vault.d.mts +187 -44
  347. package/dist/lib/esm/obsidian/vault.mjs +116 -59
  348. package/dist/lib/esm/path.d.mts +15 -3
  349. package/dist/lib/esm/path.mjs +12 -5
  350. package/dist/lib/esm/reg-exp.mjs +101 -78
  351. package/dist/lib/esm/script-utils/build.mjs +9 -5
  352. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +34 -14
  353. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +23 -5
  354. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +20 -5
  355. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +11 -4
  356. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +6 -2
  357. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +19 -4
  358. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +31 -12
  359. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +7 -7
  360. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +12 -3
  361. package/dist/lib/esm/script-utils/check-project-types.d.mts +9 -1
  362. package/dist/lib/esm/script-utils/check-project-types.mjs +5 -1
  363. package/dist/lib/esm/script-utils/cli-utils.mjs +6 -2
  364. package/dist/lib/esm/script-utils/exec.d.mts +12 -0
  365. package/dist/lib/esm/script-utils/exec.mjs +47 -12
  366. package/dist/lib/esm/script-utils/formatters/dprint.d.mts +2 -0
  367. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
  368. package/dist/lib/esm/script-utils/json.d.mts +40 -8
  369. package/dist/lib/esm/script-utils/json.mjs +9 -5
  370. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +8 -3
  371. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +27 -7
  372. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +7 -3
  373. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +8 -3
  374. package/dist/lib/esm/script-utils/linters/eslint.d.mts +2 -0
  375. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
  376. package/dist/lib/esm/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -1
  377. package/dist/lib/esm/script-utils/linters/markdownlint.d.mts +2 -0
  378. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
  379. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +8 -0
  380. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +72 -30
  381. package/dist/lib/esm/script-utils/npm-publish.mjs +2 -2
  382. package/dist/lib/esm/script-utils/npm.d.mts +2 -0
  383. package/dist/lib/esm/script-utils/npm.mjs +18 -9
  384. package/dist/lib/esm/script-utils/root.d.mts +45 -9
  385. package/dist/lib/esm/script-utils/root.mjs +20 -5
  386. package/dist/lib/esm/script-utils/test-runners/vitest.d.mts +2 -0
  387. package/dist/lib/esm/script-utils/test-runners/vitest.mjs +1 -1
  388. package/dist/lib/esm/script-utils/validate-declarations.d.mts +22 -9
  389. package/dist/lib/esm/script-utils/validate-declarations.mjs +8 -51
  390. package/dist/lib/esm/script-utils/version.d.mts +20 -7
  391. package/dist/lib/esm/script-utils/version.mjs +36 -19
  392. package/dist/lib/esm/strict-proxy.mjs +10 -1
  393. package/dist/lib/esm/string.d.mts +194 -40
  394. package/dist/lib/esm/string.mjs +63 -22
  395. package/dist/styles.css +5 -1
  396. package/obsidian/Modals/minimizable-modal/package.json +6 -0
  397. package/obsidian/editor-lock/package.json +6 -0
  398. package/package.json +9 -9
@@ -10,11 +10,19 @@
10
10
  * When upstream types are fixed, the `Ignored N diagnostic(s)` count drops to `0`, signalling the
11
11
  * workaround is no longer doing anything.
12
12
  */
13
- import type { CompilerOptions, Diagnostic } from 'typescript';
13
+ import type { CompilerOptions, Diagnostic } from 'typescript' with { 'resolution-mode': 'import' };
14
14
  /**
15
15
  * Parameters for {@link checkProjectTypes}.
16
16
  */
17
17
  export interface CheckProjectTypesParams {
18
+ /**
19
+ * When `true`, the ignored diagnostics (those dropped by {@link CheckProjectTypesParams.shouldKeepFile}
20
+ * or {@link CheckProjectTypesParams.shouldKeepDiagnostic}) are printed in full after the ignored
21
+ * count, so they can be inspected. When omitted or `false`, only the count is printed.
22
+ *
23
+ * @default `false`
24
+ */
25
+ readonly isVerbose?: boolean;
18
26
  /** Compiler options for the program. `skipLibCheck` is always forced to `false`. */
19
27
  readonly options: CompilerOptions;
20
28
  /** The root files to type-check. */
@@ -51,7 +59,7 @@ export interface ParsedTsConfig {
51
59
  * Type-checks a set of files with `skipLibCheck: false`, but reports only the diagnostics whose
52
60
  * source file passes `shouldKeepFile`. Diagnostics from files we do not control (e.g. broken
53
61
  * third-party `.d.ts` pulled in transitively) are dropped, while still being counted for
54
- * visibility.
62
+ * visibility. When `isVerbose` is set, the dropped diagnostics are also printed in full.
55
63
  *
56
64
  * @param params - The program inputs and the keep predicate.
57
65
  * @returns `true` when no reported diagnostic is an error, `false` otherwise.
@@ -279,7 +279,11 @@ function argvQuote(arg) {
279
279
  }
280
280
  const CMD_META_RE = /[()%!^"<>&|]/g;
281
281
  function cmdEscapeCommandLine(commandLine) {
282
- return (0, import_string.replaceAll)(commandLine, CMD_META_RE, "^$&");
282
+ return (0, import_string.replaceAll)({
283
+ replacer: "^$&",
284
+ searchValue: CMD_META_RE,
285
+ str: commandLine
286
+ });
283
287
  }
284
288
  async function wrapCliTask(taskFn) {
285
289
  (0, import_debug.enableLibraryDebuggers)();
@@ -301,4 +305,4 @@ async function wrapResult(taskFn) {
301
305
  toCommandLine,
302
306
  wrapCliTask
303
307
  });
304
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9jbGktdXRpbHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGFzayByZXN1bHRzLCBpbmNsdWRpbmdcbiAqIHN1Y2Nlc3MsIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyBtdWx0aXBsZSB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnLi4vZXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIGEgdGFzay4gSW5jbHVkZXMgbWV0aG9kcyBmb3IgaGFuZGxpbmcgc3VjY2VzcyxcbiAqIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogQ2hhaW5zIG11bHRpcGxlIHRhc2tzIHRvZ2V0aGVyLCBleGVjdXRpbmcgdGhlbSBzZXF1ZW50aWFsbHkgdW50aWwgb25lIGZhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFza3MgLSBBbiBhcnJheSBvZiB0YXNrIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlyc3QgZmFpbGVkIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBhIHN1Y2Nlc3MgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjaGFpbih0YXNrczogKCgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KVtdKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gICAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwUmVzdWx0KHRhc2spO1xuICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSB0aGF0IGRvZXMgbm90IGV4aXQgdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRG9Ob3RFeGl0KCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9Ob3RFeGl0VGFza1Jlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmFpbHVyZSByZXN1bHQgb2YgYSBDTEkgdGFzay5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZhaWx1cmUgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGYWlsdXJlKCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLlN1Y2Nlc3MoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gYmFzZWQgb24gYW4gZXhpdCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpdENvZGUgLSBUaGUgZXhpdCBjb2RlIHRvIHJlcHJlc2VudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEZyb21FeGl0Q29kZShleGl0Q29kZTogbnVtYmVyKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBFeGl0Q29kZVRhc2tSZXN1bHQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbGlUYXNrUmVzdWx0IHJlcHJlc2VudGluZyBhIHN1Y2Nlc3NmdWwgdGFzayByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBpc1N1Y2Nlc3MgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgQSBDbGlUYXNrUmVzdWx0IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdWNjZXNzZnVsIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBTdWNjZXNzKGlzU3VjY2VzcyA9IHRydWUpOiBDbGlUYXNrUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IFN1Y2Nlc3NUYXNrUmVzdWx0KGlzU3VjY2Vzcyk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3MgYmFzZWQgb24gdGhlIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGV4aXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSB0YXNrIHdhcyBub3Qgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyB0aHJvd09uRmFpbHVyZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFzayBmYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAqL1xuY2xhc3MgRG9Ob3RFeGl0VGFza1Jlc3VsdCBleHRlbmRzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogRG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBleGl0KCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IGJhc2VkIG9uIGFuIGV4aXQgY29kZS5cbiAqL1xuY2xhc3MgRXhpdENvZGVUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIHdpdGggdGhlIHNwZWNpZmllZCBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5leGl0Q29kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNTdWNjZXNzZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4aXRDb2RlID09PSAwO1xuICB9XG59XG5cbi8qKlxuICogQSB0YXNrIHJlc3VsdCBiYXNlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gKi9cbmNsYXNzIFN1Y2Nlc3NUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9pc1N1Y2Nlc3NmdWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIGJhc2VkIG9uIHRoZSBzdWNjZXNzIG9mIHRoZSB0YXNrLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGV4aXQoKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5leGl0KHRoaXMuX2lzU3VjY2Vzc2Z1bCA/IDAgOiAxKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VjY2Vzc2Z1bDtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBjb21tYW5kLWxpbmUgc3RyaW5nXG4gKiB1c2luZyB0aGUgYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAodGhlIHN0YW5kYXJkIHVzZWQgYnkgdGhlXG4gKiBNaWNyb3NvZnQgQyBydW50aW1lIGFuZCBtb3N0IFdpbmRvd3MgcHJvZ3JhbXMpLlxuICpcbiAqIEltcGxlbWVudHMgdGhlIEFyZ3ZRdW90ZSBhbGdvcml0aG0gZnJvbVxuICoge0BsaW5rIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9hcmNoaXZlL2Jsb2dzL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvZXZlcnlvbmUtcXVvdGVzLWNvbW1hbmQtbGluZS1hcmd1bWVudHMtdGhlLXdyb25nLXdheSB8IEV2ZXJ5b25lIHF1b3RlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRoZSB3cm9uZyB3YXl9OlxuICogYmFja3NsYXNoZXMgYmVmb3JlIHF1b3RlcyBhbmQgYXQgdGhlIGVuZCBvZiBhIHF1b3RlZCBhcmd1bWVudCBhcmUgZG91YmxlZC5cbiAqXG4gKiBUaGlzIHByb2R1Y2VzIGEgc2hlbGwtYWdub3N0aWMgY29tbWFuZCBsaW5lLiBDYWxsZXJzIHRoYXQgcm91dGUgdGhyb3VnaFxuICogYSBzcGVjaWZpYyBzaGVsbCAoY21kLmV4ZSwgUG93ZXJTaGVsbCwgc2gpIG11c3QgYXBwbHkgc2hlbGwtc3BlY2lmaWNcbiAqIGVzY2FwaW5nIG9uIHRvcCBcdTIwMTQgc2VlIHtAbGluayBjbWRFc2NhcGVDb21tYW5kTGluZX0uXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tbWFuZExpbmUoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4gYXJndlF1b3RlKGFyZykpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSBzaW5nbGUgYXJndW1lbnQgc28gdGhhdCBgQ29tbWFuZExpbmVUb0FyZ3ZXYCB3aWxsIGRlY29kZSBpdFxuICogdW5jaGFuZ2VkLiBJbXBsZW1lbnRzIHRoZSBBcmd2UXVvdGUgYWxnb3JpdGhtIGZyb21cbiAqIHtAbGluayBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vYXJjaGl2ZS9ibG9ncy90d2lzdHlsaXR0bGVwYXNzYWdlc2FsbGFsaWtlL2V2ZXJ5b25lLXF1b3Rlcy1jb21tYW5kLWxpbmUtYXJndW1lbnRzLXRoZS13cm9uZy13YXkgfCBFdmVyeW9uZSBxdW90ZXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0aGUgd3Jvbmcgd2F5fS5cbiAqXG4gKiBAcGFyYW0gYXJnIC0gVGhlIHJhdyBhcmd1bWVudCBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgcXVvdGVkIGFyZ3VtZW50IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXJndlF1b3RlKGFyZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGFyZy5sZW5ndGggPiAwICYmICEvW1xcc1xcdFxcblxcdlwiXS8udGVzdChhcmcpKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIGNvbnN0IEJBQ0tTTEFTSF9FU0NBUEVfRkFDVE9SID0gMjtcbiAgbGV0IHJlc3VsdCA9ICdcIic7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG51bUJhY2tzbGFzaGVzID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZy5sZW5ndGggJiYgYXJnW2ldID09PSAnXFxcXCcpIHtcbiAgICAgIGkrKztcbiAgICAgIG51bUJhY2tzbGFzaGVzKys7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IGFyZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSAnXFxcXCcucmVwZWF0KG51bUJhY2tzbGFzaGVzICogQkFDS1NMQVNIX0VTQ0FQRV9GQUNUT1IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgY2ggPSBhcmcuY2hhckF0KGkpO1xuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgcmVzdWx0ICs9IGAkeydcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMgKiBCQUNLU0xBU0hfRVNDQVBFX0ZBQ1RPUiArIDEpfVwiYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9ICdcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMpICsgY2g7XG4gICAgfVxuICB9XG5cbiAgcmVzdWx0ICs9ICdcIic7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogTWF0Y2hlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGBeYC1lc2NhcGVkLlxuICovXG5jb25zdCBDTURfTUVUQV9SRSA9IC9bKCklIV5cIjw+JnxdL2c7XG5cbi8qKlxuICogRXNjYXBlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgd2l0aCBgXmAgc28gdGhhdCBgY21kLmV4ZWAgcGFzc2VzIHRoZW1cbiAqIHRocm91Z2ggbGl0ZXJhbGx5LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBjbWQuZXhlYCdzIGBcImAgaGFuZGxpbmdcbiAqIGRpZmZlcnMgZnJvbSBgQ29tbWFuZExpbmVUb0FyZ3ZXYCBhbmQgY2Fubm90IGJlIHJlbGllZCB1cG9uLlxuICpcbiAqIEFwcGx5IHRoaXMgdG8gYSBjb21tYW5kIGxpbmUgc3RyaW5nIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB2aWEgYGNtZC5leGVgXG4gKiAoZS5nLiwgYHNwYXduKGNtZCwgW10sIHsgc2hlbGw6IHRydWUgfSlgIG9uIFdpbmRvd3MpLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kTGluZSAtIFRoZSBhbHJlYWR5LXF1b3RlZCBjb21tYW5kIGxpbmUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGFsbCBjbWQgbWV0YWNoYXJhY3RlcnMgYF5gLWVzY2FwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kTGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoY29tbWFuZExpbmUsIENNRF9NRVRBX1JFLCAnXiQmJyk7XG59XG5cbi8qKlxuICogV3JhcHMgYSBDTEkgdGFzayBmdW5jdGlvbiB0byBlbnN1cmUgaXQgcnVucyBzYWZlbHkgYW5kIGhhbmRsZXMgaXRzIHtAbGluayBDbGlUYXNrUmVzdWx0fS5cbiAqXG4gKiBAcGFyYW0gdGFza0ZuIC0gVGhlIHRhc2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSwgd2hpY2ggbWF5IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGVkIGFuZCBleGl0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cmFwQ2xpVGFzayh0YXNrRm46ICgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcFJlc3VsdCh0YXNrRm4pO1xuICByZXN1bHQuZXhpdCgpO1xufVxuXG4vKipcbiAqIFNhZmVseSBleGVjdXRlcyBhIHRhc2sgZnVuY3Rpb24gYW5kIHJldHVybnMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0uIElmIHRoZSB0YXNrIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvcixcbiAqIEFuIGVycm9yIGlzIGNhdWdodCwgYW5kIGEgZmFpbHVyZSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHRhc2tGbiAtIFRoZSB0YXNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBvdXRjb21lIG9mIHRoZSB0YXNrLlxuICovXG5hc3luYyBmdW5jdGlvbiB3cmFwUmVzdWx0KHRhc2tGbjogKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pOiBQcm9taXNlPENsaVRhc2tSZXN1bHQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHRhc2tGbigpKSBhcyBDbGlUYXNrUmVzdWx0IHwgdW5kZWZpbmVkID8/IENsaVRhc2tSZXN1bHQuU3VjY2VzcygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGFzayBleGVjdXRpb24nLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgcmV0dXJuIENsaVRhc2tSZXN1bHQuRmFpbHVyZSgpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsMEJBQW9CO0FBSXBCLG1CQUF1QztBQUN2QyxtQkFBMkI7QUFDM0Isc0JBQXFCO0FBQ3JCLG9CQUEyQjtBQU1wQixNQUFlLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9sQyxhQUFvQixNQUFNLE9BQWlGO0FBQ3pHLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFlBQU0sU0FBUyxNQUFNLFdBQVcsSUFBSTtBQUNwQyxVQUFJLENBQUMsT0FBTyxhQUFhLEdBQUc7QUFDMUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsV0FBTyxjQUFjLFFBQVE7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE9BQWMsWUFBMkI7QUFDdkMsV0FBTyxJQUFJLG9CQUFvQjtBQUFBLEVBQ2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxVQUF5QjtBQUNyQyxXQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsRUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsYUFBYSxVQUFpQztBQUMxRCxXQUFPLElBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN4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
308
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9jbGktdXRpbHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGFzayByZXN1bHRzLCBpbmNsdWRpbmdcbiAqIHN1Y2Nlc3MsIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyBtdWx0aXBsZSB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnLi4vZXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIGEgdGFzay4gSW5jbHVkZXMgbWV0aG9kcyBmb3IgaGFuZGxpbmcgc3VjY2VzcyxcbiAqIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogQ2hhaW5zIG11bHRpcGxlIHRhc2tzIHRvZ2V0aGVyLCBleGVjdXRpbmcgdGhlbSBzZXF1ZW50aWFsbHkgdW50aWwgb25lIGZhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFza3MgLSBBbiBhcnJheSBvZiB0YXNrIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlyc3QgZmFpbGVkIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBhIHN1Y2Nlc3MgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjaGFpbih0YXNrczogKCgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KVtdKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gICAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwUmVzdWx0KHRhc2spO1xuICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSB0aGF0IGRvZXMgbm90IGV4aXQgdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRG9Ob3RFeGl0KCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9Ob3RFeGl0VGFza1Jlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmFpbHVyZSByZXN1bHQgb2YgYSBDTEkgdGFzay5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZhaWx1cmUgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGYWlsdXJlKCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLlN1Y2Nlc3MoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gYmFzZWQgb24gYW4gZXhpdCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpdENvZGUgLSBUaGUgZXhpdCBjb2RlIHRvIHJlcHJlc2VudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEZyb21FeGl0Q29kZShleGl0Q29kZTogbnVtYmVyKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBFeGl0Q29kZVRhc2tSZXN1bHQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbGlUYXNrUmVzdWx0IHJlcHJlc2VudGluZyBhIHN1Y2Nlc3NmdWwgdGFzayByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBpc1N1Y2Nlc3MgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgQSBDbGlUYXNrUmVzdWx0IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdWNjZXNzZnVsIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBTdWNjZXNzKGlzU3VjY2VzcyA9IHRydWUpOiBDbGlUYXNrUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IFN1Y2Nlc3NUYXNrUmVzdWx0KGlzU3VjY2Vzcyk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3MgYmFzZWQgb24gdGhlIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGV4aXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSB0YXNrIHdhcyBub3Qgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyB0aHJvd09uRmFpbHVyZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFzayBmYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAqL1xuY2xhc3MgRG9Ob3RFeGl0VGFza1Jlc3VsdCBleHRlbmRzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogRG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBleGl0KCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IGJhc2VkIG9uIGFuIGV4aXQgY29kZS5cbiAqL1xuY2xhc3MgRXhpdENvZGVUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIHdpdGggdGhlIHNwZWNpZmllZCBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5leGl0Q29kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNTdWNjZXNzZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4aXRDb2RlID09PSAwO1xuICB9XG59XG5cbi8qKlxuICogQSB0YXNrIHJlc3VsdCBiYXNlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gKi9cbmNsYXNzIFN1Y2Nlc3NUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9pc1N1Y2Nlc3NmdWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIGJhc2VkIG9uIHRoZSBzdWNjZXNzIG9mIHRoZSB0YXNrLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGV4aXQoKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5leGl0KHRoaXMuX2lzU3VjY2Vzc2Z1bCA/IDAgOiAxKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VjY2Vzc2Z1bDtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBjb21tYW5kLWxpbmUgc3RyaW5nXG4gKiB1c2luZyB0aGUgYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAodGhlIHN0YW5kYXJkIHVzZWQgYnkgdGhlXG4gKiBNaWNyb3NvZnQgQyBydW50aW1lIGFuZCBtb3N0IFdpbmRvd3MgcHJvZ3JhbXMpLlxuICpcbiAqIEltcGxlbWVudHMgdGhlIEFyZ3ZRdW90ZSBhbGdvcml0aG0gZnJvbVxuICoge0BsaW5rIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9hcmNoaXZlL2Jsb2dzL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvZXZlcnlvbmUtcXVvdGVzLWNvbW1hbmQtbGluZS1hcmd1bWVudHMtdGhlLXdyb25nLXdheSB8IEV2ZXJ5b25lIHF1b3RlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRoZSB3cm9uZyB3YXl9OlxuICogYmFja3NsYXNoZXMgYmVmb3JlIHF1b3RlcyBhbmQgYXQgdGhlIGVuZCBvZiBhIHF1b3RlZCBhcmd1bWVudCBhcmUgZG91YmxlZC5cbiAqXG4gKiBUaGlzIHByb2R1Y2VzIGEgc2hlbGwtYWdub3N0aWMgY29tbWFuZCBsaW5lLiBDYWxsZXJzIHRoYXQgcm91dGUgdGhyb3VnaFxuICogYSBzcGVjaWZpYyBzaGVsbCAoY21kLmV4ZSwgUG93ZXJTaGVsbCwgc2gpIG11c3QgYXBwbHkgc2hlbGwtc3BlY2lmaWNcbiAqIGVzY2FwaW5nIG9uIHRvcCBcdTIwMTQgc2VlIHtAbGluayBjbWRFc2NhcGVDb21tYW5kTGluZX0uXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tbWFuZExpbmUoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4gYXJndlF1b3RlKGFyZykpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSBzaW5nbGUgYXJndW1lbnQgc28gdGhhdCBgQ29tbWFuZExpbmVUb0FyZ3ZXYCB3aWxsIGRlY29kZSBpdFxuICogdW5jaGFuZ2VkLiBJbXBsZW1lbnRzIHRoZSBBcmd2UXVvdGUgYWxnb3JpdGhtIGZyb21cbiAqIHtAbGluayBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vYXJjaGl2ZS9ibG9ncy90d2lzdHlsaXR0bGVwYXNzYWdlc2FsbGFsaWtlL2V2ZXJ5b25lLXF1b3Rlcy1jb21tYW5kLWxpbmUtYXJndW1lbnRzLXRoZS13cm9uZy13YXkgfCBFdmVyeW9uZSBxdW90ZXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0aGUgd3Jvbmcgd2F5fS5cbiAqXG4gKiBAcGFyYW0gYXJnIC0gVGhlIHJhdyBhcmd1bWVudCBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgcXVvdGVkIGFyZ3VtZW50IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXJndlF1b3RlKGFyZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGFyZy5sZW5ndGggPiAwICYmICEvW1xcc1xcdFxcblxcdlwiXS8udGVzdChhcmcpKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIGNvbnN0IEJBQ0tTTEFTSF9FU0NBUEVfRkFDVE9SID0gMjtcbiAgbGV0IHJlc3VsdCA9ICdcIic7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG51bUJhY2tzbGFzaGVzID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZy5sZW5ndGggJiYgYXJnW2ldID09PSAnXFxcXCcpIHtcbiAgICAgIGkrKztcbiAgICAgIG51bUJhY2tzbGFzaGVzKys7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IGFyZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSAnXFxcXCcucmVwZWF0KG51bUJhY2tzbGFzaGVzICogQkFDS1NMQVNIX0VTQ0FQRV9GQUNUT1IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgY2ggPSBhcmcuY2hhckF0KGkpO1xuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgcmVzdWx0ICs9IGAkeydcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMgKiBCQUNLU0xBU0hfRVNDQVBFX0ZBQ1RPUiArIDEpfVwiYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9ICdcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMpICsgY2g7XG4gICAgfVxuICB9XG5cbiAgcmVzdWx0ICs9ICdcIic7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogTWF0Y2hlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGBeYC1lc2NhcGVkLlxuICovXG5jb25zdCBDTURfTUVUQV9SRSA9IC9bKCklIV5cIjw+JnxdL2c7XG5cbi8qKlxuICogRXNjYXBlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgd2l0aCBgXmAgc28gdGhhdCBgY21kLmV4ZWAgcGFzc2VzIHRoZW1cbiAqIHRocm91Z2ggbGl0ZXJhbGx5LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBjbWQuZXhlYCdzIGBcImAgaGFuZGxpbmdcbiAqIGRpZmZlcnMgZnJvbSBgQ29tbWFuZExpbmVUb0FyZ3ZXYCBhbmQgY2Fubm90IGJlIHJlbGllZCB1cG9uLlxuICpcbiAqIEFwcGx5IHRoaXMgdG8gYSBjb21tYW5kIGxpbmUgc3RyaW5nIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB2aWEgYGNtZC5leGVgXG4gKiAoZS5nLiwgYHNwYXduKGNtZCwgW10sIHsgc2hlbGw6IHRydWUgfSlgIG9uIFdpbmRvd3MpLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kTGluZSAtIFRoZSBhbHJlYWR5LXF1b3RlZCBjb21tYW5kIGxpbmUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGFsbCBjbWQgbWV0YWNoYXJhY3RlcnMgYF5gLWVzY2FwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kTGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiAnXiQmJyxcbiAgICBzZWFyY2hWYWx1ZTogQ01EX01FVEFfUkUsXG4gICAgc3RyOiBjb21tYW5kTGluZVxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIENMSSB0YXNrIGZ1bmN0aW9uIHRvIGVuc3VyZSBpdCBydW5zIHNhZmVseSBhbmQgaGFuZGxlcyBpdHMge0BsaW5rIENsaVRhc2tSZXN1bHR9LlxuICpcbiAqIEBwYXJhbSB0YXNrRm4gLSBUaGUgdGFzayBmdW5jdGlvbiB0byBleGVjdXRlLCB3aGljaCBtYXkgcmV0dXJuIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IG9yIGB2b2lkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGFzayBpcyBjb21wbGV0ZWQgYW5kIGV4aXRzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyYXBDbGlUYXNrKHRhc2tGbjogKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgZW5hYmxlTGlicmFyeURlYnVnZ2VycygpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwUmVzdWx0KHRhc2tGbik7XG4gIHJlc3VsdC5leGl0KCk7XG59XG5cbi8qKlxuICogU2FmZWx5IGV4ZWN1dGVzIGEgdGFzayBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fS4gSWYgdGhlIHRhc2sgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yLFxuICogQW4gZXJyb3IgaXMgY2F1Z2h0LCBhbmQgYSBmYWlsdXJlIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gdGFza0ZuIC0gVGhlIHRhc2sgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSByZXByZXNlbnRpbmcgdGhlIG91dGNvbWUgb2YgdGhlIHRhc2suXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyYXBSZXN1bHQodGFza0ZuOiAoKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPENsaVRhc2tSZXN1bHQ+Pik6IFByb21pc2U8Q2xpVGFza1Jlc3VsdD4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgdGFza0ZuKCkpIGFzIENsaVRhc2tSZXN1bHQgfCB1bmRlZmluZWQgPz8gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0YXNrIGV4ZWN1dGlvbicsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5GYWlsdXJlKCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSwwQkFBb0I7QUFJcEIsbUJBQXVDO0FBQ3ZDLG1CQUEyQjtBQUMzQixzQkFBcUI7QUFDckIsb0JBQTJCO0FBTXBCLE1BQWUsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2xDLGFBQW9CLE1BQU0sT0FBaUY7QUFDekcsZUFBVyxRQUFRLE9BQU87QUFDeEIsWUFBTSxTQUFTLE1BQU0sV0FBVyxJQUFJO0FBQ3BDLFVBQUksQ0FBQyxPQUFPLGFBQWEsR0FBRztBQUMxQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxXQUFPLGNBQWMsUUFBUTtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxZQUEyQjtBQUN2QyxXQUFPLElBQUksb0JBQW9CO0FBQUEsRUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLFVBQXlCO0FBQ3JDLFdBQU8sS0FBSyxRQUFRLEtBQUs7QUFBQSxFQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsT0FB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
@@ -5,7 +5,7 @@
5
5
  * Contains utility classes and functions for managing task results, including
6
6
  * success, exit codes, and chaining multiple tasks.
7
7
  */
8
- import type { Promisable } from 'type-fest';
8
+ import type { Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
9
9
  import type { MaybeReturn } from '../type.cjs';
10
10
  /**
11
11
  * Abstract class representing the result of a task. Includes methods for handling success,
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Shared commitlint configuration for Conventional Commits.
6
6
  */
7
- import type { UserConfig } from '@commitlint/types';
7
+ import type { UserConfig } from '@commitlint/types' with { 'resolution-mode': 'import' };
8
8
  /**
9
9
  * Commitlint configuration extending `@commitlint/config-conventional`.
10
10
  */
@@ -141,6 +141,7 @@ module.exports = __toCommonJS(exec_exports);
141
141
  var import_node_child_process = require('node:child_process');
142
142
  var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
143
143
  var import_debug = require('../debug.cjs');
144
+ var import_object_utils = require('../object-utils.cjs');
144
145
  var import_string = require('../string.cjs');
145
146
  var import_type_guards = require('../type-guards.cjs');
146
147
  var import_cli_utils = require('./cli-utils.cjs');
@@ -160,7 +161,11 @@ function exec(command, options = {}) {
160
161
  )
161
162
  );
162
163
  }
163
- return execString(commandLine, options, args);
164
+ return execString({
165
+ command: commandLine,
166
+ options,
167
+ rawArgs: args
168
+ });
164
169
  }
165
170
  const maxCommandLength = getMaxCommandLength();
166
171
  if (command.length > maxCommandLength) {
@@ -170,9 +175,17 @@ function exec(command, options = {}) {
170
175
  )
171
176
  );
172
177
  }
173
- return execString(command, options);
178
+ return execString({
179
+ command,
180
+ options
181
+ });
174
182
  }
175
- function execString(command, options = {}, rawArgs) {
183
+ function execString(params) {
184
+ const {
185
+ command,
186
+ options = {},
187
+ rawArgs
188
+ } = params;
176
189
  const {
177
190
  cwd = import_node_process.default.cwd(),
178
191
  isQuiet: quiet = false,
@@ -182,7 +195,11 @@ function execString(command, options = {}, rawArgs) {
182
195
  } = options;
183
196
  return new Promise((resolve, reject) => {
184
197
  (0, import_debug.getLibDebugger)("Exec")(`Executing command: ${command}`);
185
- const child = spawnViaShell(command, cwd, rawArgs);
198
+ const child = spawnViaShell((0, import_object_utils.normalizeOptionalProperties)({
199
+ command,
200
+ cwd,
201
+ rawArgs
202
+ }));
186
203
  let stdout = "";
187
204
  let stderr = "";
188
205
  child.stdin.write(stdin);
@@ -194,7 +211,10 @@ function execString(command, options = {}, rawArgs) {
194
211
  stdout += data.toString("utf-8");
195
212
  });
196
213
  child.stdout.on("end", () => {
197
- stdout = (0, import_string.trimEnd)(stdout, "\n");
214
+ stdout = (0, import_string.trimEnd)({
215
+ str: stdout,
216
+ suffix: "\n"
217
+ });
198
218
  });
199
219
  child.stderr.on("data", (data) => {
200
220
  if (!quiet) {
@@ -203,7 +223,10 @@ function execString(command, options = {}, rawArgs) {
203
223
  stderr += data.toString("utf-8");
204
224
  });
205
225
  child.stderr.on("end", () => {
206
- stderr = (0, import_string.trimEnd)(stderr, "\n");
226
+ stderr = (0, import_string.trimEnd)({
227
+ str: stderr,
228
+ suffix: "\n"
229
+ });
207
230
  });
208
231
  child.on("close", (exitCode, exitSignal) => {
209
232
  if (exitCode !== 0 && !ignoreExitCode) {
@@ -244,11 +267,15 @@ const CHILD_ENV = {
244
267
  DEBUG_COLORS: "1",
245
268
  ...import_node_process.default.env
246
269
  };
247
- async function executeBatches(baseCommand, batches, options) {
270
+ async function executeBatches(params) {
271
+ const { baseCommand, batches, options } = params;
248
272
  const results = [];
249
273
  for (const batch of batches) {
250
274
  const batchCommand = `${baseCommand} ${batch.join(" ")}`;
251
- const result = await execString(batchCommand, options);
275
+ const result = await execString({
276
+ command: batchCommand,
277
+ options
278
+ });
252
279
  if (typeof result === "string") {
253
280
  results.push(result);
254
281
  }
@@ -278,7 +305,10 @@ function handleBatchedCommand(parts, options) {
278
305
  const maxCommandLength = getMaxCommandLength();
279
306
  const fullCommand = `${baseCommand} ${execArg.batchedArgs.join(" ")}`;
280
307
  if (fullCommand.length <= maxCommandLength) {
281
- return execString(fullCommand, options);
308
+ return execString({
309
+ command: fullCommand,
310
+ options
311
+ });
282
312
  }
283
313
  const batches = [];
284
314
  let currentBatch = [];
@@ -301,12 +331,17 @@ function handleBatchedCommand(parts, options) {
301
331
  if (currentBatch.length > 0) {
302
332
  batches.push(currentBatch);
303
333
  }
304
- return executeBatches(baseCommand, batches, options);
334
+ return executeBatches({
335
+ baseCommand,
336
+ batches,
337
+ options
338
+ });
305
339
  }
306
340
  function isExecArg(part) {
307
341
  return typeof part === "object" && "batchedArgs" in part;
308
342
  }
309
- function spawnViaShell(command, cwd, rawArgs) {
343
+ function spawnViaShell(params) {
344
+ const { command, cwd, rawArgs } = params;
310
345
  if (import_node_process.default.platform === "win32" && command.includes("\n")) {
311
346
  if (!rawArgs) {
312
347
  throw new Error("Commands containing newlines cannot be executed through cmd.exe on Windows. Pass an argument array instead of a string.");
@@ -331,4 +366,4 @@ function spawnViaShell(command, cwd, rawArgs) {
331
366
  0 && (module.exports = {
332
367
  exec
333
368
  });
334
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9leGVjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgdHJpbUVuZCB9IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7XG4gIGNtZEVzY2FwZUNvbW1hbmRMaW5lLFxuICB0b0NvbW1hbmRMaW5lXG59IGZyb20gJy4vY2xpLXV0aWxzLnRzJztcblxuLyoqXG4gKiBBIGNvbW1hbmQgcGFydDogZWl0aGVyIGEgcGxhaW4gc3RyaW5nIG9yIGFuIHtAbGluayBFeGVjQXJnfSB3aXRoIGJhdGNoZWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kUGFydCA9IEV4ZWNBcmcgfCBzdHJpbmc7XG5cbi8qKlxuICogQSBjb21tYW5kIGFyZ3VtZW50IHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGFyZ3MgdG8gYmUgYmF0Y2hlZC5cbiAqIElmIHRoZSBleHBhbmRlZCBjb21tYW5kIGV4Y2VlZHMgdGhlIHBsYXRmb3JtJ3MgbWF4IGNvbW1hbmQgbGVuZ3RoLFxuICogdGhlIGJhdGNoZWQgYXJncyBhcmUgc3BsaXQgaW50byBzZXF1ZW50aWFsIGV4ZWN1dGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY0FyZyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIGJhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYmF0Y2hlZEFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBkZXRhaWxlZCByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNEZXRhaWxlZE9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGB0cnVlYCB0byByZWNlaXZlIGRldGFpbGVkIHJlc3VsdHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHN1cHByZXNzZXMgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzUXVpZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgY29tbWFuZCBmYWlscy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZhaWxJZkNhbGxlZEZyb21PdXRzaWRlUm9vdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaWdub3JlcyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSWdub3JlRXhpdENvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgZmFsc2VgLCBvbmx5IHJldHVybnMgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkaW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSByZXN1bHQgb2Yge0BsaW5rIGV4ZWN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNSZXN1bHQge1xuICAvKipcbiAgICogQW4gZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2VzcyBkaWQgbm90IGV4aXQgbm9ybWFsbHkuXG4gICAqL1xuICByZWFkb25seSBleGl0Q29kZTogbnVsbCB8IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIHByb2Nlc3MgdG8gYmUgdGVybWluYXRlZC4gQSB2YWx1ZSBvZiBgbnVsbGAgaW5kaWNhdGVzIHRoYXQgbm8gc2lnbmFsIHdhcyByZWNlaXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRTaWduYWw6IE5vZGVKUy5TaWduYWxzIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGV4ZWN9IHRoYXQgcmV0dXJuIG9ubHkgc3Rkb3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNTaW1wbGVPcHRpb25zIGV4dGVuZHMgRXhlY09wdGlvbnMge1xuICAvKipcbiAgICogTXVzdCBiZSBgZmFsc2VgIG9yIG9taXR0ZWQgdG8gcmVjZWl2ZSBvbmx5IHN0ZG91dC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogZmFsc2U7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9ucz86IEV4ZWNTaW1wbGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBleGVjdXRlLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjRGV0YWlsZWRPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0Pjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgb3IgYW4gRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbW1hbmQpKSB7XG4gICAgY29uc3QgYmF0Y2hSZXN1bHQgPSBoYW5kbGVCYXRjaGVkQ29tbWFuZChjb21tYW5kLCBvcHRpb25zKTtcbiAgICBpZiAoYmF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBiYXRjaFJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGNvbW1hbmQuZmlsdGVyKChwYXJ0KTogcGFydCBpcyBzdHJpbmcgPT4gdHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKTtcbiAgICBjb25zdCBjb21tYW5kTGluZSA9IHRvQ29tbWFuZExpbmUoYXJncyk7XG5cbiAgICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICAgIGlmIChjb21tYW5kTGluZS5sZW5ndGggPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhjb21tYW5kTGluZS5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhlY1N0cmluZyhjb21tYW5kTGluZSwgb3B0aW9ucywgYXJncyk7XG4gIH1cblxuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICBpZiAoY29tbWFuZC5sZW5ndGggPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgbmV3IEVycm9yKFxuICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhjb21tYW5kLmxlbmd0aCl9IGNoYXJzLCBtYXggJHtTdHJpbmcobWF4Q29tbWFuZExlbmd0aCl9IG9uICR7cHJvY2Vzcy5wbGF0Zm9ybX0pLiBDb25zaWRlciBzcGxpdHRpbmcgaW50byBzbWFsbGVyIGJhdGNoZXMgb3IgdXNlIEV4ZWNBcmcuYFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXhlY1N0cmluZyhjb21tYW5kLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdHJpbmcgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHN0cmluZy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEBwYXJhbSByYXdBcmdzIC0gVGhlIG9yaWdpbmFsIGFyZ3VtZW50IGFycmF5IChpZiBhdmFpbGFibGUpLCB1c2VkIGJ5IHRoZSBQb3dlclNoZWxsXG4gKiAgIGZhbGxiYWNrIHBhdGggdG8gcXVvdGUgYXJndW1lbnRzIHdpdGggUG93ZXJTaGVsbC1uYXRpdmUgc2luZ2xlIHF1b3Rlcy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gZXhlY1N0cmluZyhjb21tYW5kOiBzdHJpbmcsIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge30sIHJhd0FyZ3M/OiBzdHJpbmdbXSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgY3dkID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBpc1F1aWV0OiBxdWlldCA9IGZhbHNlLFxuICAgIHNob3VsZElnbm9yZUV4aXRDb2RlOiBpZ25vcmVFeGl0Q29kZSA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzID0gZmFsc2UsXG4gICAgc3RkaW4gPSAnJ1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGdldExpYkRlYnVnZ2VyKCdFeGVjJykoYEV4ZWN1dGluZyBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduVmlhU2hlbGwoY29tbWFuZCwgY3dkLCByYXdBcmdzKTtcblxuICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICBsZXQgc3RkZXJyID0gJyc7XG5cbiAgICBjaGlsZC5zdGRpbi53cml0ZShzdGRpbik7XG4gICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGRhdGEpO1xuICAgICAgfVxuICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHN0ZG91dCA9IHRyaW1FbmQoc3Rkb3V0LCAnXFxuJyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGRhdGEpO1xuICAgICAgfVxuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHN0ZGVyciA9IHRyaW1FbmQoc3RkZXJyLCAnXFxuJyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbignY2xvc2UnLCAoZXhpdENvZGUsIGV4aXRTaWduYWwpID0+IHtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhaWdub3JlRXhpdENvZGUpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZSA/IFN0cmluZyhleGl0Q29kZSkgOiAnKG51bGwpJ31cXG4ke3N0ZGVycn1gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgZXhpdFNpZ25hbCxcbiAgICAgICAgc3RkZXJyLFxuICAgICAgICBzdGRvdXRcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGU6IG51bGwsXG4gICAgICAgIGV4aXRTaWduYWw6IG51bGwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3Nlcy5cbiAqL1xuY29uc3QgQ0hJTERfRU5WID0ge1xuICBERUJVR19DT0xPUlM6ICcxJyxcbiAgLi4ucHJvY2Vzcy5lbnZcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgYmF0Y2hlZCBjb21tYW5kcyBzZXF1ZW50aWFsbHkgYW5kIGNvbmNhdGVuYXRlcyBzdGRvdXQuXG4gKlxuICogQHBhcmFtIGJhc2VDb21tYW5kIC0gVGhlIGJhc2UgY29tbWFuZCB3aXRob3V0IGJhdGNoZWQgYXJncy5cbiAqIEBwYXJhbSBiYXRjaGVzIC0gVGhlIGJhdGNoZXMgb2YgYXJncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbmNhdGVuYXRlZCByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCYXRjaGVzKGJhc2VDb21tYW5kOiBzdHJpbmcsIGJhdGNoZXM6IHN0cmluZ1tdW10sIG9wdGlvbnM6IEV4ZWNPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgY29uc3QgYmF0Y2hDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY1N0cmluZyhiYXRjaENvbW1hbmQsIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICByZXR1cm4geyBleGl0Q29kZTogMCwgZXhpdFNpZ25hbDogbnVsbCwgc3RkZXJyOiAnJywgc3Rkb3V0OiByZXN1bHRzLmpvaW4oJ1xcbicpIH07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBtYXggY29tbWFuZCBsaW5lIGxlbmd0aC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbWF4IGNvbW1hbmQgbGVuZ3RoIGluIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldE1heENvbW1hbmRMZW5ndGgoKTogbnVtYmVyIHtcbiAgY29uc3QgV0lORE9XU19NQVhfQ09NTUFORF9MRU5HVEggPSA4MTkxO1xuICBjb25zdCBVTklYX01BWF9DT01NQU5EX0xFTkdUSCA9IDEzMTA3MjtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA6IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBjb21tYW5kIGFycmF5IHRoYXQgbWF5IGNvbnRhaW4gYW4ge0BsaW5rIEV4ZWNBcmd9LlxuICogUmV0dXJucyBhIFByb21pc2UgaWYgYmF0Y2hpbmcgaXMgbmVlZGVkLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgY29tbWFuZFxuICogaGFzIG5vIEV4ZWNBcmcgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4gKlxuICogQHBhcmFtIHBhcnRzIC0gVGhlIGNvbW1hbmQgcGFydHMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBleGVjIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgaWYgYmF0Y2hpbmcgaXMgaGFuZGxlZCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUJhdGNoZWRDb21tYW5kKHBhcnRzOiBDb21tYW5kUGFydFtdLCBvcHRpb25zOiBFeGVjT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBleGVjQXJncyA9IHBhcnRzLmZpbHRlcihpc0V4ZWNBcmcpO1xuICBpZiAoZXhlY0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZXhlY0FyZ3MubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ09ubHkgb25lIEV4ZWNBcmcgd2l0aCBiYXRjaGVkQXJncyBpcyBhbGxvd2VkIHBlciBjb21tYW5kJykpO1xuICB9XG5cbiAgY29uc3QgZXhlY0FyZyA9IGV4ZWNBcmdzWzBdO1xuICBhc3NlcnROb25OdWxsYWJsZShleGVjQXJnKTtcbiAgY29uc3Qgc3RhdGljUGFydHMgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICBjb25zdCBiYXNlQ29tbWFuZCA9IHRvQ29tbWFuZExpbmUoc3RhdGljUGFydHMpO1xuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuXG4gIC8vIFRyeSBleHBhbmRpbmcgYWxsIGFyZ3MgaW5saW5lXG4gIGNvbnN0IGZ1bGxDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7ZXhlY0FyZy5iYXRjaGVkQXJncy5qb2luKCcgJyl9YDtcbiAgaWYgKGZ1bGxDb21tYW5kLmxlbmd0aCA8PSBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGV4ZWNTdHJpbmcoZnVsbENvbW1hbmQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gU3BsaXQgaW50byBiYXRjaGVzXG4gIGNvbnN0IGJhdGNoZXM6IHN0cmluZ1tdW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRCYXRjaDogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFyZyBvZiBleGVjQXJnLmJhdGNoZWRBcmdzKSB7XG4gICAgY29uc3QgdGVudGF0aXZlID0gYCR7YmFzZUNvbW1hbmR9ICR7Wy4uLmN1cnJlbnRCYXRjaCwgYXJnXS5qb2luKCcgJyl9YDtcbiAgICBpZiAodGVudGF0aXZlLmxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICAgIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHNwbGl0IGNvbW1hbmQgaW50byBiYXRjaGVzOiBhIHNpbmdsZSBhcmd1bWVudCAoJHtTdHJpbmcoYXJnLmxlbmd0aCl9IGNoYXJzKSBwbHVzIHRoZSBiYXNlIGNvbW1hbmQgKCR7U3RyaW5nKGJhc2VDb21tYW5kLmxlbmd0aCl9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXggY29tbWFuZCBsZW5ndGggKCR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSkuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICAgICAgY3VycmVudEJhdGNoID0gW2FyZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRCYXRjaC5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbHdheXMgdHJ1ZSBhZnRlciB0aGUgbG9vcDsgYmF0Y2hlZEFyZ3MgaXMgbm9uLWVtcHR5IGF0IHRoaXMgcG9pbnQuICovXG4gIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID4gMCkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgYmF0Y2hlcy5wdXNoKGN1cnJlbnRCYXRjaCk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZUJhdGNoZXMoYmFzZUNvbW1hbmQsIGJhdGNoZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGNvbW1hbmQgcGFydCBpcyBhbiB7QGxpbmsgRXhlY0FyZ30uXG4gKlxuICogQHBhcmFtIHBhcnQgLSBUaGUgY29tbWFuZCBwYXJ0IHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFydCBpcyBhbiBFeGVjQXJnLlxuICovXG5mdW5jdGlvbiBpc0V4ZWNBcmcocGFydDogQ29tbWFuZFBhcnQpOiBwYXJ0IGlzIEV4ZWNBcmcge1xuICByZXR1cm4gdHlwZW9mIHBhcnQgPT09ICdvYmplY3QnICYmICdiYXRjaGVkQXJncycgaW4gcGFydDtcbn1cblxuLyoqXG4gKiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHZpYSB0aGUgYXBwcm9wcmlhdGUgc2hlbGwuXG4gKlxuICogT24gV2luZG93cywgaWYgdGhlIGNvbW1hbmQgY29udGFpbnMgbmV3bGluZXMgKHdoaWNoIGBjbWQuZXhlYCBjYW5ub3QgaGFuZGxlKVxuICogYW5kIHRoZSByYXcgYXJncyBhcnJheSBpcyBhdmFpbGFibGUsIHNwYXducyB0aGUgcHJvY2VzcyBkaXJlY3RseSB3aXRob3V0XG4gKiBhbnkgc2hlbGwgXHUyMDE0IHBhc3NpbmcgYXJncyB2aWEgYENyZWF0ZVByb2Nlc3NgLCB3aGljaCBhdm9pZHMgYWxsIHF1b3RpbmcgaXNzdWVzLlxuICpcbiAqIE9uIFdpbmRvd3MgKGNtZC5leGUgcGF0aCksIGFwcGxpZXMgYF5gLWVzY2FwaW5nIGZvciBjbWQgbWV0YWNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBzdHJpbmcgdG8gZXhlY3V0ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gcmF3QXJncyAtIFRoZSBvcmlnaW5hbCBhcmd1bWVudCBhcnJheSAoaWYgYXZhaWxhYmxlKS5cbiAqIEByZXR1cm5zIFRoZSBzcGF3bmVkIGNoaWxkIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNwYXduVmlhU2hlbGwoY29tbWFuZDogc3RyaW5nLCBjd2Q6IHN0cmluZywgcmF3QXJncz86IHN0cmluZ1tdKTogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgY29tbWFuZC5pbmNsdWRlcygnXFxuJykpIHtcbiAgICBpZiAoIXJhd0FyZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tbWFuZHMgY29udGFpbmluZyBuZXdsaW5lcyBjYW5ub3QgYmUgZXhlY3V0ZWQgdGhyb3VnaCBjbWQuZXhlIG9uIFdpbmRvd3MuIFBhc3MgYW4gYXJndW1lbnQgYXJyYXkgaW5zdGVhZCBvZiBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgY29uc3QgW3Byb2dyYW0sIC4uLmFyZ3NdID0gcmF3QXJncztcbiAgICBhc3NlcnROb25OdWxsYWJsZShwcm9ncmFtLCAnQ29tbWFuZCBhcnJheSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIHJldHVybiBzcGF3bihwcm9ncmFtLCBhcmdzLCB7XG4gICAgICBjd2QsXG4gICAgICBlbnY6IENISUxEX0VOVixcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBzcGF3bihzaGVsbENvbW1hbmQsIFtdLCB7XG4gICAgY3dkLFxuICAgIGVudjogQ0hJTERfRU5WLFxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiAncGlw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
369
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9leGVjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQge1xuICBjbWRFc2NhcGVDb21tYW5kTGluZSxcbiAgdG9Db21tYW5kTGluZVxufSBmcm9tICcuL2NsaS11dGlscy50cyc7XG5cbi8qKlxuICogQSBjb21tYW5kIHBhcnQ6IGVpdGhlciBhIHBsYWluIHN0cmluZyBvciBhbiB7QGxpbmsgRXhlY0FyZ30gd2l0aCBiYXRjaGVkIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZFBhcnQgPSBFeGVjQXJnIHwgc3RyaW5nO1xuXG4vKipcbiAqIEEgY29tbWFuZCBhcmd1bWVudCB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBhcmdzIHRvIGJlIGJhdGNoZWQuXG4gKiBJZiB0aGUgZXhwYW5kZWQgY29tbWFuZCBleGNlZWRzIHRoZSBwbGF0Zm9ybSdzIG1heCBjb21tYW5kIGxlbmd0aCxcbiAqIHRoZSBiYXRjaGVkIGFyZ3MgYXJlIHNwbGl0IGludG8gc2VxdWVudGlhbCBleGVjdXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNBcmcge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBiYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZWRBcmdzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlY30gdGhhdCByZXR1cm4gZGV0YWlsZWQgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjRGV0YWlsZWRPcHRpb25zIGV4dGVuZHMgRXhlY09wdGlvbnMge1xuICAvKipcbiAgICogTXVzdCBiZSBgdHJ1ZWAgdG8gcmVjZWl2ZSBkZXRhaWxlZCByZXN1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZURldGFpbHM6IHRydWU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZXhlY3V0aW5nIGEgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgZm9yIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBzdXBwcmVzc2VzIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUXVpZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgY29tbWFuZCBmYWlscy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsSWZDYWxsZWRGcm9tT3V0c2lkZVJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGlnbm9yZXMgdGhlIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSWdub3JlRXhpdENvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgZmFsc2VgLCBvbmx5IHJldHVybnMgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZURldGFpbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBpbnB1dCB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHN0ZGluPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzdWx0IG9mIHtAbGluayBleGVjfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFuIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC4gQSB2YWx1ZSBvZiBgbnVsbGAgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2Nlc3MgZGlkIG5vdCBleGl0IG5vcm1hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdENvZGU6IG51bGwgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBwcm9jZXNzIHRvIGJlIHRlcm1pbmF0ZWQuIEEgdmFsdWUgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IG5vIHNpZ25hbCB3YXMgcmVjZWl2ZWQuXG4gICAqL1xuICByZWFkb25seSBleGl0U2lnbmFsOiBOb2RlSlMuU2lnbmFscyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGFuZGFyZCBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBvbmx5IHN0ZG91dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjU2ltcGxlT3B0aW9ucyBleHRlbmRzIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIE11c3QgYmUgYGZhbHNlYCBvciBvbWl0dGVkIHRvIHJlY2VpdmUgb25seSBzdGRvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogZmFsc2U7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV4ZWNTdHJpbmd9LlxuICovXG5pbnRlcmZhY2UgRXhlY1N0cmluZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogRXhlY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBhcmd1bWVudCBhcnJheSAoaWYgYXZhaWxhYmxlKSwgdXNlZCBieSB0aGUgUG93ZXJTaGVsbFxuICAgKiBmYWxsYmFjayBwYXRoIHRvIHF1b3RlIGFyZ3VtZW50cyB3aXRoIFBvd2VyU2hlbGwtbmF0aXZlIHNpbmdsZSBxdW90ZXMuXG4gICAqL1xuICByZWFkb25seSByYXdBcmdzPzogc3RyaW5nW107XG59XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlIGFuZCBzdGRlcnIuXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM/OiBFeGVjU2ltcGxlT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY0RldGFpbGVkT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kKSkge1xuICAgIGNvbnN0IGJhdGNoUmVzdWx0ID0gaGFuZGxlQmF0Y2hlZENvbW1hbmQoY29tbWFuZCwgb3B0aW9ucyk7XG4gICAgaWYgKGJhdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gYmF0Y2hSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBjb21tYW5kLmZpbHRlcigocGFydCk6IHBhcnQgaXMgc3RyaW5nID0+IHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyk7XG4gICAgY29uc3QgY29tbWFuZExpbmUgPSB0b0NvbW1hbmRMaW5lKGFyZ3MpO1xuXG4gICAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcbiAgICBpZiAoY29tbWFuZExpbmUubGVuZ3RoID4gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYENvbW1hbmQgbGluZSBpcyB0b28gbG9uZyAoJHtTdHJpbmcoY29tbWFuZExpbmUubGVuZ3RoKX0gY2hhcnMsIG1heCAke1N0cmluZyhtYXhDb21tYW5kTGVuZ3RoKX0gb24gJHtwcm9jZXNzLnBsYXRmb3JtfSkuIENvbnNpZGVyIHNwbGl0dGluZyBpbnRvIHNtYWxsZXIgYmF0Y2hlcyBvciB1c2UgRXhlY0FyZy5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4ZWNTdHJpbmcoe1xuICAgICAgY29tbWFuZDogY29tbWFuZExpbmUsXG4gICAgICBvcHRpb25zLFxuICAgICAgcmF3QXJnczogYXJnc1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcbiAgaWYgKGNvbW1hbmQubGVuZ3RoID4gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgYENvbW1hbmQgbGluZSBpcyB0b28gbG9uZyAoJHtTdHJpbmcoY29tbWFuZC5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWNTdHJpbmcoe1xuICAgIGNvbW1hbmQsXG4gICAgb3B0aW9uc1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdHJpbmcgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGV4ZWNTdHJpbmcocGFyYW1zOiBFeGVjU3RyaW5nUGFyYW1zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBjb21tYW5kLFxuICAgIG9wdGlvbnMgPSB7fSxcbiAgICByYXdBcmdzXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIGlzUXVpZXQ6IHF1aWV0ID0gZmFsc2UsXG4gICAgc2hvdWxkSWdub3JlRXhpdENvZGU6IGlnbm9yZUV4aXRDb2RlID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZURldGFpbHMgPSBmYWxzZSxcbiAgICBzdGRpbiA9ICcnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0V4ZWMnKShgRXhlY3V0aW5nIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcblxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd25WaWFTaGVsbChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U3Bhd25WaWFTaGVsbFBhcmFtcz4oe1xuICAgICAgY29tbWFuZCxcbiAgICAgIGN3ZCxcbiAgICAgIHJhd0FyZ3NcbiAgICB9KSk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgbGV0IHN0ZGVyciA9ICcnO1xuXG4gICAgY2hpbGQuc3RkaW4ud3JpdGUoc3RkaW4pO1xuICAgIGNoaWxkLnN0ZGluLmVuZCgpO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKCFxdWlldCkge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShkYXRhKTtcbiAgICAgIH1cbiAgICAgIHN0ZG91dCArPSBkYXRhLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBzdGRvdXQgPSB0cmltRW5kKHtcbiAgICAgICAgc3RyOiBzdGRvdXQsXG4gICAgICAgIHN1ZmZpeDogJ1xcbidcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKCFxdWlldCkge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShkYXRhKTtcbiAgICAgIH1cbiAgICAgIHN0ZGVyciArPSBkYXRhLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBzdGRlcnIgPSB0cmltRW5kKHtcbiAgICAgICAgc3RyOiBzdGRlcnIsXG4gICAgICAgIHN1ZmZpeDogJ1xcbidcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oJ2Nsb3NlJywgKGV4aXRDb2RlLCBleGl0U2lnbmFsKSA9PiB7XG4gICAgICBpZiAoZXhpdENvZGUgIT09IDAgJiYgIWlnbm9yZUV4aXRDb2RlKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7ZXhpdENvZGUgPyBTdHJpbmcoZXhpdENvZGUpIDogJyhudWxsKSd9XFxuJHtzdGRlcnJ9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGUsXG4gICAgICAgIGV4aXRTaWduYWwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmICghaWdub3JlRXhpdENvZGUpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4aXRDb2RlOiBudWxsLFxuICAgICAgICBleGl0U2lnbmFsOiBudWxsLFxuICAgICAgICBzdGRlcnIsXG4gICAgICAgIHN0ZG91dFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHBhc3NlZCB0byBjaGlsZCBwcm9jZXNzZXMuXG4gKi9cbmNvbnN0IENISUxEX0VOViA9IHtcbiAgREVCVUdfQ09MT1JTOiAnMScsXG4gIC4uLnByb2Nlc3MuZW52XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjdXRlQmF0Y2hlc30uXG4gKi9cbmludGVyZmFjZSBFeGVjdXRlQmF0Y2hlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBjb21tYW5kIHdpdGhvdXQgYmF0Y2hlZCBhcmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJhdGNoZXMgb2YgYXJncy5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZXM6IHN0cmluZ1tdW107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBFeGVjT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc3Bhd25WaWFTaGVsbH0uXG4gKi9cbmludGVyZmFjZSBTcGF3blZpYVNoZWxsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHN0cmluZyB0byBleGVjdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGFyZ3VtZW50IGFycmF5IChpZiBhdmFpbGFibGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGJhdGNoZWQgY29tbWFuZHMgc2VxdWVudGlhbGx5IGFuZCBjb25jYXRlbmF0ZXMgc3Rkb3V0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJhdGNoZWQgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJhdGNoZXMocGFyYW1zOiBFeGVjdXRlQmF0Y2hlc1BhcmFtcyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7IGJhc2VDb21tYW5kLCBiYXRjaGVzLCBvcHRpb25zIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgY29uc3QgYmF0Y2hDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY1N0cmluZyh7XG4gICAgICBjb21tYW5kOiBiYXRjaENvbW1hbmQsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5zaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgIHJldHVybiB7IGV4aXRDb2RlOiAwLCBleGl0U2lnbmFsOiBudWxsLCBzdGRlcnI6ICcnLCBzdGRvdXQ6IHJlc3VsdHMuam9pbignXFxuJykgfTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1heCBjb21tYW5kIGxpbmUgbGVuZ3RoLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtYXggY29tbWFuZCBsZW5ndGggaW4gY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF4Q29tbWFuZExlbmd0aCgpOiBudW1iZXIge1xuICBjb25zdCBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA9IDgxOTE7XG4gIGNvbnN0IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIID0gMTMxMDcyO1xuICByZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFdJTkRPV1NfTUFYX0NPTU1BTkRfTEVOR1RIIDogVU5JWF9NQVhfQ09NTUFORF9MRU5HVEg7XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIGNvbW1hbmQgYXJyYXkgdGhhdCBtYXkgY29udGFpbiBhbiB7QGxpbmsgRXhlY0FyZ30uXG4gKiBSZXR1cm5zIGEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBuZWVkZWQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBjb21tYW5kXG4gKiBoYXMgbm8gRXhlY0FyZyBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cbiAqXG4gKiBAcGFyYW0gcGFydHMgLSBUaGUgY29tbWFuZCBwYXJ0cy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBoYW5kbGVkLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQmF0Y2hlZENvbW1hbmQocGFydHM6IENvbW1hbmRQYXJ0W10sIG9wdGlvbnM6IEV4ZWNPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4ZWNBcmdzID0gcGFydHMuZmlsdGVyKGlzRXhlY0FyZyk7XG4gIGlmIChleGVjQXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChleGVjQXJncy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignT25seSBvbmUgRXhlY0FyZyB3aXRoIGJhdGNoZWRBcmdzIGlzIGFsbG93ZWQgcGVyIGNvbW1hbmQnKSk7XG4gIH1cblxuICBjb25zdCBleGVjQXJnID0gZXhlY0FyZ3NbMF07XG4gIGFzc2VydE5vbk51bGxhYmxlKGV4ZWNBcmcpO1xuICBjb25zdCBzdGF0aWNQYXJ0cyA9IHBhcnRzLmZpbHRlcigocGFydCk6IHBhcnQgaXMgc3RyaW5nID0+IHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyk7XG4gIGNvbnN0IGJhc2VDb21tYW5kID0gdG9Db21tYW5kTGluZShzdGF0aWNQYXJ0cyk7XG4gIGNvbnN0IG1heENvbW1hbmRMZW5ndGggPSBnZXRNYXhDb21tYW5kTGVuZ3RoKCk7XG5cbiAgLy8gVHJ5IGV4cGFuZGluZyBhbGwgYXJncyBpbmxpbmVcbiAgY29uc3QgZnVsbENvbW1hbmQgPSBgJHtiYXNlQ29tbWFuZH0gJHtleGVjQXJnLmJhdGNoZWRBcmdzLmpvaW4oJyAnKX1gO1xuICBpZiAoZnVsbENvbW1hbmQubGVuZ3RoIDw9IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICByZXR1cm4gZXhlY1N0cmluZyh7XG4gICAgICBjb21tYW5kOiBmdWxsQ29tbWFuZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNwbGl0IGludG8gYmF0Y2hlc1xuICBjb25zdCBiYXRjaGVzOiBzdHJpbmdbXVtdID0gW107XG4gIGxldCBjdXJyZW50QmF0Y2g6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBhcmcgb2YgZXhlY0FyZy5iYXRjaGVkQXJncykge1xuICAgIGNvbnN0IHRlbnRhdGl2ZSA9IGAke2Jhc2VDb21tYW5kfSAke1suLi5jdXJyZW50QmF0Y2gsIGFyZ10uam9pbignICcpfWA7XG4gICAgaWYgKHRlbnRhdGl2ZS5sZW5ndGggPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgICBpZiAoY3VycmVudEJhdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBzcGxpdCBjb21tYW5kIGludG8gYmF0Y2hlczogYSBzaW5nbGUgYXJndW1lbnQgKCR7U3RyaW5nKGFyZy5sZW5ndGgpfSBjaGFycykgcGx1cyB0aGUgYmFzZSBjb21tYW5kICgke1N0cmluZyhiYXNlQ29tbWFuZC5sZW5ndGgpfSBjaGFycykgZXhjZWVkcyB0aGUgbWF4IGNvbW1hbmQgbGVuZ3RoICgke1N0cmluZyhtYXhDb21tYW5kTGVuZ3RoKX0pLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBiYXRjaGVzLnB1c2goY3VycmVudEJhdGNoKTtcbiAgICAgIGN1cnJlbnRCYXRjaCA9IFthcmddO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50QmF0Y2gucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWx3YXlzIHRydWUgYWZ0ZXIgdGhlIGxvb3A7IGJhdGNoZWRBcmdzIGlzIG5vbi1lbXB0eSBhdCB0aGlzIHBvaW50LiAqL1xuICBpZiAoY3VycmVudEJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWN1dGVCYXRjaGVzKHtcbiAgICBiYXNlQ29tbWFuZCxcbiAgICBiYXRjaGVzLFxuICAgIG9wdGlvbnNcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgY29tbWFuZCBwYXJ0IGlzIGFuIHtAbGluayBFeGVjQXJnfS5cbiAqXG4gKiBAcGFyYW0gcGFydCAtIFRoZSBjb21tYW5kIHBhcnQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwYXJ0IGlzIGFuIEV4ZWNBcmcuXG4gKi9cbmZ1bmN0aW9uIGlzRXhlY0FyZyhwYXJ0OiBDb21tYW5kUGFydCk6IHBhcnQgaXMgRXhlY0FyZyB7XG4gIHJldHVybiB0eXBlb2YgcGFydCA9PT0gJ29iamVjdCcgJiYgJ2JhdGNoZWRBcmdzJyBpbiBwYXJ0O1xufVxuXG4vKipcbiAqIFNwYXducyBhIGNoaWxkIHByb2Nlc3MgdmlhIHRoZSBhcHByb3ByaWF0ZSBzaGVsbC5cbiAqXG4gKiBPbiBXaW5kb3dzLCBpZiB0aGUgY29tbWFuZCBjb250YWlucyBuZXdsaW5lcyAod2hpY2ggYGNtZC5leGVgIGNhbm5vdCBoYW5kbGUpXG4gKiBhbmQgdGhlIHJhdyBhcmdzIGFycmF5IGlzIGF2YWlsYWJsZSwgc3Bhd25zIHRoZSBwcm9jZXNzIGRpcmVjdGx5IHdpdGhvdXRcbiAqIGFueSBzaGVsbCBcdTIwMTQgcGFzc2luZyBhcmdzIHZpYSBgQ3JlYXRlUHJvY2Vzc2AsIHdoaWNoIGF2b2lkcyBhbGwgcXVvdGluZyBpc3N1ZXMuXG4gKlxuICogT24gV2luZG93cyAoY21kLmV4ZSBwYXRoKSwgYXBwbGllcyBgXmAtZXNjYXBpbmcgZm9yIGNtZCBtZXRhY2hhcmFjdGVycy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHNwYXduaW5nIHRoZSBjaGlsZCBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIHNwYXduZWQgY2hpbGQgcHJvY2Vzcy5cbiAqL1xuZnVuY3Rpb24gc3Bhd25WaWFTaGVsbChwYXJhbXM6IFNwYXduVmlhU2hlbGxQYXJhbXMpOiBDaGlsZFByb2Nlc3NXaXRob3V0TnVsbFN0cmVhbXMge1xuICBjb25zdCB7IGNvbW1hbmQsIGN3ZCwgcmF3QXJncyB9ID0gcGFyYW1zO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBjb21tYW5kLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgIGlmICghcmF3QXJncykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kcyBjb250YWluaW5nIG5ld2xpbmVzIGNhbm5vdCBiZSBleGVjdXRlZCB0aHJvdWdoIGNtZC5leGUgb24gV2luZG93cy4gUGFzcyBhbiBhcmd1bWVudCBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBjb25zdCBbcHJvZ3JhbSwgLi4uYXJnc10gPSByYXdBcmdzO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHByb2dyYW0sICdDb21tYW5kIGFycmF5IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgcmV0dXJuIHNwYXduKHByb2dyYW0sIGFyZ3MsIHtcbiAgICAgIGN3ZCxcbiAgICAgIGVudjogQ0hJTERfRU5WLFxuICAgICAgc3RkaW86ICdwaXBlJ1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc2hlbGxDb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IGNtZEVzY2FwZUNvbW1hbmRMaW5lKGNvbW1hbmQpIDogY29tbWFuZDtcbiAgcmV0dXJuIHNwYXduKHNoZWxsQ29tbWFuZCwgW10sIHtcbiAgICBjd2QsXG4gICAgZW52OiBDSElMRF9FTlYsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW86ICdwaXBlJ1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxnQ0FBc0I7QUFDdEIsMEJBQW9CO0FBRXBCLG1CQUErQjtBQUMvQiwwQkFBNEM7QUFDNUMsb0JBQXdCO0FBQ3hCLHlCQUFrQztBQUNsQyx1QkFHTztBQXdLQSxTQUFTLEtBQUssU0FBaUMsVUFBdUIsQ0FBQyxHQUFpQztBQUM3RyxNQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsVUFBTSxjQUFjLHFCQUFxQixTQUFTLE9BQU87QUFDekQsUUFBSSxhQUFhO0FBQ2YsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLE9BQU8sUUFB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
@@ -38,22 +38,32 @@ export interface ExecOptions {
38
38
  readonly cwd?: string;
39
39
  /**
40
40
  * If `true`, suppresses the output of the command.
41
+ *
42
+ * @default `false`
41
43
  */
42
44
  readonly isQuiet?: boolean;
43
45
  /**
44
46
  * If `true`, throws an error if the command fails.
47
+ *
48
+ * @default `true`
45
49
  */
46
50
  readonly shouldFailIfCalledFromOutsideRoot?: boolean;
47
51
  /**
48
52
  * If `true`, ignores the exit code of the command.
53
+ *
54
+ * @default `false`
49
55
  */
50
56
  readonly shouldIgnoreExitCode?: boolean;
51
57
  /**
52
58
  * If `false`, only returns the output of the command.
59
+ *
60
+ * @default `false`
53
61
  */
54
62
  readonly shouldIncludeDetails?: boolean;
55
63
  /**
56
64
  * An input to be passed to the command.
65
+ *
66
+ * @default `''`
57
67
  */
58
68
  readonly stdin?: string;
59
69
  }
@@ -84,6 +94,8 @@ export interface ExecResult {
84
94
  export interface ExecSimpleOptions extends ExecOptions {
85
95
  /**
86
96
  * Must be `false` or omitted to receive only stdout.
97
+ *
98
+ * @default `false`
87
99
  */
88
100
  readonly shouldIncludeDetails?: false;
89
101
  }
@@ -150,11 +150,11 @@ async function format(options) {
150
150
  const { paths, rewrite = true } = options ?? {};
151
151
  const rootFolder = (0, import_root.getRootFolder)();
152
152
  (0, import_type_guards.assertNonNullable)(rootFolder, "Root folder not found");
153
- let dprintJsonPath = (0, import_root.resolvePathFromRootSafe)(import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DprintJson);
153
+ let dprintJsonPath = (0, import_root.resolvePathFromRootSafe)({ path: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DprintJson });
154
154
  if (!(0, import_node_fs.existsSync)(dprintJsonPath)) {
155
155
  const packageFolder = (0, import_root.getRootFolder)((0, import_path.getFolderName)(__import_meta_url));
156
156
  (0, import_type_guards.assertNonNullable)(packageFolder, "Could not find package folder.");
157
- dprintJsonPath = (0, import_root.resolvePathFromRootSafe)((0, import_path.join)(import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DistTemplates, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DprintJson), packageFolder);
157
+ dprintJsonPath = (0, import_root.resolvePathFromRootSafe)({ cwd: packageFolder, path: (0, import_path.join)(import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DistTemplates, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DprintJson) });
158
158
  }
159
159
  if (!(0, import_node_fs.existsSync)(dprintJsonPath)) {
160
160
  throw new Error("dprint.json not found");
@@ -167,4 +167,4 @@ async function format(options) {
167
167
  0 && (module.exports = {
168
168
  format
169
169
  });
170
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG9jYWxSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgICAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSkoKTtcbi8qKlxuICogQGZpbGVcbiAqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBmb3JtYXQuIElmIG9taXR0ZWQsIGZvcm1hdHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXdyaXRlIHRoZSBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IHJld3JpdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgc291cmNlIGNvZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIEZvcm1hdE9wdGlvbnN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzb3VyY2UgY29kZSBoYXMgYmVlbiBmb3JtYXR0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmb3JtYXQob3B0aW9ucz86IEZvcm1hdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBwYXRocywgcmV3cml0ZSA9IHRydWUgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCk7XG4gIGFzc2VydE5vbk51bGxhYmxlKHJvb3RGb2xkZXIsICdSb290IGZvbGRlciBub3QgZm91bmQnKTtcbiAgbGV0IGRwcmludEpzb25QYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EcHJpbnRKc29uKTtcbiAgaWYgKCFleGlzdHNTeW5jKGRwcmludEpzb25QYXRoKSkge1xuICAgIGNvbnN0IHBhY2thZ2VGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGdldEZvbGRlck5hbWUoaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocGFja2FnZUZvbGRlciwgJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UgZm9sZGVyLicpO1xuICAgIGRwcmludEpzb25QYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoam9pbihPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3RUZW1wbGF0ZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRHByaW50SnNvbiksIHBhY2thZ2VGb2xkZXIpO1xuICB9XG5cbiAgaWYgKCFleGlzdHNTeW5jKGRwcmludEpzb25QYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZHByaW50Lmpzb24gbm90IGZvdW5kJyk7XG4gIH1cblxuICBjb25zdCBjb21tYW5kID0gcmV3cml0ZSA/ICdmbXQnIDogJ2NoZWNrJztcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogWycqKi8qJ107XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25weCcsICdkcHJpbnQnLCBjb21tYW5kLCAnLS1jb25maWcnLCBkcHJpbnRKc29uUGF0aCwgeyBiYXRjaGVkQXJnczogdGFyZ2V0cyB9XSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQkEscUJBQTJCO0FBRTNCLGtCQUdPO0FBQ1AseUJBQWtDO0FBQ2xDLDJDQUEwQztBQUMxQyxrQkFJTztBQWxDUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQU07QUFDMUQsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxVQUFNLGVBQWU7QUFDckIsVUFBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxrQkFBa0IsWUFBWTtBQUMzQyxhQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU8sV0FBVyxhQUFhO0FBQ2pDLFdBQU8sYUFBYSxTQUFTO0FBQUEsRUFDL0I7QUFHQSxTQUFPO0FBQ1QsR0FBRztBQTBDUCxlQUFzQixPQUFPLFNBQXdDO0FBQ25FLFFBQU0sRUFBRSxPQUFPLFVBQVUsS0FBSyxJQUFJLFdBQVcsQ0FBQztBQUM5QyxRQUFNLGlCQUFhLDJCQUFjO0FBQ2pDLDRDQUFrQixZQUFZLHVCQUF1QjtBQUNyRCxNQUFJLHFCQUFpQixxQ0FBd0IsK0RBQTBCLFVBQVU7QUFDakYsTUFBSSxLQUFDLDJCQUFXLGNBQWMsR0FBRztBQUMvQixVQUFNLG9CQUFnQiwrQkFBYywyQkFBYyxpQkFBZSxDQUFDO0FBQ2xFLDhDQUFrQixlQUFlLGdDQUFnQztBQUNqRSx5QkFBaUIseUNBQXdCLGtCQUFLLCtEQUEwQixlQUFlLCtEQUEwQixVQUFVLEdBQUcsYUFBYTtBQUFBLEVBQzdJO0FBRUEsTUFBSSxLQUFDLDJCQUFXLGNBQWMsR0FBRztBQUMvQixVQUFNLElBQUksTUFBTSx1QkFBdUI7QUFBQSxFQUN6QztBQUVBLFFBQU0sVUFBVSxVQUFVLFFBQVE7QUFFbEMsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsTUFBTTtBQUUvQyxZQUFNLDBCQUFhLENBQUMsT0FBTyxVQUFVLFNBQVMsWUFBWSxnQkFBZ0IsRUFBRSxhQUFhLFFBQVEsQ0FBQyxDQUFDO0FBQ3JHOyIsCiAgIm5hbWVzIjogW10KfQo=
170
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG9jYWxSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgICAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSkoKTtcbi8qKlxuICogQGZpbGVcbiAqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBmb3JtYXQuIElmIG9taXR0ZWQsIGZvcm1hdHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXdyaXRlIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSByZXdyaXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBGb3JtYXRPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc291cmNlIGNvZGUgaGFzIGJlZW4gZm9ybWF0dGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9ybWF0KG9wdGlvbnM/OiBGb3JtYXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHJld3JpdGUgPSB0cnVlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpO1xuICBhc3NlcnROb25OdWxsYWJsZShyb290Rm9sZGVyLCAnUm9vdCBmb2xkZXIgbm90IGZvdW5kJyk7XG4gIGxldCBkcHJpbnRKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EcHJpbnRKc29uIH0pO1xuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwYWNrYWdlRm9sZGVyLCAnQ291bGQgbm90IGZpbmQgcGFja2FnZSBmb2xkZXIuJyk7XG4gICAgZHByaW50SnNvblBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IGN3ZDogcGFja2FnZUZvbGRlciwgcGF0aDogam9pbihPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3RUZW1wbGF0ZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRHByaW50SnNvbikgfSk7XG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkcHJpbnQuanNvbiBub3QgZm91bmQnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSByZXdyaXRlID8gJ2ZtdCcgOiAnY2hlY2snO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJyoqLyonXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ2RwcmludCcsIGNvbW1hbmQsICctLWNvbmZpZycsIGRwcmludEpzb25QYXRoLCB7IGJhdGNoZWRBcmdzOiB0YXJnZXRzIH1dKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCQSxxQkFBMkI7QUFFM0Isa0JBR087QUFDUCx5QkFBa0M7QUFDbEMsMkNBQTBDO0FBQzFDLGtCQUlPO0FBbENQLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBTTtBQUMxRCxNQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLFVBQU0sZUFBZTtBQUNyQixVQUFNLE1BQU0sYUFBYSxVQUFVO0FBQ25DLFFBQUksT0FBTyxJQUFJLGtCQUFrQixZQUFZO0FBQzNDLGFBQU8sSUFBSSxjQUFjLFVBQVUsRUFBRTtBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUVBLE1BQUksT0FBTyxXQUFXLGFBQWE7QUFDakMsV0FBTyxhQUFhLFNBQVM7QUFBQSxFQUMvQjtBQUdBLFNBQU87QUFDVCxHQUFHO0FBNENQLGVBQXNCLE9BQU8sU0FBd0M7QUFDbkUsUUFBTSxFQUFFLE9BQU8sVUFBVSxLQUFLLElBQUksV0FBVyxDQUFDO0FBQzlDLFFBQU0saUJBQWEsMkJBQWM7QUFDakMsNENBQWtCLFlBQVksdUJBQXVCO0FBQ3JELE1BQUkscUJBQWlCLHFDQUF3QixFQUFFLE1BQU0sK0RBQTBCLFdBQVcsQ0FBQztBQUMzRixNQUFJLEtBQUMsMkJBQVcsY0FBYyxHQUFHO0FBQy9CLFVBQU0sb0JBQWdCLCtCQUFjLDJCQUFjLGlCQUFlLENBQUM7QUFDbEUsOENBQWtCLGVBQWUsZ0NBQWdDO0FBQ2pFLHlCQUFpQixxQ0FBd0IsRUFBRSxLQUFLLGVBQWUsVUFBTSxrQkFBSywrREFBMEIsZUFBZSwrREFBMEIsVUFBVSxFQUFFLENBQUM7QUFBQSxFQUM1SjtBQUVBLE1BQUksS0FBQywyQkFBVyxjQUFjLEdBQUc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDekM7QUFFQSxRQUFNLFVBQVUsVUFBVSxRQUFRO0FBRWxDLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLE1BQU07QUFFL0MsWUFBTSwwQkFBYSxDQUFDLE9BQU8sVUFBVSxTQUFTLFlBQVksZ0JBQWdCLEVBQUUsYUFBYSxRQUFRLENBQUMsQ0FBQztBQUNyRzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -14,6 +14,8 @@ export interface FormatOptions {
14
14
  readonly paths?: string[] | undefined;
15
15
  /**
16
16
  * Whether to rewrite the source code.
17
+ *
18
+ * @default `true`
17
19
  */
18
20
  readonly rewrite?: boolean | undefined;
19
21
  }
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Contains utility functions for file system operations.
6
6
  */
7
- import type { Dirent, ObjectEncodingOptions, PathLike } from 'node:fs';
7
+ import type { Dirent, ObjectEncodingOptions, PathLike } from 'node:fs' with { 'resolution-mode': 'import' };
8
8
  /**
9
9
  * Options for controlling the format of the result when returning buffers.
10
10
  *
@@ -136,10 +136,12 @@ module.exports = __toCommonJS(json_exports);
136
136
  var import_node_fs = require('node:fs');
137
137
  var import_promises = require('node:fs/promises');
138
138
  var import_object_utils = require('../object-utils.cjs');
139
- async function editJson(path, editFn, options = {}) {
139
+ async function editJson(params) {
140
140
  const {
141
+ editFn,
142
+ path,
141
143
  shouldSkipIfMissing
142
- } = options;
144
+ } = params;
143
145
  if (shouldSkipIfMissing && !(0, import_node_fs.existsSync)(path)) {
144
146
  return;
145
147
  }
@@ -147,10 +149,12 @@ async function editJson(path, editFn, options = {}) {
147
149
  await editFn(data);
148
150
  await writeJson(path, data);
149
151
  }
150
- function editJsonSync(path, editFn, options = {}) {
152
+ function editJsonSync(params) {
151
153
  const {
154
+ editFn,
155
+ path,
152
156
  shouldSkipIfMissing
153
- } = options;
157
+ } = params;
154
158
  if (shouldSkipIfMissing && !(0, import_node_fs.existsSync)(path)) {
155
159
  return;
156
160
  }
@@ -181,4 +185,4 @@ function writeJsonSync(path, data) {
181
185
  writeJson,
182
186
  writeJsonSync
183
187
  });
184
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9qc29uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIEpTT04uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHsgdG9Kc29uIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdEpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHNraXBzIGVkaXRpbmcgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwSWZNaXNzaW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdEpzb25TeW5jfS5cbiAqL1xuZXhwb3J0IHR5cGUgRWRpdEpzb25TeW5jT3B0aW9ucyA9IEVkaXRKc29uT3B0aW9ucztcblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayBhIEpTT04gZmlsZSB1c2luZyBhIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgdG8gYmUgZWRpdGVkLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBmaWxlLlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgSlNPTiBkYXRhLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGVkaXRpbmcuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gZWRpdGVkIGFuZCB3cml0dGVuLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0SnNvbjxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBlZGl0Rm46IChkYXRhOiBUKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBvcHRpb25zOiBFZGl0SnNvbk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBpZiAoc2hvdWxkU2tpcElmTWlzc2luZyAmJiAhZXhpc3RzU3luYyhwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEpzb248VD4ocGF0aCk7XG4gIGF3YWl0IGVkaXRGbihkYXRhKTtcbiAgYXdhaXQgd3JpdGVKc29uKHBhdGgsIGRhdGEpO1xufVxuXG4vKipcbiAqIFJlYWRzLCBlZGl0cywgYW5kIHdyaXRlcyBiYWNrIGEgSlNPTiBmaWxlIHVzaW5nIGEgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZGF0YSB0byBiZSBlZGl0ZWQuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBKU09OIGRhdGEuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG5leHBvcnQgZnVuY3Rpb24gZWRpdEpzb25TeW5jPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIGVkaXRGbjogKGRhdGE6IFQpID0+IHZvaWQsXG4gIG9wdGlvbnM6IEVkaXRKc29uU3luY09wdGlvbnMgPSB7fVxuKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBpZiAoc2hvdWxkU2tpcElmTWlzc2luZyAmJiAhZXhpc3RzU3luYyhwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkYXRhID0gcmVhZEpzb25TeW5jPFQ+KHBhdGgpO1xuICBlZGl0Rm4oZGF0YSk7XG4gIHdyaXRlSnNvblN5bmMocGF0aCwgZGF0YSk7XG59XG5cbi8qKlxuICogUmVhZHMgYSBKU09OIGZpbGUgYW5kIHBhcnNlcyBpdHMgY29udGVudHMgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0IG9mIHR5cGUgYFRgLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIHRvIHdoaWNoIHRoZSBKU09OIGNvbnRlbnQgd2lsbCBiZSBwYXJzZWQuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBhcnNlZCBKU09OIG9iamVjdCBvZiB0eXBlIGBUYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRKc29uPFQ+KHBhdGg6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmLTgnKSkgYXMgVDtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIEpTT04gZmlsZSBhbmQgcGFyc2VzIGl0cyBjb250ZW50cyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBgVGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgdG8gd2hpY2ggdGhlIEpTT04gY29udGVudCB3aWxsIGJlIHBhcnNlZC5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgSlNPTiBvYmplY3Qgb2YgdHlwZSBgVGAuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKc29uU3luYzxUPihwYXRoOiBzdHJpbmcpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpKSBhcyBUO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIGEgSlNPTiBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIEpTT04gZmlsZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVKc29uKHBhdGg6IHN0cmluZywgZGF0YTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgYCR7dG9Kc29uKGRhdGEpfVxcbmApO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIGEgSlNPTiBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIEpTT04gZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlSnNvblN5bmMocGF0aDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gIHdyaXRlRmlsZVN5bmMocGF0aCwgYCR7dG9Kc29uKGRhdGEpfVxcbmApO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHFCQUlPO0FBQ1Asc0JBR087QUFFUCwwQkFBdUI7QUEyQnZCLGVBQXNCLFNBQ3BCLE1BQ0EsUUFDQSxVQUEyQixDQUFDLEdBQ2I7QUFDZixRQUFNO0FBQUEsSUFDSjtBQUFBLEVBQ0YsSUFBSTtBQUNKLE1BQUksdUJBQXVCLEtBQUMsMkJBQVcsSUFBSSxHQUFHO0FBQzVDO0FBQUEsRUFDRjtBQUNBLFFBQU0sT0FBTyxNQUFNLFNBQVksSUFBSTtBQUNuQyxRQUFNLE9BQU8sSUFBSTtBQUNqQixRQUFNLFVBQVUsTUFBTSxJQUFJO0FBQzVCO0FBV08sU0FBUyxhQUNkLE1BQ0EsUUFDQSxVQUErQixDQUFDLEdBQzFCO0FBQ04sUUFBTTtBQUFBLElBQ0o7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLHVCQUF1QixLQUFDLDJCQUFXLElBQUksR0FBRztBQUM1QztBQUFBLEVBQ0Y7QUFDQSxRQUFNLE9BQU8sYUFBZ0IsSUFBSTtBQUNqQyxTQUFPLElBQUk7QUFDWCxnQkFBYyxNQUFNLElBQUk7QUFDMUI7QUFTQSxlQUFzQixTQUFZLE1BQTBCO0FBQzFELFNBQU8sS0FBSyxNQUFNLFVBQU0sMEJBQVMsTUFBTSxPQUFPLENBQUM7QUFDakQ7QUFVTyxTQUFTLGFBQWdCLE1BQWlCO0FBQy9DLFNBQU8sS0FBSyxVQUFNLDZCQUFhLE1BQU0sT0FBTyxDQUFDO0FBQy9DO0FBU0EsZUFBc0IsVUFBVSxNQUFjLE1BQThCO0FBQzFFLFlBQU0sMkJBQVUsTUFBTSxPQUFHLDRCQUFPLElBQUksQ0FBQztBQUFBLENBQUk7QUFDM0M7QUFRTyxTQUFTLGNBQWMsTUFBYyxNQUFxQjtBQUMvRCxvQ0FBYyxNQUFNLE9BQUcsNEJBQU8sSUFBSSxDQUFDO0FBQUEsQ0FBSTtBQUN6QzsiLAogICJuYW1lcyI6IFtdCn0K
188
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9qc29uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIEpTT04uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHsgdG9Kc29uIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdEpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHNraXBzIGVkaXRpbmcgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBJZk1pc3Npbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlZGl0SnNvbn0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgdG8gYmUgZWRpdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRKc29uUGFyYW1zPFQ+IGV4dGVuZHMgRWRpdEpzb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgSlNPTiBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBwYXJzZWQgSlNPTiBkYXRhIHRvIGVkaXQuXG4gICAqL1xuICBlZGl0Rm4odGhpczogdm9pZCwgZGF0YTogVCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRKc29uU3luY30uXG4gKi9cbmV4cG9ydCB0eXBlIEVkaXRKc29uU3luY09wdGlvbnMgPSBFZGl0SnNvbk9wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVkaXRKc29uU3luY30uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgdG8gYmUgZWRpdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRKc29uU3luY1BhcmFtczxUPiBleHRlbmRzIEVkaXRKc29uU3luY09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBKU09OIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIHBhcnNlZCBKU09OIGRhdGEgdG8gZWRpdC5cbiAgICovXG4gIGVkaXRGbih0aGlzOiB2b2lkLCBkYXRhOiBUKTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayBhIEpTT04gZmlsZSB1c2luZyBhIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgdG8gYmUgZWRpdGVkLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gZWRpdGVkIGFuZCB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdEpzb248VD4ocGFyYW1zOiBFZGl0SnNvblBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZWRpdEZuLFxuICAgIHBhdGgsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gcGFyYW1zO1xuICBpZiAoc2hvdWxkU2tpcElmTWlzc2luZyAmJiAhZXhpc3RzU3luYyhwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEpzb248VD4ocGF0aCk7XG4gIGF3YWl0IGVkaXRGbihkYXRhKTtcbiAgYXdhaXQgd3JpdGVKc29uKHBhdGgsIGRhdGEpO1xufVxuXG4vKipcbiAqIFJlYWRzLCBlZGl0cywgYW5kIHdyaXRlcyBiYWNrIGEgSlNPTiBmaWxlIHVzaW5nIGEgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZGF0YSB0byBiZSBlZGl0ZWQuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVkaXRKc29uU3luYzxUPihwYXJhbXM6IEVkaXRKc29uU3luY1BhcmFtczxUPik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgZWRpdEZuLFxuICAgIHBhdGgsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gcGFyYW1zO1xuICBpZiAoc2hvdWxkU2tpcElmTWlzc2luZyAmJiAhZXhpc3RzU3luYyhwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkYXRhID0gcmVhZEpzb25TeW5jPFQ+KHBhdGgpO1xuICBlZGl0Rm4oZGF0YSk7XG4gIHdyaXRlSnNvblN5bmMocGF0aCwgZGF0YSk7XG59XG5cbi8qKlxuICogUmVhZHMgYSBKU09OIGZpbGUgYW5kIHBhcnNlcyBpdHMgY29udGVudHMgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0IG9mIHR5cGUgYFRgLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIHRvIHdoaWNoIHRoZSBKU09OIGNvbnRlbnQgd2lsbCBiZSBwYXJzZWQuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBhcnNlZCBKU09OIG9iamVjdCBvZiB0eXBlIGBUYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRKc29uPFQ+KHBhdGg6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmLTgnKSkgYXMgVDtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIEpTT04gZmlsZSBhbmQgcGFyc2VzIGl0cyBjb250ZW50cyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBgVGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgdG8gd2hpY2ggdGhlIEpTT04gY29udGVudCB3aWxsIGJlIHBhcnNlZC5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgSlNPTiBvYmplY3Qgb2YgdHlwZSBgVGAuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKc29uU3luYzxUPihwYXRoOiBzdHJpbmcpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpKSBhcyBUO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIGEgSlNPTiBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIEpTT04gZmlsZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVKc29uKHBhdGg6IHN0cmluZywgZGF0YTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgYCR7dG9Kc29uKGRhdGEpfVxcbmApO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIGEgSlNPTiBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIEpTT04gZmlsZS5cbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIEpTT04gZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlSnNvblN5bmMocGF0aDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gIHdyaXRlRmlsZVN5bmMocGF0aCwgYCR7dG9Kc29uKGRhdGEpfVxcbmApO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHFCQUlPO0FBQ1Asc0JBR087QUFFUCwwQkFBdUI7QUFnRXZCLGVBQXNCLFNBQVksUUFBMEM7QUFDMUUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLE1BQUksdUJBQXVCLEtBQUMsMkJBQVcsSUFBSSxHQUFHO0FBQzVDO0FBQUEsRUFDRjtBQUNBLFFBQU0sT0FBTyxNQUFNLFNBQVksSUFBSTtBQUNuQyxRQUFNLE9BQU8sSUFBSTtBQUNqQixRQUFNLFVBQVUsTUFBTSxJQUFJO0FBQzVCO0FBUU8sU0FBUyxhQUFnQixRQUFxQztBQUNuRSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osTUFBSSx1QkFBdUIsS0FBQywyQkFBVyxJQUFJLEdBQUc7QUFDNUM7QUFBQSxFQUNGO0FBQ0EsUUFBTSxPQUFPLGFBQWdCLElBQUk7QUFDakMsU0FBTyxJQUFJO0FBQ1gsZ0JBQWMsTUFBTSxJQUFJO0FBQzFCO0FBU0EsZUFBc0IsU0FBWSxNQUEwQjtBQUMxRCxTQUFPLEtBQUssTUFBTSxVQUFNLDBCQUFTLE1BQU0sT0FBTyxDQUFDO0FBQ2pEO0FBVU8sU0FBUyxhQUFnQixNQUFpQjtBQUMvQyxTQUFPLEtBQUssVUFBTSw2QkFBYSxNQUFNLE9BQU8sQ0FBQztBQUMvQztBQVNBLGVBQXNCLFVBQVUsTUFBYyxNQUE4QjtBQUMxRSxZQUFNLDJCQUFVLE1BQU0sT0FBRyw0QkFBTyxJQUFJLENBQUM7QUFBQSxDQUFJO0FBQzNDO0FBUU8sU0FBUyxjQUFjLE1BQWMsTUFBcUI7QUFDL0Qsb0NBQWMsTUFBTSxPQUFHLDRCQUFPLElBQUksQ0FBQztBQUFBLENBQUk7QUFDekM7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -4,39 +4,71 @@
4
4
  *
5
5
  * Contains utility functions for JSON.
6
6
  */
7
- import type { Promisable } from 'type-fest';
7
+ import type { Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
8
8
  /**
9
9
  * Options for {@link editJson}.
10
10
  */
11
11
  export interface EditJsonOptions {
12
12
  /**
13
13
  * If `true`, skips editing if the file does not exist.
14
+ *
15
+ * @default `false`
14
16
  */
15
17
  readonly shouldSkipIfMissing?: boolean;
16
18
  }
19
+ /**
20
+ * Parameters for {@link editJson}.
21
+ *
22
+ * @typeParam T - The type of the data to be edited.
23
+ */
24
+ export interface EditJsonParams<T> extends EditJsonOptions {
25
+ /**
26
+ * The function to edit the parsed JSON data.
27
+ *
28
+ * @param data - The parsed JSON data to edit.
29
+ */
30
+ editFn(this: void, data: T): Promisable<void>;
31
+ /**
32
+ * The path to the JSON file.
33
+ */
34
+ readonly path: string;
35
+ }
17
36
  /**
18
37
  * Options for {@link editJsonSync}.
19
38
  */
20
39
  export type EditJsonSyncOptions = EditJsonOptions;
40
+ /**
41
+ * Parameters for {@link editJsonSync}.
42
+ *
43
+ * @typeParam T - The type of the data to be edited.
44
+ */
45
+ export interface EditJsonSyncParams<T> extends EditJsonSyncOptions {
46
+ /**
47
+ * The function to edit the parsed JSON data.
48
+ *
49
+ * @param data - The parsed JSON data to edit.
50
+ */
51
+ editFn(this: void, data: T): void;
52
+ /**
53
+ * The path to the JSON file.
54
+ */
55
+ readonly path: string;
56
+ }
21
57
  /**
22
58
  * Reads, edits, and writes back a JSON file using a provided edit function.
23
59
  *
24
60
  * @typeParam T - The type of the data to be edited.
25
- * @param path - The path to the JSON file.
26
- * @param editFn - The function to edit the parsed JSON data.
27
- * @param options - Additional options for editing.
61
+ * @param params - The parameters for the function.
28
62
  * @returns A {@link Promise} that resolves when the file has been edited and written.
29
63
  */
30
- export declare function editJson<T>(path: string, editFn: (data: T) => Promisable<void>, options?: EditJsonOptions): Promise<void>;
64
+ export declare function editJson<T>(params: EditJsonParams<T>): Promise<void>;
31
65
  /**
32
66
  * Reads, edits, and writes back a JSON file using a provided edit function.
33
67
  *
34
68
  * @typeParam T - The type of the data to be edited.
35
- * @param path - The path to the JSON file.
36
- * @param editFn - The function to edit the parsed JSON data.
37
- * @param options - Additional options for editing.
69
+ * @param params - The parameters for the function.
38
70
  */
39
- export declare function editJsonSync<T>(path: string, editFn: (data: T) => void, options?: EditJsonSyncOptions): void;
71
+ export declare function editJsonSync<T>(params: EditJsonSyncParams<T>): void;
40
72
  /**
41
73
  * Reads a JSON file and parses its contents into a JavaScript object of type `T`.
42
74
  *