obsidian-dev-utils 51.0.1 → 51.1.6

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 (215) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/lib/cjs/async.cjs +2 -2
  3. package/dist/lib/cjs/blob.cjs +2 -2
  4. package/dist/lib/cjs/debug.cjs +7 -8
  5. package/dist/lib/cjs/library.cjs +1 -1
  6. package/dist/lib/cjs/object-utils.cjs +23 -23
  7. package/dist/lib/cjs/obsidian/app.cjs +4 -3
  8. package/dist/lib/cjs/obsidian/components/setting-components/multiple-file-component.cjs +3 -2
  9. package/dist/lib/cjs/obsidian/components/setting-components/typed-text-component.cjs +1 -1
  10. package/dist/lib/cjs/obsidian/components/setting-components/validator-component.cjs +2 -2
  11. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.cjs +1 -1
  12. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.d.cts +3 -1
  13. package/dist/lib/cjs/obsidian/dataview-link.cjs +1 -1
  14. package/dist/lib/cjs/obsidian/dataview-link.d.cts +1 -1
  15. package/dist/lib/cjs/obsidian/file-change.cjs +1 -1
  16. package/dist/lib/cjs/obsidian/file-system.cjs +2 -2
  17. package/dist/lib/cjs/obsidian/i18n/custom-type-options-base.cjs +1 -1
  18. package/dist/lib/cjs/obsidian/i18n/custom-type-options-base.d.cts +12 -6
  19. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  20. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  21. package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +143 -0
  22. package/dist/lib/cjs/obsidian/is-in-obsidian.d.cts +11 -0
  23. package/dist/lib/cjs/obsidian/link.cjs +37 -37
  24. package/dist/lib/cjs/obsidian/markdown.cjs +1 -1
  25. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -2
  26. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +1 -1
  27. package/dist/lib/cjs/obsidian/plugin/path-settings.cjs +4 -5
  28. package/dist/lib/cjs/obsidian/plugin/plugin-settings-manager-base.cjs +2 -2
  29. package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +2 -2
  30. package/dist/lib/cjs/obsidian/resource-url.cjs +3 -2
  31. package/dist/lib/cjs/obsidian/vault.cjs +2 -2
  32. package/dist/lib/cjs/reg-exp.cjs +5 -6
  33. package/dist/lib/cjs/script-utils/build.cjs +5 -5
  34. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/changeExtensionPlugin.cjs +3 -3
  35. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copyToObsidianPluginsFolderPlugin.cjs +12 -11
  36. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +4 -4
  37. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fixSourceMapsPlugin.cjs +6 -5
  38. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +15 -12
  39. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocessPlugin.cjs +3 -3
  40. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/renameCssPlugin.cjs +5 -4
  41. package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +1 -1
  42. package/dist/lib/cjs/script-utils/cli-utils.cjs +14 -4
  43. package/dist/lib/cjs/script-utils/code-generator.cjs +3 -3
  44. package/dist/lib/cjs/script-utils/commitlint-config.cjs +134 -0
  45. package/dist/lib/cjs/script-utils/commitlint-config.d.cts +10 -0
  46. package/dist/lib/cjs/script-utils/exec.cjs +99 -10
  47. package/dist/lib/cjs/script-utils/exec.d.cts +35 -6
  48. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +8 -6
  49. package/dist/lib/cjs/script-utils/formatters/dprint.d.cts +15 -2
  50. package/dist/lib/cjs/script-utils/fs.cjs +8 -11
  51. package/dist/lib/cjs/script-utils/fs.d.cts +1 -1
  52. package/dist/lib/cjs/script-utils/index.cjs +7 -4
  53. package/dist/lib/cjs/script-utils/index.d.cts +2 -1
  54. package/dist/lib/cjs/script-utils/json.cjs +9 -8
  55. package/dist/lib/cjs/script-utils/linters/cspell.cjs +5 -3
  56. package/dist/lib/cjs/script-utils/linters/cspell.d.cts +14 -1
  57. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +32 -20
  58. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +142 -0
  59. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +1 -0
  60. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-params.cjs +174 -0
  61. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-params.d.cts +12 -0
  62. package/dist/lib/cjs/script-utils/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +4 -2
  63. package/dist/lib/cjs/script-utils/linters/eslint.cjs +9 -6
  64. package/dist/lib/cjs/script-utils/linters/eslint.d.cts +15 -2
  65. package/dist/lib/cjs/script-utils/linters/index.cjs +4 -1
  66. package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
  67. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +13 -10
  68. package/dist/lib/cjs/script-utils/linters/markdownlint.d.cts +15 -2
  69. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +143 -0
  70. package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +14 -0
  71. package/dist/lib/cjs/script-utils/npm-publish.cjs +16 -5
  72. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +2 -1
  73. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +2 -0
  74. package/dist/lib/cjs/script-utils/root.cjs +3 -3
  75. package/dist/lib/cjs/script-utils/root.d.cts +3 -7
  76. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +6 -3
  77. package/dist/lib/cjs/script-utils/test-runners/vitest.d.cts +12 -1
  78. package/dist/lib/cjs/script-utils/version.cjs +22 -31
  79. package/dist/lib/cjs/string.cjs +4 -13
  80. package/dist/lib/cjs/string.d.cts +2 -2
  81. package/dist/lib/cjs/type-guards.cjs +8 -1
  82. package/dist/lib/cjs/type-guards.d.cts +11 -1
  83. package/dist/lib/esm/async.mjs +6 -3
  84. package/dist/lib/esm/blob.mjs +2 -2
  85. package/dist/lib/esm/debug.mjs +5 -6
  86. package/dist/lib/esm/library.mjs +1 -1
  87. package/dist/lib/esm/object-utils.mjs +24 -23
  88. package/dist/lib/esm/obsidian/app.mjs +4 -3
  89. package/dist/lib/esm/obsidian/components/setting-components/multiple-file-component.mjs +3 -2
  90. package/dist/lib/esm/obsidian/components/setting-components/typed-text-component.mjs +1 -1
  91. package/dist/lib/esm/obsidian/components/setting-components/validator-component.mjs +2 -2
  92. package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.d.mts +3 -1
  93. package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.mjs +1 -1
  94. package/dist/lib/esm/obsidian/dataview-link.d.mts +1 -1
  95. package/dist/lib/esm/obsidian/dataview-link.mjs +1 -1
  96. package/dist/lib/esm/obsidian/file-change.mjs +1 -1
  97. package/dist/lib/esm/obsidian/file-system.mjs +3 -2
  98. package/dist/lib/esm/obsidian/i18n/custom-type-options-base.d.mts +12 -6
  99. package/dist/lib/esm/obsidian/i18n/custom-type-options-base.mjs +1 -1
  100. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  101. package/dist/lib/esm/obsidian/index.mjs +3 -1
  102. package/dist/lib/esm/obsidian/is-in-obsidian.d.mts +11 -0
  103. package/dist/lib/esm/obsidian/is-in-obsidian.mjs +39 -0
  104. package/dist/lib/esm/obsidian/link.mjs +38 -41
  105. package/dist/lib/esm/obsidian/markdown.mjs +1 -1
  106. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +1 -1
  107. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -2
  108. package/dist/lib/esm/obsidian/plugin/path-settings.mjs +4 -5
  109. package/dist/lib/esm/obsidian/plugin/plugin-settings-manager-base.mjs +3 -2
  110. package/dist/lib/esm/obsidian/rename-delete-handler.mjs +6 -3
  111. package/dist/lib/esm/obsidian/resource-url.mjs +3 -2
  112. package/dist/lib/esm/obsidian/vault.mjs +3 -2
  113. package/dist/lib/esm/reg-exp.mjs +5 -6
  114. package/dist/lib/esm/script-utils/build.mjs +6 -6
  115. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/changeExtensionPlugin.mjs +2 -2
  116. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copyToObsidianPluginsFolderPlugin.mjs +8 -8
  117. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +5 -5
  118. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fixSourceMapsPlugin.mjs +5 -5
  119. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +10 -11
  120. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocessPlugin.mjs +2 -2
  121. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/renameCssPlugin.mjs +3 -5
  122. package/dist/lib/esm/script-utils/bundlers/esbuild.mjs +1 -1
  123. package/dist/lib/esm/script-utils/cli-utils.mjs +2 -2
  124. package/dist/lib/esm/script-utils/code-generator.mjs +2 -2
  125. package/dist/lib/esm/script-utils/commitlint-config.d.mts +10 -0
  126. package/dist/lib/esm/script-utils/commitlint-config.mjs +28 -0
  127. package/dist/lib/esm/script-utils/exec.d.mts +35 -6
  128. package/dist/lib/esm/script-utils/exec.mjs +84 -8
  129. package/dist/lib/esm/script-utils/formatters/dprint.d.mts +15 -2
  130. package/dist/lib/esm/script-utils/formatters/dprint.mjs +6 -4
  131. package/dist/lib/esm/script-utils/fs.d.mts +1 -1
  132. package/dist/lib/esm/script-utils/fs.mjs +5 -8
  133. package/dist/lib/esm/script-utils/index.d.mts +2 -1
  134. package/dist/lib/esm/script-utils/index.mjs +5 -3
  135. package/dist/lib/esm/script-utils/json.mjs +7 -5
  136. package/dist/lib/esm/script-utils/linters/cspell.d.mts +14 -1
  137. package/dist/lib/esm/script-utils/linters/cspell.mjs +5 -3
  138. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +32 -20
  139. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +1 -0
  140. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +26 -0
  141. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-params.d.mts +12 -0
  142. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-params.mjs +68 -0
  143. package/dist/lib/esm/script-utils/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +4 -2
  144. package/dist/lib/esm/script-utils/linters/eslint.d.mts +15 -2
  145. package/dist/lib/esm/script-utils/linters/eslint.mjs +7 -7
  146. package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
  147. package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
  148. package/dist/lib/esm/script-utils/linters/markdownlint.d.mts +15 -2
  149. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +13 -11
  150. package/dist/lib/esm/script-utils/nano-staged-config.d.mts +14 -0
  151. package/dist/lib/esm/script-utils/nano-staged-config.mjs +37 -0
  152. package/dist/lib/esm/script-utils/npm-publish.mjs +3 -6
  153. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +2 -0
  154. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +2 -1
  155. package/dist/lib/esm/script-utils/root.d.mts +3 -7
  156. package/dist/lib/esm/script-utils/root.mjs +2 -2
  157. package/dist/lib/esm/script-utils/test-runners/vitest.d.mts +12 -1
  158. package/dist/lib/esm/script-utils/test-runners/vitest.mjs +6 -3
  159. package/dist/lib/esm/script-utils/version.mjs +16 -27
  160. package/dist/lib/esm/string.d.mts +2 -2
  161. package/dist/lib/esm/string.mjs +7 -13
  162. package/dist/lib/esm/type-guards.d.mts +11 -1
  163. package/dist/lib/esm/type-guards.mjs +7 -1
  164. package/dist/scripts/build/build-clean.ts +4 -0
  165. package/dist/scripts/build/build-compile-svelte.ts +4 -0
  166. package/dist/scripts/build/build-compile-typescript.ts +4 -0
  167. package/dist/scripts/build/build-compile.ts +4 -0
  168. package/dist/scripts/build/build-static.ts +4 -0
  169. package/dist/scripts/bundlers/esbuild/build.ts +4 -0
  170. package/dist/scripts/bundlers/esbuild/dev.ts +4 -0
  171. package/dist/scripts/formatters/dprint/format-check.ts +8 -0
  172. package/dist/scripts/formatters/dprint/format.ts +8 -0
  173. package/dist/scripts/linters/cspell/spellcheck.ts +8 -0
  174. package/dist/scripts/linters/eslint/lint-fix.ts +8 -0
  175. package/dist/scripts/linters/eslint/lint.ts +8 -0
  176. package/dist/scripts/linters/markdownlint/lint-md-fix.ts +8 -0
  177. package/dist/scripts/linters/markdownlint/lint-md.ts +8 -0
  178. package/dist/scripts/test-runners/vitest/test-coverage.ts +4 -0
  179. package/dist/scripts/test-runners/vitest/test-watch.ts +4 -0
  180. package/dist/scripts/test-runners/vitest/test.ts +4 -0
  181. package/dist/scripts/version/version.ts +7 -0
  182. package/obsidian/is-in-obsidian/package.json +6 -0
  183. package/package.json +30 -4
  184. package/script-utils/commitlint-config/package.json +6 -0
  185. package/script-utils/linters/eslint-rules/index/package.json +6 -0
  186. package/script-utils/linters/eslint-rules/no-used-underscore-params/package.json +6 -0
  187. package/script-utils/linters/eslint-rules/package.json +6 -0
  188. package/script-utils/nano-staged-config/package.json +6 -0
  189. package/dist/lib/cjs/script-utils/linters/eslint-types/@types/@guardian__eslint-plugin-tsdoc-required.d.cts +0 -14
  190. package/dist/lib/cjs/script-utils/node-modules.cjs +0 -207
  191. package/dist/lib/cjs/script-utils/node-modules.d.cts +0 -17
  192. package/dist/lib/esm/script-utils/linters/eslint-types/@types/@guardian__eslint-plugin-tsdoc-required.d.mts +0 -14
  193. package/dist/lib/esm/script-utils/node-modules.d.mts +0 -17
  194. package/dist/lib/esm/script-utils/node-modules.mjs +0 -92
  195. package/dist/scripts/default/build-clean.ts +0 -5
  196. package/dist/scripts/default/build-compile-svelte.ts +0 -5
  197. package/dist/scripts/default/build-compile-typescript.ts +0 -5
  198. package/dist/scripts/default/build-compile.ts +0 -5
  199. package/dist/scripts/default/build-static.ts +0 -5
  200. package/dist/scripts/default/build.ts +0 -9
  201. package/dist/scripts/default/dev.ts +0 -10
  202. package/dist/scripts/default/format-check.ts +0 -5
  203. package/dist/scripts/default/format.ts +0 -5
  204. package/dist/scripts/default/lint-fix.ts +0 -5
  205. package/dist/scripts/default/lint.ts +0 -5
  206. package/dist/scripts/default/publish.ts +0 -5
  207. package/dist/scripts/default/spellcheck.ts +0 -5
  208. package/dist/scripts/default/version.ts +0 -5
  209. package/dist/scripts/examples/build.customPlugin.ts +0 -38
  210. package/dist/scripts/examples/build.svelteConditions.ts +0 -18
  211. package/dist/scripts/examples/eslint.config.extend.mts +0 -14
  212. package/dist/scripts/examples/eslint.config.no-dev-utils.mts +0 -15
  213. package/dist/scripts/examples/format.prettier.ts +0 -25
  214. package/script-utils/linters/eslint-types/@types/@guardian__eslint-plugin-tsdoc-required/package.json +0 -4
  215. package/script-utils/node-modules/package.json +0 -6
@@ -3,9 +3,22 @@
3
3
  *
4
4
  * Lint markdown documentation using `markdownlint-cli2` and `linkinator`.
5
5
  */
6
+ /**
7
+ * Parameters for the {@link lint} function.
8
+ */
9
+ export interface LintParams {
10
+ /**
11
+ * Optional file paths to lint. If omitted, lints the entire project.
12
+ */
13
+ paths?: string[] | undefined;
14
+ /**
15
+ * Whether to fix linting issues automatically.
16
+ */
17
+ shouldFix?: boolean | undefined;
18
+ }
6
19
  /**
7
20
  * Lint markdown documentation using `markdownlint-cli2` and `linkinator`.
8
21
  *
9
- * @param shouldFix - Whether to fix linting issues automatically.
22
+ * @param params - The {@link LintParams}.
10
23
  */
11
- export declare function lint(shouldFix?: boolean): Promise<void>;
24
+ export declare function lint(params?: LintParams): Promise<void>;
@@ -19,6 +19,11 @@ if you want to view the source, please visit the github repository of this plugi
19
19
  globalThis.process = browserProcess;
20
20
  })();
21
21
 
22
+ import { existsSync } from "node:fs";
23
+ import {
24
+ cp,
25
+ glob
26
+ } from "node:fs/promises";
22
27
  import { toArray } from "../../async.mjs";
23
28
  import { getLibDebugger } from "../../debug.mjs";
24
29
  import { ObsidianPluginRepoPaths } from "../../obsidian/plugin/obsidian-plugin-repo-paths.mjs";
@@ -27,18 +32,14 @@ import {
27
32
  join
28
33
  } from "../../path.mjs";
29
34
  import { assertNonNullable } from "../../type-guards.mjs";
30
- import {
31
- cp,
32
- existsSync,
33
- glob
34
- } from "../node-modules.mjs";
35
35
  import { ObsidianDevUtilsRepoPaths } from "../obsidian-dev-utils-repo-paths.mjs";
36
36
  import {
37
37
  execFromRoot,
38
38
  getRootFolder,
39
39
  resolvePathFromRootSafe
40
40
  } from "../root.mjs";
41
- async function lint(shouldFix = false) {
41
+ async function lint(params) {
42
+ const { paths, shouldFix = false } = params ?? {};
42
43
  const configFiles = [
43
44
  ObsidianPluginRepoPaths.MarkdownlintCli2ConfigJsonc,
44
45
  ObsidianPluginRepoPaths.MarkdownlintCli2ConfigYaml,
@@ -68,8 +69,9 @@ async function lint(shouldFix = false) {
68
69
  resolvePathFromRootSafe(ObsidianPluginRepoPaths.MarkdownlintCli2ConfigMts)
69
70
  );
70
71
  }
71
- await execFromRoot(["npx", "markdownlint-cli2", ...shouldFix ? ["--fix"] : [], ObsidianPluginRepoPaths.CurrentFolder]);
72
- const mdFiles = await toArray(glob(["**/*.md"], {
72
+ const targets = paths?.length ? paths : [ObsidianPluginRepoPaths.CurrentFolder];
73
+ await execFromRoot(["npx", "markdownlint-cli2", ...shouldFix ? ["--fix"] : [], { batchedArgs: targets }]);
74
+ const mdFiles = paths?.length ? paths : await toArray(glob(["**/*.md"], {
73
75
  exclude: [
74
76
  ".git/**",
75
77
  "dist/**",
@@ -79,7 +81,6 @@ async function lint(shouldFix = false) {
79
81
  await execFromRoot([
80
82
  "npx",
81
83
  "linkinator",
82
- ...mdFiles,
83
84
  "--retry",
84
85
  "--retry-errors",
85
86
  "--retry-errors-count",
@@ -89,10 +90,11 @@ async function lint(shouldFix = false) {
89
90
  "--url-rewrite-search",
90
91
  "https://www\\.npmjs\\.com/package/",
91
92
  "--url-rewrite-replace",
92
- "https://registry.npmjs.org/"
93
+ "https://registry.npmjs.org/",
94
+ { batchedArgs: mdFiles }
93
95
  ]);
94
96
  }
95
97
  export {
96
98
  lint
97
99
  };
98
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBMaW50IG1hcmtkb3duIGRvY3VtZW50YXRpb24gdXNpbmcgYG1hcmtkb3dubGludC1jbGkyYCBhbmQgYGxpbmtpbmF0b3JgLlxuICovXG5cbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldEZvbGRlck5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7XG4gIGNwLFxuICBleGlzdHNTeW5jLFxuICBnbG9iXG59IGZyb20gJy4uL25vZGUtbW9kdWxlcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBMaW50IG1hcmtkb3duIGRvY3VtZW50YXRpb24gdXNpbmcgYG1hcmtkb3dubGludC1jbGkyYCBhbmQgYGxpbmtpbmF0b3JgLlxuICpcbiAqIEBwYXJhbSBzaG91bGRGaXggLSBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChzaG91bGRGaXggPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0NqcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb25jLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdZbWwsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGNvbmZpZ0ZpbGVFeGlzdCA9IGNvbmZpZ0ZpbGVzLnNvbWUoKGNvbmZpZ0ZpbGUpID0+IHtcbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKGNvbmZpZ0ZpbGUpO1xuICAgIHJldHVybiBleGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgaWYgKCFjb25maWdGaWxlRXhpc3QpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignbWFya2Rvd25saW50OmxpbnQnKSgnbWFya2Rvd25saW50IGNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIENyZWF0aW5nIGRlZmF1bHQgY29uZmlnLi4uJyk7XG4gICAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwYWNrYWdlRm9sZGVyLCAnUGFja2FnZSBmb2xkZXIgbm90IGZvdW5kJyk7XG4gICAgYXdhaXQgY3AoXG4gICAgICBqb2luKHBhY2thZ2VGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzKSxcbiAgICAgIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMpXG4gICAgKTtcblxuICAgIGF3YWl0IGNwKFxuICAgICAgam9pbihwYWNrYWdlRm9sZGVyLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3QsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ010cyksXG4gICAgICByZXNvbHZlUGF0aEZyb21Sb290U2FmZShPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTXRzKVxuICAgICk7XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWyducHgnLCAnbWFya2Rvd25saW50LWNsaTInLCAuLi4oc2hvdWxkRml4ID8gWyctLWZpeCddIDogW10pLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DdXJyZW50Rm9sZGVyXSk7XG5cbiAgY29uc3QgbWRGaWxlcyA9IGF3YWl0IHRvQXJyYXkoZ2xvYihbJyoqLyoubWQnXSwge1xuICAgIGV4Y2x1ZGU6IFtcbiAgICAgICcuZ2l0LyoqJyxcbiAgICAgICdkaXN0LyoqJyxcbiAgICAgICdub2RlX21vZHVsZXMvKionXG4gICAgXVxuICB9KSk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgJ25weCcsXG4gICAgJ2xpbmtpbmF0b3InLFxuICAgIC4uLm1kRmlsZXMsXG4gICAgJy0tcmV0cnknLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUnLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgJ2h0dHBzOi8vd3d3XFxcXC5ucG1qc1xcXFwuY29tL3BhY2thZ2UvJyxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJ1xuICBdKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsZUFBZTtBQUN4QixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsaUNBQWlDO0FBQzFDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU9QLGVBQXNCLEtBQUssWUFBWSxPQUFzQjtBQUMzRCxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sa0JBQWtCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDdkQsVUFBTSxpQkFBaUIsd0JBQXdCLFVBQVU7QUFDekQsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLGlCQUFpQjtBQUNwQixtQkFBZSxtQkFBbUIsRUFBRSx1RUFBdUU7QUFDM0csVUFBTSxnQkFBZ0IsY0FBYyxjQUFjLFlBQVksR0FBRyxDQUFDO0FBQ2xFLHNCQUFrQixlQUFlLDBCQUEwQjtBQUMzRCxVQUFNO0FBQUEsTUFDSixLQUFLLGVBQWUsMEJBQTBCLE1BQU0sMEJBQTBCLHlCQUF5QjtBQUFBLE1BQ3ZHLHdCQUF3Qix3QkFBd0IseUJBQXlCO0FBQUEsSUFDM0U7QUFFQSxVQUFNO0FBQUEsTUFDSixLQUFLLGVBQWUsMEJBQTBCLE1BQU0sMEJBQTBCLHlCQUF5QjtBQUFBLE1BQ3ZHLHdCQUF3Qix3QkFBd0IseUJBQXlCO0FBQUEsSUFDM0U7QUFBQSxFQUNGO0FBRUEsUUFBTSxhQUFhLENBQUMsT0FBTyxxQkFBcUIsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSx3QkFBd0IsYUFBYSxDQUFDO0FBRXZILFFBQU0sVUFBVSxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsR0FBRztBQUFBLElBQzlDLFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDLENBQUM7QUFDRixRQUFNLGFBQWE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxJQUNIO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
100
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBMaW50IG1hcmtkb3duIGRvY3VtZW50YXRpb24gdXNpbmcgYG1hcmtkb3dubGludC1jbGkyYCBhbmQgYGxpbmtpbmF0b3JgLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBnbG9iXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi8uLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luXG59IGZyb20gJy4uLy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIGxpbnR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRQYXJhbXMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBMaW50IG1hcmtkb3duIGRvY3VtZW50YXRpb24gdXNpbmcgYG1hcmtkb3dubGludC1jbGkyYCBhbmQgYGxpbmtpbmF0b3JgLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIExpbnRQYXJhbXN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChwYXJhbXM/OiBMaW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHNob3VsZEZpeCA9IGZhbHNlIH0gPSBwYXJhbXMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdKc29uYyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnWWFtbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbmMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdZYW1sLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1ltbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnTWpzXG4gIF07XG5cbiAgY29uc3QgY29uZmlnRmlsZUV4aXN0ID0gY29uZmlnRmlsZXMuc29tZSgoY29uZmlnRmlsZSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoY29uZmlnRmlsZSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWNvbmZpZ0ZpbGVFeGlzdCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludCcpKCdtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHBhY2thZ2VGb2xkZXIsICdQYWNrYWdlIGZvbGRlciBub3QgZm91bmQnKTtcbiAgICBhd2FpdCBjcChcbiAgICAgIGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0LCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMpLFxuICAgICAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcylcbiAgICApO1xuXG4gICAgYXdhaXQgY3AoXG4gICAgICBqb2luKHBhY2thZ2VGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTXRzKSxcbiAgICAgIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNdHMpXG4gICAgKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DdXJyZW50Rm9sZGVyXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ21hcmtkb3dubGludC1jbGkyJywgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJnczogdGFyZ2V0cyB9XSk7XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCBtZEZpbGVzID0gcGF0aHM/Lmxlbmd0aFxuICAgID8gcGF0aHNcbiAgICA6IGF3YWl0IHRvQXJyYXkoZ2xvYihbJyoqLyoubWQnXSwge1xuICAgICAgZXhjbHVkZTogW1xuICAgICAgICAnLmdpdC8qKicsXG4gICAgICAgICdkaXN0LyoqJyxcbiAgICAgICAgJ25vZGVfbW9kdWxlcy8qKidcbiAgICAgIF1cbiAgICB9KSk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgJ25weCcsXG4gICAgJ2xpbmtpbmF0b3InLFxuICAgICctLXJldHJ5JyxcbiAgICAnLS1yZXRyeS1lcnJvcnMnLFxuICAgICctLXJldHJ5LWVycm9ycy1jb3VudCcsXG4gICAgJzMnLFxuICAgICctLXJldHJ5LWVycm9ycy1qaXR0ZXInLFxuICAgICc1JyxcbiAgICAnLS11cmwtcmV3cml0ZS1zZWFyY2gnLFxuICAgICdodHRwczovL3d3d1xcXFwubnBtanNcXFxcLmNvbS9wYWNrYWdlLycsXG4gICAgJy0tdXJsLXJld3JpdGUtcmVwbGFjZScsXG4gICAgJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLycsXG4gICAgeyBiYXRjaGVkQXJnczogbWRGaWxlcyB9XG4gIF0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLGVBQWU7QUFDeEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFzQlAsZUFBc0IsS0FBSyxRQUFvQztBQUM3RCxRQUFNLEVBQUUsT0FBTyxZQUFZLE1BQU0sSUFBSSxVQUFVLENBQUM7QUFDaEQsUUFBTSxjQUFjO0FBQUEsSUFDbEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsRUFDMUI7QUFFQSxRQUFNLGtCQUFrQixZQUFZLEtBQUssQ0FBQyxlQUFlO0FBQ3ZELFVBQU0saUJBQWlCLHdCQUF3QixVQUFVO0FBQ3pELFdBQU8sV0FBVyxjQUFjO0FBQUEsRUFDbEMsQ0FBQztBQUVELE1BQUksQ0FBQyxpQkFBaUI7QUFDcEIsbUJBQWUsbUJBQW1CLEVBQUUsdUVBQXVFO0FBQzNHLFVBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxzQkFBa0IsZUFBZSwwQkFBMEI7QUFDM0QsVUFBTTtBQUFBLE1BQ0osS0FBSyxlQUFlLDBCQUEwQixNQUFNLDBCQUEwQix5QkFBeUI7QUFBQSxNQUN2Ryx3QkFBd0Isd0JBQXdCLHlCQUF5QjtBQUFBLElBQzNFO0FBRUEsVUFBTTtBQUFBLE1BQ0osS0FBSyxlQUFlLDBCQUEwQixNQUFNLDBCQUEwQix5QkFBeUI7QUFBQSxNQUN2Ryx3QkFBd0Isd0JBQXdCLHlCQUF5QjtBQUFBLElBQzNFO0FBQUEsRUFDRjtBQUdBLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLHdCQUF3QixhQUFhO0FBRTlFLFFBQU0sYUFBYSxDQUFDLE9BQU8scUJBQXFCLEdBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUksRUFBRSxhQUFhLFFBQVEsQ0FBQyxDQUFDO0FBRzFHLFFBQU0sVUFBVSxPQUFPLFNBQ25CLFFBQ0EsTUFBTSxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUc7QUFBQSxJQUNoQyxTQUFTO0FBQUEsTUFDUDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBRUosUUFBTSxhQUFhO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsRUFBRSxhQUFhLFFBQVE7QUFBQSxFQUN6QixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Shared nano-staged configuration for pre-commit hooks.
5
+ */
6
+ /**
7
+ * Nano-staged configuration that runs file-based lint, format, and spellcheck on staged files.
8
+ *
9
+ * Only includes tools that can operate on individual files. Whole-project checks
10
+ * (TypeScript compilation, unit tests) are left to CI.
11
+ *
12
+ * Commands use `npm run ... --` so nano-staged file paths are forwarded as CLI arguments.
13
+ */
14
+ export declare const obsidianDevUtilsConfig: Record<string, string[]>;
@@ -0,0 +1,37 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initEsm() {
7
+ if (globalThis.process) {
8
+ return;
9
+ }
10
+
11
+ const browserProcess = {
12
+ browser: true,
13
+ cwd() {
14
+ return '/';
15
+ },
16
+ env: {},
17
+ platform: 'android'
18
+ };
19
+ globalThis.process = browserProcess;
20
+ })();
21
+
22
+ const obsidianDevUtilsConfig = {
23
+ "*": [
24
+ "npm run spellcheck --"
25
+ ],
26
+ "*.{ts,tsx,mts}": [
27
+ "npm run lint:fix --",
28
+ "npm run format --"
29
+ ],
30
+ "*.md": [
31
+ "npm run lint:md:fix --"
32
+ ]
33
+ };
34
+ export {
35
+ obsidianDevUtilsConfig
36
+ };
37
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9uYW5vLXN0YWdlZC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogU2hhcmVkIG5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gZm9yIHByZS1jb21taXQgaG9va3MuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIG5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb247IGNvcnJlY3RuZXNzIGlzIHZlcmlmaWVkIGJ5IHJ1bm5pbmcgbmFuby1zdGFnZWQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG4vKipcbiAqIE5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gdGhhdCBydW5zIGZpbGUtYmFzZWQgbGludCwgZm9ybWF0LCBhbmQgc3BlbGxjaGVjayBvbiBzdGFnZWQgZmlsZXMuXG4gKlxuICogT25seSBpbmNsdWRlcyB0b29scyB0aGF0IGNhbiBvcGVyYXRlIG9uIGluZGl2aWR1YWwgZmlsZXMuIFdob2xlLXByb2plY3QgY2hlY2tzXG4gKiAoVHlwZVNjcmlwdCBjb21waWxhdGlvbiwgdW5pdCB0ZXN0cykgYXJlIGxlZnQgdG8gQ0kuXG4gKlxuICogQ29tbWFuZHMgdXNlIGBucG0gcnVuIC4uLiAtLWAgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICcqJzogW1xuICAgICducG0gcnVuIHNwZWxsY2hlY2sgLS0nXG4gIF0sXG4gICcqLnt0cyx0c3gsbXRzfSc6IFtcbiAgICAnbnBtIHJ1biBsaW50OmZpeCAtLScsXG4gICAgJ25wbSBydW4gZm9ybWF0IC0tJ1xuICBdLFxuICAnKi5tZCc6IFtcbiAgICAnbnBtIHJ1biBsaW50Om1kOmZpeCAtLSdcbiAgXVxufTtcblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxNQUFNLHlCQUFtRDtBQUFBLEVBQzlELEtBQUs7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUFBLEVBQ0Esa0JBQWtCO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ047QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -19,11 +19,8 @@ if you want to view the source, please visit the github repository of this plugi
19
19
  globalThis.process = browserProcess;
20
20
  })();
21
21
 
22
- import {
23
- existsSync,
24
- loadEnvFile,
25
- process
26
- } from "./node-modules.mjs";
22
+ import { existsSync } from "node:fs";
23
+ import process, { loadEnvFile } from "node:process";
27
24
  import {
28
25
  execFromRoot,
29
26
  resolvePathFromRoot
@@ -41,4 +38,4 @@ async function publish(isBeta) {
41
38
  export {
42
39
  publish
43
40
  };
44
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0tcHVibGlzaC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHB1Ymxpc2guXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbG9hZEVudkZpbGUsXG4gIHByb2Nlc3Ncbn0gZnJvbSAnLi9ub2RlLW1vZHVsZXMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290XG59IGZyb20gJy4vcm9vdC50cyc7XG5cbmludGVyZmFjZSBOcG1FbnYge1xuICBOUE1fVE9LRU46IHN0cmluZztcbn1cblxuLyoqXG4gKiBQdWJsaXNoIHRvIE5QTS5cbiAqXG4gKiBAcGFyYW0gaXNCZXRhIC0gV2hldGhlciB0byBwdWJsaXNoIHRvIHRoZSBiZXRhIE5QTSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2goaXNCZXRhPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlbnZQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCgnLmVudicpO1xuICBpZiAoZW52UGF0aCAmJiBleGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gICAgbG9hZEVudkZpbGUoZW52UGF0aCk7XG4gIH1cbiAgY29uc3QgbnBtRW52ID0gcHJvY2Vzcy5lbnYgYXMgUGFydGlhbDxOcG1FbnY+O1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyducG0nLCAnY29uZmlnJywgJ3NldCcsIGAvL3JlZ2lzdHJ5Lm5wbWpzLm9yZy86X2F1dGhUb2tlbj0ke25wbUVudi5OUE1fVE9LRU4gPz8gJyd9YF0pO1xuXG4gIGNvbnN0IHRhZyA9IGlzQmV0YSA/ICdiZXRhJyA6ICdsYXRlc3QnO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyducG0nLCAncHVibGlzaCcsICctLXRhZycsIHRhZ10pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFXUCxlQUFzQixRQUFRLFFBQWlDO0FBQzdELFFBQU0sVUFBVSxvQkFBb0IsTUFBTTtBQUMxQyxNQUFJLFdBQVcsV0FBVyxPQUFPLEdBQUc7QUFDbEMsZ0JBQVksT0FBTztBQUFBLEVBQ3JCO0FBQ0EsUUFBTSxTQUFTLFFBQVE7QUFDdkIsUUFBTSxhQUFhLENBQUMsT0FBTyxVQUFVLE9BQU8sb0NBQW9DLE9BQU8sYUFBYSxFQUFFLEVBQUUsQ0FBQztBQUV6RyxRQUFNLE1BQU0sU0FBUyxTQUFTO0FBQzlCLFFBQU0sYUFBYSxDQUFDLE9BQU8sV0FBVyxTQUFTLEdBQUcsQ0FBQztBQUNyRDsiLAogICJuYW1lcyI6IFtdCn0K
41
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0tcHVibGlzaC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHB1Ymxpc2guXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MsIHsgbG9hZEVudkZpbGUgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3Rcbn0gZnJvbSAnLi9yb290LnRzJztcblxuaW50ZXJmYWNlIE5wbUVudiB7XG4gIE5QTV9UT0tFTjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1Ymxpc2ggdG8gTlBNLlxuICpcbiAqIEBwYXJhbSBpc0JldGEgLSBXaGV0aGVyIHRvIHB1Ymxpc2ggdG8gdGhlIGJldGEgTlBNIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaChpc0JldGE/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVudlBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290KCcuZW52Jyk7XG4gIGlmIChlbnZQYXRoICYmIGV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgICBsb2FkRW52RmlsZShlbnZQYXRoKTtcbiAgfVxuICBjb25zdCBucG1FbnYgPSBwcm9jZXNzLmVudiBhcyBQYXJ0aWFsPE5wbUVudj47XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25wbScsICdjb25maWcnLCAnc2V0JywgYC8vcmVnaXN0cnkubnBtanMub3JnLzpfYXV0aFRva2VuPSR7bnBtRW52Lk5QTV9UT0tFTiA/PyAnJ31gXSk7XG5cbiAgY29uc3QgdGFnID0gaXNCZXRhID8gJ2JldGEnIDogJ2xhdGVzdCc7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25wbScsICdwdWJsaXNoJywgJy0tdGFnJywgdGFnXSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLFdBQVcsbUJBQW1CO0FBRXJDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBV1AsZUFBc0IsUUFBUSxRQUFpQztBQUM3RCxRQUFNLFVBQVUsb0JBQW9CLE1BQU07QUFDMUMsTUFBSSxXQUFXLFdBQVcsT0FBTyxHQUFHO0FBQ2xDLGdCQUFZLE9BQU87QUFBQSxFQUNyQjtBQUNBLFFBQU0sU0FBUyxRQUFRO0FBQ3ZCLFFBQU0sYUFBYSxDQUFDLE9BQU8sVUFBVSxPQUFPLG9DQUFvQyxPQUFPLGFBQWEsRUFBRSxFQUFFLENBQUM7QUFFekcsUUFBTSxNQUFNLFNBQVMsU0FBUztBQUM5QixRQUFNLGFBQWEsQ0FBQyxPQUFPLFdBQVcsU0FBUyxHQUFHLENBQUM7QUFDckQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -91,6 +91,8 @@ export declare enum ObsidianDevUtilsRepoPaths {
91
91
  Styles = "styles",
92
92
  /** Styles CSS file. */
93
93
  StylesCss = "styles.css",
94
+ /** Test helpers folder. */
95
+ TestHelpers = "test-helpers",
94
96
  /** TypeScript configuration file. */
95
97
  TsConfigJson = "tsconfig.json",
96
98
  /** TypeScript file extension. */
@@ -61,6 +61,7 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
61
61
  ObsidianDevUtilsRepoPaths2["Static"] = "static";
62
62
  ObsidianDevUtilsRepoPaths2["Styles"] = "styles";
63
63
  ObsidianDevUtilsRepoPaths2["StylesCss"] = "styles.css";
64
+ ObsidianDevUtilsRepoPaths2["TestHelpers"] = "test-helpers";
64
65
  ObsidianDevUtilsRepoPaths2["TsConfigJson"] = "tsconfig.json";
65
66
  ObsidianDevUtilsRepoPaths2["TsExtension"] = ".ts";
66
67
  ObsidianDevUtilsRepoPaths2["Types"] = "@types";
@@ -69,4 +70,4 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
69
70
  export {
70
71
  ObsidianDevUtilsRepoPaths
71
72
  };
72
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVudW1lcmF0aW9uIG9mIGNvbW1vbiBmaWxlIHBhdGhzIGFuZCBwYXR0ZXJucyB1c2VkIGluIHRoZSBPYnNpZGlhbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgcmVwb3NpdG9yeS5cbiAqIFRoZXNlIHBhdGhzIGFyZSB1c2VkIHRocm91Z2hvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIG90aGVyIHV0aWxpdGllcywgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kXG4gKiBvZiBlcnJvcnMgZHVlIHRvIGhhcmRjb2RlZCBzdHJpbmdzLlxuICovXG5cbi8qKlxuICogRW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgZW51bSBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIHtcbiAgLyoqIEFueSBmaWxlIG9yIGZvbGRlci4gKi9cbiAgQW55ID0gJyonLFxuXG4gIC8qKiBDb21tb25KUyBmaWxlLiAqL1xuICBBbnlDanMgPSAnKi5janMnLFxuXG4gIC8qKiBDb21tb25KUyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuICovXG4gIEFueURjdHMgPSAnKi5kLmN0cycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuICovXG4gIEFueURtdHMgPSAnKi5kLm10cycsXG5cbiAgLyoqIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS4gKi9cbiAgQW55RHRzID0gJyouZC50cycsXG5cbiAgLyoqIEVTTSBKYXZhU2NyaXB0IGZpbGUuICovXG4gIEFueU1qcyA9ICcqLm1qcycsXG5cbiAgLyoqIEFueSBwYXRoIHJlY3Vyc2l2ZWx5LiAqL1xuICBBbnlQYXRoID0gJyoqJyxcblxuICAvKiogQW55IFR5cGVTY3JpcHQgZmlsZS4gKi9cbiAgQW55VHMgPSAnKi50cycsXG5cbiAgLyoqIENvbW1vbkpTIGZvbGRlci4gKi9cbiAgQ2pzID0gJ2NqcycsXG5cbiAgLyoqIENvbW1vbkpTIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBDanNFeHRlbnNpb24gPSAnLmNqcycsXG5cbiAgLyoqIEN1cnJlbnQgZm9sZGVyLiAqL1xuICBDdXJyZW50Rm9sZGVyID0gJy4nLFxuXG4gIC8qKiBEYXRhdmlldyB0eXBlcy4gKi9cbiAgRGF0YXZpZXdUeXBlcyA9ICdzcmMvb2JzaWRpYW4vQHR5cGVzL2RhdGF2aWV3LyoqJyxcblxuICAvKiogQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgRGN0c0V4dGVuc2lvbiA9ICcuZC5jdHMnLFxuXG4gIC8qKiBEaXN0cmlidXRpb24gZm9sZGVyLiAqL1xuICBEaXN0ID0gJ2Rpc3QnLFxuXG4gIC8qKiBBIHBhdGggdG8gdGhlIGBsaWJgIGZvbGRlciB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIuICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKiBUcmFuc3BpbGVkIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uICovXG4gIERqc0V4dGVuc2lvbiA9ICcuZC5qcycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBEbXRzRXh0ZW5zaW9uID0gJy5kLm10cycsXG5cbiAgLyoqIERwcmludCBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBEdHNFeHRlbnNpb24gPSAnLmQudHMnLFxuXG4gIC8qKiBFU00gVHlwZVNjcmlwdCBFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlLiAqL1xuICBFc2xpbnRDb25maWdNdHMgPSAnZXNsaW50LmNvbmZpZy5tdHMnLFxuXG4gIC8qKiBFU00gSmF2YVNjcmlwdCBmb2xkZXIuICovXG4gIEVzbSA9ICdlc20nLFxuXG4gIC8qKiBDb21tb25KUyBKYXZhU2NyaXB0IGluZGV4IGZpbGUuICovXG4gIEluZGV4Q2pzID0gJ2luZGV4LmNqcycsXG5cbiAgLyoqIENvbW1vbkpTIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBpbmRleCBmaWxlLiAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKiBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuICovXG4gIEluZGV4RG10cyA9ICdpbmRleC5kLm10cycsXG5cbiAgLyoqIEVTTSBKYXZhU2NyaXB0IGluZGV4IGZpbGUuICovXG4gIEluZGV4TWpzID0gJ2luZGV4Lm1qcycsXG5cbiAgLyoqIFR5cGVTY3JpcHQgaW5kZXggZmlsZS4gKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uICovXG4gIEpzRXh0ZW5zaW9uID0gJy5qcycsXG5cbiAgLyoqIExpYnJhcnkgQ29tbW9uSlMgZmlsZS4gKi9cbiAgTGlicmFyeUNqcyA9ICdsaWJyYXJ5LmNqcycsXG5cbiAgLyoqIExpYnJhcnkgRVNNIEphdmFTY3JpcHQgZmlsZS4gKi9cbiAgTGlicmFyeU1qcyA9ICdsaWJyYXJ5Lm1qcycsXG5cbiAgLyoqIEVTTSBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIE1hcmtkb3dubGludENsaTJDb25maWdNanMgPSAnLm1hcmtkb3dubGludC1jbGkyLm1qcycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS4gKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ010cyA9ICcubWFya2Rvd25saW50LWNsaTIubXRzJyxcblxuICAvKiogRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uICovXG4gIE1qc0V4dGVuc2lvbiA9ICcubWpzJyxcblxuICAvKiogTm9kZSBtb2R1bGVzIGZvbGRlci4gKi9cbiAgTm9kZU1vZHVsZXMgPSAnbm9kZV9tb2R1bGVzJyxcblxuICAvKiogUGFja2FnZSBKU09OIGZpbGUuICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqIFJvb3QgZm9sZGVyLiAqL1xuICBSb290Rm9sZGVyID0gJy8nLFxuXG4gIC8qKiBTY3JpcHRzIGZvbGRlci4gKi9cbiAgU2NyaXB0cyA9ICdzY3JpcHRzJyxcblxuICAvKiogU2NyaXB0VXRpbHMgZm9sZGVyLiAqL1xuICBTY3JpcHRVdGlscyA9ICdzY3JpcHQtdXRpbHMnLFxuXG4gIC8qKiBTb3VyY2UgZm9sZGVyLiAqL1xuICBTcmMgPSAnc3JjJyxcblxuICAvKiogU3RhdGljIGZvbGRlci4gKi9cbiAgU3RhdGljID0gJ3N0YXRpYycsXG5cbiAgLyoqIFN0eWxlcyBmb2xkZXIuICovXG4gIFN0eWxlcyA9ICdzdHlsZXMnLFxuXG4gIC8qKiBTdHlsZXMgQ1NTIGZpbGUuICovXG4gIFN0eWxlc0NzcyA9ICdzdHlsZXMuY3NzJyxcblxuICAvKiogVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIFRzQ29uZmlnSnNvbiA9ICd0c2NvbmZpZy5qc29uJyxcblxuICAvKiogVHlwZVNjcmlwdCBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgVHNFeHRlbnNpb24gPSAnLnRzJyxcblxuICAvKiogVHlwZXMgZm9sZGVyLiAqL1xuICBUeXBlcyA9ICdAdHlwZXMnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXTyxJQUFLLDRCQUFMLGtCQUFLQSwrQkFBTDtBQUVMLEVBQUFBLDJCQUFBLFNBQU07QUFHTixFQUFBQSwyQkFBQSxZQUFTO0FBR1QsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLGFBQVU7QUFHVixFQUFBQSwyQkFBQSxZQUFTO0FBR1QsRUFBQUEsMkJBQUEsWUFBUztBQUdULEVBQUFBLDJCQUFBLGFBQVU7QUFHVixFQUFBQSwyQkFBQSxXQUFRO0FBR1IsRUFBQUEsMkJBQUEsU0FBTTtBQUdOLEVBQUFBLDJCQUFBLGtCQUFlO0FBR2YsRUFBQUEsMkJBQUEsbUJBQWdCO0FBR2hCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFHaEIsRUFBQUEsMkJBQUEsVUFBTztBQUdQLEVBQUFBLDJCQUFBLGFBQVU7QUFHVixFQUFBQSwyQkFBQSxrQkFBZTtBQUdmLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxnQkFBYTtBQUdiLEVBQUFBLDJCQUFBLGtCQUFlO0FBR2YsRUFBQUEsMkJBQUEscUJBQWtCO0FBR2xCLEVBQUFBLDJCQUFBLFNBQU07QUFHTixFQUFBQSwyQkFBQSxjQUFXO0FBR1gsRUFBQUEsMkJBQUEsZUFBWTtBQUdaLEVBQUFBLDJCQUFBLGVBQVk7QUFHWixFQUFBQSwyQkFBQSxjQUFXO0FBR1gsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsZ0JBQWE7QUFHYixFQUFBQSwyQkFBQSxnQkFBYTtBQUdiLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUc1QixFQUFBQSwyQkFBQSwrQkFBNEI7QUFHNUIsRUFBQUEsMkJBQUEsa0JBQWU7QUFHZixFQUFBQSwyQkFBQSxpQkFBYztBQUdkLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsZ0JBQWE7QUFHYixFQUFBQSwyQkFBQSxhQUFVO0FBR1YsRUFBQUEsMkJBQUEsaUJBQWM7QUFHZCxFQUFBQSwyQkFBQSxTQUFNO0FBR04sRUFBQUEsMkJBQUEsWUFBUztBQUdULEVBQUFBLDJCQUFBLFlBQVM7QUFHVCxFQUFBQSwyQkFBQSxlQUFZO0FBR1osRUFBQUEsMkJBQUEsa0JBQWU7QUFHZixFQUFBQSwyQkFBQSxpQkFBYztBQUdkLEVBQUFBLDJCQUFBLFdBQVE7QUFuSUUsU0FBQUE7QUFBQSxHQUFBOyIsCiAgIm5hbWVzIjogWyJPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIl0KfQo=
73
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVudW1lcmF0aW9uIG9mIGNvbW1vbiBmaWxlIHBhdGhzIGFuZCBwYXR0ZXJucyB1c2VkIGluIHRoZSBPYnNpZGlhbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgcmVwb3NpdG9yeS5cbiAqIFRoZXNlIHBhdGhzIGFyZSB1c2VkIHRocm91Z2hvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIG90aGVyIHV0aWxpdGllcywgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kXG4gKiBvZiBlcnJvcnMgZHVlIHRvIGhhcmRjb2RlZCBzdHJpbmdzLlxuICovXG5cbi8qKlxuICogRW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgZW51bSBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIHtcbiAgLyoqIEFueSBmaWxlIG9yIGZvbGRlci4gKi9cbiAgQW55ID0gJyonLFxuXG4gIC8qKiBDb21tb25KUyBmaWxlLiAqL1xuICBBbnlDanMgPSAnKi5janMnLFxuXG4gIC8qKiBDb21tb25KUyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuICovXG4gIEFueURjdHMgPSAnKi5kLmN0cycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuICovXG4gIEFueURtdHMgPSAnKi5kLm10cycsXG5cbiAgLyoqIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS4gKi9cbiAgQW55RHRzID0gJyouZC50cycsXG5cbiAgLyoqIEVTTSBKYXZhU2NyaXB0IGZpbGUuICovXG4gIEFueU1qcyA9ICcqLm1qcycsXG5cbiAgLyoqIEFueSBwYXRoIHJlY3Vyc2l2ZWx5LiAqL1xuICBBbnlQYXRoID0gJyoqJyxcblxuICAvKiogQW55IFR5cGVTY3JpcHQgZmlsZS4gKi9cbiAgQW55VHMgPSAnKi50cycsXG5cbiAgLyoqIENvbW1vbkpTIGZvbGRlci4gKi9cbiAgQ2pzID0gJ2NqcycsXG5cbiAgLyoqIENvbW1vbkpTIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBDanNFeHRlbnNpb24gPSAnLmNqcycsXG5cbiAgLyoqIEN1cnJlbnQgZm9sZGVyLiAqL1xuICBDdXJyZW50Rm9sZGVyID0gJy4nLFxuXG4gIC8qKiBEYXRhdmlldyB0eXBlcy4gKi9cbiAgRGF0YXZpZXdUeXBlcyA9ICdzcmMvb2JzaWRpYW4vQHR5cGVzL2RhdGF2aWV3LyoqJyxcblxuICAvKiogQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgRGN0c0V4dGVuc2lvbiA9ICcuZC5jdHMnLFxuXG4gIC8qKiBEaXN0cmlidXRpb24gZm9sZGVyLiAqL1xuICBEaXN0ID0gJ2Rpc3QnLFxuXG4gIC8qKiBBIHBhdGggdG8gdGhlIGBsaWJgIGZvbGRlciB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIuICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKiBUcmFuc3BpbGVkIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uICovXG4gIERqc0V4dGVuc2lvbiA9ICcuZC5qcycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBEbXRzRXh0ZW5zaW9uID0gJy5kLm10cycsXG5cbiAgLyoqIERwcmludCBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBEdHNFeHRlbnNpb24gPSAnLmQudHMnLFxuXG4gIC8qKiBFU00gVHlwZVNjcmlwdCBFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlLiAqL1xuICBFc2xpbnRDb25maWdNdHMgPSAnZXNsaW50LmNvbmZpZy5tdHMnLFxuXG4gIC8qKiBFU00gSmF2YVNjcmlwdCBmb2xkZXIuICovXG4gIEVzbSA9ICdlc20nLFxuXG4gIC8qKiBDb21tb25KUyBKYXZhU2NyaXB0IGluZGV4IGZpbGUuICovXG4gIEluZGV4Q2pzID0gJ2luZGV4LmNqcycsXG5cbiAgLyoqIENvbW1vbkpTIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBpbmRleCBmaWxlLiAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKiBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuICovXG4gIEluZGV4RG10cyA9ICdpbmRleC5kLm10cycsXG5cbiAgLyoqIEVTTSBKYXZhU2NyaXB0IGluZGV4IGZpbGUuICovXG4gIEluZGV4TWpzID0gJ2luZGV4Lm1qcycsXG5cbiAgLyoqIFR5cGVTY3JpcHQgaW5kZXggZmlsZS4gKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uICovXG4gIEpzRXh0ZW5zaW9uID0gJy5qcycsXG5cbiAgLyoqIExpYnJhcnkgQ29tbW9uSlMgZmlsZS4gKi9cbiAgTGlicmFyeUNqcyA9ICdsaWJyYXJ5LmNqcycsXG5cbiAgLyoqIExpYnJhcnkgRVNNIEphdmFTY3JpcHQgZmlsZS4gKi9cbiAgTGlicmFyeU1qcyA9ICdsaWJyYXJ5Lm1qcycsXG5cbiAgLyoqIEVTTSBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIE1hcmtkb3dubGludENsaTJDb25maWdNanMgPSAnLm1hcmtkb3dubGludC1jbGkyLm1qcycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS4gKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ010cyA9ICcubWFya2Rvd25saW50LWNsaTIubXRzJyxcblxuICAvKiogRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uICovXG4gIE1qc0V4dGVuc2lvbiA9ICcubWpzJyxcblxuICAvKiogTm9kZSBtb2R1bGVzIGZvbGRlci4gKi9cbiAgTm9kZU1vZHVsZXMgPSAnbm9kZV9tb2R1bGVzJyxcblxuICAvKiogUGFja2FnZSBKU09OIGZpbGUuICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqIFJvb3QgZm9sZGVyLiAqL1xuICBSb290Rm9sZGVyID0gJy8nLFxuXG4gIC8qKiBTY3JpcHRzIGZvbGRlci4gKi9cbiAgU2NyaXB0cyA9ICdzY3JpcHRzJyxcblxuICAvKiogU2NyaXB0VXRpbHMgZm9sZGVyLiAqL1xuICBTY3JpcHRVdGlscyA9ICdzY3JpcHQtdXRpbHMnLFxuXG4gIC8qKiBTb3VyY2UgZm9sZGVyLiAqL1xuICBTcmMgPSAnc3JjJyxcblxuICAvKiogU3RhdGljIGZvbGRlci4gKi9cbiAgU3RhdGljID0gJ3N0YXRpYycsXG5cbiAgLyoqIFN0eWxlcyBmb2xkZXIuICovXG4gIFN0eWxlcyA9ICdzdHlsZXMnLFxuXG4gIC8qKiBTdHlsZXMgQ1NTIGZpbGUuICovXG4gIFN0eWxlc0NzcyA9ICdzdHlsZXMuY3NzJyxcblxuICAvKiogVGVzdCBoZWxwZXJzIGZvbGRlci4gKi9cbiAgVGVzdEhlbHBlcnMgPSAndGVzdC1oZWxwZXJzJyxcblxuICAvKiogVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIFRzQ29uZmlnSnNvbiA9ICd0c2NvbmZpZy5qc29uJyxcblxuICAvKiogVHlwZVNjcmlwdCBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgVHNFeHRlbnNpb24gPSAnLnRzJyxcblxuICAvKiogVHlwZXMgZm9sZGVyLiAqL1xuICBUeXBlcyA9ICdAdHlwZXMnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXTyxJQUFLLDRCQUFMLGtCQUFLQSwrQkFBTDtBQUVMLEVBQUFBLDJCQUFBLFNBQU07QUFHTixFQUFBQSwyQkFBQSxZQUFTO0FBR1QsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLGFBQVU7QUFHVixFQUFBQSwyQkFBQSxZQUFTO0FBR1QsRUFBQUEsMkJBQUEsWUFBUztBQUdULEVBQUFBLDJCQUFBLGFBQVU7QUFHVixFQUFBQSwyQkFBQSxXQUFRO0FBR1IsRUFBQUEsMkJBQUEsU0FBTTtBQUdOLEVBQUFBLDJCQUFBLGtCQUFlO0FBR2YsRUFBQUEsMkJBQUEsbUJBQWdCO0FBR2hCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFHaEIsRUFBQUEsMkJBQUEsVUFBTztBQUdQLEVBQUFBLDJCQUFBLGFBQVU7QUFHVixFQUFBQSwyQkFBQSxrQkFBZTtBQUdmLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxnQkFBYTtBQUdiLEVBQUFBLDJCQUFBLGtCQUFlO0FBR2YsRUFBQUEsMkJBQUEscUJBQWtCO0FBR2xCLEVBQUFBLDJCQUFBLFNBQU07QUFHTixFQUFBQSwyQkFBQSxjQUFXO0FBR1gsRUFBQUEsMkJBQUEsZUFBWTtBQUdaLEVBQUFBLDJCQUFBLGVBQVk7QUFHWixFQUFBQSwyQkFBQSxjQUFXO0FBR1gsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsZ0JBQWE7QUFHYixFQUFBQSwyQkFBQSxnQkFBYTtBQUdiLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUc1QixFQUFBQSwyQkFBQSwrQkFBNEI7QUFHNUIsRUFBQUEsMkJBQUEsa0JBQWU7QUFHZixFQUFBQSwyQkFBQSxpQkFBYztBQUdkLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsZ0JBQWE7QUFHYixFQUFBQSwyQkFBQSxhQUFVO0FBR1YsRUFBQUEsMkJBQUEsaUJBQWM7QUFHZCxFQUFBQSwyQkFBQSxTQUFNO0FBR04sRUFBQUEsMkJBQUEsWUFBUztBQUdULEVBQUFBLDJCQUFBLFlBQVM7QUFHVCxFQUFBQSwyQkFBQSxlQUFZO0FBR1osRUFBQUEsMkJBQUEsaUJBQWM7QUFHZCxFQUFBQSwyQkFBQSxrQkFBZTtBQUdmLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsV0FBUTtBQXRJRSxTQUFBQTtBQUFBLEdBQUE7IiwKICAibmFtZXMiOiBbIk9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMiXQp9Cg==
@@ -4,7 +4,7 @@
4
4
  * Contains utility functions for executing commands from the root folder of a project,
5
5
  * resolving paths relative to the root.
6
6
  */
7
- import type { ExecOption, ExecResult } from './exec.mjs';
7
+ import type { CommandPart, ExecDetailedOptions, ExecResult, ExecSimpleOptions } from './exec.mjs';
8
8
  /**
9
9
  * Executes a command from the root folder of the project.
10
10
  *
@@ -16,9 +16,7 @@ import type { ExecOption, ExecResult } from './exec.mjs';
16
16
  * If an error occurs during the execution and ignoreExitCode is `true`,
17
17
  * the error is resolved with the stdout and stderr.
18
18
  */
19
- export declare function execFromRoot(command: string | string[], options?: {
20
- withDetails?: false;
21
- } & ExecOption): Promise<string>;
19
+ export declare function execFromRoot(command: CommandPart[] | string, options?: ExecSimpleOptions): Promise<string>;
22
20
  /**
23
21
  * Executes a command from the root folder of the project.
24
22
  *
@@ -31,9 +29,7 @@ export declare function execFromRoot(command: string | string[], options?: {
31
29
  * If an error occurs during the execution and ignoreExitCode is `true`,
32
30
  * the error is resolved with the stdout and stderr.
33
31
  */
34
- export declare function execFromRoot(command: string | string[], options: {
35
- withDetails: true;
36
- } & ExecOption): Promise<ExecResult>;
32
+ export declare function execFromRoot(command: CommandPart[] | string, options: ExecDetailedOptions): Promise<ExecResult>;
37
33
  /**
38
34
  * Retrieves the root folder of the project.
39
35
  *
@@ -19,6 +19,7 @@ if you want to view the source, please visit the github repository of this plugi
19
19
  globalThis.process = browserProcess;
20
20
  })();
21
21
 
22
+ import { existsSync } from "node:fs";
22
23
  import {
23
24
  dirname,
24
25
  join,
@@ -27,7 +28,6 @@ import {
27
28
  toPosixPath
28
29
  } from "../path.mjs";
29
30
  import { exec } from "./exec.mjs";
30
- import { existsSync } from "./node-modules.mjs";
31
31
  import { ObsidianDevUtilsRepoPaths } from "./obsidian-dev-utils-repo-paths.mjs";
32
32
  function execFromRoot(command, options = {}) {
33
33
  let root = getRootFolder(options.cwd);
@@ -77,4 +77,4 @@ export {
77
77
  resolvePathFromRootSafe,
78
78
  toRelativeFromRoot
79
79
  };
80
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9yb290LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBleGVjdXRpbmcgY29tbWFuZHMgZnJvbSB0aGUgcm9vdCBmb2xkZXIgb2YgYSBwcm9qZWN0LFxuICogcmVzb2x2aW5nIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSByb290LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRXhlY09wdGlvbixcbiAgRXhlY1Jlc3VsdFxufSBmcm9tICcuL2V4ZWMudHMnO1xuXG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICByZWxhdGl2ZSxcbiAgcmVzb2x2ZSxcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLnRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICcuL25vZGUtbW9kdWxlcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9ucz86IHsgd2l0aERldGFpbHM/OiBmYWxzZSB9ICYgRXhlY09wdGlvbik6IFByb21pc2U8c3RyaW5nPjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9uczogeyB3aXRoRGV0YWlsczogdHJ1ZSB9ICYgRXhlY09wdGlvbik6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCBmcm9tIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9uczogRXhlY09wdGlvbiA9IHt9KTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGxldCByb290ID0gZ2V0Um9vdEZvbGRlcihvcHRpb25zLmN3ZCk7XG5cbiAgaWYgKCFyb290KSB7XG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkRmFpbElmQ2FsbGVkRnJvbU91dHNpZGVSb290ID8/IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcm9vdCBmb2xkZXInKTtcbiAgICB9XG5cbiAgICByb290ID0gb3B0aW9ucy5jd2QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgcmV0dXJuIGV4ZWMoY29tbWFuZCwgeyAuLi5vcHRpb25zLCBjd2Q6IHJvb3QsIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWMoY29tbWFuZCwgeyAuLi5vcHRpb25zLCBjd2Q6IHJvb3QsIHNob3VsZEluY2x1ZGVEZXRhaWxzOiBmYWxzZSB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgcm9vdCBmb2xkZXIuXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGZvbGRlciBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290Rm9sZGVyKGN3ZD86IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBsZXQgY3VycmVudEZvbGRlciA9IHRvUG9zaXhQYXRoKGN3ZCA/PyBwcm9jZXNzLmN3ZCgpKTtcbiAgd2hpbGUgKGN1cnJlbnRGb2xkZXIgIT09IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcgJiYgY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Sb290Rm9sZGVyIGFzIHN0cmluZykge1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4oY3VycmVudEZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5QYWNrYWdlSnNvbikpKSB7XG4gICAgICByZXR1cm4gdG9Qb3NpeFBhdGgoY3VycmVudEZvbGRlcik7XG4gICAgfVxuICAgIGN1cnJlbnRGb2xkZXIgPSBkaXJuYW1lKGN1cnJlbnRGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGFic29sdXRlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aEZyb21Sb290KHBhdGg6IHN0cmluZywgY3dkPzogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGN3ZCk7XG4gIGlmICghcm9vdEZvbGRlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmUocm9vdEZvbGRlciwgcGF0aCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlciwgcmV0dXJuaW5nIHRoZSByZXNvbHZlZCBwYXRoIG9yIHRoZSBvcmlnaW5hbCBwYXRoIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCBvciB0aGUgb3JpZ2luYWwgcGF0aCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHBhdGg6IHN0cmluZywgY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoRnJvbVJvb3QocGF0aCwgY3dkKSA/PyBwYXRoO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFic29sdXRlIHBhdGggdG8gYSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gY29udmVydC5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSByb290IGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUmVsYXRpdmVGcm9tUm9vdChwYXRoOiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcihjd2QpO1xuICBpZiAoIXJvb3RGb2xkZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHBhdGggPSB0b1Bvc2l4UGF0aChwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlKHJvb3RGb2xkZXIsIHBhdGgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxpQ0FBaUM7QUF1Q25DLFNBQVMsYUFBYSxTQUE0QixVQUFzQixDQUFDLEdBQWlDO0FBQy9HLE1BQUksT0FBTyxjQUFjLFFBQVEsR0FBRztBQUVwQyxNQUFJLENBQUMsTUFBTTtBQUNULFFBQUksUUFBUSxxQ0FBcUMsTUFBTTtBQUNyRCxZQUFNLElBQUksTUFBTSw0QkFBNEI7QUFBQSxJQUM5QztBQUVBLFdBQU8sUUFBUSxPQUFPLFFBQVEsSUFBSTtBQUFBLEVBQ3BDO0FBRUEsTUFBSSxRQUFRLHNCQUFzQjtBQUNoQyxXQUFPLEtBQUssU0FBUyxFQUFFLEdBQUcsU0FBUyxLQUFLLE1BQU0sc0JBQXNCLEtBQUssQ0FBQztBQUFBLEVBQzVFO0FBRUEsU0FBTyxLQUFLLFNBQVMsRUFBRSxHQUFHLFNBQVMsS0FBSyxNQUFNLHNCQUFzQixNQUFNLENBQUM7QUFDN0U7QUFTTyxTQUFTLGNBQWMsS0FBNkI7QUFDekQsTUFBSSxnQkFBZ0IsWUFBWSxPQUFPLFFBQVEsSUFBSSxDQUFDO0FBQ3BELFNBQU8sa0JBQWtCLDBCQUEwQixpQkFBMkIsa0JBQWtCLDBCQUEwQixZQUFzQjtBQUM5SSxRQUFJLFdBQVcsS0FBSyxlQUFlLDBCQUEwQixXQUFXLENBQUMsR0FBRztBQUMxRSxhQUFPLFlBQVksYUFBYTtBQUFBLElBQ2xDO0FBQ0Esb0JBQWdCLFFBQVEsYUFBYTtBQUFBLEVBQ3ZDO0FBRUEsU0FBTztBQUNUO0FBU08sU0FBUyxvQkFBb0IsTUFBYyxLQUE2QjtBQUM3RSxRQUFNLGFBQWEsY0FBYyxHQUFHO0FBQ3BDLE1BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFFBQVEsWUFBWSxJQUFJO0FBQ2pDO0FBU08sU0FBUyx3QkFBd0IsTUFBYyxLQUFzQjtBQUMxRSxTQUFPLG9CQUFvQixNQUFNLEdBQUcsS0FBSztBQUMzQztBQVNPLFNBQVMsbUJBQW1CLE1BQWMsS0FBNkI7QUFDNUUsUUFBTSxhQUFhLGNBQWMsR0FBRztBQUNwQyxNQUFJLENBQUMsWUFBWTtBQUNmLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxZQUFZLElBQUk7QUFDdkIsU0FBTyxTQUFTLFlBQVksSUFBSTtBQUNsQzsiLAogICJuYW1lcyI6IFtdCn0K
80
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9yb290LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBleGVjdXRpbmcgY29tbWFuZHMgZnJvbSB0aGUgcm9vdCBmb2xkZXIgb2YgYSBwcm9qZWN0LFxuICogcmVzb2x2aW5nIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSByb290LlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kUGFydCxcbiAgRXhlY0RldGFpbGVkT3B0aW9ucyxcbiAgRXhlY09wdGlvbixcbiAgRXhlY1Jlc3VsdCxcbiAgRXhlY1NpbXBsZU9wdGlvbnNcbn0gZnJvbSAnLi9leGVjLnRzJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmUsXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zPzogRXhlY1NpbXBsZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCBmcm9tIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBFeGVjUmVzdWx0IG9iamVjdC5cbiAqICAgICAgICAgIFRoZSBFeGVjUmVzdWx0IG9iamVjdCBjb250YWlucyB0aGUgZXhpdCBjb2RlLCBleGl0IHNpZ25hbCwgc3RkZXJyLCBhbmQgc3Rkb3V0LlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlIGFuZCBzdGRlcnIuXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjRnJvbVJvb3QoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY0RldGFpbGVkT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCBmcm9tIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjT3B0aW9uID0ge30pOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHtcbiAgbGV0IHJvb3QgPSBnZXRSb290Rm9sZGVyKG9wdGlvbnMuY3dkKTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICBpZiAob3B0aW9ucy5zaG91bGRGYWlsSWZDYWxsZWRGcm9tT3V0c2lkZVJvb3QgPz8gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCByb290IGZvbGRlcicpO1xuICAgIH1cblxuICAgIHJvb3QgPSBvcHRpb25zLmN3ZCA/PyBwcm9jZXNzLmN3ZCgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICByZXR1cm4gZXhlYyhjb21tYW5kLCB7IC4uLm9wdGlvbnMsIGN3ZDogcm9vdCwgc2hvdWxkSW5jbHVkZURldGFpbHM6IHRydWUgfSk7XG4gIH1cblxuICByZXR1cm4gZXhlYyhjb21tYW5kLCB7IC4uLm9wdGlvbnMsIGN3ZDogcm9vdCwgc2hvdWxkSW5jbHVkZURldGFpbHM6IGZhbHNlIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIHByb2plY3QuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSByb290IGZvbGRlci5cbiAqIEB0aHJvd3MgSWYgdGhlIHJvb3QgZm9sZGVyIGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RGb2xkZXIoY3dkPzogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGxldCBjdXJyZW50Rm9sZGVyID0gdG9Qb3NpeFBhdGgoY3dkID8/IHByb2Nlc3MuY3dkKCkpO1xuICB3aGlsZSAoY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyIGFzIHN0cmluZyAmJiBjdXJyZW50Rm9sZGVyICE9PSBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlJvb3RGb2xkZXIgYXMgc3RyaW5nKSB7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihjdXJyZW50Rm9sZGVyLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlBhY2thZ2VKc29uKSkpIHtcbiAgICAgIHJldHVybiB0b1Bvc2l4UGF0aChjdXJyZW50Rm9sZGVyKTtcbiAgICB9XG4gICAgY3VycmVudEZvbGRlciA9IGRpcm5hbWUoY3VycmVudEZvbGRlcik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgYWJzb2x1dGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoRnJvbVJvb3QocGF0aDogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qgcm9vdEZvbGRlciA9IGdldFJvb3RGb2xkZXIoY3dkKTtcbiAgaWYgKCFyb290Rm9sZGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZShyb290Rm9sZGVyLCBwYXRoKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLCByZXR1cm5pbmcgdGhlIHJlc29sdmVkIHBhdGggb3IgdGhlIG9yaWdpbmFsIHBhdGggaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byByZXNvbHZlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIG9yIHRoZSBvcmlnaW5hbCBwYXRoIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUocGF0aDogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZVBhdGhGcm9tUm9vdChwYXRoLCBjd2QpID8/IHBhdGg7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYWJzb2x1dGUgcGF0aCB0byBhIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIHByb2plY3QuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byBjb252ZXJ0LlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHJvb3QgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9SZWxhdGl2ZUZyb21Sb290KHBhdGg6IHN0cmluZywgY3dkPzogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGN3ZCk7XG4gIGlmICghcm9vdEZvbGRlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcGF0aCA9IHRvUG9zaXhQYXRoKHBhdGgpO1xuICByZXR1cm4gcmVsYXRpdmUocm9vdEZvbGRlciwgcGF0aCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxTQUFTLGtCQUFrQjtBQVUzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBWTtBQUNyQixTQUFTLGlDQUFpQztBQXVDbkMsU0FBUyxhQUFhLFNBQWlDLFVBQXNCLENBQUMsR0FBaUM7QUFDcEgsTUFBSSxPQUFPLGNBQWMsUUFBUSxHQUFHO0FBRXBDLE1BQUksQ0FBQyxNQUFNO0FBQ1QsUUFBSSxRQUFRLHFDQUFxQyxNQUFNO0FBQ3JELFlBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUFBLElBQzlDO0FBRUEsV0FBTyxRQUFRLE9BQU8sUUFBUSxJQUFJO0FBQUEsRUFDcEM7QUFFQSxNQUFJLFFBQVEsc0JBQXNCO0FBQ2hDLFdBQU8sS0FBSyxTQUFTLEVBQUUsR0FBRyxTQUFTLEtBQUssTUFBTSxzQkFBc0IsS0FBSyxDQUFDO0FBQUEsRUFDNUU7QUFFQSxTQUFPLEtBQUssU0FBUyxFQUFFLEdBQUcsU0FBUyxLQUFLLE1BQU0sc0JBQXNCLE1BQU0sQ0FBQztBQUM3RTtBQVNPLFNBQVMsY0FBYyxLQUE2QjtBQUN6RCxNQUFJLGdCQUFnQixZQUFZLE9BQU8sUUFBUSxJQUFJLENBQUM7QUFDcEQsU0FBTyxrQkFBa0IsMEJBQTBCLGlCQUEyQixrQkFBa0IsMEJBQTBCLFlBQXNCO0FBQzlJLFFBQUksV0FBVyxLQUFLLGVBQWUsMEJBQTBCLFdBQVcsQ0FBQyxHQUFHO0FBQzFFLGFBQU8sWUFBWSxhQUFhO0FBQUEsSUFDbEM7QUFDQSxvQkFBZ0IsUUFBUSxhQUFhO0FBQUEsRUFDdkM7QUFFQSxTQUFPO0FBQ1Q7QUFTTyxTQUFTLG9CQUFvQixNQUFjLEtBQTZCO0FBQzdFLFFBQU0sYUFBYSxjQUFjLEdBQUc7QUFDcEMsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sUUFBUSxZQUFZLElBQUk7QUFDakM7QUFTTyxTQUFTLHdCQUF3QixNQUFjLEtBQXNCO0FBQzFFLFNBQU8sb0JBQW9CLE1BQU0sR0FBRyxLQUFLO0FBQzNDO0FBU08sU0FBUyxtQkFBbUIsTUFBYyxLQUE2QjtBQUM1RSxRQUFNLGFBQWEsY0FBYyxHQUFHO0FBQ3BDLE1BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFlBQVksSUFBSTtBQUN2QixTQUFPLFNBQVMsWUFBWSxJQUFJO0FBQ2xDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -3,6 +3,16 @@
3
3
  *
4
4
  * This module provides functions for running tests using the Vitest framework.
5
5
  */
6
+ /**
7
+ * Options for running tests with coverage.
8
+ */
9
+ export interface TestCoverageOptions {
10
+ /**
11
+ * Minimum coverage percentage required. If the actual coverage falls below
12
+ * this threshold, the process exits with a non-zero code.
13
+ */
14
+ minCoverage?: number;
15
+ }
6
16
  /**
7
17
  * Runs the test suite.
8
18
  *
@@ -12,9 +22,10 @@ export declare function test(): Promise<void>;
12
22
  /**
13
23
  * Runs the test suite with coverage.
14
24
  *
25
+ * @param options - Optional coverage configuration.
15
26
  * @returns A {@link Promise} that resolves when the tests have completed.
16
27
  */
17
- export declare function testCoverage(): Promise<void>;
28
+ export declare function testCoverage(options?: TestCoverageOptions): Promise<void>;
18
29
  /**
19
30
  * Runs the test suite in watch mode.
20
31
  *
@@ -23,8 +23,11 @@ import { execFromRoot } from "../root.mjs";
23
23
  async function test() {
24
24
  await execFromRoot("vitest run");
25
25
  }
26
- async function testCoverage() {
27
- await execFromRoot("vitest run --coverage");
26
+ async function testCoverage(options) {
27
+ const threshold = String(options?.minCoverage ?? 0);
28
+ await execFromRoot(
29
+ `vitest run --coverage --coverage.thresholds.lines=${threshold} --coverage.thresholds.functions=${threshold} --coverage.thresholds.branches=${threshold} --coverage.thresholds.statements=${threshold}`
30
+ );
28
31
  }
29
32
  async function testWatch() {
30
33
  await execFromRoot("vitest");
@@ -34,4 +37,4 @@ export {
34
37
  testCoverage,
35
38
  testWatch
36
39
  };
37
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcnVubmluZyB0ZXN0cyB1c2luZyB0aGUgVml0ZXN0IGZyYW1ld29yay5cbiAqL1xuXG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoJ3ZpdGVzdCBydW4nKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIHdpdGggY292ZXJhZ2UuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb3ZlcmFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KCd2aXRlc3QgcnVuIC0tY292ZXJhZ2UnKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIGluIHdhdGNoIG1vZGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RXYXRjaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KCd2aXRlc3QnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsb0JBQW9CO0FBTzdCLGVBQXNCLE9BQXNCO0FBQzFDLFFBQU0sYUFBYSxZQUFZO0FBQ2pDO0FBT0EsZUFBc0IsZUFBOEI7QUFDbEQsUUFBTSxhQUFhLHVCQUF1QjtBQUM1QztBQU9BLGVBQXNCLFlBQTJCO0FBQy9DLFFBQU0sYUFBYSxRQUFRO0FBQzdCOyIsCiAgIm5hbWVzIjogW10KfQo=
40
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcnVubmluZyB0ZXN0cyB1c2luZyB0aGUgVml0ZXN0IGZyYW1ld29yay5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhlY3V0ZXMgdml0ZXN0IGFzIGEgQ0xJIHN1YnByb2Nlc3M7IGNvcnJlY3RuZXNzIGlzIHZlcmlmaWVkIGJ5IHJ1bm5pbmcgdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIHdpdGggY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENvdmVyYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvdmVyYWdlIHBlcmNlbnRhZ2UgcmVxdWlyZWQuIElmIHRoZSBhY3R1YWwgY292ZXJhZ2UgZmFsbHMgYmVsb3dcbiAgICogdGhpcyB0aHJlc2hvbGQsIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub24temVybyBjb2RlLlxuICAgKi9cbiAgbWluQ292ZXJhZ2U/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KCd2aXRlc3QgcnVuJyk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGNvdmVyYWdlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY292ZXJhZ2UgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q292ZXJhZ2Uob3B0aW9ucz86IFRlc3RDb3ZlcmFnZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGhyZXNob2xkID0gU3RyaW5nKG9wdGlvbnM/Lm1pbkNvdmVyYWdlID8/IDApO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoXG4gICAgYHZpdGVzdCBydW4gLS1jb3ZlcmFnZSAtLWNvdmVyYWdlLnRocmVzaG9sZHMubGluZXM9JHt0aHJlc2hvbGR9IC0tY292ZXJhZ2UudGhyZXNob2xkcy5mdW5jdGlvbnM9JHt0aHJlc2hvbGR9IC0tY292ZXJhZ2UudGhyZXNob2xkcy5icmFuY2hlcz0ke3RocmVzaG9sZH0gLS1jb3ZlcmFnZS50aHJlc2hvbGRzLnN0YXRlbWVudHM9JHt0aHJlc2hvbGR9YFxuICApO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgaW4gd2F0Y2ggbW9kZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFdhdGNoKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoJ3ZpdGVzdCcpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxvQkFBb0I7QUFrQjdCLGVBQXNCLE9BQXNCO0FBQzFDLFFBQU0sYUFBYSxZQUFZO0FBQ2pDO0FBUUEsZUFBc0IsYUFBYSxTQUE4QztBQUMvRSxRQUFNLFlBQVksT0FBTyxTQUFTLGVBQWUsQ0FBQztBQUNsRCxRQUFNO0FBQUEsSUFDSixxREFBcUQsU0FBUyxvQ0FBb0MsU0FBUyxtQ0FBbUMsU0FBUyxxQ0FBcUMsU0FBUztBQUFBLEVBQ3ZNO0FBQ0Y7QUFPQSxlQUFzQixZQUEyQjtBQUMvQyxRQUFNLGFBQWEsUUFBUTtBQUM3QjsiLAogICJuYW1lcyI6IFtdCn0K