@mnaoumov/typescript-dev-toolkit 1.0.0 → 1.1.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 (147) hide show
  1. package/dist/lib/cjs/build.d.cts +1 -1
  2. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -1
  3. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -1
  4. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -1
  5. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -1
  6. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  7. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
  8. package/dist/lib/cjs/bundlers/index.d.cts +1 -1
  9. package/dist/lib/cjs/check-project-types.d.cts +1 -1
  10. package/dist/lib/cjs/cli-utils.d.cts +1 -1
  11. package/dist/lib/cjs/code-generator.d.cts +1 -1
  12. package/dist/lib/cjs/commitlint-config.d.cts +1 -1
  13. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
  14. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
  15. package/dist/lib/cjs/env-toggle.d.cts +1 -1
  16. package/dist/lib/cjs/exec.d.cts +1 -1
  17. package/dist/lib/cjs/forbidden-patterns.d.cts +1 -1
  18. package/dist/lib/cjs/formatters/dprint.d.cts +1 -1
  19. package/dist/lib/cjs/formatters/index.d.cts +1 -1
  20. package/dist/lib/cjs/fs.d.cts +1 -1
  21. package/dist/lib/cjs/gate.d.cts +1 -1
  22. package/dist/lib/cjs/git.d.cts +1 -1
  23. package/dist/lib/cjs/json.d.cts +1 -1
  24. package/dist/lib/cjs/library-build.cjs +14 -6
  25. package/dist/lib/cjs/library-build.d.cts +6 -2
  26. package/dist/lib/cjs/library-references.d.cts +5 -0
  27. package/dist/lib/cjs/linters/cspell-content.d.cts +1 -1
  28. package/dist/lib/cjs/linters/cspell.d.cts +1 -1
  29. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +1 -1
  30. package/dist/lib/cjs/linters/eslint-config.d.cts +1 -1
  31. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +1 -1
  32. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +1 -1
  33. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -1
  34. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -1
  35. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +1 -1
  36. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +1 -1
  37. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -1
  38. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +1 -1
  39. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +1 -1
  40. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -1
  41. package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +1 -1
  42. package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +1 -1
  43. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +1 -1
  44. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +1 -1
  45. package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +1 -1
  46. package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +1 -1
  47. package/dist/lib/cjs/linters/eslint.cjs +77 -3
  48. package/dist/lib/cjs/linters/eslint.d.cts +40 -1
  49. package/dist/lib/cjs/linters/index.d.cts +1 -1
  50. package/dist/lib/cjs/linters/lint-ignores.d.cts +1 -1
  51. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +1 -1
  52. package/dist/lib/cjs/linters/markdownlint-content.d.cts +1 -1
  53. package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +1 -1
  54. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +1 -1
  55. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +1 -1
  56. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -1
  57. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +1 -1
  58. package/dist/lib/cjs/linters/markdownlint.d.cts +1 -1
  59. package/dist/lib/cjs/linters/over-exposure.d.cts +1 -1
  60. package/dist/lib/cjs/nano-staged-config.d.cts +1 -1
  61. package/dist/lib/cjs/npm-publish.d.cts +1 -1
  62. package/dist/lib/cjs/npm-run.d.cts +1 -1
  63. package/dist/lib/cjs/npm.d.cts +1 -1
  64. package/dist/lib/cjs/package-lock-integrity.d.cts +1 -1
  65. package/dist/lib/cjs/package-manager.d.cts +1 -1
  66. package/dist/lib/cjs/released-issues.d.cts +1 -1
  67. package/dist/lib/cjs/repo-paths.d.cts +1 -1
  68. package/dist/lib/cjs/root.d.cts +1 -1
  69. package/dist/lib/cjs/test-runners/index.d.cts +1 -1
  70. package/dist/lib/cjs/test-runners/vitest-config.d.cts +1 -1
  71. package/dist/lib/cjs/test-runners/vitest.d.cts +1 -1
  72. package/dist/lib/cjs/validate-declarations.d.cts +1 -1
  73. package/dist/lib/cjs/version.d.cts +1 -1
  74. package/dist/lib/esm/build.d.mts +1 -1
  75. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +1 -1
  76. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +1 -1
  77. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +1 -1
  78. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -1
  79. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
  80. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -1
  81. package/dist/lib/esm/bundlers/index.d.mts +1 -1
  82. package/dist/lib/esm/check-project-types.d.mts +1 -1
  83. package/dist/lib/esm/cli-utils.d.mts +1 -1
  84. package/dist/lib/esm/code-generator.d.mts +1 -1
  85. package/dist/lib/esm/commitlint-config.d.mts +1 -1
  86. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
  87. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
  88. package/dist/lib/esm/env-toggle.d.mts +1 -1
  89. package/dist/lib/esm/exec.d.mts +1 -1
  90. package/dist/lib/esm/forbidden-patterns.d.mts +1 -1
  91. package/dist/lib/esm/formatters/dprint.d.mts +1 -1
  92. package/dist/lib/esm/formatters/index.d.mts +1 -1
  93. package/dist/lib/esm/fs.d.mts +1 -1
  94. package/dist/lib/esm/gate.d.mts +1 -1
  95. package/dist/lib/esm/git.d.mts +1 -1
  96. package/dist/lib/esm/json.d.mts +1 -1
  97. package/dist/lib/esm/library-build.d.mts +6 -2
  98. package/dist/lib/esm/library-build.mjs +14 -6
  99. package/dist/lib/esm/library-references.d.mts +5 -0
  100. package/dist/lib/esm/linters/cspell-content.d.mts +1 -1
  101. package/dist/lib/esm/linters/cspell.d.mts +1 -1
  102. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +1 -1
  103. package/dist/lib/esm/linters/eslint-config.d.mts +1 -1
  104. package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +1 -1
  105. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +1 -1
  106. package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -1
  107. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +1 -1
  108. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +1 -1
  109. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +1 -1
  110. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +1 -1
  111. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +1 -1
  112. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +1 -1
  113. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +1 -1
  114. package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +1 -1
  115. package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +1 -1
  116. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +1 -1
  117. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +1 -1
  118. package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +1 -1
  119. package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +1 -1
  120. package/dist/lib/esm/linters/eslint.d.mts +40 -1
  121. package/dist/lib/esm/linters/eslint.mjs +74 -3
  122. package/dist/lib/esm/linters/index.d.mts +1 -1
  123. package/dist/lib/esm/linters/lint-ignores.d.mts +1 -1
  124. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +1 -1
  125. package/dist/lib/esm/linters/markdownlint-content.d.mts +1 -1
  126. package/dist/lib/esm/linters/markdownlint-ignores.d.mts +1 -1
  127. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +1 -1
  128. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +1 -1
  129. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -1
  130. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +1 -1
  131. package/dist/lib/esm/linters/markdownlint.d.mts +1 -1
  132. package/dist/lib/esm/linters/over-exposure.d.mts +1 -1
  133. package/dist/lib/esm/nano-staged-config.d.mts +1 -1
  134. package/dist/lib/esm/npm-publish.d.mts +1 -1
  135. package/dist/lib/esm/npm-run.d.mts +1 -1
  136. package/dist/lib/esm/npm.d.mts +1 -1
  137. package/dist/lib/esm/package-lock-integrity.d.mts +1 -1
  138. package/dist/lib/esm/package-manager.d.mts +1 -1
  139. package/dist/lib/esm/released-issues.d.mts +1 -1
  140. package/dist/lib/esm/repo-paths.d.mts +1 -1
  141. package/dist/lib/esm/root.d.mts +1 -1
  142. package/dist/lib/esm/test-runners/index.d.mts +1 -1
  143. package/dist/lib/esm/test-runners/vitest-config.d.mts +1 -1
  144. package/dist/lib/esm/test-runners/vitest.d.mts +1 -1
  145. package/dist/lib/esm/validate-declarations.d.mts +1 -1
  146. package/dist/lib/esm/version.d.mts +1 -1
  147. package/package.json +1 -1
@@ -56,6 +56,34 @@ import {
56
56
  resolvePathFromRootSafe
57
57
  } from "../root.mjs";
58
58
  const ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS = ["--max-warnings", "0", "--no-warn-ignored"];
59
+ const LINT_PROBLEMS_MESSAGE = "ESLint reported lint problems. The findings are printed above.";
60
+ const ESLINT_EXIT_CODE_CLEAN = 0;
61
+ const ESLINT_EXIT_CODE_LINT_PROBLEMS = 1;
62
+ const ESLINT_ABORT_BANNER = "Oops! Something went wrong!";
63
+ const RULE_CRASH_REG_EXP = /^Rule: "/m;
64
+ const NPM_NOTICE_PREFIX = "npm notice";
65
+ const STACK_FRAME_REG_EXP = /^at\s/;
66
+ const MAX_FAILURE_DETAIL_LINES = 6;
67
+ const MIN_NT_STATUS_EXIT_CODE = 65536;
68
+ const HEX_RADIX = 16;
69
+ function classifyEslintExit(result) {
70
+ if (result.exitCode === ESLINT_EXIT_CODE_CLEAN && result.exitSignal === null) {
71
+ return "clean";
72
+ }
73
+ return result.exitCode === ESLINT_EXIT_CODE_LINT_PROBLEMS && !result.stderr.includes(ESLINT_ABORT_BANNER) ? "lint-problems" : "did-not-lint";
74
+ }
75
+ function describeFailureToLint(result) {
76
+ const details = extractFailureDetails(result.stderr);
77
+ return [
78
+ getFailureHeadline(result),
79
+ "This is NOT a lint finding: the source code has not been judged, so do not go looking for a defect in it.",
80
+ "Re-run the command. Only if it reproduces is there something to fix, and the thing to fix is the linter.",
81
+ ` exit code: ${formatExitCode(result.exitCode)}`,
82
+ ...result.exitSignal === null ? [] : [` terminated by signal: ${result.exitSignal}`],
83
+ details.length > 0 ? " ESLint said:" : " ESLint printed no diagnostic at all.",
84
+ ...details.map((detail) => ` ${detail}`)
85
+ ].join("\n");
86
+ }
59
87
  async function lint(options) {
60
88
  const { defaultConfigFilePath, paths, shouldFix } = options ?? {};
61
89
  const configFiles = [
@@ -75,14 +103,57 @@ async function lint(options) {
75
103
  await cp(defaultConfigFilePath, resolvePathFromRootSafe({ path: basename(defaultConfigFilePath) }));
76
104
  }
77
105
  const targets = paths?.length ? paths : [RepoPaths.CurrentFolder];
78
- await execFromRoot([
106
+ const result = await execFromRoot([
79
107
  ...resolveToolCommand({ tool: "eslint" }),
80
108
  ...ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS,
81
109
  ...shouldFix ? ["--fix"] : [],
82
110
  { batchedArguments: targets }
83
- ]);
111
+ ], {
112
+ shouldIgnoreExitCode: true,
113
+ shouldIncludeDetails: true
114
+ });
115
+ const kind = classifyEslintExit(result);
116
+ if (kind === "clean") {
117
+ return;
118
+ }
119
+ throw new Error(kind === "lint-problems" ? LINT_PROBLEMS_MESSAGE : describeFailureToLint(result));
120
+ }
121
+ function extractFailureDetails(stderr) {
122
+ const details = [];
123
+ for (const rawLine of stderr.split("\n")) {
124
+ if (details.length === MAX_FAILURE_DETAIL_LINES) {
125
+ break;
126
+ }
127
+ const line = rawLine.trim();
128
+ const isNoise = line === "" || line.startsWith(ESLINT_ABORT_BANNER) || line.startsWith(NPM_NOTICE_PREFIX) || STACK_FRAME_REG_EXP.test(line);
129
+ if (!isNoise && !details.includes(line)) {
130
+ details.push(line);
131
+ }
132
+ }
133
+ return details;
134
+ }
135
+ function formatExitCode(exitCode) {
136
+ if (exitCode === null) {
137
+ return "(none - the process was terminated before it could exit)";
138
+ }
139
+ return exitCode < MIN_NT_STATUS_EXIT_CODE ? String(exitCode) : `${String(exitCode)} (0x${exitCode.toString(HEX_RADIX).toUpperCase()})`;
140
+ }
141
+ function getFailureHeadline(result) {
142
+ if (result.exitSignal !== null) {
143
+ return "ESLint was KILLED before it finished linting.";
144
+ }
145
+ if (result.exitCode !== null && result.exitCode >= MIN_NT_STATUS_EXIT_CODE) {
146
+ return "ESLint DIED at the OS level - an access violation or similar, with no diagnostic of its own.";
147
+ }
148
+ if (RULE_CRASH_REG_EXP.test(result.stderr)) {
149
+ return "ESLint CRASHED: a rule threw while linting. The rule and the file it was on are named below.";
150
+ }
151
+ return result.stderr.includes(ESLINT_ABORT_BANNER) ? "ESLint ABORTED: it threw instead of finishing - a broken config or command line, or an internal error." : "ESLint exited non-zero without reporting findings, so it did not finish linting.";
84
152
  }
85
153
  export {
154
+ LINT_PROBLEMS_MESSAGE,
155
+ classifyEslintExit,
156
+ describeFailureToLint,
86
157
  lint
87
158
  };
88
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludGluZyB1dGlsaXR5IGZvciBFU0xpbnQgY29uZmlndXJhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBmaXhpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiB0byBsaW50IGZpbGVzIGJhc2VkIG9uIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIGBlc2xpbnQuY29uZmlnLnRzYC5cbiAqIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGZpeCBsaW50aW5nIGlzc3VlcyBpZiBzcGVjaWZpZWQsIGFuZCBsb2dzIHJlc3VsdHMgdG8gdGhlIGNvbnNvbGUuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgeyByZXNvbHZlVG9vbENvbW1hbmQgfSBmcm9tICcuLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFRoZSBmbGFncyB0aGF0IG1ha2UgYSBXQVJOSU5HIGNvdW50IGFzIGEgZmluZGluZywgcGFzc2VkIG9uIGV2ZXJ5IHJ1bi5cbiAqXG4gKiBFU0xpbnQgZXhpdHMgYDBgIHdoZW4gYSBydW4gcmVwb3J0ZWQgd2FybmluZ3MgYW5kIG5vIGVycm9ycywgc28gd2l0aG91dCBgLS1tYXgtd2FybmluZ3MgMGAgdGhlIGdhdGUgcmVhZHMgYVxuICogd2FybmluZyBhcyBhIGNsZWFuIHRyZWU6IGBsaW50YCBwcmludHMgaXQsIHJldHVybnMgc3VjY2VzcywgYW5kIENJLCB0aGUgcHJlLWNvbW1pdCBob29rIGFuZCBldmVyeSBzd2VlcFxuICogYWdyZWUgdGhlIHRyZWUgaXMgY2xlYW4uIEEgd2FybmluZyB0aGF0IG5vdGhpbmcgZXZlciBmYWlscyBvbiBpcyBhIHdhcm5pbmcgdGhhdCBzdGFuZHMgZm9yIGV2ZXIsIGFuZCB0aGVcbiAqIGZsZWV0IGhhcyBjYXJyaWVkIHNldmVyYWwgdGhhdCBlYWNoIG5lZWRlZCBhIHBlcnNvbiByYXRoZXIgdGhhbiBhIGdhdGUgdG8gbm90aWNlIHRoZW0uXG4gKlxuICogSXQgaXMgcGFzc2VkIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlcmUgaXMgbm8gb3B0aW9uIHRvIHJhaXNlIGl0OiBhIGNlaWxpbmcgYSByZXBvIGNhbiByYWlzZSBpcyBhIGdhdGVcbiAqIHNvbWVib2R5IHR1cm5zIG9mZi4gSXQgaXMgcGFzc2VkIG9uIHRoZSBgLS1maXhgIHJ1bnMgdG9vLCBiZWNhdXNlIHdoYXRldmVyIGlzIGxlZnQgYWZ0ZXIgZml4aW5nIGlzIGV4YWN0bHlcbiAqIHdoYXQgdGhlIG5vLWZpeCBydW4gd291bGQgaGF2ZSBqdWRnZWQsIHNvIHRoZSB0d28gY2Fubm90IGRpc2FncmVlIGFib3V0IHdoYXQgY291bnRzLiBJdCBpcyBhIHN0YXRpYyBjb21tYW5kXG4gKiBwYXJ0IHJhdGhlciB0aGFuIGEgYmF0Y2hlZCBhcmd1bWVudCwgc28gZXZlcnkgYmF0Y2ggb2YgYSBzcGxpdCBjb21tYW5kIGxpbmUgY2FycmllcyBpdC5cbiAqXG4gKiBgLS1uby13YXJuLWlnbm9yZWRgIGhhcyB0byB0cmF2ZWwgd2l0aCBpdC4gVGhlIHByZS1jb21taXQgaG9vayBoYW5kcyBFU0xpbnQgZXhwbGljaXQgZmlsZSBsaXN0cywgYW5kIEVTTGludFxuICogcmVwb3J0cyBhbiBleHBsaWNpdGx5IHBhc3NlZCwgZ2xvYmFsbHkgaWdub3JlZCBwYXRoIChhIGB0ZW1wbGF0ZXMvYCBmaWxlLCBzYXkpIGFzIGEgV0FSTklORyByYXRoZXIgdGhhblxuICogc2tpcHBpbmcgaXQuIFVuZGVyIGAtLW1heC13YXJuaW5ncyAwYCB0aGF0IHdhcm5pbmcgYWxvbmUgd291bGQgZmFpbCB0aGUgY29tbWl0LCBhbHRob3VnaCBpdCBzYXlzIG5vdGhpbmdcbiAqIGFib3V0IHRoZSBjb2RlLlxuICovXG5jb25zdCBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnLS1tYXgtd2FybmluZ3MnLCAnMCcsICctLW5vLXdhcm4taWdub3JlZCddO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LCBFU0xpbnQgcnVuc1xuICAgKiBhZ2FpbnN0IHdoYXRldmVyIGl0IGZpbmRzLCBhbmQgcmVwb3J0cyBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBMaW50IHRoZSBwcm9qZWN0IHdpdGggRVNMaW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBMaW50T3B0aW9uc30uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW50KG9wdGlvbnM/OiBMaW50T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcGF0aHMsIHNob3VsZEZpeCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgY29uZmlnRmlsZXMgPSBbXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0pzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdNanMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0NqcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnVHMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnQ3RzXG4gIF07XG5cbiAgY29uc3QgZG9lc0NvbmZpZ0ZpbGVFeGlzdCA9IGNvbmZpZ0ZpbGVzLnNvbWUoKGNvbmZpZ0ZpbGUpID0+IHtcbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogY29uZmlnRmlsZSB9KTtcbiAgICByZXR1cm4gZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGlmICghZG9lc0NvbmZpZ0ZpbGVFeGlzdCAmJiBkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRVNMaW50OmxpbnQnKSgnRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIENyZWF0aW5nIGRlZmF1bHQgY29uZmlnLi4uJyk7XG4gICAgYXdhaXQgY3AoZGVmYXVsdENvbmZpZ0ZpbGVQYXRoLCByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGJhc2VuYW1lKGRlZmF1bHRDb25maWdGaWxlUGF0aCkgfSkpO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogW1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnZXNsaW50JyB9KSxcbiAgICAuLi5FU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTLFxuICAgIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1cbiAgXSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsVUFBVTtBQUVuQixTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQW9CUCxNQUFNLHdDQUEyRCxDQUFDLGtCQUFrQixLQUFLLG1CQUFtQjtBQThCNUcsZUFBc0IsS0FBSyxTQUFzQztBQUMvRCxRQUFNLEVBQUUsdUJBQXVCLE9BQU8sVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUNoRSxRQUFNLGNBQWM7QUFBQSxJQUNsQixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHVCQUF1Qix1QkFBdUI7QUFDakQsbUJBQWUsYUFBYSxFQUFFLGlFQUFpRTtBQUMvRixVQUFNLEdBQUcsdUJBQXVCLHdCQUF3QixFQUFFLE1BQU0sU0FBUyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFBQSxFQUNwRztBQUdBLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLFVBQVUsYUFBYTtBQUVoRSxRQUFNLGFBQWE7QUFBQSxJQUNqQixHQUFHLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDeEMsR0FBRztBQUFBLElBQ0gsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUM7QUFBQSxJQUM3QixFQUFFLGtCQUFrQixRQUFRO0FBQUEsRUFDOUIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
159
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludGluZyB1dGlsaXR5IGZvciBFU0xpbnQgY29uZmlndXJhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBmaXhpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiB0byBsaW50IGZpbGVzIGJhc2VkIG9uIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIGBlc2xpbnQuY29uZmlnLnRzYC5cbiAqIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGZpeCBsaW50aW5nIGlzc3VlcyBpZiBzcGVjaWZpZWQsIGFuZCBsb2dzIHJlc3VsdHMgdG8gdGhlIGNvbnNvbGUuXG4gKlxuICogSXQgYWxzbyBrZWVwcyBhIGNyYXNoZWQgbGludGVyIGFwYXJ0IGZyb20gYSByZWQgY29kZWJhc2UuIEhhbmRpbmcgRVNMaW50J3MgZXhpdCBjb2RlIHN0cmFpZ2h0IHRvXG4gKiB7QGxpbmsgZXhlY0Zyb21Sb290fSBhbmQgbGV0dGluZyBpdCB0aHJvdyByZXBvcnRzIGV2ZXJ5IG5vbi16ZXJvIGNvZGUgdGhlIHNhbWUgd2F5IC0tIGBDb21tYW5kIGZhaWxlZCB3aXRoXG4gKiBleGl0IGNvZGUgTmAgLS0gd2hpY2ggcHV0cyBhIHJ1bGUgdGhhdCB0aHJldywgYSBicm9rZW4gY29uZmlnIGFuZCBhbiBPUy1sZXZlbCBkZWF0aCBpbiB0aGUgc2FtZSBidWNrZXQgYXNcbiAqIHJlYWwgZmluZGluZ3MuIFRoZSByZWFkZXIgdGhlbiBnb2VzIGh1bnRpbmcgZm9yIGEgZGVmZWN0IGluIHNvdXJjZSBjb2RlIHRoYXQgd2FzIG5ldmVyIGp1ZGdlZCBhdCBhbGwuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tICcuLi9leGVjLnRzJztcblxuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBUaGUgZmxhZ3MgdGhhdCBtYWtlIGEgV0FSTklORyBjb3VudCBhcyBhIGZpbmRpbmcsIHBhc3NlZCBvbiBldmVyeSBydW4uXG4gKlxuICogRVNMaW50IGV4aXRzIGAwYCB3aGVuIGEgcnVuIHJlcG9ydGVkIHdhcm5pbmdzIGFuZCBubyBlcnJvcnMsIHNvIHdpdGhvdXQgYC0tbWF4LXdhcm5pbmdzIDBgIHRoZSBnYXRlIHJlYWRzIGFcbiAqIHdhcm5pbmcgYXMgYSBjbGVhbiB0cmVlOiBgbGludGAgcHJpbnRzIGl0LCByZXR1cm5zIHN1Y2Nlc3MsIGFuZCBDSSwgdGhlIHByZS1jb21taXQgaG9vayBhbmQgZXZlcnkgc3dlZXBcbiAqIGFncmVlIHRoZSB0cmVlIGlzIGNsZWFuLiBBIHdhcm5pbmcgdGhhdCBub3RoaW5nIGV2ZXIgZmFpbHMgb24gaXMgYSB3YXJuaW5nIHRoYXQgc3RhbmRzIGZvciBldmVyLCBhbmQgdGhlXG4gKiBmbGVldCBoYXMgY2FycmllZCBzZXZlcmFsIHRoYXQgZWFjaCBuZWVkZWQgYSBwZXJzb24gcmF0aGVyIHRoYW4gYSBnYXRlIHRvIG5vdGljZSB0aGVtLlxuICpcbiAqIEl0IGlzIHBhc3NlZCB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZXJlIGlzIG5vIG9wdGlvbiB0byByYWlzZSBpdDogYSBjZWlsaW5nIGEgcmVwbyBjYW4gcmFpc2UgaXMgYSBnYXRlXG4gKiBzb21lYm9keSB0dXJucyBvZmYuIEl0IGlzIHBhc3NlZCBvbiB0aGUgYC0tZml4YCBydW5zIHRvbywgYmVjYXVzZSB3aGF0ZXZlciBpcyBsZWZ0IGFmdGVyIGZpeGluZyBpcyBleGFjdGx5XG4gKiB3aGF0IHRoZSBuby1maXggcnVuIHdvdWxkIGhhdmUganVkZ2VkLCBzbyB0aGUgdHdvIGNhbm5vdCBkaXNhZ3JlZSBhYm91dCB3aGF0IGNvdW50cy4gSXQgaXMgYSBzdGF0aWMgY29tbWFuZFxuICogcGFydCByYXRoZXIgdGhhbiBhIGJhdGNoZWQgYXJndW1lbnQsIHNvIGV2ZXJ5IGJhdGNoIG9mIGEgc3BsaXQgY29tbWFuZCBsaW5lIGNhcnJpZXMgaXQuXG4gKlxuICogYC0tbm8td2Fybi1pZ25vcmVkYCBoYXMgdG8gdHJhdmVsIHdpdGggaXQuIFRoZSBwcmUtY29tbWl0IGhvb2sgaGFuZHMgRVNMaW50IGV4cGxpY2l0IGZpbGUgbGlzdHMsIGFuZCBFU0xpbnRcbiAqIHJlcG9ydHMgYW4gZXhwbGljaXRseSBwYXNzZWQsIGdsb2JhbGx5IGlnbm9yZWQgcGF0aCAoYSBgdGVtcGxhdGVzL2AgZmlsZSwgc2F5KSBhcyBhIFdBUk5JTkcgcmF0aGVyIHRoYW5cbiAqIHNraXBwaW5nIGl0LiBVbmRlciBgLS1tYXgtd2FybmluZ3MgMGAgdGhhdCB3YXJuaW5nIGFsb25lIHdvdWxkIGZhaWwgdGhlIGNvbW1pdCwgYWx0aG91Z2ggaXQgc2F5cyBub3RoaW5nXG4gKiBhYm91dCB0aGUgY29kZS5cbiAqL1xuY29uc3QgRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJy0tbWF4LXdhcm5pbmdzJywgJzAnLCAnLS1uby13YXJuLWlnbm9yZWQnXTtcblxuLyoqXG4gKiBXaGF0IGFuIEVTTGludCBydW4gYWN0dWFsbHkgZXN0YWJsaXNoZWQuXG4gKlxuICogLSBgY2xlYW5gIC0tIGl0IGxpbnRlZCBldmVyeXRoaW5nIGFuZCBmb3VuZCBub3RoaW5nLCB3YXJuaW5ncyBpbmNsdWRlZDogc2VlXG4gKiAgIHtAbGluayBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTfSBmb3Igd2hhdCBtYWtlcyB0aGUgXCJpbmNsdWRlZFwiIGhhbGYgdHJ1ZS5cbiAqIC0gYGxpbnQtcHJvYmxlbXNgIC0tIGl0IGxpbnRlZCBldmVyeXRoaW5nIGFuZCB0aGUgU09VUkNFIGlzIHJlZC5cbiAqIC0gYGRpZC1ub3QtbGludGAgLS0gaXQgbmV2ZXIgZ290IHRocm91Z2ggdGhlIGxpbnQsIHNvIHRoZSBzb3VyY2UgaGFzIG5vdCBiZWVuIGp1ZGdlZCBhdCBhbGwuXG4gKi9cbmV4cG9ydCB0eXBlIEVzbGludEV4aXRLaW5kID0gJ2NsZWFuJyB8ICdkaWQtbm90LWxpbnQnIHwgJ2xpbnQtcHJvYmxlbXMnO1xuXG4vKipcbiAqIFRoZSBtZXNzYWdlIHRocm93biBmb3IgcmVhbCBmaW5kaW5ncywga2VwdCBhcGFydCBmcm9tIHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9J3MuXG4gKi9cbmV4cG9ydCBjb25zdCBMSU5UX1BST0JMRU1TX01FU1NBR0UgPSAnRVNMaW50IHJlcG9ydGVkIGxpbnQgcHJvYmxlbXMuIFRoZSBmaW5kaW5ncyBhcmUgcHJpbnRlZCBhYm92ZS4nO1xuXG4vKipcbiAqIEVTTGludCdzIGV4aXQtY29kZSBjb250cmFjdDogYDBgIGlzIGNsZWFuLCBgMWAgbWVhbnMgaXQgZmluaXNoZWQgYW5kIHJlcG9ydGVkIGxpbnQgcHJvYmxlbXMsIGFuZCBldmVyeVxuICogb3RoZXIgY29kZSBtZWFucyBpdCBuZXZlciBmaW5pc2hlZCBsaW50aW5nIGF0IGFsbCAtLSBhIHJ1bGUgdGhyZXcsIHRoZSBjb25maWcgaXMgYnJva2VuLCBvciB0aGUgT1Mga2lsbGVkXG4gKiB0aGUgcHJvY2Vzcy4gT25seSBgMWAgaXMgZXZpZGVuY2UgYWJvdXQgdGhlIHNvdXJjZTsgdGhlIHJlc3QgYXJlIGV2aWRlbmNlIGFib3V0IHRoZSBsaW50ZXIsIGFuZCBhIGNhbGxlclxuICogdGhhdCByZWFkcyB0aGVtIGFzIGZpbmRpbmdzIGdvZXMgaHVudGluZyBmb3IgYSBkZWZlY3QgdGhhdCBpcyBub3QgdGhlcmUuXG4gKlxuICogYDBgIGlzIG9ubHkgYXMgc3Ryb25nIGFzIHtAbGluayBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTfSBtYWtlcyBpdDogb24gaXRzIG93biBFU0xpbnQgZXhpdHMgYDBgXG4gKiBmb3IgYSBydW4gdGhhdCByZXBvcnRlZCBXQVJOSU5HUyBhbmQgbm8gZXJyb3JzLCB3aGljaCB0aGlzIHdvdWxkIHJlYWQgYXMgYGNsZWFuYC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlL2NvbW1hbmQtbGluZS1pbnRlcmZhY2UjZXhpdC1jb2Rlc31cbiAqL1xuY29uc3QgRVNMSU5UX0VYSVRfQ09ERV9DTEVBTiA9IDA7XG5cbmNvbnN0IEVTTElOVF9FWElUX0NPREVfTElOVF9QUk9CTEVNUyA9IDE7XG5cbi8qKlxuICogVGhlIGJhbm5lciBFU0xpbnQncyBmYXRhbC1lcnJvciBoYW5kbGVyIHdyaXRlcyB0byBzdGRlcnIgYmVmb3JlIGV4aXRpbmcuIEl0IGlzIE5PVCBjcmFzaC1zcGVjaWZpYzogRVNMaW50XG4gKiBwcmludHMgaXQgZm9yIGEgbWlzdHlwZWQgcGF0aCBhbmQgYSBicm9rZW4gY29uZmlnIGp1c3QgYXMgcmVhZGlseSBhcyBmb3IgYSBydWxlIHRoYXQgdGhyZXcsIHNvIGl0IGFuc3dlcnNcbiAqIFwiRVNMaW50IHRocmV3IGluc3RlYWQgb2YgZmluaXNoaW5nXCIgYW5kIG5vdGhpbmcgZmluZXIuIHtAbGluayBSVUxFX0NSQVNIX1JFR19FWFB9IGlzIHdoYXQgc2VwYXJhdGVzIHRoZVxuICogcnVsZSBjcmFzaCBvdXQgb2YgdGhhdCBzZXQuXG4gKi9cbmNvbnN0IEVTTElOVF9BQk9SVF9CQU5ORVIgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmchJztcblxuLyoqXG4gKiBFU0xpbnQgbmFtZXMgdGhlIG9mZmVuZGluZyBydWxlIG9uIGl0cyBvd24gbGluZSwgYW5kIG9ubHkgd2hlbiBhIFJVTEUgaXMgd2hhdCB0aHJldy5cbiAqL1xuY29uc3QgUlVMRV9DUkFTSF9SRUdfRVhQID0gL15SdWxlOiBcIi9tO1xuXG4vKipcbiAqIFRoZSBucG0gY2hhdHRlciB0aGF0IHNoYXJlcyB0aGUgY2hpbGQncyBzdGRlcnIgYW5kIHNheXMgbm90aGluZyBhYm91dCB3aHkgdGhlIGxpbnQgZmFpbGVkLlxuICovXG5jb25zdCBOUE1fTk9USUNFX1BSRUZJWCA9ICducG0gbm90aWNlJztcblxuLyoqXG4gKiBBIHN0YWNrIGZyYW1lIGluIEVTTGludCdzIG93biBvdXRwdXQgLS0gdGhlIGxpbmVzIGFib3ZlIGl0IHNheSB3aGF0IGhhcHBlbmVkLCB0aGVzZSBzYXkgb25seSB3aGVyZS5cbiAqL1xuY29uc3QgU1RBQ0tfRlJBTUVfUkVHX0VYUCA9IC9eYXRcXHMvO1xuXG5jb25zdCBNQVhfRkFJTFVSRV9ERVRBSUxfTElORVMgPSA2O1xuXG4vKipcbiAqIEV4aXQgY29kZXMgYXQgb3IgYWJvdmUgdGhpcyBhcmUgV2luZG93cyBOVCBzdGF0dXMgdmFsdWVzIHJhdGhlciB0aGFuIG9yZGluYXJ5IHByb2Nlc3MgZXhpdCBjb2RlcyAtLVxuICogbm90YWJseSBgMzIyMTIyNTQ3N2AgKGAweEMwMDAwMDA1YCwgYW4gYWNjZXNzIHZpb2xhdGlvbikuIFRoZSBFU0xpbnQgY2hpbGQgcmVhbGx5IGRvZXMgZGllIHRoYXQgd2F5IG9uXG4gKiBXaW5kb3dzIChtZWFzdXJlZCBhdCAxIHJ1biBpbiAzMCBvbiBhbiB1bmNoYW5nZWQsIGxpbnQtY2xlYW4gdHJlZSksIGFuZCBucG0gdGhlbiByZXBvcnRzIGl0IHRvIGl0cyBvd25cbiAqIGNhbGxlciBhcyBhIHBsYWluIGV4aXQgYDFgIC0tIHdoaWNoIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gXCJ0aGUgY29kZSBpcyByZWRcIiB1bmxlc3Mgc29tZXRoaW5nIHNheXNcbiAqIG90aGVyd2lzZS4gVGhhdCBpcyB3aGF0IHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9IGlzIGZvci5cbiAqL1xuY29uc3QgTUlOX05UX1NUQVRVU19FWElUX0NPREUgPSAweDFfMDBfMDA7XG5cbmNvbnN0IEhFWF9SQURJWCA9IDE2O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LCBFU0xpbnQgcnVuc1xuICAgKiBhZ2FpbnN0IHdoYXRldmVyIGl0IGZpbmRzLCBhbmQgcmVwb3J0cyBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoaWNoIG9mIHRoZSB0aHJlZSB0aGluZ3MgYW4gRVNMaW50IHJ1biBlc3RhYmxpc2hlZC5cbiAqXG4gKiBBIGtpbGxlZCBwcm9jZXNzIGlzIGBkaWQtbm90LWxpbnRgIHdoYXRldmVyIGl0cyBleGl0IGNvZGUgc2F5cywgYmVjYXVzZSBhIHNpZ25hbCBtZWFucyBpdCB3YXMgc3RvcHBlZFxuICogcmF0aGVyIHRoYW4gdGhhdCBpdCBmaW5pc2hlZC4gQW4gZXhpdCBgMWAgY2FycnlpbmcgRVNMaW50J3MgZmF0YWwtZXJyb3IgYmFubmVyIGlzIGBkaWQtbm90LWxpbnRgIHRvbzogdGhhdFxuICogaXMgYSBjcmFzaCBucG0gcmVsYXllZCBhcyBhIHBsYWluIGAxYCwgbm90IGEgZmluZGluZy5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBraW5kIG9mIGVuZGluZyBpdCB3YXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUVzbGludEV4aXQocmVzdWx0OiBFeGVjUmVzdWx0KTogRXNsaW50RXhpdEtpbmQge1xuICBpZiAocmVzdWx0LmV4aXRDb2RlID09PSBFU0xJTlRfRVhJVF9DT0RFX0NMRUFOICYmIHJlc3VsdC5leGl0U2lnbmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdjbGVhbic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSBFU0xJTlRfRVhJVF9DT0RFX0xJTlRfUFJPQkxFTVMgJiYgIXJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoRVNMSU5UX0FCT1JUX0JBTk5FUilcbiAgICA/ICdsaW50LXByb2JsZW1zJ1xuICAgIDogJ2RpZC1ub3QtbGludCc7XG59XG5cbi8qKlxuICogU2F5cyB3aGljaCBvZiB0aGUgZm91ciBmYWlsdXJlcyB0byBsaW50IGhhcHBlbmVkLCBhbmQgcXVvdGVzIGJhY2sgd2hhdCBFU0xpbnQgc2FpZCBhYm91dCBpdC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIHRvIHRocm93LCB3aGljaCBzYXlzIG91dHJpZ2h0IHRoYXQgaXQgaXMgbm90IGEgZmluZGluZyBhYm91dCB0aGUgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGYWlsdXJlVG9MaW50KHJlc3VsdDogRXhlY1Jlc3VsdCk6IHN0cmluZyB7XG4gIGNvbnN0IGRldGFpbHMgPSBleHRyYWN0RmFpbHVyZURldGFpbHMocmVzdWx0LnN0ZGVycik7XG5cbiAgcmV0dXJuIFtcbiAgICBnZXRGYWlsdXJlSGVhZGxpbmUocmVzdWx0KSxcbiAgICAnVGhpcyBpcyBOT1QgYSBsaW50IGZpbmRpbmc6IHRoZSBzb3VyY2UgY29kZSBoYXMgbm90IGJlZW4ganVkZ2VkLCBzbyBkbyBub3QgZ28gbG9va2luZyBmb3IgYSBkZWZlY3QgaW4gaXQuJyxcbiAgICAnUmUtcnVuIHRoZSBjb21tYW5kLiBPbmx5IGlmIGl0IHJlcHJvZHVjZXMgaXMgdGhlcmUgc29tZXRoaW5nIHRvIGZpeCwgYW5kIHRoZSB0aGluZyB0byBmaXggaXMgdGhlIGxpbnRlci4nLFxuICAgIGAgIGV4aXQgY29kZTogJHtmb3JtYXRFeGl0Q29kZShyZXN1bHQuZXhpdENvZGUpfWAsXG4gICAgLi4ucmVzdWx0LmV4aXRTaWduYWwgPT09IG51bGwgPyBbXSA6IFtgICB0ZXJtaW5hdGVkIGJ5IHNpZ25hbDogJHtyZXN1bHQuZXhpdFNpZ25hbH1gXSxcbiAgICBkZXRhaWxzLmxlbmd0aCA+IDAgPyAnICBFU0xpbnQgc2FpZDonIDogJyAgRVNMaW50IHByaW50ZWQgbm8gZGlhZ25vc3RpYyBhdCBhbGwuJyxcbiAgICAuLi5kZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiBgICAgICR7ZGV0YWlsfWApXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogTGludCB0aGUgcHJvamVjdCB3aXRoIEVTTGludC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICogQHRocm93cyBBbiBgRXJyb3JgIGNhcnJ5aW5nIHtAbGluayBMSU5UX1BST0JMRU1TX01FU1NBR0V9IHdoZW4gdGhlIHNvdXJjZSBpcyByZWQsIGFuZFxuICoge0BsaW5rIGRlc2NyaWJlRmFpbHVyZVRvTGludH0ncyBtZXNzYWdlIHdoZW4gRVNMaW50IG5ldmVyIGZpbmlzaGVkIGxpbnRpbmcgYXQgYWxsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIHBhdGhzLCBzaG91bGRGaXggfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdKcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ1RzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0N0c1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0VTTGludDpsaW50JykoJ0VTTGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoIGlzIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2VzbGludCcgfSksXG4gICAgLi4uRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UUyxcbiAgICAuLi4oc2hvdWxkRml4ID8gWyctLWZpeCddIDogW10pLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XG4gIF0sIHtcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogdHJ1ZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZVxuICB9KTtcblxuICBjb25zdCBraW5kID0gY2xhc3NpZnlFc2xpbnRFeGl0KHJlc3VsdCk7XG5cbiAgaWYgKGtpbmQgPT09ICdjbGVhbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3Ioa2luZCA9PT0gJ2xpbnQtcHJvYmxlbXMnID8gTElOVF9QUk9CTEVNU19NRVNTQUdFIDogZGVzY3JpYmVGYWlsdXJlVG9MaW50KHJlc3VsdCkpO1xufVxuXG4vKipcbiAqIFF1b3RlcyBiYWNrIGV2ZXJ5dGhpbmcgRVNMaW50IHNhaWQgdGhhdCBjYXJyaWVzIGluZm9ybWF0aW9uLiBJdCBkcm9wcyBvbmx5IHRoZSBiYW5uZXIgaXRzZWxmLCBucG0ncyBjaGF0dGVyXG4gKiBhbmQgdGhlIHN0YWNrIGZyYW1lcywgYW5kIGtlZXBzIHdoYXRldmVyIGlzIGxlZnQ6IGxpc3Rpbmcga25vd24gcHJlZml4ZXMgaW5zdGVhZCBjb3ZlcmVkIHRoZSBydWxlIGNyYXNoIGFuZFxuICogZHJvcHBlZCB0aGUgb25lIGxpbmUgdGhhdCBtYXR0ZXJlZCBmb3IgYSBtaXN0eXBlZCBwYXRoIChgTm8gZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gLi4uYCkuXG4gKlxuICogQHBhcmFtIHN0ZGVyciAtIEV2ZXJ5dGhpbmcgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGl2ZSBsaW5lcywgZGUtZHVwbGljYXRlZCBhbmQgY2FwcGVkLlxuICovXG5mdW5jdGlvbiBleHRyYWN0RmFpbHVyZURldGFpbHMoc3RkZXJyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGRldGFpbHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCByYXdMaW5lIG9mIHN0ZGVyci5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoZGV0YWlscy5sZW5ndGggPT09IE1BWF9GQUlMVVJFX0RFVEFJTF9MSU5FUykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuICAgIGNvbnN0IGlzTm9pc2UgPSBsaW5lID09PSAnJ1xuICAgICAgfHwgbGluZS5zdGFydHNXaXRoKEVTTElOVF9BQk9SVF9CQU5ORVIpXG4gICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoTlBNX05PVElDRV9QUkVGSVgpXG4gICAgICB8fCBTVEFDS19GUkFNRV9SRUdfRVhQLnRlc3QobGluZSk7XG4gICAgaWYgKCFpc05vaXNlICYmICFkZXRhaWxzLmluY2x1ZGVzKGxpbmUpKSB7XG4gICAgICBkZXRhaWxzLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRldGFpbHM7XG59XG5cbi8qKlxuICogU3BlbGxzIGFuIGV4aXQgY29kZSwgYWRkaW5nIHRoZSBoZXggZm9ybSBmb3IgdGhlIE5UIHN0YXR1cyB2YWx1ZXMgYSByZWFkZXIgY2Fubm90IHJlY29nbml6ZSBpbiBkZWNpbWFsLlxuICpcbiAqIEBwYXJhbSBleGl0Q29kZSAtIFRoZSBjaGlsZCdzIGV4aXQgY29kZSwgb3IgYG51bGxgIHdoZW4gYSBzaWduYWwgZW5kZWQgaXQgZmlyc3QuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBhcyBpdCBzaG91bGQgYmUgcmVhZCBiYWNrLlxuICovXG5mdW5jdGlvbiBmb3JtYXRFeGl0Q29kZShleGl0Q29kZTogbnVsbCB8IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnKG5vbmUgLSB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBiZWZvcmUgaXQgY291bGQgZXhpdCknO1xuICB9XG5cbiAgcmV0dXJuIGV4aXRDb2RlIDwgTUlOX05UX1NUQVRVU19FWElUX0NPREUgPyBTdHJpbmcoZXhpdENvZGUpIDogYCR7U3RyaW5nKGV4aXRDb2RlKX0gKDB4JHtleGl0Q29kZS50b1N0cmluZyhIRVhfUkFESVgpLnRvVXBwZXJDYXNlKCl9KWA7XG59XG5cbi8qKlxuICogTmFtZXMgd2hpY2ggb2YgdGhlIGZvdXIgd2F5cyBFU0xpbnQgZmFpbGVkIHRvIGxpbnQgdGhpcyB3YXMuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFdoYXQgdGhlIEVTTGludCBjaGlsZCBkaWQuXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgbGluZSBvZiB7QGxpbmsgZGVzY3JpYmVGYWlsdXJlVG9MaW50fSdzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldEZhaWx1cmVIZWFkbGluZShyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBzdHJpbmcge1xuICBpZiAocmVzdWx0LmV4aXRTaWduYWwgIT09IG51bGwpIHtcbiAgICByZXR1cm4gJ0VTTGludCB3YXMgS0lMTEVEIGJlZm9yZSBpdCBmaW5pc2hlZCBsaW50aW5nLic7XG4gIH1cblxuICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSBudWxsICYmIHJlc3VsdC5leGl0Q29kZSA+PSBNSU5fTlRfU1RBVFVTX0VYSVRfQ09ERSkge1xuICAgIHJldHVybiAnRVNMaW50IERJRUQgYXQgdGhlIE9TIGxldmVsIC0gYW4gYWNjZXNzIHZpb2xhdGlvbiBvciBzaW1pbGFyLCB3aXRoIG5vIGRpYWdub3N0aWMgb2YgaXRzIG93bi4nO1xuICB9XG5cbiAgaWYgKFJVTEVfQ1JBU0hfUkVHX0VYUC50ZXN0KHJlc3VsdC5zdGRlcnIpKSB7XG4gICAgcmV0dXJuICdFU0xpbnQgQ1JBU0hFRDogYSBydWxlIHRocmV3IHdoaWxlIGxpbnRpbmcuIFRoZSBydWxlIGFuZCB0aGUgZmlsZSBpdCB3YXMgb24gYXJlIG5hbWVkIGJlbG93Lic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhFU0xJTlRfQUJPUlRfQkFOTkVSKVxuICAgID8gJ0VTTGludCBBQk9SVEVEOiBpdCB0aHJldyBpbnN0ZWFkIG9mIGZpbmlzaGluZyAtIGEgYnJva2VuIGNvbmZpZyBvciBjb21tYW5kIGxpbmUsIG9yIGFuIGludGVybmFsIGVycm9yLidcbiAgICA6ICdFU0xpbnQgZXhpdGVkIG5vbi16ZXJvIHdpdGhvdXQgcmVwb3J0aW5nIGZpbmRpbmdzLCBzbyBpdCBkaWQgbm90IGZpbmlzaCBsaW50aW5nLic7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsVUFBVTtBQUluQixTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQW9CUCxNQUFNLHdDQUEyRCxDQUFDLGtCQUFrQixLQUFLLG1CQUFtQjtBQWVy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
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  export * as 'cspell-content' from './cspell-content.mjs';
3
3
  export * as 'cspell' from './cspell.mjs';
4
4
  export * as 'eslint-agnostic-core-boundary' from './eslint-agnostic-core-boundary.mjs';
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,2 +1,2 @@
1
- /// <reference path="../../index.d.mts" />
1
+ /// <reference path="../../library-references.d.mts" />
2
2
  export * as 'no-soft-break-in-paragraph' from './no-soft-break-in-paragraph.mjs';
@@ -1,4 +1,4 @@
1
- /// <reference path="../../index.d.mts" />
1
+ /// <reference path="../../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../../../index.d.mts" />
1
+ /// <reference path="../../../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../../../index.d.mts" />
1
+ /// <reference path="../../../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,3 +1,3 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  export * as 'vitest-config' from './vitest-config.mjs';
3
3
  export * as 'vitest' from './vitest.mjs';
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.mts" />
1
+ /// <reference path="./library-references.d.mts" />
2
2
  /**
3
3
  * @file
4
4
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/typescript-dev-toolkit",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Generic TypeScript project tooling: build, lint, format, spellcheck, test, gate and release scripts.",
5
5
  "keywords": [
6
6
  "typescript",