@mnaoumov/typescript-dev-toolkit 3.0.0 → 3.2.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 (100) hide show
  1. package/assets/biome.json +49 -0
  2. package/assets/prettier.json +13 -0
  3. package/dist/lib/cjs/docs-site/docs-links.cjs +6 -3
  4. package/dist/lib/cjs/docs-site/docs-site-commands.cjs +24 -5
  5. package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +8 -3
  6. package/dist/lib/cjs/docs-site/docs-site-config.cjs +4 -1
  7. package/dist/lib/cjs/docs-site/docs-site-config.d.cts +17 -0
  8. package/dist/lib/cjs/docs-site/index.cjs +4 -1
  9. package/dist/lib/cjs/docs-site/index.d.cts +1 -0
  10. package/dist/lib/cjs/docs-site/link-check.cjs +88 -11
  11. package/dist/lib/cjs/docs-site/link-check.d.cts +91 -2
  12. package/dist/lib/cjs/docs-site/repo-homepage.cjs +108 -0
  13. package/dist/lib/cjs/docs-site/repo-homepage.d.cts +50 -0
  14. package/dist/lib/cjs/formatters/auto.cjs +59 -0
  15. package/dist/lib/cjs/formatters/auto.d.cts +51 -0
  16. package/dist/lib/cjs/formatters/biome.cjs +121 -0
  17. package/dist/lib/cjs/formatters/biome.d.cts +69 -0
  18. package/dist/lib/cjs/formatters/index.cjs +12 -3
  19. package/dist/lib/cjs/formatters/index.d.cts +3 -0
  20. package/dist/lib/cjs/formatters/prettier.cjs +93 -0
  21. package/dist/lib/cjs/formatters/prettier.d.cts +56 -0
  22. package/dist/lib/cjs/index.cjs +4 -1
  23. package/dist/lib/cjs/index.d.cts +1 -0
  24. package/dist/lib/cjs/linters/auto.cjs +52 -0
  25. package/dist/lib/cjs/linters/auto.d.cts +49 -0
  26. package/dist/lib/cjs/linters/biome.cjs +50 -0
  27. package/dist/lib/cjs/linters/biome.d.cts +36 -0
  28. package/dist/lib/cjs/linters/eslint-config.cjs +1 -1
  29. package/dist/lib/cjs/linters/eslint.cjs +15 -14
  30. package/dist/lib/cjs/linters/eslint.d.cts +6 -0
  31. package/dist/lib/cjs/linters/index.cjs +7 -1
  32. package/dist/lib/cjs/linters/index.d.cts +2 -0
  33. package/dist/lib/cjs/nano-staged-config.cjs +33 -16
  34. package/dist/lib/cjs/nano-staged-config.d.cts +6 -0
  35. package/dist/lib/cjs/repo-paths.cjs +3 -1
  36. package/dist/lib/cjs/repo-paths.d.cts +8 -0
  37. package/dist/lib/cjs/shared-config-files.cjs +68 -0
  38. package/dist/lib/cjs/shared-config-files.d.cts +29 -0
  39. package/dist/lib/cjs/test-runners/auto.cjs +83 -0
  40. package/dist/lib/cjs/test-runners/auto.d.cts +82 -0
  41. package/dist/lib/cjs/test-runners/index.cjs +10 -1
  42. package/dist/lib/cjs/test-runners/index.d.cts +3 -0
  43. package/dist/lib/cjs/test-runners/jest-config.cjs +86 -0
  44. package/dist/lib/cjs/test-runners/jest-config.d.cts +71 -0
  45. package/dist/lib/cjs/test-runners/jest.cjs +111 -0
  46. package/dist/lib/cjs/test-runners/jest.d.cts +77 -0
  47. package/dist/lib/esm/docs-site/docs-links.mjs +7 -3
  48. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +8 -3
  49. package/dist/lib/esm/docs-site/docs-site-commands.mjs +14 -5
  50. package/dist/lib/esm/docs-site/docs-site-config.d.mts +17 -0
  51. package/dist/lib/esm/docs-site/docs-site-config.mjs +4 -1
  52. package/dist/lib/esm/docs-site/index.d.mts +1 -0
  53. package/dist/lib/esm/docs-site/index.mjs +3 -1
  54. package/dist/lib/esm/docs-site/link-check.d.mts +91 -2
  55. package/dist/lib/esm/docs-site/link-check.mjs +83 -11
  56. package/dist/lib/esm/docs-site/repo-homepage.d.mts +50 -0
  57. package/dist/lib/esm/docs-site/repo-homepage.mjs +84 -0
  58. package/dist/lib/esm/formatters/auto.d.mts +51 -0
  59. package/dist/lib/esm/formatters/auto.mjs +40 -0
  60. package/dist/lib/esm/formatters/biome.d.mts +69 -0
  61. package/dist/lib/esm/formatters/biome.mjs +107 -0
  62. package/dist/lib/esm/formatters/index.d.mts +3 -0
  63. package/dist/lib/esm/formatters/index.mjs +8 -2
  64. package/dist/lib/esm/formatters/prettier.d.mts +56 -0
  65. package/dist/lib/esm/formatters/prettier.mjs +75 -0
  66. package/dist/lib/esm/index.d.mts +1 -0
  67. package/dist/lib/esm/index.mjs +3 -1
  68. package/dist/lib/esm/linters/auto.d.mts +49 -0
  69. package/dist/lib/esm/linters/auto.mjs +30 -0
  70. package/dist/lib/esm/linters/biome.d.mts +36 -0
  71. package/dist/lib/esm/linters/biome.mjs +29 -0
  72. package/dist/lib/esm/linters/eslint-config.mjs +1 -1
  73. package/dist/lib/esm/linters/eslint.d.mts +6 -0
  74. package/dist/lib/esm/linters/eslint.mjs +14 -14
  75. package/dist/lib/esm/linters/index.d.mts +2 -0
  76. package/dist/lib/esm/linters/index.mjs +5 -1
  77. package/dist/lib/esm/nano-staged-config.d.mts +6 -0
  78. package/dist/lib/esm/nano-staged-config.mjs +33 -16
  79. package/dist/lib/esm/repo-paths.d.mts +8 -0
  80. package/dist/lib/esm/repo-paths.mjs +3 -1
  81. package/dist/lib/esm/shared-config-files.d.mts +29 -0
  82. package/dist/lib/esm/shared-config-files.mjs +36 -0
  83. package/dist/lib/esm/test-runners/auto.d.mts +82 -0
  84. package/dist/lib/esm/test-runners/auto.mjs +64 -0
  85. package/dist/lib/esm/test-runners/index.d.mts +3 -0
  86. package/dist/lib/esm/test-runners/index.mjs +7 -1
  87. package/dist/lib/esm/test-runners/jest-config.d.mts +71 -0
  88. package/dist/lib/esm/test-runners/jest-config.mjs +58 -0
  89. package/dist/lib/esm/test-runners/jest.d.mts +77 -0
  90. package/dist/lib/esm/test-runners/jest.mjs +75 -0
  91. package/docs-site/repo-homepage/package.json +6 -0
  92. package/formatters/auto/package.json +6 -0
  93. package/formatters/biome/package.json +6 -0
  94. package/formatters/prettier/package.json +6 -0
  95. package/linters/auto/package.json +6 -0
  96. package/linters/biome/package.json +6 -0
  97. package/package.json +21 -1
  98. package/test-runners/auto/package.json +6 -0
  99. package/test-runners/jest/package.json +6 -0
  100. package/test-runners/jest-config/package.json +6 -0
@@ -60,6 +60,12 @@ export declare const obsidianDevUtilsConfig: NanoStagedConfig;
60
60
  * commit-msg hook still runs). Otherwise it returns {@link obsidianDevUtilsConfig}, or — when
61
61
  * `additionalWriterTasks` are given — the same configuration re-partitioned with those writers added.
62
62
  *
63
+ * A shared task whose npm script the project's `package.json` does not declare is left out, so a project
64
+ * without, say, markdownlint does not fail its first commit that stages a `.md` file on a missing script. A
65
+ * writer pattern left with no writer is dropped, and spellcheck runs only when `spellcheck` is declared, in
66
+ * which case its files fall to the spellcheck-only key. The `additionalWriterTasks` are the caller's own and
67
+ * are kept as given.
68
+ *
63
69
  * `NANO_STAGED` is not an npm script, so it carries its own switch rather than the script-name-derived one
64
70
  * every npm script gets — but both share the same notion of an off value, via {@link isEnvVariableOff}.
65
71
  *
@@ -16,21 +16,19 @@ import {
16
16
  getEffectiveCommandLineLength,
17
17
  getMaxBatchCommandLength
18
18
  } from "./exec.mjs";
19
+ import { readPackageJsonSync } from "./npm.mjs";
19
20
  import { getPackageManagerRunCommand } from "./package-manager.mjs";
20
21
  const PACKAGE_MANAGER_RUN_COMMAND = getPackageManagerRunCommand().join(" ");
21
- const SPELLCHECK_COMMAND = `${PACKAGE_MANAGER_RUN_COMMAND} spellcheck --`;
22
+ const SPELLCHECK_SCRIPT_NAME = "spellcheck";
23
+ const SPELLCHECK_COMMAND = toScriptCommand(SPELLCHECK_SCRIPT_NAME);
22
24
  const EXECUTABLE_PATH_RESERVE = 260;
23
25
  const TOKENIZER_UNSAFE_CHARACTERS_REG_EXP = /[\s"']/g;
24
- const WRITER_TASKS = {
25
- "*.{ts,tsx,mts}": [
26
- `${PACKAGE_MANAGER_RUN_COMMAND} lint:fix --`,
27
- `${PACKAGE_MANAGER_RUN_COMMAND} format --`
28
- ],
29
- "*.md": [
30
- `${PACKAGE_MANAGER_RUN_COMMAND} lint:md:fix --`
31
- ]
26
+ const WRITER_SCRIPT_NAMES = {
27
+ "*.{ts,tsx,mts}": ["lint:fix", "format"],
28
+ "*.md": ["lint:md:fix"]
32
29
  };
33
- const obsidianDevUtilsConfig = partitionSpellcheck(WRITER_TASKS);
30
+ const WRITER_TASKS = toWriterTasks(() => true);
31
+ const obsidianDevUtilsConfig = partitionSpellcheck(WRITER_TASKS, true);
34
32
  const NANO_STAGED_ENV_VARIABLE = "NANO_STAGED";
35
33
  function getNanoStagedConfig(options) {
36
34
  loadEnvFileIfExists();
@@ -39,15 +37,18 @@ function getNanoStagedConfig(options) {
39
37
  `);
40
38
  process.exit(0);
41
39
  }
40
+ const scriptNames = new Set(Object.keys(readPackageJsonSync().scripts ?? {}));
41
+ const hasAllSharedScripts = [SPELLCHECK_SCRIPT_NAME, ...Object.values(WRITER_SCRIPT_NAMES).flat()].every((scriptName) => scriptNames.has(scriptName));
42
42
  const additionalWriterTasks = options?.additionalWriterTasks ?? {};
43
- if (Object.keys(additionalWriterTasks).length === 0) {
43
+ if (hasAllSharedScripts && Object.keys(additionalWriterTasks).length === 0) {
44
44
  return obsidianDevUtilsConfig;
45
45
  }
46
- const duplicatePattern = Object.keys(additionalWriterTasks).find((pattern) => Object.hasOwn(WRITER_TASKS, pattern));
46
+ const writerTasks = toWriterTasks((scriptName) => scriptNames.has(scriptName));
47
+ const duplicatePattern = Object.keys(additionalWriterTasks).find((pattern) => Object.hasOwn(writerTasks, pattern));
47
48
  if (duplicatePattern !== void 0) {
48
49
  throw new Error(`nano-staged writer pattern '${duplicatePattern}' is already a shared writer pattern.`);
49
50
  }
50
- return partitionSpellcheck({ ...WRITER_TASKS, ...additionalWriterTasks });
51
+ return partitionSpellcheck({ ...writerTasks, ...additionalWriterTasks }, scriptNames.has(SPELLCHECK_SCRIPT_NAME));
51
52
  }
52
53
  function batchCommandArguments(prefix, commandArguments) {
53
54
  const emptyLength = getEffectiveCommandLineLength("");
@@ -70,13 +71,16 @@ function batchCommandArguments(prefix, commandArguments) {
70
71
  }
71
72
  return batches;
72
73
  }
73
- function partitionSpellcheck(writerTasks) {
74
+ function partitionSpellcheck(writerTasks, shouldSpellcheck) {
75
+ if (!shouldSpellcheck) {
76
+ return Object.fromEntries(Object.entries(writerTasks).map(([pattern, commands]) => [pattern, toBatchedTask(commands)]));
77
+ }
74
78
  const patterns = Object.keys(writerTasks);
75
79
  const patternWithSlash = patterns.find((pattern) => pattern.includes("/"));
76
80
  if (patternWithSlash !== void 0) {
77
81
  throw new Error(`nano-staged writer pattern '${patternWithSlash}' contains '/', which the spellcheck partition cannot express.`);
78
82
  }
79
- const complementPattern = `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
83
+ const complementPattern = patterns.length === 0 ? "*" : `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
80
84
  const config = {
81
85
  [complementPattern]: toBatchedTask([SPELLCHECK_COMMAND])
82
86
  };
@@ -99,8 +103,21 @@ function toCommandArgument(filename) {
99
103
  }
100
104
  return commandArgument.replaceAll(TOKENIZER_UNSAFE_CHARACTERS_REG_EXP, "?");
101
105
  }
106
+ function toScriptCommand(scriptName) {
107
+ return `${PACKAGE_MANAGER_RUN_COMMAND} ${scriptName} --`;
108
+ }
109
+ function toWriterTasks(shouldIncludeScript) {
110
+ const writerTasks = {};
111
+ for (const [pattern, scriptNames] of Object.entries(WRITER_SCRIPT_NAMES)) {
112
+ const commands = scriptNames.filter((scriptName) => shouldIncludeScript(scriptName)).map((scriptName) => toScriptCommand(scriptName));
113
+ if (commands.length > 0) {
114
+ writerTasks[pattern] = commands;
115
+ }
116
+ }
117
+ return writerTasks;
118
+ }
102
119
  export {
103
120
  getNanoStagedConfig,
104
121
  obsidianDevUtilsConfig
105
122
  };
106
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQgfSBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldE5hbm9TdGFnZWRDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE5hbm9TdGFnZWRDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJlcG8tc3BlY2lmaWMgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBuYW5vLXN0YWdlZCBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICAgKlxuICAgKiBFYWNoIGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhbmQgaXRzIGZpbGVzIHJlbW92ZWQgZnJvbSB0aGUgc3BlbGxjaGVjay1vbmx5IGtleSwgZXhhY3RseSBsaWtlIHRoZSBzaGFyZWRcbiAgICogd3JpdGVycy4gQSBwYXR0ZXJuIG11c3Qgbm90IGNvbnRhaW4gYC9gLCBhbmQgbXVzdCBub3QgcmVwZWF0IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLiBFYWNoIGNvbW1hbmQgaXMgYVxuICAgKiBwcmVmaXggdGhlIHN0YWdlZCBwYXRocyBhcmUgYXBwZW5kZWQgdG8sIGluIGJhdGNoZXMsIGxpa2UgdGhlIHNoYXJlZCBvbmVzIChgbnBtIHJ1biBsaW50OmZpeCAtLWApLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFdyaXRlclRhc2tzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqXG4gKiBBIG5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gd2hvc2UgZXZlcnkga2V5IGlzIGEge0BsaW5rIE5hbm9TdGFnZWRUYXNrfS5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZENvbmZpZyA9IFJlY29yZDxzdHJpbmcsIE5hbm9TdGFnZWRUYXNrPjtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCBuYW5vLXN0YWdlZCB0YXNrOiBpdCByZWNlaXZlcyB0aGUgc3RhZ2VkIGZpbGVzIGl0cyBwYXR0ZXJuIGNsYWltcyBhbmQgcmV0dXJucyB0aGVcbiAqIGNvbW1hbmRzIHRvIHJ1biBvdmVyIHRoZW0sIGluIG9yZGVyLlxuICovXG5leHBvcnQgdHlwZSBOYW5vU3RhZ2VkVGFzayA9IChjb250ZXh0OiBOYW5vU3RhZ2VkVGFza0NvbnRleHQpID0+IHN0cmluZ1tdO1xuXG4vKipcbiAqIFdoYXQgbmFuby1zdGFnZWQgcGFzc2VzIHRvIGEgZnVuY3Rpb24tdmFsdWVkIHRhc2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFub1N0YWdlZFRhc2tDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRocyBvZiB0aGUgc3RhZ2VkIGZpbGVzIHRoZSB0YXNrJ3MgcGF0dGVybiBjbGFpbXMuXG4gICAqL1xuICByZWFkb25seSBmaWxlbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBgPG1hbmFnZXI+IHJ1bmAgcHJlZml4IGV2ZXJ5IHRhc2sgYmVsb3cgaXMgYnVpbHQgb24sIHJlc29sdmVkIG9uY2UgZm9yIHRoZSBwcm9jZXNzLlxuICpcbiAqIERldGVjdGlvbiBwcm9iZXMgZm9yIGEgbG9ja2ZpbGUgYmVzaWRlIGBwYWNrYWdlLmpzb25gLCBzbyBpdCBpcyBhIGhhbmRmdWwgb2YgYGV4aXN0c1N5bmNgIGNhbGxzIGFuZFxuICogbm90aGluZyBtb3JlIFx1MjAxNCBubyBgLmVudmAgcmVhZCBhbmQgbm8gYHByb2Nlc3MuZXhpdGAsIHdoaWNoIGlzIHdoYXQgbGV0cyBpdCBzaXQgYXQgbW9kdWxlIHNjb3BlLlxuICovXG5jb25zdCBQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkQgPSBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoKS5qb2luKCcgJyk7XG5cbmNvbnN0IFNQRUxMQ0hFQ0tfQ09NTUFORCA9IGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gc3BlbGxjaGVjayAtLWA7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSB0YXNrcyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwga2V5ZWQgYnkgdGhlIG5hbm8tc3RhZ2VkIHBhdHRlcm4gdGhhdCBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1RBU0tTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+ID0ge1xuICAnKi57dHMsdHN4LG10c30nOiBbXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBsaW50OmZpeCAtLWAsXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBmb3JtYXQgLS1gXG4gIF0sXG4gICcqLm1kJzogW1xuICAgIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gbGludDptZDpmaXggLS1gXG4gIF1cbn07XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbFdyaXRlclRhc2tzID0gb3B0aW9ucz8uYWRkaXRpb25hbFdyaXRlclRhc2tzID8/IHt9O1xuICBpZiAoT2JqZWN0LmtleXMoYWRkaXRpb25hbFdyaXRlclRhc2tzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JzaWRpYW5EZXZVdGlsc0NvbmZpZztcbiAgfVxuXG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24oV1JJVEVSX1RBU0tTLCBwYXR0ZXJuKSk7XG4gIGlmIChkdXBsaWNhdGVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke2R1cGxpY2F0ZVBhdHRlcm59JyBpcyBhbHJlYWR5IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLmApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRpdGlvblNwZWxsY2hlY2soeyAuLi5XUklURVJfVEFTS1MsIC4uLmFkZGl0aW9uYWxXcml0ZXJUYXNrcyB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBPYmplY3Qua2V5cyh3cml0ZXJUYXNrcyk7XG4gIGNvbnN0IHBhdHRlcm5XaXRoU2xhc2ggPSBwYXR0ZXJucy5maW5kKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLmluY2x1ZGVzKCcvJykpO1xuICBpZiAocGF0dGVybldpdGhTbGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBuYW5vLXN0YWdlZCB3cml0ZXIgcGF0dGVybiAnJHtwYXR0ZXJuV2l0aFNsYXNofScgY29udGFpbnMgJy8nLCB3aGljaCB0aGUgc3BlbGxjaGVjayBwYXJ0aXRpb24gY2Fubm90IGV4cHJlc3MuYCk7XG4gIH1cblxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUEyQzVDLE1BQU0sOEJBQThCLDRCQUE0QixFQUFFLEtBQUssR0FBRztBQUUxRSxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQjtBQVF6RCxNQUFNLDBCQUEwQjtBQVNoQyxNQUFNLHNDQUFzQztBQWdCNUMsTUFBTSxlQUE0RDtBQUFBLEVBQ2hFLGtCQUFrQjtBQUFBLElBQ2hCLEdBQUcsMkJBQTJCO0FBQUEsSUFDOUIsR0FBRywyQkFBMkI7QUFBQSxFQUNoQztBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sR0FBRywyQkFBMkI7QUFBQSxFQUNoQztBQUNGO0FBaUJPLE1BQU0seUJBQTJDLG9CQUFvQixZQUFZO0FBRXhGLE1BQU0sMkJBQTJCO0FBc0IxQixTQUFTLG9CQUFvQixTQUF3RDtBQUMxRixzQkFBb0I7QUFFcEIsTUFBSSxpQkFBaUIsd0JBQXdCLEdBQUc7QUFDOUMsWUFBUSxPQUFPLE1BQU0seUJBQXlCLHdCQUF3QjtBQUFBLENBQWE7QUFDbkYsWUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQjtBQUVBLFFBQU0sd0JBQXdCLFNBQVMseUJBQXlCLENBQUM7QUFDakUsTUFBSSxPQUFPLEtBQUsscUJBQXFCLEVBQUUsV0FBVyxHQUFHO0FBQ25ELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxtQkFBbUIsT0FBTyxLQUFLLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxZQUFZLE9BQU8sT0FBTyxjQUFjLE9BQU8sQ0FBQztBQUNsSCxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVBQU0sSUFBSSxNQUFNLCtCQUErQixnQkFBZ0IsdUNBQXVDO0FBQUEsRUFDeEc7QUFFQSxTQUFPLG9CQUFvQixFQUFFLEdBQUcsY0FBYyxHQUFHLHNCQUFzQixDQUFDO0FBQzFFO0FBZUEsU0FBUyxzQkFBc0IsUUFBZ0Isa0JBQWlEO0FBQzlGLFFBQU0sY0FBYyw4QkFBOEIsRUFBRTtBQUNwRCxRQUFNLFNBQVMseUJBQXlCLElBQUksMEJBQTBCLDhCQUE4QixNQUFNO0FBQzFHLFFBQU0sVUFBc0IsQ0FBQztBQUM3QixNQUFJLFFBQWtCLENBQUM7QUFDdkIsTUFBSSxjQUFjO0FBRWxCLGFBQVcsbUJBQW1CLGtCQUFrQjtBQUM5QyxVQUFNLGlCQUFpQiw4QkFBOEIsS0FBSyxlQUFlLEdBQUcsSUFBSTtBQUNoRixRQUFJLE1BQU0sU0FBUyxLQUFLLGNBQWMsaUJBQWlCLFFBQVE7QUFDN0QsY0FBUSxLQUFLLEtBQUs7QUFDbEIsY0FBUSxDQUFDO0FBQ1Qsb0JBQWM7QUFBQSxJQUNoQjtBQUNBLFVBQU0sS0FBSyxlQUFlO0FBQzFCLG1CQUFlO0FBQUEsRUFDakI7QUFFQSxNQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLFlBQVEsS0FBSyxLQUFLO0FBQUEsRUFDcEI7QUFFQSxTQUFPO0FBQ1Q7QUF3QkEsU0FBUyxvQkFBb0IsYUFBNEU7QUFDdkcsUUFBTSxXQUFXLE9BQU8sS0FBSyxXQUFXO0FBQ3hDLFFBQU0sbUJBQW1CLFNBQVMsS0FBSyxDQUFDLFlBQVksUUFBUSxTQUFTLEdBQUcsQ0FBQztBQUN6RSxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVBQU0sSUFBSSxNQUFNLCtCQUErQixnQkFBZ0IsZ0VBQWdFO0FBQUEsRUFDakk7QUFFQSxRQUFNLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUNwRixRQUFNLFNBQTJCO0FBQUEsSUFDL0IsQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUM7QUFBQSxFQUN6RDtBQUVBLGFBQVcsQ0FBQyxTQUFTLFFBQVEsS0FBSyxPQUFPLFFBQVEsV0FBVyxHQUFHO0FBQzdELFdBQU8sT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLFVBQVUsa0JBQWtCLENBQUM7QUFBQSxFQUNuRTtBQUVBLFNBQU87QUFDVDtBQWtCQSxTQUFTLGNBQWMsVUFBNkM7QUFDbEUsU0FBTyxDQUFDLEVBQUUsVUFBVSxNQUFNO0FBQ3hCLFVBQU0sbUJBQW1CLFVBQVUsSUFBSSxDQUFDLGFBQWEsa0JBQWtCLFFBQVEsQ0FBQztBQUNoRixXQUFPLFNBQVMsUUFBUSxDQUFDLFlBQVksc0JBQXNCLFNBQVMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFBQSxFQUN2STtBQUNGO0FBa0JBLFNBQVMsa0JBQWtCLFVBQTBCO0FBQ25ELFFBQU0sZUFBZSxTQUFTLFFBQVEsSUFBSSxHQUFHLFFBQVE7QUFDckQsTUFBSSxtQkFBbUIsYUFBYSxXQUFXLElBQUksS0FBSyxXQUFXLFlBQVksSUFBSSxXQUFXLGNBQWMsV0FBVyxNQUFNLEdBQUc7QUFDaEksTUFBSSxnQkFBZ0IsV0FBVyxHQUFHLEdBQUc7QUFDbkMsc0JBQWtCLEtBQUssZUFBZTtBQUFBLEVBQ3hDO0FBQ0EsU0FBTyxnQkFBZ0IsV0FBVyxxQ0FBcUMsR0FBRztBQUM1RTsiLAogICJuYW1lcyI6IFtdCn0K
123
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb25TeW5jIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXBvLXNwZWNpZmljIGZpbGUtcmV3cml0aW5nIHRhc2tzLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0IGNsYWltcyB0aGVpciBmaWxlcy5cbiAgICpcbiAgICogRWFjaCBnZXRzIHNwZWxsY2hlY2sgYXBwZW5kZWQgYW5kIGl0cyBmaWxlcyByZW1vdmVkIGZyb20gdGhlIHNwZWxsY2hlY2stb25seSBrZXksIGV4YWN0bHkgbGlrZSB0aGUgc2hhcmVkXG4gICAqIHdyaXRlcnMuIEEgcGF0dGVybiBtdXN0IG5vdCBjb250YWluIGAvYCwgYW5kIG11c3Qgbm90IHJlcGVhdCBhIHNoYXJlZCB3cml0ZXIgcGF0dGVybi4gRWFjaCBjb21tYW5kIGlzIGFcbiAgICogcHJlZml4IHRoZSBzdGFnZWQgcGF0aHMgYXJlIGFwcGVuZGVkIHRvLCBpbiBiYXRjaGVzLCBsaWtlIHRoZSBzaGFyZWQgb25lcyAoYG5wbSBydW4gbGludDpmaXggLS1gKS5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxXcml0ZXJUYXNrcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG59XG5cbi8qKlxuICogQSBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIHdob3NlIGV2ZXJ5IGtleSBpcyBhIHtAbGluayBOYW5vU3RhZ2VkVGFza30uXG4gKi9cbmV4cG9ydCB0eXBlIE5hbm9TdGFnZWRDb25maWcgPSBSZWNvcmQ8c3RyaW5nLCBOYW5vU3RhZ2VkVGFzaz47XG5cbi8qKlxuICogQSBmdW5jdGlvbi12YWx1ZWQgbmFuby1zdGFnZWQgdGFzazogaXQgcmVjZWl2ZXMgdGhlIHN0YWdlZCBmaWxlcyBpdHMgcGF0dGVybiBjbGFpbXMgYW5kIHJldHVybnMgdGhlXG4gKiBjb21tYW5kcyB0byBydW4gb3ZlciB0aGVtLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZFRhc2sgPSAoY29udGV4dDogTmFub1N0YWdlZFRhc2tDb250ZXh0KSA9PiBzdHJpbmdbXTtcblxuLyoqXG4gKiBXaGF0IG5hbm8tc3RhZ2VkIHBhc3NlcyB0byBhIGZ1bmN0aW9uLXZhbHVlZCB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbm9TdGFnZWRUYXNrQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aHMgb2YgdGhlIHN0YWdlZCBmaWxlcyB0aGUgdGFzaydzIHBhdHRlcm4gY2xhaW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgYDxtYW5hZ2VyPiBydW5gIHByZWZpeCBldmVyeSB0YXNrIGJlbG93IGlzIGJ1aWx0IG9uLCByZXNvbHZlZCBvbmNlIGZvciB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBEZXRlY3Rpb24gcHJvYmVzIGZvciBhIGxvY2tmaWxlIGJlc2lkZSBgcGFja2FnZS5qc29uYCwgc28gaXQgaXMgYSBoYW5kZnVsIG9mIGBleGlzdHNTeW5jYCBjYWxscyBhbmRcbiAqIG5vdGhpbmcgbW9yZSBcdTIwMTQgbm8gYC5lbnZgIHJlYWQgYW5kIG5vIGBwcm9jZXNzLmV4aXRgLCB3aGljaCBpcyB3aGF0IGxldHMgaXQgc2l0IGF0IG1vZHVsZSBzY29wZS5cbiAqL1xuY29uc3QgUEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EID0gZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kKCkuam9pbignICcpO1xuXG5jb25zdCBTUEVMTENIRUNLX1NDUklQVF9OQU1FID0gJ3NwZWxsY2hlY2snO1xuXG5jb25zdCBTUEVMTENIRUNLX0NPTU1BTkQgPSB0b1NjcmlwdENvbW1hbmQoU1BFTExDSEVDS19TQ1JJUFRfTkFNRSk7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSBucG0gc2NyaXB0cyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwgaW4gdGhlIG9yZGVyIHRoZXkgcnVuLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0XG4gKiBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1NDUklQVF9OQU1FUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+PiA9IHtcbiAgJyoue3RzLHRzeCxtdHN9JzogWydsaW50OmZpeCcsICdmb3JtYXQnXSxcbiAgJyoubWQnOiBbJ2xpbnQ6bWQ6Zml4J11cbn07XG5cbmNvbnN0IFdSSVRFUl9UQVNLUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+PiA9IHRvV3JpdGVyVGFza3MoKCkgPT4gdHJ1ZSk7XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTLCB0cnVlKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIEEgc2hhcmVkIHRhc2sgd2hvc2UgbnBtIHNjcmlwdCB0aGUgcHJvamVjdCdzIGBwYWNrYWdlLmpzb25gIGRvZXMgbm90IGRlY2xhcmUgaXMgbGVmdCBvdXQsIHNvIGEgcHJvamVjdFxuICogd2l0aG91dCwgc2F5LCBtYXJrZG93bmxpbnQgZG9lcyBub3QgZmFpbCBpdHMgZmlyc3QgY29tbWl0IHRoYXQgc3RhZ2VzIGEgYC5tZGAgZmlsZSBvbiBhIG1pc3Npbmcgc2NyaXB0LiBBXG4gKiB3cml0ZXIgcGF0dGVybiBsZWZ0IHdpdGggbm8gd3JpdGVyIGlzIGRyb3BwZWQsIGFuZCBzcGVsbGNoZWNrIHJ1bnMgb25seSB3aGVuIGBzcGVsbGNoZWNrYCBpcyBkZWNsYXJlZCwgaW5cbiAqIHdoaWNoIGNhc2UgaXRzIGZpbGVzIGZhbGwgdG8gdGhlIHNwZWxsY2hlY2stb25seSBrZXkuIFRoZSBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgdGhlIGNhbGxlcidzIG93biBhbmRcbiAqIGFyZSBrZXB0IGFzIGdpdmVuLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0TmFtZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHJlYWRQYWNrYWdlSnNvblN5bmMoKS5zY3JpcHRzID8/IHt9KSk7XG4gIGNvbnN0IGhhc0FsbFNoYXJlZFNjcmlwdHMgPSBbU1BFTExDSEVDS19TQ1JJUFRfTkFNRSwgLi4uT2JqZWN0LnZhbHVlcyhXUklURVJfU0NSSVBUX05BTUVTKS5mbGF0KCldXG4gICAgLmV2ZXJ5KChzY3JpcHROYW1lKSA9PiBzY3JpcHROYW1lcy5oYXMoc2NyaXB0TmFtZSkpO1xuICBjb25zdCBhZGRpdGlvbmFsV3JpdGVyVGFza3MgPSBvcHRpb25zPy5hZGRpdGlvbmFsV3JpdGVyVGFza3MgPz8ge307XG4gIGlmIChoYXNBbGxTaGFyZWRTY3JpcHRzICYmIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxXcml0ZXJUYXNrcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuRGV2VXRpbHNDb25maWc7XG4gIH1cblxuICBjb25zdCB3cml0ZXJUYXNrcyA9IHRvV3JpdGVyVGFza3MoKHNjcmlwdE5hbWUpID0+IHNjcmlwdE5hbWVzLmhhcyhzY3JpcHROYW1lKSk7XG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24od3JpdGVyVGFza3MsIHBhdHRlcm4pKTtcbiAgaWYgKGR1cGxpY2F0ZVBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmFuby1zdGFnZWQgd3JpdGVyIHBhdHRlcm4gJyR7ZHVwbGljYXRlUGF0dGVybn0nIGlzIGFscmVhZHkgYSBzaGFyZWQgd3JpdGVyIHBhdHRlcm4uYCk7XG4gIH1cblxuICByZXR1cm4gcGFydGl0aW9uU3BlbGxjaGVjayh7IC4uLndyaXRlclRhc2tzLCAuLi5hZGRpdGlvbmFsV3JpdGVyVGFza3MgfSwgc2NyaXB0TmFtZXMuaGFzKFNQRUxMQ0hFQ0tfU0NSSVBUX05BTUUpKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBXaXRob3V0IHNwZWxsY2hlY2sgdGhlcmUgaXMgbm90aGluZyB0byBwYXJ0aXRpb246IGVhY2ggd3JpdGVyIGtleSBydW5zIGl0cyBvd24gY29tbWFuZHMsIGFuZCBubyBjb21wbGVtZW50XG4gKiBrZXkgaXMgZW1pdHRlZC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHBhcmFtIHNob3VsZFNwZWxsY2hlY2sgLSBXaGV0aGVyIHRoZSBwcm9qZWN0IGhhcyBhIGBzcGVsbGNoZWNrYCBzY3JpcHQgdG8gcnVuLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4sIHNob3VsZFNwZWxsY2hlY2s6IGJvb2xlYW4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgaWYgKCFzaG91bGRTcGVsbGNoZWNrKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh3cml0ZXJUYXNrcykubWFwKChbcGF0dGVybiwgY29tbWFuZHNdKSA9PiBbcGF0dGVybiwgdG9CYXRjaGVkVGFzayhjb21tYW5kcyldKSk7XG4gIH1cblxuICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKHdyaXRlclRhc2tzKTtcbiAgY29uc3QgcGF0dGVybldpdGhTbGFzaCA9IHBhdHRlcm5zLmZpbmQoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSk7XG4gIGlmIChwYXR0ZXJuV2l0aFNsYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke3BhdHRlcm5XaXRoU2xhc2h9JyBjb250YWlucyAnLycsIHdoaWNoIHRoZSBzcGVsbGNoZWNrIHBhcnRpdGlvbiBjYW5ub3QgZXhwcmVzcy5gKTtcbiAgfVxuXG4gIC8vIGAhKCkqYCB3b3VsZCBjb21waWxlIHRvIGEgbG9va2FoZWFkIHRoYXQgcmVqZWN0cyBldmVyeSBwYXRoLCBzbyB3aXRoIG5vIHdyaXRlciB0aGUgY29tcGxlbWVudCBpcyBldmVyeXRoaW5nLlxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IHBhdHRlcm5zLmxlbmd0aCA9PT0gMCA/ICcqJyA6IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBwcmVmaXggdGhhdCBydW5zIGFuIG5wbSBzY3JpcHQgb3ZlciB0aGUgcGF0aHMgYXBwZW5kZWQgdG8gaXQuXG4gKlxuICogQHBhcmFtIHNjcmlwdE5hbWUgLSBUaGUgc2NyaXB0IG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwcmVmaXgsIHN1Y2ggYXMgYG5wbSBydW4gbGludDpmaXggLS1gLlxuICovXG5mdW5jdGlvbiB0b1NjcmlwdENvbW1hbmQoc2NyaXB0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gJHtzY3JpcHROYW1lfSAtLWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzaGFyZWQgd3JpdGVyIHRhc2tzIGZyb20ge0BsaW5rIFdSSVRFUl9TQ1JJUFRfTkFNRVN9LCBrZWVwaW5nIG9ubHkgdGhlIHNjcmlwdHMgYSBmaWx0ZXIgYWNjZXB0c1xuICogYW5kIGRyb3BwaW5nIGEgcGF0dGVybiBsZWZ0IHdpdGggbm9uZS5cbiAqXG4gKiBAcGFyYW0gc2hvdWxkSW5jbHVkZVNjcmlwdCAtIFdoZXRoZXIgdG8gcnVuIGEgZ2l2ZW4gc2NyaXB0LlxuICogQHJldHVybnMgVGhlIHdyaXRlciB0YXNrcywga2V5ZWQgYnkgdGhlIHBhdHRlcm4gdGhhdCBjbGFpbXMgdGhlaXIgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIHRvV3JpdGVyVGFza3Moc2hvdWxkSW5jbHVkZVNjcmlwdDogKHNjcmlwdE5hbWU6IHN0cmluZykgPT4gYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPiB7XG4gIGNvbnN0IHdyaXRlclRhc2tzOiBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBbcGF0dGVybiwgc2NyaXB0TmFtZXNdIG9mIE9iamVjdC5lbnRyaWVzKFdSSVRFUl9TQ1JJUFRfTkFNRVMpKSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBzY3JpcHROYW1lcy5maWx0ZXIoKHNjcmlwdE5hbWUpID0+IHNob3VsZEluY2x1ZGVTY3JpcHQoc2NyaXB0TmFtZSkpLm1hcCgoc2NyaXB0TmFtZSkgPT4gdG9TY3JpcHRDb21tYW5kKHNjcmlwdE5hbWUpKTtcbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgd3JpdGVyVGFza3NbcGF0dGVybl0gPSBjb21tYW5kcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdyaXRlclRhc2tzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQ0FBbUM7QUEyQzVDLE1BQU0sOEJBQThCLDRCQUE0QixFQUFFLEtBQUssR0FBRztBQUUxRSxNQUFNLHlCQUF5QjtBQUUvQixNQUFNLHFCQUFxQixnQkFBZ0Isc0JBQXNCO0FBUWpFLE1BQU0sMEJBQTBCO0FBU2hDLE1BQU0sc0NBQXNDO0FBaUI1QyxNQUFNLHNCQUFtRTtBQUFBLEVBQ3ZFLGtCQUFrQixDQUFDLFlBQVksUUFBUTtBQUFBLEVBQ3ZDLFFBQVEsQ0FBQyxhQUFhO0FBQ3hCO0FBRUEsTUFBTSxlQUE0RCxjQUFjLE1BQU0s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
@@ -58,6 +58,14 @@ export declare enum RepoPaths {
58
58
  */
59
59
  Bin = ".bin",
60
60
  /**
61
+ Biome configuration file.
62
+ */
63
+ BiomeJson = "biome.json",
64
+ /**
65
+ Biome configuration file, with comments.
66
+ */
67
+ BiomeJsonc = "biome.jsonc",
68
+ /**
61
69
  Bun lockfile.
62
70
  */
63
71
  BunLock = "bun.lock",
@@ -16,6 +16,8 @@ var RepoPaths = /* @__PURE__ */ ((RepoPaths2) => {
16
16
  RepoPaths2["AnyTsx"] = "*.tsx";
17
17
  RepoPaths2["BatExtension"] = ".bat";
18
18
  RepoPaths2["Bin"] = ".bin";
19
+ RepoPaths2["BiomeJson"] = "biome.json";
20
+ RepoPaths2["BiomeJsonc"] = "biome.jsonc";
19
21
  RepoPaths2["BunLock"] = "bun.lock";
20
22
  RepoPaths2["BunLockb"] = "bun.lockb";
21
23
  RepoPaths2["ChangelogMd"] = "CHANGELOG.md";
@@ -85,4 +87,4 @@ var RepoPaths = /* @__PURE__ */ ((RepoPaths2) => {
85
87
  export {
86
88
  RepoPaths
87
89
  };
88
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3JlcG8tcGF0aHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdGhlIFR5cGVTY3JpcHQgcHJvamVjdCB0b29saW5nIHVzZXMsIHNvIHRoZSB0b29saW5nIG5ldmVyIHNwZWxscyB0aGVtIGFzXG4gKiBoYXJkY29kZWQgc3RyaW5ncy5cbiAqL1xuXG4vKipcbiAqIENvbW1vbiBmaWxlIHBhdGhzIGFuZCBwYXR0ZXJucyB1c2VkIGJ5IHRoZSBUeXBlU2NyaXB0IHByb2plY3QgdG9vbGluZy5cbiAqL1xuZXhwb3J0IGVudW0gUmVwb1BhdGhzIHtcbiAgLyoqXG4gIEFueSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIEFueSA9ICcqJyxcblxuICAvKipcbiAgQ29tbW9uSlMgZmlsZS5cbiAgICovXG4gIEFueUNqcyA9ICcqLmNqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueURjdHMgPSAnKi5kLmN0cycsXG5cbiAgLyoqXG4gIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuXG4gICAqL1xuICBBbnlEbXRzID0gJyouZC5tdHMnLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuXG4gICAqL1xuICBBbnlEdHMgPSAnKi5kLnRzJyxcblxuICAvKipcbiAgRVNNIEphdmFTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueU1qcyA9ICcqLm1qcycsXG5cbiAgLyoqXG4gIEFueSBwYXRoIHJlY3Vyc2l2ZWx5LlxuICAgKi9cbiAgQW55UGF0aCA9ICcqKicsXG5cbiAgLyoqXG4gIEFueSB0ZXN0IFR5cGVTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueVRlc3RUcyA9ICcqLnRlc3QudHMnLFxuXG4gIC8qKlxuICBBbnkgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55VHMgPSAnKi50cycsXG5cbiAgLyoqXG4gIEFueSBUU1ggZmlsZS5cbiAgICovXG4gIEFueVRzeCA9ICcqLnRzeCcsXG5cbiAgLyoqXG4gIFdpbmRvd3MgYmF0Y2ggZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBCYXRFeHRlbnNpb24gPSAnLmJhdCcsXG5cbiAgLyoqXG4gIEZvbGRlciBob2xkaW5nIHRoZSBleGVjdXRhYmxlIHNoaW1zIG9mIGxvY2FsbHktaW5zdGFsbGVkIHBhY2thZ2VzLlxuICAgKi9cbiAgQmluID0gJy5iaW4nLFxuXG4gIC8qKlxuICBCdW4gbG9ja2ZpbGUuXG4gICAqL1xuICBCdW5Mb2NrID0gJ2J1bi5sb2NrJyxcblxuICAvKipcbiAgQmluYXJ5IGJ1biBsb2NrZmlsZSwgd3JpdHRlbiBieSBidW4gYmVmb3JlIHYxLjIuXG4gICAqL1xuICBCdW5Mb2NrYiA9ICdidW4ubG9ja2InLFxuXG4gIC8qKlxuICBDaGFuZ2Vsb2cgZmlsZS5cbiAgICovXG4gIENoYW5nZWxvZ01kID0gJ0NIQU5HRUxPRy5tZCcsXG5cbiAgLyoqXG4gIENvbW1vbkpTIGZvbGRlci5cbiAgICovXG4gIENqcyA9ICdjanMnLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIENqc0V4dGVuc2lvbiA9ICcuY2pzJyxcblxuICAvKipcbiAgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuIGBnaXQgd29ya3RyZWUgYWRkYCBwdXRzIGEgc2Vjb25kLCBjb21wbGV0ZSBjaGVja291dCBvZiB0aGUgcmVwb3NpdG9yeVxuICBoZXJlLCBJTlNJREUgdGhlIHJlcG9zaXRvcnksIHdoaWNoIGlzIHRoZSBvbmx5IHJlYXNvbiBhIHJlcG8gZXZlciBjb250YWlucyBhIGNvcHkgb2YgaXRzZWxmLiBOZXZlclxuICBzb3VyY2UsIHNvIGV2ZXJ5IGxpbnRlciB0aGF0IHdhbGtzIHRoZSB0cmVlIGhhcyB0byBza2lwIGl0LlxuICAgKi9cbiAgQ2xhdWRlV29ya3RyZWVzID0gJy5jbGF1ZGUvd29ya3RyZWVzJyxcblxuICAvKipcbiAgV2luZG93cyBjb21tYW5kIHNjcmlwdCBleHRlbnNpb24uXG4gICAqL1xuICBDb21tYW5kRXh0ZW5zaW9uID0gJy5jbWQnLFxuXG4gIC8qKlxuICBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIENvbW1pdGxpbnRDb25maWdUcyA9ICdjb21taXRsaW50LmNvbmZpZy50cycsXG5cbiAgLyoqXG4gIEN1cnJlbnQgZm9sZGVyLlxuICAgKi9cbiAgQ3VycmVudEZvbGRlciA9ICcuJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERjdHNFeHRlbnNpb24gPSAnLmQuY3RzJyxcblxuICAvKipcbiAgRGlzdHJpYnV0aW9uIGZvbGRlci5cbiAgICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci5cbiAgICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKlxuICBBIHBhdGggdG8gdGhlIGB0ZW1wbGF0ZXNgIGZvbGRlciB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIsIGhvbGRpbmcgdGhlIGNvbnN1bWVyLWZhY2luZyB0ZW1wbGF0ZXMuXG4gICAqL1xuICBEaXN0VGVtcGxhdGVzID0gJ2Rpc3QvdGVtcGxhdGVzJyxcblxuICAvKipcbiAgVHJhbnNwaWxlZCBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRGpzRXh0ZW5zaW9uID0gJy5kLmpzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBEbXRzRXh0ZW5zaW9uID0gJy5kLm10cycsXG5cbiAgLyoqXG4gIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24gZm9sZGVyIHdpdGhpbiBhIHZhdWx0LlxuICAgKi9cbiAgRG90T2JzaWRpYW4gPSAnLm9ic2lkaWFuJyxcblxuICAvKipcbiAgRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRHRzRXh0ZW5zaW9uID0gJy5kLnRzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0NqcyA9ICdlc2xpbnQuY29uZmlnLmNqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0N0cyA9ICdlc2xpbnQuY29uZmlnLmN0cycsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0pzID0gJ2VzbGludC5jb25maWcuanMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgRXNsaW50Q29uZmlnTWpzID0gJ2VzbGludC5jb25maWcubWpzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ1RzID0gJ2VzbGludC5jb25maWcudHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmb2xkZXIuXG4gICAqL1xuICBFc20gPSAnZXNtJyxcblxuICAvKipcbiAgV2luZG93cyBleGVjdXRhYmxlIGV4dGVuc2lvbi5cbiAgICovXG4gIEV4ZUV4dGVuc2lvbiA9ICcuZXhlJyxcblxuICAvKipcbiAgQ29tbW9uSlMgSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERtdHMgPSAnaW5kZXguZC5tdHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBKc0V4dGVuc2lvbiA9ICcuanMnLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQtY2xpMi5janMnLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC1jbGkyLmpzb25jJyxcblxuICAvKipcbiAgRVNNIE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIE1hcmtkb3dubGludENsaTJDb25maWdNanMgPSAnLm1hcmtkb3dubGludC1jbGkyLm1qcycsXG5cbiAgLyoqXG4gIFlBTUwgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwgPSAnLm1hcmtkb3dubGludC1jbGkyLnlhbWwnLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQuY2pzJyxcblxuICAvKipcbiAgSlNPTiBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbiA9ICcubWFya2Rvd25saW50Lmpzb24nLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC5qc29uYycsXG5cbiAgLyoqXG4gIEVTTSBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnTWpzID0gJy5tYXJrZG93bmxpbnQubWpzJyxcblxuICAvKipcbiAgWUFNTCBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnWWFtbCA9ICcubWFya2Rvd25saW50LnlhbWwnLFxuXG4gIC8qKlxuICBZQU1MIE1hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDb25maWdZbWwgPSAnLm1hcmtkb3dubGludC55bWwnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIE1qc0V4dGVuc2lvbiA9ICcubWpzJyxcblxuICAvKipcbiAgVGVzdCBtb2NrcyBmb2xkZXIuXG4gICAqL1xuICBNb2NrcyA9ICdzcmMvdGVzdC1oZWxwZXJzJyxcblxuICAvKipcbiAgTm9kZSBtb2R1bGVzIGZvbGRlci5cbiAgICovXG4gIE5vZGVNb2R1bGVzID0gJ25vZGVfbW9kdWxlcycsXG5cbiAgLyoqXG4gIE5QTSBzaHJpbmt3cmFwIGZpbGUuXG4gICAqL1xuICBOcG1TaHJpbmt3cmFwSnNvbiA9ICducG0tc2hyaW5rd3JhcC5qc29uJyxcblxuICAvKipcbiAgUGFja2FnZSBKU09OIGZpbGUuXG4gICAqL1xuICBQYWNrYWdlSnNvbiA9ICdwYWNrYWdlLmpzb24nLFxuXG4gIC8qKlxuICBOUE0gbG9ja2ZpbGUuXG4gICAqL1xuICBQYWNrYWdlTG9ja0pzb24gPSAncGFja2FnZS1sb2NrLmpzb24nLFxuXG4gIC8qKlxuICBQbnBtIGxvY2tmaWxlLlxuICAgKi9cbiAgUG5wbUxvY2tZYW1sID0gJ3BucG0tbG9jay55YW1sJyxcblxuICAvKipcbiAgUm9vdCBmb2xkZXIuXG4gICAqL1xuICBSb290Rm9sZGVyID0gJy8nLFxuXG4gIC8qKlxuICBTY3JpcHRzIGZvbGRlci5cbiAgICovXG4gIFNjcmlwdHMgPSAnc2NyaXB0cycsXG5cbiAgLyoqXG4gIFNvdXJjZSBmb2xkZXIuXG4gICAqL1xuICBTcmMgPSAnc3JjJyxcblxuICAvKipcbiAgU3R5bGVzIGZvbGRlci5cbiAgICovXG4gIFN0eWxlcyA9ICdzdHlsZXMnLFxuXG4gIC8qKlxuICBTdHlsZXMgQ1NTIGZpbGUuXG4gICAqL1xuICBTdHlsZXNDc3MgPSAnc3R5bGVzLmNzcycsXG5cbiAgLyoqXG4gIFRlbXBsYXRlcyBmb2xkZXIuXG4gICAqL1xuICBUZW1wbGF0ZXMgPSAndGVtcGxhdGVzJyxcblxuICAvKipcbiAgVGVzdCBoZWxwZXJzIGZvbGRlci5cbiAgICovXG4gIFRlc3RIZWxwZXJzID0gJ3Rlc3QtaGVscGVycycsXG5cbiAgLyoqXG4gIFRlc3RzIGZvbGRlci5cbiAgICovXG4gIFRlc3RzID0gJ19fdGVzdHNfXycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgVHNDb25maWdKc29uID0gJ3RzY29uZmlnLmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHZhbGlkYXRlcyB0aGUgZ2VuZXJhdGVkIENvbW1vbkpTIGRlY2xhcmF0aW9ucy5cbiAgICovXG4gIFRzQ29uZmlnVmFsaWRhdGVEZWNsYXJhdGlvbnNDanNKc29uID0gJ3RzY29uZmlnLnZhbGlkYXRlLWRlY2xhcmF0aW9ucy1janMuanNvbicsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdmFsaWRhdGVzIHRoZSBnZW5lcmF0ZWQgRVNNIGRlY2xhcmF0aW9ucy5cbiAgICovXG4gIFRzQ29uZmlnVmFsaWRhdGVEZWNsYXJhdGlvbnNKc29uID0gJ3RzY29uZmlnLnZhbGlkYXRlLWRlY2xhcmF0aW9ucy5qc29uJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIFRzRXh0ZW5zaW9uID0gJy50cycsXG5cbiAgLyoqXG4gIFR5cGVzIGZvbGRlci5cbiAgICovXG4gIFR5cGVzID0gJ0B0eXBlcycsXG5cbiAgLyoqXG4gIFZpdGVzdCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBWaXRlc3RDb25maWdUcyA9ICd2aXRlc3QuY29uZmlnLnRzJyxcblxuICAvKipcbiAgWWFybiBsb2NrZmlsZS5cbiAgICovXG4gIFlhcm5Mb2NrID0gJ3lhcm4ubG9jaydcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBVU8sSUFBSyxZQUFMLGtCQUFLQSxlQUFMO0FBSUwsRUFBQUEsV0FBQSxTQUFNO0FBS04sRUFBQUEsV0FBQSxZQUFTO0FBS1QsRUFBQUEsV0FBQSxhQUFVO0FBS1YsRUFBQUEsV0FBQSxhQUFVO0FBS1YsRUFBQUEsV0FBQSxZQUFTO0FBS1QsRUFBQUEsV0FBQSxZQUFTO0FBS1QsRUFBQUEsV0FBQSxhQUFVO0FB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
90
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3JlcG8tcGF0aHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdGhlIFR5cGVTY3JpcHQgcHJvamVjdCB0b29saW5nIHVzZXMsIHNvIHRoZSB0b29saW5nIG5ldmVyIHNwZWxscyB0aGVtIGFzXG4gKiBoYXJkY29kZWQgc3RyaW5ncy5cbiAqL1xuXG4vKipcbiAqIENvbW1vbiBmaWxlIHBhdGhzIGFuZCBwYXR0ZXJucyB1c2VkIGJ5IHRoZSBUeXBlU2NyaXB0IHByb2plY3QgdG9vbGluZy5cbiAqL1xuZXhwb3J0IGVudW0gUmVwb1BhdGhzIHtcbiAgLyoqXG4gIEFueSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIEFueSA9ICcqJyxcblxuICAvKipcbiAgQ29tbW9uSlMgZmlsZS5cbiAgICovXG4gIEFueUNqcyA9ICcqLmNqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueURjdHMgPSAnKi5kLmN0cycsXG5cbiAgLyoqXG4gIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuXG4gICAqL1xuICBBbnlEbXRzID0gJyouZC5tdHMnLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuXG4gICAqL1xuICBBbnlEdHMgPSAnKi5kLnRzJyxcblxuICAvKipcbiAgRVNNIEphdmFTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueU1qcyA9ICcqLm1qcycsXG5cbiAgLyoqXG4gIEFueSBwYXRoIHJlY3Vyc2l2ZWx5LlxuICAgKi9cbiAgQW55UGF0aCA9ICcqKicsXG5cbiAgLyoqXG4gIEFueSB0ZXN0IFR5cGVTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueVRlc3RUcyA9ICcqLnRlc3QudHMnLFxuXG4gIC8qKlxuICBBbnkgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55VHMgPSAnKi50cycsXG5cbiAgLyoqXG4gIEFueSBUU1ggZmlsZS5cbiAgICovXG4gIEFueVRzeCA9ICcqLnRzeCcsXG5cbiAgLyoqXG4gIFdpbmRvd3MgYmF0Y2ggZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBCYXRFeHRlbnNpb24gPSAnLmJhdCcsXG5cbiAgLyoqXG4gIEZvbGRlciBob2xkaW5nIHRoZSBleGVjdXRhYmxlIHNoaW1zIG9mIGxvY2FsbHktaW5zdGFsbGVkIHBhY2thZ2VzLlxuICAgKi9cbiAgQmluID0gJy5iaW4nLFxuXG4gIC8qKlxuICBCaW9tZSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBCaW9tZUpzb24gPSAnYmlvbWUuanNvbicsXG5cbiAgLyoqXG4gIEJpb21lIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2l0aCBjb21tZW50cy5cbiAgICovXG4gIEJpb21lSnNvbmMgPSAnYmlvbWUuanNvbmMnLFxuXG4gIC8qKlxuICBCdW4gbG9ja2ZpbGUuXG4gICAqL1xuICBCdW5Mb2NrID0gJ2J1bi5sb2NrJyxcblxuICAvKipcbiAgQmluYXJ5IGJ1biBsb2NrZmlsZSwgd3JpdHRlbiBieSBidW4gYmVmb3JlIHYxLjIuXG4gICAqL1xuICBCdW5Mb2NrYiA9ICdidW4ubG9ja2InLFxuXG4gIC8qKlxuICBDaGFuZ2Vsb2cgZmlsZS5cbiAgICovXG4gIENoYW5nZWxvZ01kID0gJ0NIQU5HRUxPRy5tZCcsXG5cbiAgLyoqXG4gIENvbW1vbkpTIGZvbGRlci5cbiAgICovXG4gIENqcyA9ICdjanMnLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIENqc0V4dGVuc2lvbiA9ICcuY2pzJyxcblxuICAvKipcbiAgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuIGBnaXQgd29ya3RyZWUgYWRkYCBwdXRzIGEgc2Vjb25kLCBjb21wbGV0ZSBjaGVja291dCBvZiB0aGUgcmVwb3NpdG9yeVxuICBoZXJlLCBJTlNJREUgdGhlIHJlcG9zaXRvcnksIHdoaWNoIGlzIHRoZSBvbmx5IHJlYXNvbiBhIHJlcG8gZXZlciBjb250YWlucyBhIGNvcHkgb2YgaXRzZWxmLiBOZXZlclxuICBzb3VyY2UsIHNvIGV2ZXJ5IGxpbnRlciB0aGF0IHdhbGtzIHRoZSB0cmVlIGhhcyB0byBza2lwIGl0LlxuICAgKi9cbiAgQ2xhdWRlV29ya3RyZWVzID0gJy5jbGF1ZGUvd29ya3RyZWVzJyxcblxuICAvKipcbiAgV2luZG93cyBjb21tYW5kIHNjcmlwdCBleHRlbnNpb24uXG4gICAqL1xuICBDb21tYW5kRXh0ZW5zaW9uID0gJy5jbWQnLFxuXG4gIC8qKlxuICBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIENvbW1pdGxpbnRDb25maWdUcyA9ICdjb21taXRsaW50LmNvbmZpZy50cycsXG5cbiAgLyoqXG4gIEN1cnJlbnQgZm9sZGVyLlxuICAgKi9cbiAgQ3VycmVudEZvbGRlciA9ICcuJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERjdHNFeHRlbnNpb24gPSAnLmQuY3RzJyxcblxuICAvKipcbiAgRGlzdHJpYnV0aW9uIGZvbGRlci5cbiAgICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci5cbiAgICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKlxuICBBIHBhdGggdG8gdGhlIGB0ZW1wbGF0ZXNgIGZvbGRlciB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIsIGhvbGRpbmcgdGhlIGNvbnN1bWVyLWZhY2luZyB0ZW1wbGF0ZXMuXG4gICAqL1xuICBEaXN0VGVtcGxhdGVzID0gJ2Rpc3QvdGVtcGxhdGVzJyxcblxuICAvKipcbiAgVHJhbnNwaWxlZCBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRGpzRXh0ZW5zaW9uID0gJy5kLmpzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBEbXRzRXh0ZW5zaW9uID0gJy5kLm10cycsXG5cbiAgLyoqXG4gIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24gZm9sZGVyIHdpdGhpbiBhIHZhdWx0LlxuICAgKi9cbiAgRG90T2JzaWRpYW4gPSAnLm9ic2lkaWFuJyxcblxuICAvKipcbiAgRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRHRzRXh0ZW5zaW9uID0gJy5kLnRzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0NqcyA9ICdlc2xpbnQuY29uZmlnLmNqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0N0cyA9ICdlc2xpbnQuY29uZmlnLmN0cycsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0pzID0gJ2VzbGludC5jb25maWcuanMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgRXNsaW50Q29uZmlnTWpzID0gJ2VzbGludC5jb25maWcubWpzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ1RzID0gJ2VzbGludC5jb25maWcudHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmb2xkZXIuXG4gICAqL1xuICBFc20gPSAnZXNtJyxcblxuICAvKipcbiAgV2luZG93cyBleGVjdXRhYmxlIGV4dGVuc2lvbi5cbiAgICovXG4gIEV4ZUV4dGVuc2lvbiA9ICcuZXhlJyxcblxuICAvKipcbiAgQ29tbW9uSlMgSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERtdHMgPSAnaW5kZXguZC5tdHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBKc0V4dGVuc2lvbiA9ICcuanMnLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQtY2xpMi5janMnLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC1jbGkyLmpzb25jJyxcblxuICAvKipcbiAgRVNNIE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIE1hcmtkb3dubGludENsaTJDb25maWdNanMgPSAnLm1hcmtkb3dubGludC1jbGkyLm1qcycsXG5cbiAgLyoqXG4gIFlBTUwgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwgPSAnLm1hcmtkb3dubGludC1jbGkyLnlhbWwnLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQuY2pzJyxcblxuICAvKipcbiAgSlNPTiBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbiA9ICcubWFya2Rvd25saW50Lmpzb24nLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC5qc29uYycsXG5cbiAgLyoqXG4gIEVTTSBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnTWpzID0gJy5tYXJrZG93bmxpbnQubWpzJyxcblxuICAvKipcbiAgWUFNTCBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnWWFtbCA9ICcubWFya2Rvd25saW50LnlhbWwnLFxuXG4gIC8qKlxuICBZQU1MIE1hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDb25maWdZbWwgPSAnLm1hcmtkb3dubGludC55bWwnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIE1qc0V4dGVuc2lvbiA9ICcubWpzJyxcblxuICAvKipcbiAgVGVzdCBtb2NrcyBmb2xkZXIuXG4gICAqL1xuICBNb2NrcyA9ICdzcmMvdGVzdC1oZWxwZXJzJyxcblxuICAvKipcbiAgTm9kZSBtb2R1bGVzIGZvbGRlci5cbiAgICovXG4gIE5vZGVNb2R1bGVzID0gJ25vZGVfbW9kdWxlcycsXG5cbiAgLyoqXG4gIE5QTSBzaHJpbmt3cmFwIGZpbGUuXG4gICAqL1xuICBOcG1TaHJpbmt3cmFwSnNvbiA9ICducG0tc2hyaW5rd3JhcC5qc29uJyxcblxuICAvKipcbiAgUGFja2FnZSBKU09OIGZpbGUuXG4gICAqL1xuICBQYWNrYWdlSnNvbiA9ICdwYWNrYWdlLmpzb24nLFxuXG4gIC8qKlxuICBOUE0gbG9ja2ZpbGUuXG4gICAqL1xuICBQYWNrYWdlTG9ja0pzb24gPSAncGFja2FnZS1sb2NrLmpzb24nLFxuXG4gIC8qKlxuICBQbnBtIGxvY2tmaWxlLlxuICAgKi9cbiAgUG5wbUxvY2tZYW1sID0gJ3BucG0tbG9jay55YW1sJyxcblxuICAvKipcbiAgUm9vdCBmb2xkZXIuXG4gICAqL1xuICBSb290Rm9sZGVyID0gJy8nLFxuXG4gIC8qKlxuICBTY3JpcHRzIGZvbGRlci5cbiAgICovXG4gIFNjcmlwdHMgPSAnc2NyaXB0cycsXG5cbiAgLyoqXG4gIFNvdXJjZSBmb2xkZXIuXG4gICAqL1xuICBTcmMgPSAnc3JjJyxcblxuICAvKipcbiAgU3R5bGVzIGZvbGRlci5cbiAgICovXG4gIFN0eWxlcyA9ICdzdHlsZXMnLFxuXG4gIC8qKlxuICBTdHlsZXMgQ1NTIGZpbGUuXG4gICAqL1xuICBTdHlsZXNDc3MgPSAnc3R5bGVzLmNzcycsXG5cbiAgLyoqXG4gIFRlbXBsYXRlcyBmb2xkZXIuXG4gICAqL1xuICBUZW1wbGF0ZXMgPSAndGVtcGxhdGVzJyxcblxuICAvKipcbiAgVGVzdCBoZWxwZXJzIGZvbGRlci5cbiAgICovXG4gIFRlc3RIZWxwZXJzID0gJ3Rlc3QtaGVscGVycycsXG5cbiAgLyoqXG4gIFRlc3RzIGZvbGRlci5cbiAgICovXG4gIFRlc3RzID0gJ19fdGVzdHNfXycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgVHNDb25maWdKc29uID0gJ3RzY29uZmlnLmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHZhbGlkYXRlcyB0aGUgZ2VuZXJhdGVkIENvbW1vbkpTIGRlY2xhcmF0aW9ucy5cbiAgICovXG4gIFRzQ29uZmlnVmFsaWRhdGVEZWNsYXJhdGlvbnNDanNKc29uID0gJ3RzY29uZmlnLnZhbGlkYXRlLWRlY2xhcmF0aW9ucy1janMuanNvbicsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdmFsaWRhdGVzIHRoZSBnZW5lcmF0ZWQgRVNNIGRlY2xhcmF0aW9ucy5cbiAgICovXG4gIFRzQ29uZmlnVmFsaWRhdGVEZWNsYXJhdGlvbnNKc29uID0gJ3RzY29uZmlnLnZhbGlkYXRlLWRlY2xhcmF0aW9ucy5qc29uJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIFRzRXh0ZW5zaW9uID0gJy50cycsXG5cbiAgLyoqXG4gIFR5cGVzIGZvbGRlci5cbiAgICovXG4gIFR5cGVzID0gJ0B0eXBlcycsXG5cbiAgLyoqXG4gIFZpdGVzdCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBWaXRlc3RDb25maWdUcyA9ICd2aXRlc3QuY29uZmlnLnRzJyxcblxuICAvKipcbiAgWWFybiBsb2NrZmlsZS5cbiAgICovXG4gIFlhcm5Mb2NrID0gJ3lhcm4ubG9jaydcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBVU8sSUFBSyxZ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
@@ -0,0 +1,29 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Locates the shared tool configuration files this package ships under `assets/`.
6
+ */
7
+ /**
8
+ * A shared configuration file this package ships under `assets/`.
9
+ */
10
+ export declare enum SharedConfigFile {
11
+ /**
12
+ * The shared Biome configuration. A project's own `biome.json` extends it.
13
+ */
14
+ Biome = "biome.json",
15
+ /**
16
+ * The shared Prettier configuration.
17
+ */
18
+ Prettier = "prettier.json"
19
+ }
20
+ /**
21
+ * Finds a shared configuration file. It walks up from the module, because it runs from `src` here and from
22
+ * `dist/lib/<format>` once installed.
23
+ *
24
+ * @param file - The {@link SharedConfigFile} to find.
25
+ * @param moduleUrl - The URL of a module of this package to start from.
26
+ * @returns The file's absolute path.
27
+ * @throws If no folder above the module holds the file.
28
+ */
29
+ export declare function getSharedConfigFilePath(file: SharedConfigFile, moduleUrl?: string): string;
@@ -0,0 +1,36 @@
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
+ import { existsSync } from "node:fs";
7
+ import {
8
+ dirname,
9
+ join
10
+ } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ var SharedConfigFile = /* @__PURE__ */ ((SharedConfigFile2) => {
13
+ SharedConfigFile2["Biome"] = "biome.json";
14
+ SharedConfigFile2["Prettier"] = "prettier.json";
15
+ return SharedConfigFile2;
16
+ })(SharedConfigFile || {});
17
+ const ASSETS_FOLDER = "assets";
18
+ function getSharedConfigFilePath(file, moduleUrl = import.meta.url) {
19
+ let directory = dirname(fileURLToPath(moduleUrl));
20
+ for (; ; ) {
21
+ const candidate = join(directory, ASSETS_FOLDER, file);
22
+ if (existsSync(candidate)) {
23
+ return candidate;
24
+ }
25
+ const parent = dirname(directory);
26
+ if (parent === directory) {
27
+ throw new Error(`No ${ASSETS_FOLDER}/${file} above ${fileURLToPath(moduleUrl)}.`);
28
+ }
29
+ directory = parent;
30
+ }
31
+ }
32
+ export {
33
+ SharedConfigFile,
34
+ getSharedConfigFilePath
35
+ };
36
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NoYXJlZC1jb25maWctZmlsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBMb2NhdGVzIHRoZSBzaGFyZWQgdG9vbCBjb25maWd1cmF0aW9uIGZpbGVzIHRoaXMgcGFja2FnZSBzaGlwcyB1bmRlciBgYXNzZXRzL2AuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcblxuLyoqXG4gKiBBIHNoYXJlZCBjb25maWd1cmF0aW9uIGZpbGUgdGhpcyBwYWNrYWdlIHNoaXBzIHVuZGVyIGBhc3NldHMvYC5cbiAqL1xuZXhwb3J0IGVudW0gU2hhcmVkQ29uZmlnRmlsZSB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIEJpb21lIGNvbmZpZ3VyYXRpb24uIEEgcHJvamVjdCdzIG93biBgYmlvbWUuanNvbmAgZXh0ZW5kcyBpdC5cbiAgICovXG4gIEJpb21lID0gJ2Jpb21lLmpzb24nLFxuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIFByZXR0aWVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBQcmV0dGllciA9ICdwcmV0dGllci5qc29uJ1xufVxuXG5jb25zdCBBU1NFVFNfRk9MREVSID0gJ2Fzc2V0cyc7XG5cbi8qKlxuICogRmluZHMgYSBzaGFyZWQgY29uZmlndXJhdGlvbiBmaWxlLiBJdCB3YWxrcyB1cCBmcm9tIHRoZSBtb2R1bGUsIGJlY2F1c2UgaXQgcnVucyBmcm9tIGBzcmNgIGhlcmUgYW5kIGZyb21cbiAqIGBkaXN0L2xpYi88Zm9ybWF0PmAgb25jZSBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIGZpbGUgLSBUaGUge0BsaW5rIFNoYXJlZENvbmZpZ0ZpbGV9IHRvIGZpbmQuXG4gKiBAcGFyYW0gbW9kdWxlVXJsIC0gVGhlIFVSTCBvZiBhIG1vZHVsZSBvZiB0aGlzIHBhY2thZ2UgdG8gc3RhcnQgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlJ3MgYWJzb2x1dGUgcGF0aC5cbiAqIEB0aHJvd3MgSWYgbm8gZm9sZGVyIGFib3ZlIHRoZSBtb2R1bGUgaG9sZHMgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFyZWRDb25maWdGaWxlUGF0aChmaWxlOiBTaGFyZWRDb25maWdGaWxlLCBtb2R1bGVVcmw6IHN0cmluZyA9IGltcG9ydC5tZXRhLnVybCk6IHN0cmluZyB7XG4gIGxldCBkaXJlY3RvcnkgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgobW9kdWxlVXJsKSk7XG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBqb2luKGRpcmVjdG9yeSwgQVNTRVRTX0ZPTERFUiwgZmlsZSk7XG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlKSkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGRpcmVjdG9yeSk7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyZWN0b3J5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7QVNTRVRTX0ZPTERFUn0vJHtmaWxlfSBhYm92ZSAke2ZpbGVVUkxUb1BhdGgobW9kdWxlVXJsKX0uYCk7XG4gICAgfVxuXG4gICAgZGlyZWN0b3J5ID0gcGFyZW50O1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxxQkFBcUI7QUFLdkIsSUFBSyxtQkFBTCxrQkFBS0Esc0JBQUw7QUFJTCxFQUFBQSxrQkFBQSxXQUFRO0FBS1IsRUFBQUEsa0JBQUEsY0FBVztBQVRELFNBQUFBO0FBQUEsR0FBQTtBQVlaLE1BQU0sZ0JBQWdCO0FBV2YsU0FBUyx3QkFBd0IsTUFBd0IsWUFBb0IsWUFBWSxLQUFhO0FBQzNHLE1BQUksWUFBWSxRQUFRLGNBQWMsU0FBUyxDQUFDO0FBQ2hELGFBQVM7QUFDUCxVQUFNLFlBQVksS0FBSyxXQUFXLGVBQWUsSUFBSTtBQUNyRCxRQUFJLFdBQVcsU0FBUyxHQUFHO0FBQ3pCLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxTQUFTLFFBQVEsU0FBUztBQUNoQyxRQUFJLFdBQVcsV0FBVztBQUN4QixZQUFNLElBQUksTUFBTSxNQUFNLGFBQWEsSUFBSSxJQUFJLFVBQVUsY0FBYyxTQUFTLENBQUMsR0FBRztBQUFBLElBQ2xGO0FBRUEsZ0JBQVk7QUFBQSxFQUNkO0FBQ0Y7IiwKICAibmFtZXMiOiBbIlNoYXJlZENvbmZpZ0ZpbGUiXQp9Cg==
@@ -0,0 +1,82 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Runs the tests with whichever runner the project configures: vitest or jest.
6
+ */
7
+ /**
8
+ * A test runner the toolkit runs.
9
+ */
10
+ export type TestRunner = 'jest' | 'vitest';
11
+ /**
12
+ * Every file vitest reads its configuration from.
13
+ *
14
+ * `vite.config.*` is deliberately not among them: a project that bundles with vite and tests with jest has one.
15
+ *
16
+ * @see {@link https://vitest.dev/config/}
17
+ */
18
+ export declare const VITEST_CONFIG_FILE_NAMES: readonly string[];
19
+ /**
20
+ * Options for running tests with coverage.
21
+ */
22
+ export interface TestCoverageOptions extends TestOptions {
23
+ /**
24
+ * Minimum coverage percentage required, for lines, functions, branches and statements alike.
25
+ *
26
+ * @default `0`
27
+ */
28
+ readonly minCoverageInPercents?: number;
29
+ }
30
+ /**
31
+ * Options for running tests.
32
+ */
33
+ export interface TestOptions {
34
+ /**
35
+ * Whether jest runs the suite as ES modules. Vitest ignores it.
36
+ *
37
+ * @default `true` when `package.json` declares `"type": "module"`
38
+ */
39
+ readonly esm?: boolean;
40
+ /**
41
+ * The projects to run. Vitest also runs each one's `name:*` sub-projects; jest matches a `displayName` exactly.
42
+ */
43
+ readonly projects?: string[];
44
+ /**
45
+ * The runner to use. Omitted, {@link detectTestRunner} chooses it.
46
+ */
47
+ readonly runner?: TestRunner;
48
+ }
49
+ /**
50
+ * Options for running tests in watch mode.
51
+ */
52
+ export type TestWatchOptions = TestOptions;
53
+ /**
54
+ * Chooses the test runner from the configuration files at the project root.
55
+ *
56
+ * The order is a vitest configuration, then a jest one (a file, or a `jest` key in `package.json`). A project with
57
+ * neither gets vitest, the runner every package on this toolchain used before jest was supported.
58
+ *
59
+ * @returns The runner to use.
60
+ */
61
+ export declare function detectTestRunner(): Promise<TestRunner>;
62
+ /**
63
+ * Runs the test suite with the project's runner.
64
+ *
65
+ * @param options - The {@link TestOptions}.
66
+ * @returns A {@link Promise} that resolves when the tests have completed.
67
+ */
68
+ export declare function test(options?: TestOptions): Promise<void>;
69
+ /**
70
+ * Runs the test suite with coverage, with the project's runner.
71
+ *
72
+ * @param options - The {@link TestCoverageOptions}.
73
+ * @returns A {@link Promise} that resolves when the tests have completed.
74
+ */
75
+ export declare function testCoverage(options?: TestCoverageOptions): Promise<void>;
76
+ /**
77
+ * Runs the test suite in watch mode, with the project's runner.
78
+ *
79
+ * @param options - The {@link TestWatchOptions}.
80
+ * @returns A {@link Promise} that resolves when the watcher exits.
81
+ */
82
+ export declare function testWatch(options?: TestWatchOptions): Promise<void>;
@@ -0,0 +1,64 @@
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
+ import { existsSync } from "node:fs";
7
+ import { resolvePathFromRootSafe } from "../root.mjs";
8
+ import {
9
+ hasJestConfig,
10
+ test as jestTest,
11
+ testCoverage as jestTestCoverage,
12
+ testWatch as jestTestWatch
13
+ } from "./jest.mjs";
14
+ import {
15
+ test as vitestTest,
16
+ testCoverage as vitestTestCoverage,
17
+ testWatch as vitestTestWatch
18
+ } from "./vitest.mjs";
19
+ const VITEST_CONFIG_FILE_NAMES = [
20
+ "vitest.config.cjs",
21
+ "vitest.config.cts",
22
+ "vitest.config.js",
23
+ "vitest.config.mjs",
24
+ "vitest.config.mts",
25
+ "vitest.config.ts"
26
+ ];
27
+ const RUNNERS = {
28
+ jest: {
29
+ test: jestTest,
30
+ testCoverage: jestTestCoverage,
31
+ testWatch: jestTestWatch
32
+ },
33
+ vitest: {
34
+ test: vitestTest,
35
+ testCoverage: vitestTestCoverage,
36
+ testWatch: vitestTestWatch
37
+ }
38
+ };
39
+ async function detectTestRunner() {
40
+ if (VITEST_CONFIG_FILE_NAMES.some((fileName) => existsSync(resolvePathFromRootSafe({ path: fileName })))) {
41
+ return "vitest";
42
+ }
43
+ return await hasJestConfig() ? "jest" : "vitest";
44
+ }
45
+ async function test(options = {}) {
46
+ const { runner = await detectTestRunner(), ...runnerOptions } = options;
47
+ await RUNNERS[runner].test(runnerOptions);
48
+ }
49
+ async function testCoverage(options = {}) {
50
+ const { runner = await detectTestRunner(), ...runnerOptions } = options;
51
+ await RUNNERS[runner].testCoverage(runnerOptions);
52
+ }
53
+ async function testWatch(options = {}) {
54
+ const { runner = await detectTestRunner(), ...runnerOptions } = options;
55
+ await RUNNERS[runner].testWatch(runnerOptions);
56
+ }
57
+ export {
58
+ VITEST_CONFIG_FILE_NAMES,
59
+ detectTestRunner,
60
+ test,
61
+ testCoverage,
62
+ testWatch
63
+ };
64
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9hdXRvLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUnVucyB0aGUgdGVzdHMgd2l0aCB3aGljaGV2ZXIgcnVubmVyIHRoZSBwcm9qZWN0IGNvbmZpZ3VyZXM6IHZpdGVzdCBvciBqZXN0LlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHsgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUgfSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGhhc0plc3RDb25maWcsXG4gIHRlc3QgYXMgamVzdFRlc3QsXG4gIHRlc3RDb3ZlcmFnZSBhcyBqZXN0VGVzdENvdmVyYWdlLFxuICB0ZXN0V2F0Y2ggYXMgamVzdFRlc3RXYXRjaFxufSBmcm9tICcuL2plc3QudHMnO1xuaW1wb3J0IHtcbiAgdGVzdCBhcyB2aXRlc3RUZXN0LFxuICB0ZXN0Q292ZXJhZ2UgYXMgdml0ZXN0VGVzdENvdmVyYWdlLFxuICB0ZXN0V2F0Y2ggYXMgdml0ZXN0VGVzdFdhdGNoXG59IGZyb20gJy4vdml0ZXN0LnRzJztcblxuLyoqXG4gKiBBIHRlc3QgcnVubmVyIHRoZSB0b29sa2l0IHJ1bnMuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RSdW5uZXIgPSAnamVzdCcgfCAndml0ZXN0JztcblxuLyoqXG4gKiBFdmVyeSBmaWxlIHZpdGVzdCByZWFkcyBpdHMgY29uZmlndXJhdGlvbiBmcm9tLlxuICpcbiAqIGB2aXRlLmNvbmZpZy4qYCBpcyBkZWxpYmVyYXRlbHkgbm90IGFtb25nIHRoZW06IGEgcHJvamVjdCB0aGF0IGJ1bmRsZXMgd2l0aCB2aXRlIGFuZCB0ZXN0cyB3aXRoIGplc3QgaGFzIG9uZS5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL31cbiAqL1xuZXhwb3J0IGNvbnN0IFZJVEVTVF9DT05GSUdfRklMRV9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICd2aXRlc3QuY29uZmlnLmNqcycsXG4gICd2aXRlc3QuY29uZmlnLmN0cycsXG4gICd2aXRlc3QuY29uZmlnLmpzJyxcbiAgJ3ZpdGVzdC5jb25maWcubWpzJyxcbiAgJ3ZpdGVzdC5jb25maWcubXRzJyxcbiAgJ3ZpdGVzdC5jb25maWcudHMnXG5dO1xuXG5pbnRlcmZhY2UgUnVubmVyRnVuY3Rpb25zIHtcbiAgcmVhZG9ubHkgdGVzdDogKG9wdGlvbnM6IFRlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSB0ZXN0Q292ZXJhZ2U6IChvcHRpb25zOiBUZXN0Q292ZXJhZ2VPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSB0ZXN0V2F0Y2g6IChvcHRpb25zOiBUZXN0V2F0Y2hPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBSVU5ORVJTOiBSZWFkb25seTxSZWNvcmQ8VGVzdFJ1bm5lciwgUnVubmVyRnVuY3Rpb25zPj4gPSB7XG4gIGplc3Q6IHtcbiAgICB0ZXN0OiBqZXN0VGVzdCxcbiAgICB0ZXN0Q292ZXJhZ2U6IGplc3RUZXN0Q292ZXJhZ2UsXG4gICAgdGVzdFdhdGNoOiBqZXN0VGVzdFdhdGNoXG4gIH0sXG4gIHZpdGVzdDoge1xuICAgIHRlc3Q6IHZpdGVzdFRlc3QsXG4gICAgdGVzdENvdmVyYWdlOiB2aXRlc3RUZXN0Q292ZXJhZ2UsXG4gICAgdGVzdFdhdGNoOiB2aXRlc3RUZXN0V2F0Y2hcbiAgfVxufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIHdpdGggY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENvdmVyYWdlT3B0aW9ucyBleHRlbmRzIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gY292ZXJhZ2UgcGVyY2VudGFnZSByZXF1aXJlZCwgZm9yIGxpbmVzLCBmdW5jdGlvbnMsIGJyYW5jaGVzIGFuZCBzdGF0ZW1lbnRzIGFsaWtlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIHJlYWRvbmx5IG1pbkNvdmVyYWdlSW5QZXJjZW50cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgamVzdCBydW5zIHRoZSBzdWl0ZSBhcyBFUyBtb2R1bGVzLiBWaXRlc3QgaWdub3JlcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgIHdoZW4gYHBhY2thZ2UuanNvbmAgZGVjbGFyZXMgYFwidHlwZVwiOiBcIm1vZHVsZVwiYFxuICAgKi9cbiAgcmVhZG9ubHkgZXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb2plY3RzIHRvIHJ1bi4gVml0ZXN0IGFsc28gcnVucyBlYWNoIG9uZSdzIGBuYW1lOipgIHN1Yi1wcm9qZWN0czsgamVzdCBtYXRjaGVzIGEgYGRpc3BsYXlOYW1lYCBleGFjdGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJ1bm5lciB0byB1c2UuIE9taXR0ZWQsIHtAbGluayBkZXRlY3RUZXN0UnVubmVyfSBjaG9vc2VzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyPzogVGVzdFJ1bm5lcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIGluIHdhdGNoIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RXYXRjaE9wdGlvbnMgPSBUZXN0T3B0aW9ucztcblxuLyoqXG4gKiBDaG9vc2VzIHRoZSB0ZXN0IHJ1bm5lciBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBwcm9qZWN0IHJvb3QuXG4gKlxuICogVGhlIG9yZGVyIGlzIGEgdml0ZXN0IGNvbmZpZ3VyYXRpb24sIHRoZW4gYSBqZXN0IG9uZSAoYSBmaWxlLCBvciBhIGBqZXN0YCBrZXkgaW4gYHBhY2thZ2UuanNvbmApLiBBIHByb2plY3Qgd2l0aFxuICogbmVpdGhlciBnZXRzIHZpdGVzdCwgdGhlIHJ1bm5lciBldmVyeSBwYWNrYWdlIG9uIHRoaXMgdG9vbGNoYWluIHVzZWQgYmVmb3JlIGplc3Qgd2FzIHN1cHBvcnRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcnVubmVyIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVjdFRlc3RSdW5uZXIoKTogUHJvbWlzZTxUZXN0UnVubmVyPiB7XG4gIGlmIChWSVRFU1RfQ09ORklHX0ZJTEVfTkFNRVMuc29tZSgoZmlsZU5hbWUpID0+IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBmaWxlTmFtZSB9KSkpKSB7XG4gICAgcmV0dXJuICd2aXRlc3QnO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGhhc0plc3RDb25maWcoKSA/ICdqZXN0JyA6ICd2aXRlc3QnO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCB0aGUgcHJvamVjdCdzIHJ1bm5lci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgVGVzdE9wdGlvbnN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3Qob3B0aW9uczogVGVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHJ1bm5lciA9IGF3YWl0IGRldGVjdFRlc3RSdW5uZXIoKSwgLi4ucnVubmVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgYXdhaXQgUlVOTkVSU1tydW5uZXJdLnRlc3QocnVubmVyT3B0aW9ucyk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGNvdmVyYWdlLCB3aXRoIHRoZSBwcm9qZWN0J3MgcnVubmVyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBUZXN0Q292ZXJhZ2VPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q292ZXJhZ2Uob3B0aW9uczogVGVzdENvdmVyYWdlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVubmVyID0gYXdhaXQgZGV0ZWN0VGVzdFJ1bm5lcigpLCAuLi5ydW5uZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICBhd2FpdCBSVU5ORVJTW3J1bm5lcl0udGVzdENvdmVyYWdlKHJ1bm5lck9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgaW4gd2F0Y2ggbW9kZSwgd2l0aCB0aGUgcHJvamVjdCdzIHJ1bm5lci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgVGVzdFdhdGNoT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHdhdGNoZXIgZXhpdHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0V2F0Y2gob3B0aW9uczogVGVzdFdhdGNoT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVubmVyID0gYXdhaXQgZGV0ZWN0VGVzdFJ1bm5lcigpLCAuLi5ydW5uZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICBhd2FpdCBSVU5ORVJTW3J1bm5lcl0udGVzdFdhdGNoKHJ1bm5lck9wdGlvbnMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQSxTQUFTLGtCQUFrQjtBQUUzQixTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBLFFBQVE7QUFBQSxFQUNSLGdCQUFnQjtBQUFBLEVBQ2hCLGFBQWE7QUFBQSxPQUNSO0FBQ1A7QUFBQSxFQUNFLFFBQVE7QUFBQSxFQUNSLGdCQUFnQjtBQUFBLEVBQ2hCLGFBQWE7QUFBQSxPQUNSO0FBY0EsTUFBTSwyQkFBOEM7QUFBQSxFQUN6RDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFRQSxNQUFNLFVBQXlEO0FBQUEsRUFDN0QsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLEVBQ2I7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxFQUNiO0FBQ0Y7QUFpREEsZUFBc0IsbUJBQXdDO0FBQzVELE1BQUkseUJBQXlCLEtBQUssQ0FBQyxhQUFhLFdBQVcsd0JBQXdCLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDeEcsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLE1BQU0sY0FBYyxJQUFJLFNBQVM7QUFDMUM7QUFRQSxlQUFzQixLQUFLLFVBQXVCLENBQUMsR0FBa0I7QUFDbkUsUUFBTSxFQUFFLFNBQVMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLGNBQWMsSUFBSTtBQUNoRSxRQUFNLFFBQVEsTUFBTSxFQUFFLEtBQUssYUFBYTtBQUMxQztBQVFBLGVBQXNCLGFBQWEsVUFBK0IsQ0FBQyxHQUFrQjtBQUNuRixRQUFNLEVBQUUsU0FBUyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsY0FBYyxJQUFJO0FBQ2hFLFFBQU0sUUFBUSxNQUFNLEVBQUUsYUFBYSxhQUFhO0FBQ2xEO0FBUUEsZUFBc0IsVUFBVSxVQUE0QixDQUFDLEdBQWtCO0FBQzdFLFFBQU0sRUFBRSxTQUFTLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxjQUFjLElBQUk7QUFDaEUsUUFBTSxRQUFRLE1BQU0sRUFBRSxVQUFVLGFBQWE7QUFDL0M7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,3 +1,6 @@
1
1
  /// <reference path="../library-references.d.mts" />
2
+ export * as 'auto' from './auto.mjs';
3
+ export * as 'jest-config' from './jest-config.mjs';
4
+ export * as 'jest' from './jest.mjs';
2
5
  export * as 'vitest-config' from './vitest-config.mjs';
3
6
  export * as 'vitest' from './vitest.mjs';
@@ -3,10 +3,16 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
+ import * as auto from "./auto.mjs";
7
+ import * as jest_config from "./jest-config.mjs";
8
+ import * as jest from "./jest.mjs";
6
9
  import * as vitest_config from "./vitest-config.mjs";
7
10
  import * as vitest from "./vitest.mjs";
8
11
  export {
12
+ auto,
13
+ jest,
14
+ jest_config as "jest-config",
9
15
  vitest,
10
16
  vitest_config as "vitest-config"
11
17
  };
12
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICd2aXRlc3QtY29uZmlnJyBmcm9tICcuL3ZpdGVzdC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdCcgZnJvbSAnLi92aXRlc3QudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZQSxtQkFBcUI7QUFDakMsWUFBWSxZQUFjOyIsCiAgIm5hbWVzIjogWyJ2aXRlc3QtY29uZmlnIl0KfQo=
18
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhdXRvJyBmcm9tICcuL2F1dG8udHMnO1xuZXhwb3J0ICogYXMgJ2plc3QtY29uZmlnJyBmcm9tICcuL2plc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdqZXN0JyBmcm9tICcuL2plc3QudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdC1jb25maWcnIGZyb20gJy4vdml0ZXN0LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0JyBmcm9tICcuL3ZpdGVzdC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksVUFBWTtBQUN4QixZQUFZQSxpQkFBbUI7QUFDL0IsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZLFlBQWM7IiwKICAibmFtZXMiOiBbImplc3QtY29uZmlnIiwgInZpdGVzdC1jb25maWciXQp9Cg==
@@ -0,0 +1,71 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Shared jest configuration for TypeScript packages: {@link defineJestConfig}, which fills in the ts-jest transform,
6
+ * the ESM settings, the test excludes and the coverage block a project otherwise writes by hand.
7
+ *
8
+ * The coverage block is the one the vitest library configuration uses, so a package reports the same files whichever
9
+ * runner it picks.
10
+ */
11
+ import type { Config } from 'jest';
12
+ import type { TsJestTransformerOptions } from 'ts-jest';
13
+ /**
14
+ * The files ts-jest compiles: `.ts`, `.tsx`, `.mts` and `.cts`.
15
+ */
16
+ export declare const JEST_TYPESCRIPT_TRANSFORM_PATTERN: string;
17
+ /**
18
+ * Maps a relative import written with a `.js` extension onto the path without an extension, which jest resolves.
19
+ *
20
+ * A project compiled with `module: nodenext` writes `./foo.js` for `./foo.ts`, and so does TypeScript itself when
21
+ * `rewriteRelativeImportExtensions` turns a `./foo.ts` import into `./foo.js`. Jest looks for a file literally named
22
+ * `foo.js` and fails with `Cannot find module './foo.js'`, so the extension is removed and jest's own
23
+ * `moduleFileExtensions` search finds `foo.ts`.
24
+ */
25
+ export declare const JEST_RELATIVE_JS_IMPORT_MAPPER: Readonly<Record<string, string>>;
26
+ /**
27
+ * Folders jest never collects tests from.
28
+ */
29
+ export declare const DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS: readonly string[];
30
+ /**
31
+ * Options for {@link defineJestConfig}: any jest option, which wins over the default the function would otherwise
32
+ * set, plus the two below.
33
+ */
34
+ export interface DefineJestConfigOptions extends Config {
35
+ /**
36
+ * Whether jest loads the project as ES modules.
37
+ *
38
+ * ESM needs `extensionsToTreatAsEsm`, ts-jest's `useESM`, and Node's `--experimental-vm-modules`, which the jest
39
+ * runner in this package adds by the same rule.
40
+ *
41
+ * @default `true` when `package.json` declares `"type": "module"`
42
+ */
43
+ readonly esm?: boolean;
44
+ /**
45
+ * Options for the ts-jest transform, spread over the defaults: `useESM` from {@link esm}, and a `tsconfig` of
46
+ * `{ isolatedModules: true }`, so each file is transpiled on its own, without a type check, as vitest does. A
47
+ * `tsconfig` given here replaces that default rather than merging with it.
48
+ *
49
+ * Ignored when {@link Config.transform} is given.
50
+ */
51
+ readonly tsJestOptions?: TsJestTransformerOptions;
52
+ }
53
+ /**
54
+ * Defines a TypeScript project's jest configuration.
55
+ *
56
+ * The defaults: the tests are `src/**\/*.test.ts`, run in the `node` environment, transformed by ts-jest, as ESM when
57
+ * the package is (see {@link DefineJestConfigOptions.esm}); a `.js` relative import resolves onto its `.ts` source;
58
+ * coverage is v8 over `src/`, without the barrels, the declarations, the tests and the test helpers, reported as
59
+ * `text`, `lcov` and `html` into `coverage/`. Every jest option in `options` replaces its default, except
60
+ * `moduleNameMapper`, whose entries are added to the `.js` mapper.
61
+ *
62
+ * @param options - The configuration options.
63
+ * @returns The jest configuration.
64
+ */
65
+ export declare function defineJestConfig(options?: DefineJestConfigOptions): Config;
66
+ /**
67
+ * Says whether the project at the root is an ES module package.
68
+ *
69
+ * @returns Whether its `package.json` declares `"type": "module"`. A project without a `package.json` is not.
70
+ */
71
+ export declare function isEsmPackage(): boolean;