@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
@@ -78,6 +78,9 @@ var __copyProps = (to, from, except, desc) => {
78
78
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
79
79
  var eslint_exports = {};
80
80
  __export(eslint_exports, {
81
+ LINT_PROBLEMS_MESSAGE: () => LINT_PROBLEMS_MESSAGE,
82
+ classifyEslintExit: () => classifyEslintExit,
83
+ describeFailureToLint: () => describeFailureToLint,
81
84
  lint: () => lint
82
85
  });
83
86
  module.exports = __toCommonJS(eslint_exports);
@@ -89,6 +92,34 @@ var import_package_manager = require('../package-manager.cjs');
89
92
  var import_repo_paths = require('../repo-paths.cjs');
90
93
  var import_root = require('../root.cjs');
91
94
  const ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS = ["--max-warnings", "0", "--no-warn-ignored"];
95
+ const LINT_PROBLEMS_MESSAGE = "ESLint reported lint problems. The findings are printed above.";
96
+ const ESLINT_EXIT_CODE_CLEAN = 0;
97
+ const ESLINT_EXIT_CODE_LINT_PROBLEMS = 1;
98
+ const ESLINT_ABORT_BANNER = "Oops! Something went wrong!";
99
+ const RULE_CRASH_REG_EXP = /^Rule: "/m;
100
+ const NPM_NOTICE_PREFIX = "npm notice";
101
+ const STACK_FRAME_REG_EXP = /^at\s/;
102
+ const MAX_FAILURE_DETAIL_LINES = 6;
103
+ const MIN_NT_STATUS_EXIT_CODE = 65536;
104
+ const HEX_RADIX = 16;
105
+ function classifyEslintExit(result) {
106
+ if (result.exitCode === ESLINT_EXIT_CODE_CLEAN && result.exitSignal === null) {
107
+ return "clean";
108
+ }
109
+ return result.exitCode === ESLINT_EXIT_CODE_LINT_PROBLEMS && !result.stderr.includes(ESLINT_ABORT_BANNER) ? "lint-problems" : "did-not-lint";
110
+ }
111
+ function describeFailureToLint(result) {
112
+ const details = extractFailureDetails(result.stderr);
113
+ return [
114
+ getFailureHeadline(result),
115
+ "This is NOT a lint finding: the source code has not been judged, so do not go looking for a defect in it.",
116
+ "Re-run the command. Only if it reproduces is there something to fix, and the thing to fix is the linter.",
117
+ ` exit code: ${formatExitCode(result.exitCode)}`,
118
+ ...result.exitSignal === null ? [] : [` terminated by signal: ${result.exitSignal}`],
119
+ details.length > 0 ? " ESLint said:" : " ESLint printed no diagnostic at all.",
120
+ ...details.map((detail) => ` ${detail}`)
121
+ ].join("\n");
122
+ }
92
123
  async function lint(options) {
93
124
  const { defaultConfigFilePath, paths, shouldFix } = options ?? {};
94
125
  const configFiles = [
@@ -108,15 +139,58 @@ async function lint(options) {
108
139
  await (0, import_promises.cp)(defaultConfigFilePath, (0, import_root.resolvePathFromRootSafe)({ path: (0, import_path.basename)(defaultConfigFilePath) }));
109
140
  }
110
141
  const targets = paths?.length ? paths : [import_repo_paths.RepoPaths.CurrentFolder];
111
- await (0, import_root.execFromRoot)([
142
+ const result = await (0, import_root.execFromRoot)([
112
143
  ...(0, import_package_manager.resolveToolCommand)({ tool: "eslint" }),
113
144
  ...ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS,
114
145
  ...shouldFix ? ["--fix"] : [],
115
146
  { batchedArguments: targets }
116
- ]);
147
+ ], {
148
+ shouldIgnoreExitCode: true,
149
+ shouldIncludeDetails: true
150
+ });
151
+ const kind = classifyEslintExit(result);
152
+ if (kind === "clean") {
153
+ return;
154
+ }
155
+ throw new Error(kind === "lint-problems" ? LINT_PROBLEMS_MESSAGE : describeFailureToLint(result));
156
+ }
157
+ function extractFailureDetails(stderr) {
158
+ const details = [];
159
+ for (const rawLine of stderr.split("\n")) {
160
+ if (details.length === MAX_FAILURE_DETAIL_LINES) {
161
+ break;
162
+ }
163
+ const line = rawLine.trim();
164
+ const isNoise = line === "" || line.startsWith(ESLINT_ABORT_BANNER) || line.startsWith(NPM_NOTICE_PREFIX) || STACK_FRAME_REG_EXP.test(line);
165
+ if (!isNoise && !details.includes(line)) {
166
+ details.push(line);
167
+ }
168
+ }
169
+ return details;
170
+ }
171
+ function formatExitCode(exitCode) {
172
+ if (exitCode === null) {
173
+ return "(none - the process was terminated before it could exit)";
174
+ }
175
+ return exitCode < MIN_NT_STATUS_EXIT_CODE ? String(exitCode) : `${String(exitCode)} (0x${exitCode.toString(HEX_RADIX).toUpperCase()})`;
176
+ }
177
+ function getFailureHeadline(result) {
178
+ if (result.exitSignal !== null) {
179
+ return "ESLint was KILLED before it finished linting.";
180
+ }
181
+ if (result.exitCode !== null && result.exitCode >= MIN_NT_STATUS_EXIT_CODE) {
182
+ return "ESLint DIED at the OS level - an access violation or similar, with no diagnostic of its own.";
183
+ }
184
+ if (RULE_CRASH_REG_EXP.test(result.stderr)) {
185
+ return "ESLint CRASHED: a rule threw while linting. The rule and the file it was on are named below.";
186
+ }
187
+ 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.";
117
188
  }
118
189
  // Annotate the CommonJS export names for ESM import in node:
119
190
  0 && (module.exports = {
191
+ LINT_PROBLEMS_MESSAGE,
192
+ classifyEslintExit,
193
+ describeFailureToLint,
120
194
  lint
121
195
  });
122
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludGluZyB1dGlsaXR5IGZvciBFU0xpbnQgY29uZmlndXJhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBmaXhpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiB0byBsaW50IGZpbGVzIGJhc2VkIG9uIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIGBlc2xpbnQuY29uZmlnLnRzYC5cbiAqIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGZpeCBsaW50aW5nIGlzc3VlcyBpZiBzcGVjaWZpZWQsIGFuZCBsb2dzIHJlc3VsdHMgdG8gdGhlIGNvbnNvbGUuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgeyByZXNvbHZlVG9vbENvbW1hbmQgfSBmcm9tICcuLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFRoZSBmbGFncyB0aGF0IG1ha2UgYSBXQVJOSU5HIGNvdW50IGFzIGEgZmluZGluZywgcGFzc2VkIG9uIGV2ZXJ5IHJ1bi5cbiAqXG4gKiBFU0xpbnQgZXhpdHMgYDBgIHdoZW4gYSBydW4gcmVwb3J0ZWQgd2FybmluZ3MgYW5kIG5vIGVycm9ycywgc28gd2l0aG91dCBgLS1tYXgtd2FybmluZ3MgMGAgdGhlIGdhdGUgcmVhZHMgYVxuICogd2FybmluZyBhcyBhIGNsZWFuIHRyZWU6IGBsaW50YCBwcmludHMgaXQsIHJldHVybnMgc3VjY2VzcywgYW5kIENJLCB0aGUgcHJlLWNvbW1pdCBob29rIGFuZCBldmVyeSBzd2VlcFxuICogYWdyZWUgdGhlIHRyZWUgaXMgY2xlYW4uIEEgd2FybmluZyB0aGF0IG5vdGhpbmcgZXZlciBmYWlscyBvbiBpcyBhIHdhcm5pbmcgdGhhdCBzdGFuZHMgZm9yIGV2ZXIsIGFuZCB0aGVcbiAqIGZsZWV0IGhhcyBjYXJyaWVkIHNldmVyYWwgdGhhdCBlYWNoIG5lZWRlZCBhIHBlcnNvbiByYXRoZXIgdGhhbiBhIGdhdGUgdG8gbm90aWNlIHRoZW0uXG4gKlxuICogSXQgaXMgcGFzc2VkIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlcmUgaXMgbm8gb3B0aW9uIHRvIHJhaXNlIGl0OiBhIGNlaWxpbmcgYSByZXBvIGNhbiByYWlzZSBpcyBhIGdhdGVcbiAqIHNvbWVib2R5IHR1cm5zIG9mZi4gSXQgaXMgcGFzc2VkIG9uIHRoZSBgLS1maXhgIHJ1bnMgdG9vLCBiZWNhdXNlIHdoYXRldmVyIGlzIGxlZnQgYWZ0ZXIgZml4aW5nIGlzIGV4YWN0bHlcbiAqIHdoYXQgdGhlIG5vLWZpeCBydW4gd291bGQgaGF2ZSBqdWRnZWQsIHNvIHRoZSB0d28gY2Fubm90IGRpc2FncmVlIGFib3V0IHdoYXQgY291bnRzLiBJdCBpcyBhIHN0YXRpYyBjb21tYW5kXG4gKiBwYXJ0IHJhdGhlciB0aGFuIGEgYmF0Y2hlZCBhcmd1bWVudCwgc28gZXZlcnkgYmF0Y2ggb2YgYSBzcGxpdCBjb21tYW5kIGxpbmUgY2FycmllcyBpdC5cbiAqXG4gKiBgLS1uby13YXJuLWlnbm9yZWRgIGhhcyB0byB0cmF2ZWwgd2l0aCBpdC4gVGhlIHByZS1jb21taXQgaG9vayBoYW5kcyBFU0xpbnQgZXhwbGljaXQgZmlsZSBsaXN0cywgYW5kIEVTTGludFxuICogcmVwb3J0cyBhbiBleHBsaWNpdGx5IHBhc3NlZCwgZ2xvYmFsbHkgaWdub3JlZCBwYXRoIChhIGB0ZW1wbGF0ZXMvYCBmaWxlLCBzYXkpIGFzIGEgV0FSTklORyByYXRoZXIgdGhhblxuICogc2tpcHBpbmcgaXQuIFVuZGVyIGAtLW1heC13YXJuaW5ncyAwYCB0aGF0IHdhcm5pbmcgYWxvbmUgd291bGQgZmFpbCB0aGUgY29tbWl0LCBhbHRob3VnaCBpdCBzYXlzIG5vdGhpbmdcbiAqIGFib3V0IHRoZSBjb2RlLlxuICovXG5jb25zdCBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnLS1tYXgtd2FybmluZ3MnLCAnMCcsICctLW5vLXdhcm4taWdub3JlZCddO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LCBFU0xpbnQgcnVuc1xuICAgKiBhZ2FpbnN0IHdoYXRldmVyIGl0IGZpbmRzLCBhbmQgcmVwb3J0cyBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBMaW50IHRoZSBwcm9qZWN0IHdpdGggRVNMaW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBMaW50T3B0aW9uc30uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW50KG9wdGlvbnM/OiBMaW50T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcGF0aHMsIHNob3VsZEZpeCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgY29uZmlnRmlsZXMgPSBbXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0pzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdNanMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0NqcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnVHMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnQ3RzXG4gIF07XG5cbiAgY29uc3QgZG9lc0NvbmZpZ0ZpbGVFeGlzdCA9IGNvbmZpZ0ZpbGVzLnNvbWUoKGNvbmZpZ0ZpbGUpID0+IHtcbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogY29uZmlnRmlsZSB9KTtcbiAgICByZXR1cm4gZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGlmICghZG9lc0NvbmZpZ0ZpbGVFeGlzdCAmJiBkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRVNMaW50OmxpbnQnKSgnRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIENyZWF0aW5nIGRlZmF1bHQgY29uZmlnLi4uJyk7XG4gICAgYXdhaXQgY3AoZGVmYXVsdENvbmZpZ0ZpbGVQYXRoLCByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGJhc2VuYW1lKGRlZmF1bHRDb25maWdGaWxlUGF0aCkgfSkpO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogW1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnZXNsaW50JyB9KSxcbiAgICAuLi5FU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTLFxuICAgIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1cbiAgXSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsbUJBQStCO0FBQy9CLGtCQUF5QjtBQUN6QixxQkFBMkI7QUFDM0Isc0JBQW1CO0FBRW5CLDZCQUFtQztBQUNuQyx3QkFBMEI7QUFDMUIsa0JBR087QUFvQlAsTUFBTSx3Q0FBMkQsQ0FBQyxrQkFBa0IsS0FBSyxtQkFBbUI7QUE4QjVHLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLHVCQUF1QixPQUFPLFVBQVUsSUFBSSxXQUFXLENBQUM7QUFDaEUsUUFBTSxjQUFjO0FBQUEsSUFDbEIsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLEVBQ1o7QUFFQSxRQUFNLHNCQUFzQixZQUFZLEtBQUssQ0FBQyxlQUFlO0FBQzNELFVBQU0scUJBQWlCLHFDQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25FLGVBQU8sMkJBQVcsY0FBYztBQUFBLEVBQ2xDLENBQUM7QUFFRCxNQUFJLENBQUMsdUJBQXVCLHVCQUF1QjtBQUNqRCxxQ0FBZSxhQUFhLEVBQUUsaUVBQWlFO0FBQy9GLGNBQU0sb0JBQUcsMkJBQXVCLHFDQUF3QixFQUFFLFVBQU0sc0JBQVMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDcEc7QUFHQSxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyw0QkFBVSxhQUFhO0FBRWhFLFlBQU0sMEJBQWE7QUFBQSxJQUNqQixPQUFHLDJDQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDeEMsR0FBRztBQUFBLElBQ0gsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUM7QUFBQSxJQUM3QixFQUFFLGtCQUFrQixRQUFRO0FBQUEsRUFDOUIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
196
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludGluZyB1dGlsaXR5IGZvciBFU0xpbnQgY29uZmlndXJhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBmaXhpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiB0byBsaW50IGZpbGVzIGJhc2VkIG9uIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIGBlc2xpbnQuY29uZmlnLnRzYC5cbiAqIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGZpeCBsaW50aW5nIGlzc3VlcyBpZiBzcGVjaWZpZWQsIGFuZCBsb2dzIHJlc3VsdHMgdG8gdGhlIGNvbnNvbGUuXG4gKlxuICogSXQgYWxzbyBrZWVwcyBhIGNyYXNoZWQgbGludGVyIGFwYXJ0IGZyb20gYSByZWQgY29kZWJhc2UuIEhhbmRpbmcgRVNMaW50J3MgZXhpdCBjb2RlIHN0cmFpZ2h0IHRvXG4gKiB7QGxpbmsgZXhlY0Zyb21Sb290fSBhbmQgbGV0dGluZyBpdCB0aHJvdyByZXBvcnRzIGV2ZXJ5IG5vbi16ZXJvIGNvZGUgdGhlIHNhbWUgd2F5IC0tIGBDb21tYW5kIGZhaWxlZCB3aXRoXG4gKiBleGl0IGNvZGUgTmAgLS0gd2hpY2ggcHV0cyBhIHJ1bGUgdGhhdCB0aHJldywgYSBicm9rZW4gY29uZmlnIGFuZCBhbiBPUy1sZXZlbCBkZWF0aCBpbiB0aGUgc2FtZSBidWNrZXQgYXNcbiAqIHJlYWwgZmluZGluZ3MuIFRoZSByZWFkZXIgdGhlbiBnb2VzIGh1bnRpbmcgZm9yIGEgZGVmZWN0IGluIHNvdXJjZSBjb2RlIHRoYXQgd2FzIG5ldmVyIGp1ZGdlZCBhdCBhbGwuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tICcuLi9leGVjLnRzJztcblxuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBUaGUgZmxhZ3MgdGhhdCBtYWtlIGEgV0FSTklORyBjb3VudCBhcyBhIGZpbmRpbmcsIHBhc3NlZCBvbiBldmVyeSBydW4uXG4gKlxuICogRVNMaW50IGV4aXRzIGAwYCB3aGVuIGEgcnVuIHJlcG9ydGVkIHdhcm5pbmdzIGFuZCBubyBlcnJvcnMsIHNvIHdpdGhvdXQgYC0tbWF4LXdhcm5pbmdzIDBgIHRoZSBnYXRlIHJlYWRzIGFcbiAqIHdhcm5pbmcgYXMgYSBjbGVhbiB0cmVlOiBgbGludGAgcHJpbnRzIGl0LCByZXR1cm5zIHN1Y2Nlc3MsIGFuZCBDSSwgdGhlIHByZS1jb21taXQgaG9vayBhbmQgZXZlcnkgc3dlZXBcbiAqIGFncmVlIHRoZSB0cmVlIGlzIGNsZWFuLiBBIHdhcm5pbmcgdGhhdCBub3RoaW5nIGV2ZXIgZmFpbHMgb24gaXMgYSB3YXJuaW5nIHRoYXQgc3RhbmRzIGZvciBldmVyLCBhbmQgdGhlXG4gKiBmbGVldCBoYXMgY2FycmllZCBzZXZlcmFsIHRoYXQgZWFjaCBuZWVkZWQgYSBwZXJzb24gcmF0aGVyIHRoYW4gYSBnYXRlIHRvIG5vdGljZSB0aGVtLlxuICpcbiAqIEl0IGlzIHBhc3NlZCB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZXJlIGlzIG5vIG9wdGlvbiB0byByYWlzZSBpdDogYSBjZWlsaW5nIGEgcmVwbyBjYW4gcmFpc2UgaXMgYSBnYXRlXG4gKiBzb21lYm9keSB0dXJucyBvZmYuIEl0IGlzIHBhc3NlZCBvbiB0aGUgYC0tZml4YCBydW5zIHRvbywgYmVjYXVzZSB3aGF0ZXZlciBpcyBsZWZ0IGFmdGVyIGZpeGluZyBpcyBleGFjdGx5XG4gKiB3aGF0IHRoZSBuby1maXggcnVuIHdvdWxkIGhhdmUganVkZ2VkLCBzbyB0aGUgdHdvIGNhbm5vdCBkaXNhZ3JlZSBhYm91dCB3aGF0IGNvdW50cy4gSXQgaXMgYSBzdGF0aWMgY29tbWFuZFxuICogcGFydCByYXRoZXIgdGhhbiBhIGJhdGNoZWQgYXJndW1lbnQsIHNvIGV2ZXJ5IGJhdGNoIG9mIGEgc3BsaXQgY29tbWFuZCBsaW5lIGNhcnJpZXMgaXQuXG4gKlxuICogYC0tbm8td2Fybi1pZ25vcmVkYCBoYXMgdG8gdHJhdmVsIHdpdGggaXQuIFRoZSBwcmUtY29tbWl0IGhvb2sgaGFuZHMgRVNMaW50IGV4cGxpY2l0IGZpbGUgbGlzdHMsIGFuZCBFU0xpbnRcbiAqIHJlcG9ydHMgYW4gZXhwbGljaXRseSBwYXNzZWQsIGdsb2JhbGx5IGlnbm9yZWQgcGF0aCAoYSBgdGVtcGxhdGVzL2AgZmlsZSwgc2F5KSBhcyBhIFdBUk5JTkcgcmF0aGVyIHRoYW5cbiAqIHNraXBwaW5nIGl0LiBVbmRlciBgLS1tYXgtd2FybmluZ3MgMGAgdGhhdCB3YXJuaW5nIGFsb25lIHdvdWxkIGZhaWwgdGhlIGNvbW1pdCwgYWx0aG91Z2ggaXQgc2F5cyBub3RoaW5nXG4gKiBhYm91dCB0aGUgY29kZS5cbiAqL1xuY29uc3QgRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJy0tbWF4LXdhcm5pbmdzJywgJzAnLCAnLS1uby13YXJuLWlnbm9yZWQnXTtcblxuLyoqXG4gKiBXaGF0IGFuIEVTTGludCBydW4gYWN0dWFsbHkgZXN0YWJsaXNoZWQuXG4gKlxuICogLSBgY2xlYW5gIC0tIGl0IGxpbnRlZCBldmVyeXRoaW5nIGFuZCBmb3VuZCBub3RoaW5nLCB3YXJuaW5ncyBpbmNsdWRlZDogc2VlXG4gKiAgIHtAbGluayBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTfSBmb3Igd2hhdCBtYWtlcyB0aGUgXCJpbmNsdWRlZFwiIGhhbGYgdHJ1ZS5cbiAqIC0gYGxpbnQtcHJvYmxlbXNgIC0tIGl0IGxpbnRlZCBldmVyeXRoaW5nIGFuZCB0aGUgU09VUkNFIGlzIHJlZC5cbiAqIC0gYGRpZC1ub3QtbGludGAgLS0gaXQgbmV2ZXIgZ290IHRocm91Z2ggdGhlIGxpbnQsIHNvIHRoZSBzb3VyY2UgaGFzIG5vdCBiZWVuIGp1ZGdlZCBhdCBhbGwuXG4gKi9cbmV4cG9ydCB0eXBlIEVzbGludEV4aXRLaW5kID0gJ2NsZWFuJyB8ICdkaWQtbm90LWxpbnQnIHwgJ2xpbnQtcHJvYmxlbXMnO1xuXG4vKipcbiAqIFRoZSBtZXNzYWdlIHRocm93biBmb3IgcmVhbCBmaW5kaW5ncywga2VwdCBhcGFydCBmcm9tIHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9J3MuXG4gKi9cbmV4cG9ydCBjb25zdCBMSU5UX1BST0JMRU1TX01FU1NBR0UgPSAnRVNMaW50IHJlcG9ydGVkIGxpbnQgcHJvYmxlbXMuIFRoZSBmaW5kaW5ncyBhcmUgcHJpbnRlZCBhYm92ZS4nO1xuXG4vKipcbiAqIEVTTGludCdzIGV4aXQtY29kZSBjb250cmFjdDogYDBgIGlzIGNsZWFuLCBgMWAgbWVhbnMgaXQgZmluaXNoZWQgYW5kIHJlcG9ydGVkIGxpbnQgcHJvYmxlbXMsIGFuZCBldmVyeVxuICogb3RoZXIgY29kZSBtZWFucyBpdCBuZXZlciBmaW5pc2hlZCBsaW50aW5nIGF0IGFsbCAtLSBhIHJ1bGUgdGhyZXcsIHRoZSBjb25maWcgaXMgYnJva2VuLCBvciB0aGUgT1Mga2lsbGVkXG4gKiB0aGUgcHJvY2Vzcy4gT25seSBgMWAgaXMgZXZpZGVuY2UgYWJvdXQgdGhlIHNvdXJjZTsgdGhlIHJlc3QgYXJlIGV2aWRlbmNlIGFib3V0IHRoZSBsaW50ZXIsIGFuZCBhIGNhbGxlclxuICogdGhhdCByZWFkcyB0aGVtIGFzIGZpbmRpbmdzIGdvZXMgaHVudGluZyBmb3IgYSBkZWZlY3QgdGhhdCBpcyBub3QgdGhlcmUuXG4gKlxuICogYDBgIGlzIG9ubHkgYXMgc3Ryb25nIGFzIHtAbGluayBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTfSBtYWtlcyBpdDogb24gaXRzIG93biBFU0xpbnQgZXhpdHMgYDBgXG4gKiBmb3IgYSBydW4gdGhhdCByZXBvcnRlZCBXQVJOSU5HUyBhbmQgbm8gZXJyb3JzLCB3aGljaCB0aGlzIHdvdWxkIHJlYWQgYXMgYGNsZWFuYC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlL2NvbW1hbmQtbGluZS1pbnRlcmZhY2UjZXhpdC1jb2Rlc31cbiAqL1xuY29uc3QgRVNMSU5UX0VYSVRfQ09ERV9DTEVBTiA9IDA7XG5cbmNvbnN0IEVTTElOVF9FWElUX0NPREVfTElOVF9QUk9CTEVNUyA9IDE7XG5cbi8qKlxuICogVGhlIGJhbm5lciBFU0xpbnQncyBmYXRhbC1lcnJvciBoYW5kbGVyIHdyaXRlcyB0byBzdGRlcnIgYmVmb3JlIGV4aXRpbmcuIEl0IGlzIE5PVCBjcmFzaC1zcGVjaWZpYzogRVNMaW50XG4gKiBwcmludHMgaXQgZm9yIGEgbWlzdHlwZWQgcGF0aCBhbmQgYSBicm9rZW4gY29uZmlnIGp1c3QgYXMgcmVhZGlseSBhcyBmb3IgYSBydWxlIHRoYXQgdGhyZXcsIHNvIGl0IGFuc3dlcnNcbiAqIFwiRVNMaW50IHRocmV3IGluc3RlYWQgb2YgZmluaXNoaW5nXCIgYW5kIG5vdGhpbmcgZmluZXIuIHtAbGluayBSVUxFX0NSQVNIX1JFR19FWFB9IGlzIHdoYXQgc2VwYXJhdGVzIHRoZVxuICogcnVsZSBjcmFzaCBvdXQgb2YgdGhhdCBzZXQuXG4gKi9cbmNvbnN0IEVTTElOVF9BQk9SVF9CQU5ORVIgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmchJztcblxuLyoqXG4gKiBFU0xpbnQgbmFtZXMgdGhlIG9mZmVuZGluZyBydWxlIG9uIGl0cyBvd24gbGluZSwgYW5kIG9ubHkgd2hlbiBhIFJVTEUgaXMgd2hhdCB0aHJldy5cbiAqL1xuY29uc3QgUlVMRV9DUkFTSF9SRUdfRVhQID0gL15SdWxlOiBcIi9tO1xuXG4vKipcbiAqIFRoZSBucG0gY2hhdHRlciB0aGF0IHNoYXJlcyB0aGUgY2hpbGQncyBzdGRlcnIgYW5kIHNheXMgbm90aGluZyBhYm91dCB3aHkgdGhlIGxpbnQgZmFpbGVkLlxuICovXG5jb25zdCBOUE1fTk9USUNFX1BSRUZJWCA9ICducG0gbm90aWNlJztcblxuLyoqXG4gKiBBIHN0YWNrIGZyYW1lIGluIEVTTGludCdzIG93biBvdXRwdXQgLS0gdGhlIGxpbmVzIGFib3ZlIGl0IHNheSB3aGF0IGhhcHBlbmVkLCB0aGVzZSBzYXkgb25seSB3aGVyZS5cbiAqL1xuY29uc3QgU1RBQ0tfRlJBTUVfUkVHX0VYUCA9IC9eYXRcXHMvO1xuXG5jb25zdCBNQVhfRkFJTFVSRV9ERVRBSUxfTElORVMgPSA2O1xuXG4vKipcbiAqIEV4aXQgY29kZXMgYXQgb3IgYWJvdmUgdGhpcyBhcmUgV2luZG93cyBOVCBzdGF0dXMgdmFsdWVzIHJhdGhlciB0aGFuIG9yZGluYXJ5IHByb2Nlc3MgZXhpdCBjb2RlcyAtLVxuICogbm90YWJseSBgMzIyMTIyNTQ3N2AgKGAweEMwMDAwMDA1YCwgYW4gYWNjZXNzIHZpb2xhdGlvbikuIFRoZSBFU0xpbnQgY2hpbGQgcmVhbGx5IGRvZXMgZGllIHRoYXQgd2F5IG9uXG4gKiBXaW5kb3dzIChtZWFzdXJlZCBhdCAxIHJ1biBpbiAzMCBvbiBhbiB1bmNoYW5nZWQsIGxpbnQtY2xlYW4gdHJlZSksIGFuZCBucG0gdGhlbiByZXBvcnRzIGl0IHRvIGl0cyBvd25cbiAqIGNhbGxlciBhcyBhIHBsYWluIGV4aXQgYDFgIC0tIHdoaWNoIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gXCJ0aGUgY29kZSBpcyByZWRcIiB1bmxlc3Mgc29tZXRoaW5nIHNheXNcbiAqIG90aGVyd2lzZS4gVGhhdCBpcyB3aGF0IHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9IGlzIGZvci5cbiAqL1xuY29uc3QgTUlOX05UX1NUQVRVU19FWElUX0NPREUgPSAweDFfMDBfMDA7XG5cbmNvbnN0IEhFWF9SQURJWCA9IDE2O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LCBFU0xpbnQgcnVuc1xuICAgKiBhZ2FpbnN0IHdoYXRldmVyIGl0IGZpbmRzLCBhbmQgcmVwb3J0cyBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoaWNoIG9mIHRoZSB0aHJlZSB0aGluZ3MgYW4gRVNMaW50IHJ1biBlc3RhYmxpc2hlZC5cbiAqXG4gKiBBIGtpbGxlZCBwcm9jZXNzIGlzIGBkaWQtbm90LWxpbnRgIHdoYXRldmVyIGl0cyBleGl0IGNvZGUgc2F5cywgYmVjYXVzZSBhIHNpZ25hbCBtZWFucyBpdCB3YXMgc3RvcHBlZFxuICogcmF0aGVyIHRoYW4gdGhhdCBpdCBmaW5pc2hlZC4gQW4gZXhpdCBgMWAgY2FycnlpbmcgRVNMaW50J3MgZmF0YWwtZXJyb3IgYmFubmVyIGlzIGBkaWQtbm90LWxpbnRgIHRvbzogdGhhdFxuICogaXMgYSBjcmFzaCBucG0gcmVsYXllZCBhcyBhIHBsYWluIGAxYCwgbm90IGEgZmluZGluZy5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBraW5kIG9mIGVuZGluZyBpdCB3YXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUVzbGludEV4aXQocmVzdWx0OiBFeGVjUmVzdWx0KTogRXNsaW50RXhpdEtpbmQge1xuICBpZiAocmVzdWx0LmV4aXRDb2RlID09PSBFU0xJTlRfRVhJVF9DT0RFX0NMRUFOICYmIHJlc3VsdC5leGl0U2lnbmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdjbGVhbic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSBFU0xJTlRfRVhJVF9DT0RFX0xJTlRfUFJPQkxFTVMgJiYgIXJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoRVNMSU5UX0FCT1JUX0JBTk5FUilcbiAgICA/ICdsaW50LXByb2JsZW1zJ1xuICAgIDogJ2RpZC1ub3QtbGludCc7XG59XG5cbi8qKlxuICogU2F5cyB3aGljaCBvZiB0aGUgZm91ciBmYWlsdXJlcyB0byBsaW50IGhhcHBlbmVkLCBhbmQgcXVvdGVzIGJhY2sgd2hhdCBFU0xpbnQgc2FpZCBhYm91dCBpdC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIHRvIHRocm93LCB3aGljaCBzYXlzIG91dHJpZ2h0IHRoYXQgaXQgaXMgbm90IGEgZmluZGluZyBhYm91dCB0aGUgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGYWlsdXJlVG9MaW50KHJlc3VsdDogRXhlY1Jlc3VsdCk6IHN0cmluZyB7XG4gIGNvbnN0IGRldGFpbHMgPSBleHRyYWN0RmFpbHVyZURldGFpbHMocmVzdWx0LnN0ZGVycik7XG5cbiAgcmV0dXJuIFtcbiAgICBnZXRGYWlsdXJlSGVhZGxpbmUocmVzdWx0KSxcbiAgICAnVGhpcyBpcyBOT1QgYSBsaW50IGZpbmRpbmc6IHRoZSBzb3VyY2UgY29kZSBoYXMgbm90IGJlZW4ganVkZ2VkLCBzbyBkbyBub3QgZ28gbG9va2luZyBmb3IgYSBkZWZlY3QgaW4gaXQuJyxcbiAgICAnUmUtcnVuIHRoZSBjb21tYW5kLiBPbmx5IGlmIGl0IHJlcHJvZHVjZXMgaXMgdGhlcmUgc29tZXRoaW5nIHRvIGZpeCwgYW5kIHRoZSB0aGluZyB0byBmaXggaXMgdGhlIGxpbnRlci4nLFxuICAgIGAgIGV4aXQgY29kZTogJHtmb3JtYXRFeGl0Q29kZShyZXN1bHQuZXhpdENvZGUpfWAsXG4gICAgLi4ucmVzdWx0LmV4aXRTaWduYWwgPT09IG51bGwgPyBbXSA6IFtgICB0ZXJtaW5hdGVkIGJ5IHNpZ25hbDogJHtyZXN1bHQuZXhpdFNpZ25hbH1gXSxcbiAgICBkZXRhaWxzLmxlbmd0aCA+IDAgPyAnICBFU0xpbnQgc2FpZDonIDogJyAgRVNMaW50IHByaW50ZWQgbm8gZGlhZ25vc3RpYyBhdCBhbGwuJyxcbiAgICAuLi5kZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiBgICAgICR7ZGV0YWlsfWApXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogTGludCB0aGUgcHJvamVjdCB3aXRoIEVTTGludC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICogQHRocm93cyBBbiBgRXJyb3JgIGNhcnJ5aW5nIHtAbGluayBMSU5UX1BST0JMRU1TX01FU1NBR0V9IHdoZW4gdGhlIHNvdXJjZSBpcyByZWQsIGFuZFxuICoge0BsaW5rIGRlc2NyaWJlRmFpbHVyZVRvTGludH0ncyBtZXNzYWdlIHdoZW4gRVNMaW50IG5ldmVyIGZpbmlzaGVkIGxpbnRpbmcgYXQgYWxsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIHBhdGhzLCBzaG91bGRGaXggfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdKcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ1RzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0N0c1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0VTTGludDpsaW50JykoJ0VTTGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoIGlzIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2VzbGludCcgfSksXG4gICAgLi4uRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UUyxcbiAgICAuLi4oc2hvdWxkRml4ID8gWyctLWZpeCddIDogW10pLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XG4gIF0sIHtcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogdHJ1ZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZVxuICB9KTtcblxuICBjb25zdCBraW5kID0gY2xhc3NpZnlFc2xpbnRFeGl0KHJlc3VsdCk7XG5cbiAgaWYgKGtpbmQgPT09ICdjbGVhbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3Ioa2luZCA9PT0gJ2xpbnQtcHJvYmxlbXMnID8gTElOVF9QUk9CTEVNU19NRVNTQUdFIDogZGVzY3JpYmVGYWlsdXJlVG9MaW50KHJlc3VsdCkpO1xufVxuXG4vKipcbiAqIFF1b3RlcyBiYWNrIGV2ZXJ5dGhpbmcgRVNMaW50IHNhaWQgdGhhdCBjYXJyaWVzIGluZm9ybWF0aW9uLiBJdCBkcm9wcyBvbmx5IHRoZSBiYW5uZXIgaXRzZWxmLCBucG0ncyBjaGF0dGVyXG4gKiBhbmQgdGhlIHN0YWNrIGZyYW1lcywgYW5kIGtlZXBzIHdoYXRldmVyIGlzIGxlZnQ6IGxpc3Rpbmcga25vd24gcHJlZml4ZXMgaW5zdGVhZCBjb3ZlcmVkIHRoZSBydWxlIGNyYXNoIGFuZFxuICogZHJvcHBlZCB0aGUgb25lIGxpbmUgdGhhdCBtYXR0ZXJlZCBmb3IgYSBtaXN0eXBlZCBwYXRoIChgTm8gZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gLi4uYCkuXG4gKlxuICogQHBhcmFtIHN0ZGVyciAtIEV2ZXJ5dGhpbmcgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGl2ZSBsaW5lcywgZGUtZHVwbGljYXRlZCBhbmQgY2FwcGVkLlxuICovXG5mdW5jdGlvbiBleHRyYWN0RmFpbHVyZURldGFpbHMoc3RkZXJyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGRldGFpbHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCByYXdMaW5lIG9mIHN0ZGVyci5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoZGV0YWlscy5sZW5ndGggPT09IE1BWF9GQUlMVVJFX0RFVEFJTF9MSU5FUykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuICAgIGNvbnN0IGlzTm9pc2UgPSBsaW5lID09PSAnJ1xuICAgICAgfHwgbGluZS5zdGFydHNXaXRoKEVTTElOVF9BQk9SVF9CQU5ORVIpXG4gICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoTlBNX05PVElDRV9QUkVGSVgpXG4gICAgICB8fCBTVEFDS19GUkFNRV9SRUdfRVhQLnRlc3QobGluZSk7XG4gICAgaWYgKCFpc05vaXNlICYmICFkZXRhaWxzLmluY2x1ZGVzKGxpbmUpKSB7XG4gICAgICBkZXRhaWxzLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRldGFpbHM7XG59XG5cbi8qKlxuICogU3BlbGxzIGFuIGV4aXQgY29kZSwgYWRkaW5nIHRoZSBoZXggZm9ybSBmb3IgdGhlIE5UIHN0YXR1cyB2YWx1ZXMgYSByZWFkZXIgY2Fubm90IHJlY29nbml6ZSBpbiBkZWNpbWFsLlxuICpcbiAqIEBwYXJhbSBleGl0Q29kZSAtIFRoZSBjaGlsZCdzIGV4aXQgY29kZSwgb3IgYG51bGxgIHdoZW4gYSBzaWduYWwgZW5kZWQgaXQgZmlyc3QuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBhcyBpdCBzaG91bGQgYmUgcmVhZCBiYWNrLlxuICovXG5mdW5jdGlvbiBmb3JtYXRFeGl0Q29kZShleGl0Q29kZTogbnVsbCB8IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnKG5vbmUgLSB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBiZWZvcmUgaXQgY291bGQgZXhpdCknO1xuICB9XG5cbiAgcmV0dXJuIGV4aXRDb2RlIDwgTUlOX05UX1NUQVRVU19FWElUX0NPREUgPyBTdHJpbmcoZXhpdENvZGUpIDogYCR7U3RyaW5nKGV4aXRDb2RlKX0gKDB4JHtleGl0Q29kZS50b1N0cmluZyhIRVhfUkFESVgpLnRvVXBwZXJDYXNlKCl9KWA7XG59XG5cbi8qKlxuICogTmFtZXMgd2hpY2ggb2YgdGhlIGZvdXIgd2F5cyBFU0xpbnQgZmFpbGVkIHRvIGxpbnQgdGhpcyB3YXMuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFdoYXQgdGhlIEVTTGludCBjaGlsZCBkaWQuXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgbGluZSBvZiB7QGxpbmsgZGVzY3JpYmVGYWlsdXJlVG9MaW50fSdzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldEZhaWx1cmVIZWFkbGluZShyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBzdHJpbmcge1xuICBpZiAocmVzdWx0LmV4aXRTaWduYWwgIT09IG51bGwpIHtcbiAgICByZXR1cm4gJ0VTTGludCB3YXMgS0lMTEVEIGJlZm9yZSBpdCBmaW5pc2hlZCBsaW50aW5nLic7XG4gIH1cblxuICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSBudWxsICYmIHJlc3VsdC5leGl0Q29kZSA+PSBNSU5fTlRfU1RBVFVTX0VYSVRfQ09ERSkge1xuICAgIHJldHVybiAnRVNMaW50IERJRUQgYXQgdGhlIE9TIGxldmVsIC0gYW4gYWNjZXNzIHZpb2xhdGlvbiBvciBzaW1pbGFyLCB3aXRoIG5vIGRpYWdub3N0aWMgb2YgaXRzIG93bi4nO1xuICB9XG5cbiAgaWYgKFJVTEVfQ1JBU0hfUkVHX0VYUC50ZXN0KHJlc3VsdC5zdGRlcnIpKSB7XG4gICAgcmV0dXJuICdFU0xpbnQgQ1JBU0hFRDogYSBydWxlIHRocmV3IHdoaWxlIGxpbnRpbmcuIFRoZSBydWxlIGFuZCB0aGUgZmlsZSBpdCB3YXMgb24gYXJlIG5hbWVkIGJlbG93Lic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhFU0xJTlRfQUJPUlRfQkFOTkVSKVxuICAgID8gJ0VTTGludCBBQk9SVEVEOiBpdCB0aHJldyBpbnN0ZWFkIG9mIGZpbmlzaGluZyAtIGEgYnJva2VuIGNvbmZpZyBvciBjb21tYW5kIGxpbmUsIG9yIGFuIGludGVybmFsIGVycm9yLidcbiAgICA6ICdFU0xpbnQgZXhpdGVkIG5vbi16ZXJvIHdpdGhvdXQgcmVwb3J0aW5nIGZpbmRpbmdzLCBzbyBpdCBkaWQgbm90IGZpbmlzaCBsaW50aW5nLic7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0EsbUJBQStCO0FBQy9CLGtCQUF5QjtBQUN6QixxQkFBMkI7QUFDM0Isc0JBQW1CO0FBSW5CLDZCQUFtQztBQUNuQyx3QkFBMEI7QUFDMUIsa0JBR087QUFvQlAsTUFBTSx3Q0FBMkQsQ0FBQyxrQkFB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
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -6,7 +6,26 @@
6
6
  *
7
7
  * This module provides a function to lint files based on the ESLint configuration defined in `eslint.config.ts`.
8
8
  * It can automatically fix linting issues if specified, and logs results to the console.
9
+ *
10
+ * It also keeps a crashed linter apart from a red codebase. Handing ESLint's exit code straight to
11
+ * {@link execFromRoot} and letting it throw reports every non-zero code the same way -- `Command failed with
12
+ * exit code N` -- which puts a rule that threw, a broken config and an OS-level death in the same bucket as
13
+ * real findings. The reader then goes hunting for a defect in source code that was never judged at all.
14
+ */
15
+ import type { ExecResult } from '../exec.cjs';
16
+ /**
17
+ * What an ESLint run actually established.
18
+ *
19
+ * - `clean` -- it linted everything and found nothing, warnings included: see
20
+ * {@link ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS} for what makes the "included" half true.
21
+ * - `lint-problems` -- it linted everything and the SOURCE is red.
22
+ * - `did-not-lint` -- it never got through the lint, so the source has not been judged at all.
9
23
  */
24
+ export type EslintExitKind = 'clean' | 'did-not-lint' | 'lint-problems';
25
+ /**
26
+ * The message thrown for real findings, kept apart from {@link describeFailureToLint}'s.
27
+ */
28
+ export declare const LINT_PROBLEMS_MESSAGE = "ESLint reported lint problems. The findings are printed above.";
10
29
  /**
11
30
  * Parameters for the {@link lint} function.
12
31
  */
@@ -27,9 +46,29 @@ export interface LintOptions {
27
46
  */
28
47
  readonly shouldFix?: boolean | undefined;
29
48
  }
49
+ /**
50
+ * Decides which of the three things an ESLint run established.
51
+ *
52
+ * A killed process is `did-not-lint` whatever its exit code says, because a signal means it was stopped
53
+ * rather than that it finished. An exit `1` carrying ESLint's fatal-error banner is `did-not-lint` too: that
54
+ * is a crash npm relayed as a plain `1`, not a finding.
55
+ *
56
+ * @param result - What the ESLint child did.
57
+ * @returns The kind of ending it was.
58
+ */
59
+ export declare function classifyEslintExit(result: ExecResult): EslintExitKind;
60
+ /**
61
+ * Says which of the four failures to lint happened, and quotes back what ESLint said about it.
62
+ *
63
+ * @param result - What the ESLint child did.
64
+ * @returns The message to throw, which says outright that it is not a finding about the source.
65
+ */
66
+ export declare function describeFailureToLint(result: ExecResult): string;
30
67
  /**
31
68
  * Lint the project with ESLint.
32
69
  *
33
70
  * @param options - The {@link LintOptions}.
71
+ * @throws An `Error` carrying {@link LINT_PROBLEMS_MESSAGE} when the source is red, and
72
+ * {@link describeFailureToLint}'s message when ESLint never finished linting at all.
34
73
  */
35
74
  export declare function lint(options?: LintOptions): Promise<void>;
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  export * as 'cspell-content' from './cspell-content.cjs';
3
3
  export * as 'cspell' from './cspell.cjs';
4
4
  export * as 'eslint-agnostic-core-boundary' from './eslint-agnostic-core-boundary.cjs';
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,2 +1,2 @@
1
- /// <reference path="../../index.d.cts" />
1
+ /// <reference path="../../library-references.d.cts" />
2
2
  export * as 'no-soft-break-in-paragraph' from './no-soft-break-in-paragraph.cjs';
@@ -1,4 +1,4 @@
1
- /// <reference path="../../index.d.cts" />
1
+ /// <reference path="../../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../../../index.d.cts" />
1
+ /// <reference path="../../../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../../../index.d.cts" />
1
+ /// <reference path="../../../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,3 +1,3 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  export * as 'vitest-config' from './vitest-config.cjs';
3
3
  export * as 'vitest' from './vitest.cjs';
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="../index.d.cts" />
1
+ /// <reference path="../library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -1,4 +1,4 @@
1
- /// <reference path="./index.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
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
  export * as 'change-extension-plugin' from './change-extension-plugin.mjs';
3
3
  export * as 'custom-esbuild-options-plugin' from './custom-esbuild-options-plugin.mjs';
4
4
  export * as 'fix-esm-plugin' from './fix-esm-plugin.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,2 +1,2 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  export * as 'esbuild-impl' from './esbuild-impl/index.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,2 +1,2 @@
1
- /// <reference path="../index.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
2
  export * as 'dprint' from './dprint.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
  *
@@ -67,9 +67,13 @@ export declare function buildLibrary(options?: BuildLibraryOptions): Promise<voi
67
67
  * as a `.d.mts` whose relative imports name `.mjs` files.
68
68
  *
69
69
  * The library's root declaration (`library.ts` where the package has one, otherwise the generated `index.ts`) carries
70
- * every `lib` and `types` reference the package needs; every other declaration references it by path.
70
+ * every `lib` and `types` reference the package needs, and so does a `library-references` declaration beside it that
71
+ * carries nothing else. Every other declaration references that one by path, never the root: the root barrel
72
+ * re-exports every module, so referencing it made each subpath load the whole package, and a consumer type-checking
73
+ * with `skipLibCheck: false` then needed every optional peer installed.
71
74
  *
72
75
  * @returns A {@link Promise} that resolves when the declarations have been written.
76
+ * @throws If a source module is named `library-references`, which would collide with the generated declaration.
73
77
  */
74
78
  export declare function buildLibraryTypes(): Promise<void>;
75
79
  /**