@mnaoumov/typescript-dev-toolkit 3.10.0 → 3.12.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 (37) hide show
  1. package/dist/lib/cjs/commitlint-config.cjs +4 -1
  2. package/dist/lib/cjs/commitlint-config.d.cts +2 -2
  3. package/dist/lib/cjs/commitlint-lint-md-header.cjs +78 -0
  4. package/dist/lib/cjs/commitlint-lint-md-header.d.cts +40 -0
  5. package/dist/lib/cjs/index.cjs +4 -1
  6. package/dist/lib/cjs/index.d.cts +1 -0
  7. package/dist/lib/cjs/library-build.cjs +3 -3
  8. package/dist/lib/cjs/linters/markdownlint-content.cjs +27 -1
  9. package/dist/lib/cjs/linters/markdownlint-content.d.cts +30 -0
  10. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +29 -2
  11. package/dist/lib/cjs/test-runners/index.cjs +7 -1
  12. package/dist/lib/cjs/test-runners/index.d.cts +2 -0
  13. package/dist/lib/cjs/test-runners/stryker-config.cjs +102 -0
  14. package/dist/lib/cjs/test-runners/stryker-config.d.cts +60 -0
  15. package/dist/lib/cjs/test-runners/stryker.cjs +105 -0
  16. package/dist/lib/cjs/test-runners/stryker.d.cts +30 -0
  17. package/dist/lib/cjs/version.cjs +73 -29
  18. package/dist/lib/esm/commitlint-config.d.mts +2 -2
  19. package/dist/lib/esm/commitlint-config.mjs +7 -1
  20. package/dist/lib/esm/commitlint-lint-md-header.d.mts +40 -0
  21. package/dist/lib/esm/commitlint-lint-md-header.mjs +52 -0
  22. package/dist/lib/esm/index.d.mts +1 -0
  23. package/dist/lib/esm/index.mjs +3 -1
  24. package/dist/lib/esm/library-build.mjs +3 -3
  25. package/dist/lib/esm/linters/markdownlint-content.d.mts +30 -0
  26. package/dist/lib/esm/linters/markdownlint-content.mjs +26 -1
  27. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +29 -2
  28. package/dist/lib/esm/test-runners/index.d.mts +2 -0
  29. package/dist/lib/esm/test-runners/index.mjs +5 -1
  30. package/dist/lib/esm/test-runners/stryker-config.d.mts +60 -0
  31. package/dist/lib/esm/test-runners/stryker-config.mjs +63 -0
  32. package/dist/lib/esm/test-runners/stryker.d.mts +30 -0
  33. package/dist/lib/esm/test-runners/stryker.mjs +84 -0
  34. package/dist/lib/esm/version.mjs +77 -30
  35. package/package.json +12 -1
  36. package/test-runners/stryker/package.json +6 -0
  37. package/test-runners/stryker-config/package.json +6 -0
@@ -56,15 +56,40 @@ var __copyProps = (to, from, except, desc) => {
56
56
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
57
57
  var markdownlint_content_exports = {};
58
58
  __export(markdownlint_content_exports, {
59
+ fixMarkdownContent: () => fixMarkdownContent,
59
60
  lintMarkdownContent: () => lintMarkdownContent
60
61
  });
61
62
  module.exports = __toCommonJS(markdownlint_content_exports);
62
63
  var import_debug = require('@mnaoumov/typescript-lib/debug');
63
64
  var import_path = require('@mnaoumov/typescript-lib/path');
65
+ var import_markdownlint = require('markdownlint');
64
66
  var import_markdownlint_cli2 = require('markdownlint-cli2');
65
67
  var import_root = require('../root.cjs');
66
68
  var import_markdownlint_cli2_config = require('./markdownlint-cli2-config.cjs');
67
69
  const SUCCESS_EXIT_CODE = 0;
70
+ async function fixMarkdownContent(params) {
71
+ const { content, cwd, filePath } = params;
72
+ const contentDebugger = (0, import_debug.getLibDebugger)("markdownlint:fixMarkdownContent");
73
+ const fixableErrors = [];
74
+ await (0, import_markdownlint_cli2.main)({
75
+ directory: (0, import_root.getRootFolder)(cwd) ?? cwd ?? process.cwd(),
76
+ logMessage: (message) => {
77
+ contentDebugger(message);
78
+ },
79
+ noGlobs: true,
80
+ nonFileContents: { [(0, import_path.toPosixPath)(filePath)]: content },
81
+ optionsDefault: import_markdownlint_cli2_config.obsidianDevUtilsConfig,
82
+ optionsOverride: {
83
+ outputFormatters: [[({ results }) => {
84
+ fixableErrors.push(...results.filter((result) => result.fixInfo !== null));
85
+ }]]
86
+ }
87
+ });
88
+ return {
89
+ content: fixableErrors.length === 0 ? content : (0, import_markdownlint.applyFixes)(content, fixableErrors),
90
+ fixCount: fixableErrors.length
91
+ };
92
+ }
68
93
  async function lintMarkdownContent(params) {
69
94
  const { content, cwd, filePath } = params;
70
95
  const findings = [];
@@ -93,6 +118,7 @@ async function lintMarkdownContent(params) {
93
118
  }
94
119
  // Annotate the CommonJS export names for ESM import in node:
95
120
  0 && (module.exports = {
121
+ fixMarkdownContent,
96
122
  lintMarkdownContent
97
123
  });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC1jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBMaW50cyBtYXJrZG93biB0aGF0IGlzIHN0aWxsIGluIG1lbW9yeSwgd2l0aCB0aGUgcmVwb3NpdG9yeSdzIG93biBgbGludDptZGAgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBgbGludDptZGAgY2FuIG9ubHkgYW5zd2VyIGZvciB3aGF0IGlzIGFscmVhZHkgb24gZGlzaywgd2hpY2ggbGVhdmVzIGV2ZXJ5IGRvY3VtZW50IGNvbXBvc2VkIGR1cmluZyBhIHJ1blxuICogdW5jaGVja2VkIHVudGlsIHRoZSBuZXh0IGdhdGUg4oCUIHRoZSByZWxlYXNlJ3MgY2hhbmdlbG9nIGJlaW5nIHRoZSBvbmUgdGhhdCBjb3N0cyBhIHJlZCBgbWFpbmAuIFRoaXMgbW9kdWxlXG4gKiBpcyB0aGUgc2FtZSBjaGVjayBvbmUgc3RlcCBlYXJsaWVyOiB0aGUgdGV4dCBpcyBsaW50ZWQgYXMgdGhlIHBhdGggaXQgaXMgZGVzdGluZWQgZm9yLCBhbmQgYSBjYWxsZXIgdGhhdFxuICogZG9lcyBub3QgbGlrZSB0aGUgYW5zd2VyIGNhbiBzdG9wIGJlZm9yZSB3cml0aW5nIGFueXRoaW5nLlxuICpcbiAqIEl0IGdvZXMgdGhyb3VnaCBgbWFya2Rvd25saW50LWNsaTJgIHJhdGhlciB0aGFuIGBtYXJrZG93bmxpbnRgJ3Mgb3duIHN0cmluZyBBUEksIGFuZCB0aGF0IGlzIHRoZSB3aG9sZVxuICogcG9pbnQgb2YgdGhlIG1vZHVsZS4gVGhlIHF1ZXN0aW9uIGEgY2FsbGVyIGlzIGFza2luZyBpcyAqXCJ3b3VsZCBgbGludDptZGAgaGF2ZSBmYWlsZWQgb24gdGhpcyB0ZXh0P1wiKiwgYW5kXG4gKiBvbmx5IHRoZSBgbWFya2Rvd25saW50LWNsaTJgIGxheWVyIGtub3dzOiBpdCBpcyB3aGF0IGZpbmRzIGAubWFya2Rvd25saW50LWNsaTIubWpzYCAodGhyb3VnaCBgaml0aWAsIGZvclxuICogdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiB0aGlzIHdvcmtzcGFjZSB3cml0ZXMpLCBtZXJnZXMgdGhlIHJlcG9zaXRvcnkncyBvd24gb3ZlcnJpZGVzIG92ZXIgdGhlIHNoYXJlZFxuICogZGVmYXVsdHMsIGFuZCBsb2FkcyB0aGUgY3VzdG9tIHJ1bGVzLiBSZWFjaGluZyBmb3IgdGhlIHN0cmluZyBBUEkgbWVhbnMgaGFuZC1yb2xsaW5nIHRoYXQgcmVzb2x1dGlvbiBvdmVyXG4gKiBmaXZlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXRzLCB3aGljaCBpcyBhIGNvcHkgb2YgYG1hcmtkb3dubGludC1jbGkyYCB0aGF0IGNhbiBvbmx5IGV2ZXIgZHJpZnQgZnJvbSBpdC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zyc7XG5pbXBvcnQgeyB0b1Bvc2l4UGF0aCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IG1haW4gYXMgbWFya2Rvd25saW50Q2xpMiB9IGZyb20gJ21hcmtkb3dubGludC1jbGkyJztcblxuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZyB9IGZyb20gJy4vbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzJztcblxuLyoqXG4gKiBUaGUgZXhpdCBjb2RlIGBtYXJrZG93bmxpbnQtY2xpMmAgcmV0dXJucyB3aGVuIGl0IHJlcG9ydGVkIG5vdGhpbmcgdGhhdCBjb3VudHMgYXMgYSBmYWlsdXJlLlxuICovXG5jb25zdCBTVUNDRVNTX0VYSVRfQ09ERSA9IDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxpbnRNYXJrZG93bkNvbnRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRNYXJrZG93bkNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1hcmtkb3duIHRvIGxpbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIGluc2lkZSB0aGUgcHJvamVjdCB3aG9zZSBtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBhcHBsaWVzLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlci5cbiAgICogSW4gYSB3b3Jrc3BhY2UsIGEgcGFja2FnZSdzIG93biBmb2xkZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gb2YgaXRzIG93biwgc28gYSBjYWxsZXIgbGludGluZyBmb3IgdGhlXG4gICAqIHdvcmtzcGFjZSByb290IG5hbWVzIGl0IGhlcmUuXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjb250ZW50IGlzIGxpbnRlZCBBUyDigJQgbm9ybWFsbHkgdGhlIHBhdGggaXQgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by4gSXQgZGVjaWRlcyBob3cgdGhlXG4gICAqIHBhdGgtcmVsYXRpdmUgcnVsZXMgcmVzb2x2ZSAoYHJlbGF0aXZlLWxpbmtzYCB3YWxrcyBmcm9tIHRoZSBmaWxlJ3Mgb3duIGZvbGRlciksIGFuZCBpdCBpcyB3aGF0IGV2ZXJ5XG4gICAqIHJlcG9ydGVkIGZpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIExpbnRzIG1hcmtkb3duIGNvbnRlbnQgdGhhdCBpcyBub3Qgb24gZGlzaywgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBgbGludDptZGAgd291bGQgaGF2ZSB1c2VkIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbmRpbmdzLCBlYWNoIG9uZSB0aGUgbGluZSB0aGUgYGxpbnQ6bWRgIG91dHB1dCB3b3VsZCBoYXZlXG4gKiBjYXJyaWVkIOKAlCBgPHBhdGg+OjxsaW5lPls6PGNvbHVtbj5dIGVycm9yIDxydWxlPiA8ZGVzY3JpcHRpb24+YCDigJQgb3IgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGVyZSBhcmUgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnRNYXJrZG93bkNvbnRlbnQocGFyYW1zOiBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IGNvbnRlbnQsIGN3ZCwgZmlsZVBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgZmluZGluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbnRlbnREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludE1hcmtkb3duQ29udGVudCcpO1xuXG4gIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbWFya2Rvd25saW50Q2xpMih7XG4gICAgZGlyZWN0b3J5OiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gY3dkID8/IHByb2Nlc3MuY3dkKCksXG4gICAgbG9nRXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGZpbmRpbmdzLnB1c2gobWVzc2FnZSk7XG4gICAgfSxcbiAgICBsb2dNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBjb250ZW50RGVidWdnZXIobWVzc2FnZSk7XG4gICAgfSxcbiAgICAvLyBUaGUgY29udGVudCBpcyB0aGUgb25seSBpbnB1dC4gV2l0aG91dCB0aGlzIHRoZSBjb25maWd1cmF0aW9uJ3Mgb3duIGBnbG9ic2Agd291bGQgYmUgZXhwYW5kZWQgdG9vLCBhbmRcbiAgICAvLyBhIGNoZWNrIG9uIG9uZSBkb2N1bWVudCB3b3VsZCBsaW50IHRoZSB3aG9sZSByZXBvc2l0b3J5IOKAlCBzbG93bHksIGFuZCByZXBvcnRpbmcgZmluZGluZ3MgaXRzIGNhbGxlciBoYXNcbiAgICAvLyBubyBidXNpbmVzcyBmYWlsaW5nIG9uLlxuICAgIG5vR2xvYnM6IHRydWUsXG4gICAgbm9uRmlsZUNvbnRlbnRzOiB7IFt0b1Bvc2l4UGF0aChmaWxlUGF0aCldOiBjb250ZW50IH0sXG4gICAgLy8gVGhlIEJBU0UgdGhlIHJlcG9zaXRvcnkncyBvd24gY29uZmlndXJhdGlvbiBpcyBtZXJnZWQgb3Zlciwgd2hpY2ggbWF0dGVycyBmb3IgYSByZXBvc2l0b3J5IHRoYXQgaGFzIG5vbmVcbiAgICAvLyB5ZXQ6IGBsaW50KClgIGNvcGllcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBpbiDigJQgd2hpY2ggaXMgYnVpbHQgb24gdGhpcyBvbmUg4oCUIGJlZm9yZSBpdCBsaW50cywgc28gYVxuICAgIC8vIHJ1biB3aXRob3V0IGl0IHdvdWxkIGFwcGx5IG1hcmtkb3dubGludCdzIHN0b2NrIGRlZmF1bHRzIGluc3RlYWQsIGFuZCBgTUQwMTMvbGluZS1sZW5ndGhgIHdvdWxkIGZhaWwgYXRcbiAgICAvLyA4MCBjb2x1bW5zIG9uIGFuIG9yZGluYXJ5IHJlbGVhc2Ugbm90ZSB0aGF0IGBsaW50Om1kYCBpcyBwZXJmZWN0bHkgaGFwcHkgd2l0aC4gU2luY2UgYSByZXBvc2l0b3J5J3Mgb3duXG4gICAgLy8gY29uZmlndXJhdGlvbiBvdmVycmlkZXMgdGhpcyBrZXkgYnkga2V5LCB0aGUgd29yc3QgYSBtaXNtYXRjaCBjYW4gZG8gaXMgbWlzcyBhIGZpbmRpbmcsIG5ldmVyIGludmVudCBvbmUuXG4gICAgb3B0aW9uc0RlZmF1bHQ6IG9ic2lkaWFuRGV2VXRpbHNDb25maWdcbiAgfSk7XG5cbiAgLy8gV2hldGhlciB0aGlzIGlzIGEgRkFJTFVSRSBpcyB0aGUgdG9vbCdzIG93biBhbnN3ZXIsIG5vdCBhIGNvdW50IG9mIHRoZSBsaW5lcyBpdCBwcmludGVkOiBhIHJ1bGUgY29uZmlndXJlZFxuICAvLyB3aXRoIGBzZXZlcml0eTogd2FybmluZ2AgaXMgcHJpbnRlZCB0aHJvdWdoIGBsb2dFcnJvcmAgbGlrZSBhbnkgb3RoZXIgYW5kIHN0aWxsIGV4aXRzIGAwYCwgc28gcmV0dXJuaW5nIHRoZVxuICAvLyBsaW5lcyBhbG9uZSB3b3VsZCBmYWlsIGEgcmVsZWFzZSBvbiBzb21ldGhpbmcgYGxpbnQ6bWRgIGl0c2VsZiBwYXNzZXMuXG4gIHJldHVybiBleGl0Q29kZSA9PT0gU1VDQ0VTU19FWElUX0NPREUgPyBbXSA6IGZpbmRpbmdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsbUJBQStCO0FBQy9CLGtCQUE0QjtBQUM1QiwrQkFBeUM7QUFFekMsa0JBQThCO0FBQzlCLHNDQUF1QztBQUt2QyxNQUFNLG9CQUFvQjtBQWlDMUIsZUFBc0Isb0JBQW9CLFFBQXNEO0FBQzlGLFFBQU0sRUFBRSxTQUFTLEtBQUssU0FBUyxJQUFJO0FBQ25DLFFBQU0sV0FBcUIsQ0FBQztBQUM1QixRQUFNLHNCQUFrQiw2QkFBZSxrQ0FBa0M7QUFFekUsUUFBTSxXQUFXLFVBQU0seUJBQUFBLE1BQWlCO0FBQUEsSUFDdEMsZUFBVywyQkFBYyxHQUFHLEtBQUssT0FBTyxRQUFRLElBQUk7QUFBQSxJQUNwRCxVQUFVLENBQUMsWUFBMEI7QUFDbkMsZUFBUyxLQUFLLE9BQU87QUFBQSxJQUN2QjtBQUFBLElBQ0EsWUFBWSxDQUFDLFlBQTBCO0FBQ3JDLHNCQUFnQixPQUFPO0FBQUEsSUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlBLFNBQVM7QUFBQSxJQUNULGlCQUFpQixFQUFFLEtBQUMseUJBQVksUUFBUSxDQUFDLEdBQUcsUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1wRCxnQkFBZ0I7QUFBQSxFQUNsQixDQUFDO0FBS0QsU0FBTyxhQUFhLG9CQUFvQixDQUFDLElBQUk7QUFDL0M7IiwibmFtZXMiOlsibWFya2Rvd25saW50Q2xpMiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC1jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBMaW50cyBtYXJrZG93biB0aGF0IGlzIHN0aWxsIGluIG1lbW9yeSwgd2l0aCB0aGUgcmVwb3NpdG9yeSdzIG93biBgbGludDptZGAgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBgbGludDptZGAgY2FuIG9ubHkgYW5zd2VyIGZvciB3aGF0IGlzIGFscmVhZHkgb24gZGlzaywgd2hpY2ggbGVhdmVzIGV2ZXJ5IGRvY3VtZW50IGNvbXBvc2VkIGR1cmluZyBhIHJ1blxuICogdW5jaGVja2VkIHVudGlsIHRoZSBuZXh0IGdhdGUg4oCUIHRoZSByZWxlYXNlJ3MgY2hhbmdlbG9nIGJlaW5nIHRoZSBvbmUgdGhhdCBjb3N0cyBhIHJlZCBgbWFpbmAuIFRoaXMgbW9kdWxlXG4gKiBpcyB0aGUgc2FtZSBjaGVjayBvbmUgc3RlcCBlYXJsaWVyOiB0aGUgdGV4dCBpcyBsaW50ZWQgYXMgdGhlIHBhdGggaXQgaXMgZGVzdGluZWQgZm9yLCBhbmQgYSBjYWxsZXIgdGhhdFxuICogZG9lcyBub3QgbGlrZSB0aGUgYW5zd2VyIGNhbiBzdG9wIGJlZm9yZSB3cml0aW5nIGFueXRoaW5nLlxuICpcbiAqIEl0IGdvZXMgdGhyb3VnaCBgbWFya2Rvd25saW50LWNsaTJgIHJhdGhlciB0aGFuIGBtYXJrZG93bmxpbnRgJ3Mgb3duIHN0cmluZyBBUEksIGFuZCB0aGF0IGlzIHRoZSB3aG9sZVxuICogcG9pbnQgb2YgdGhlIG1vZHVsZS4gVGhlIHF1ZXN0aW9uIGEgY2FsbGVyIGlzIGFza2luZyBpcyAqXCJ3b3VsZCBgbGludDptZGAgaGF2ZSBmYWlsZWQgb24gdGhpcyB0ZXh0P1wiKiwgYW5kXG4gKiBvbmx5IHRoZSBgbWFya2Rvd25saW50LWNsaTJgIGxheWVyIGtub3dzOiBpdCBpcyB3aGF0IGZpbmRzIGAubWFya2Rvd25saW50LWNsaTIubWpzYCAodGhyb3VnaCBgaml0aWAsIGZvclxuICogdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiB0aGlzIHdvcmtzcGFjZSB3cml0ZXMpLCBtZXJnZXMgdGhlIHJlcG9zaXRvcnkncyBvd24gb3ZlcnJpZGVzIG92ZXIgdGhlIHNoYXJlZFxuICogZGVmYXVsdHMsIGFuZCBsb2FkcyB0aGUgY3VzdG9tIHJ1bGVzLiBSZWFjaGluZyBmb3IgdGhlIHN0cmluZyBBUEkgbWVhbnMgaGFuZC1yb2xsaW5nIHRoYXQgcmVzb2x1dGlvbiBvdmVyXG4gKiBmaXZlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXRzLCB3aGljaCBpcyBhIGNvcHkgb2YgYG1hcmtkb3dubGludC1jbGkyYCB0aGF0IGNhbiBvbmx5IGV2ZXIgZHJpZnQgZnJvbSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRFcnJvciB9IGZyb20gJ21hcmtkb3dubGludCc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IHRvUG9zaXhQYXRoIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgYXBwbHlGaXhlcyB9IGZyb20gJ21hcmtkb3dubGludCc7XG5pbXBvcnQgeyBtYWluIGFzIG1hcmtkb3dubGludENsaTIgfSBmcm9tICdtYXJrZG93bmxpbnQtY2xpMic7XG5cbmltcG9ydCB7IGdldFJvb3RGb2xkZXIgfSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7IG9ic2lkaWFuRGV2VXRpbHNDb25maWcgfSBmcm9tICcuL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyc7XG5cbi8qKlxuICogVGhlIGV4aXQgY29kZSBgbWFya2Rvd25saW50LWNsaTJgIHJldHVybnMgd2hlbiBpdCByZXBvcnRlZCBub3RoaW5nIHRoYXQgY291bnRzIGFzIGEgZmFpbHVyZS5cbiAqL1xuY29uc3QgU1VDQ0VTU19FWElUX0NPREUgPSAwO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaXhNYXJrZG93bkNvbnRlbnR9LCB0aGUgc2FtZSBhcyB7QGxpbmsgbGludE1hcmtkb3duQ29udGVudH0ncy5cbiAqL1xuZXhwb3J0IHR5cGUgRml4TWFya2Rvd25Db250ZW50UGFyYW1zID0gTGludE1hcmtkb3duQ29udGVudFBhcmFtcztcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBmaXhNYXJrZG93bkNvbnRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpeE1hcmtkb3duQ29udGVudFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB3aXRoIGV2ZXJ5IGZpeGFibGUgZmluZGluZyBmaXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogSG93IG1hbnkgZmluZGluZ3Mgd2VyZSBmaXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpeENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxpbnRNYXJrZG93bkNvbnRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRNYXJrZG93bkNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1hcmtkb3duIHRvIGxpbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIGluc2lkZSB0aGUgcHJvamVjdCB3aG9zZSBtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBhcHBsaWVzLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlci5cbiAgICogSW4gYSB3b3Jrc3BhY2UsIGEgcGFja2FnZSdzIG93biBmb2xkZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gb2YgaXRzIG93biwgc28gYSBjYWxsZXIgbGludGluZyBmb3IgdGhlXG4gICAqIHdvcmtzcGFjZSByb290IG5hbWVzIGl0IGhlcmUuXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjb250ZW50IGlzIGxpbnRlZCBBUyDigJQgbm9ybWFsbHkgdGhlIHBhdGggaXQgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by4gSXQgZGVjaWRlcyBob3cgdGhlXG4gICAqIHBhdGgtcmVsYXRpdmUgcnVsZXMgcmVzb2x2ZSAoYHJlbGF0aXZlLWxpbmtzYCB3YWxrcyBmcm9tIHRoZSBmaWxlJ3Mgb3duIGZvbGRlciksIGFuZCBpdCBpcyB3aGF0IGV2ZXJ5XG4gICAqIHJlcG9ydGVkIGZpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpeGVzIGBsaW50Om1kOmZpeGAgd291bGQgYXBwbHkgdG8gbWFya2Rvd24gdGhhdCBpcyBub3Qgb24gZGlzaywgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBgbGludDptZGBcbiAqIHdvdWxkIGhhdmUgdXNlZCBmb3IgaXQuXG4gKlxuICogYG1hcmtkb3dubGludC1jbGkyYCdzIG93biBgZml4YCByZWFkcyBhbmQgd3JpdGVzIGZpbGVzIG9ubHksIGFuZCBza2lwcyBgbm9uRmlsZUNvbnRlbnRzYC4gU28gdGhlIGNvbnRlbnQgaXMgbGludGVkXG4gKiBhcyB7QGxpbmsgbGludE1hcmtkb3duQ29udGVudH0gbGludHMgaXQsIGFuIG91dHB1dCBmb3JtYXR0ZXIgY29sbGVjdHMgdGhlIGZpbmRpbmdzIHdpdGggdGhlaXIgYGZpeEluZm9gLCBhbmRcbiAqIG1hcmtkb3dubGludCdzIG93biBgYXBwbHlGaXhlc2AgYXBwbGllcyB0aGVtLiBUaGF0IGlzIG9uZSBwYXNzLCBhcyBgbGludDptZDpmaXhgIG1ha2VzIG9uZTogYSBmaW5kaW5nIGxlZnQgb3ZlciBpc1xuICogZm9yIHRoZSBjYWxsZXIncyBuZXh0IGxpbnQgdG8gcmVwb3J0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEZpeE1hcmtkb3duQ29udGVudFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB7QGxpbmsgRml4TWFya2Rvd25Db250ZW50UmVzdWx0fS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpeE1hcmtkb3duQ29udGVudChwYXJhbXM6IEZpeE1hcmtkb3duQ29udGVudFBhcmFtcyk6IFByb21pc2U8Rml4TWFya2Rvd25Db250ZW50UmVzdWx0PiB7XG4gIGNvbnN0IHsgY29udGVudCwgY3dkLCBmaWxlUGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjb250ZW50RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignbWFya2Rvd25saW50OmZpeE1hcmtkb3duQ29udGVudCcpO1xuICBjb25zdCBmaXhhYmxlRXJyb3JzOiBMaW50RXJyb3JbXSA9IFtdO1xuXG4gIGF3YWl0IG1hcmtkb3dubGludENsaTIoe1xuICAgIGRpcmVjdG9yeTogZ2V0Um9vdEZvbGRlcihjd2QpID8/IGN3ZCA/PyBwcm9jZXNzLmN3ZCgpLFxuICAgIGxvZ01lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGNvbnRlbnREZWJ1Z2dlcihtZXNzYWdlKTtcbiAgICB9LFxuICAgIG5vR2xvYnM6IHRydWUsXG4gICAgbm9uRmlsZUNvbnRlbnRzOiB7IFt0b1Bvc2l4UGF0aChmaWxlUGF0aCldOiBjb250ZW50IH0sXG4gICAgb3B0aW9uc0RlZmF1bHQ6IG9ic2lkaWFuRGV2VXRpbHNDb25maWcsXG4gICAgb3B0aW9uc092ZXJyaWRlOiB7XG4gICAgICBvdXRwdXRGb3JtYXR0ZXJzOiBbWyh7IHJlc3VsdHMgfSk6IHZvaWQgPT4ge1xuICAgICAgICBmaXhhYmxlRXJyb3JzLnB1c2goLi4ucmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LmZpeEluZm8gIT09IG51bGwpKTtcbiAgICAgIH1dXVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBmaXhhYmxlRXJyb3JzLmxlbmd0aCA9PT0gMCA/IGNvbnRlbnQgOiBhcHBseUZpeGVzKGNvbnRlbnQsIGZpeGFibGVFcnJvcnMpLFxuICAgIGZpeENvdW50OiBmaXhhYmxlRXJyb3JzLmxlbmd0aFxuICB9O1xufVxuXG4vKipcbiAqIExpbnRzIG1hcmtkb3duIGNvbnRlbnQgdGhhdCBpcyBub3Qgb24gZGlzaywgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBgbGludDptZGAgd291bGQgaGF2ZSB1c2VkIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbmRpbmdzLCBlYWNoIG9uZSB0aGUgbGluZSB0aGUgYGxpbnQ6bWRgIG91dHB1dCB3b3VsZCBoYXZlXG4gKiBjYXJyaWVkIOKAlCBgPHBhdGg+OjxsaW5lPls6PGNvbHVtbj5dIGVycm9yIDxydWxlPiA8ZGVzY3JpcHRpb24+YCDigJQgb3IgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGVyZSBhcmUgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnRNYXJrZG93bkNvbnRlbnQocGFyYW1zOiBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IGNvbnRlbnQsIGN3ZCwgZmlsZVBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgZmluZGluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbnRlbnREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludE1hcmtkb3duQ29udGVudCcpO1xuXG4gIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbWFya2Rvd25saW50Q2xpMih7XG4gICAgZGlyZWN0b3J5OiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gY3dkID8/IHByb2Nlc3MuY3dkKCksXG4gICAgbG9nRXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGZpbmRpbmdzLnB1c2gobWVzc2FnZSk7XG4gICAgfSxcbiAgICBsb2dNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBjb250ZW50RGVidWdnZXIobWVzc2FnZSk7XG4gICAgfSxcbiAgICAvLyBUaGUgY29udGVudCBpcyB0aGUgb25seSBpbnB1dC4gV2l0aG91dCB0aGlzIHRoZSBjb25maWd1cmF0aW9uJ3Mgb3duIGBnbG9ic2Agd291bGQgYmUgZXhwYW5kZWQgdG9vLCBhbmRcbiAgICAvLyBhIGNoZWNrIG9uIG9uZSBkb2N1bWVudCB3b3VsZCBsaW50IHRoZSB3aG9sZSByZXBvc2l0b3J5IOKAlCBzbG93bHksIGFuZCByZXBvcnRpbmcgZmluZGluZ3MgaXRzIGNhbGxlciBoYXNcbiAgICAvLyBubyBidXNpbmVzcyBmYWlsaW5nIG9uLlxuICAgIG5vR2xvYnM6IHRydWUsXG4gICAgbm9uRmlsZUNvbnRlbnRzOiB7IFt0b1Bvc2l4UGF0aChmaWxlUGF0aCldOiBjb250ZW50IH0sXG4gICAgLy8gVGhlIEJBU0UgdGhlIHJlcG9zaXRvcnkncyBvd24gY29uZmlndXJhdGlvbiBpcyBtZXJnZWQgb3Zlciwgd2hpY2ggbWF0dGVycyBmb3IgYSByZXBvc2l0b3J5IHRoYXQgaGFzIG5vbmVcbiAgICAvLyB5ZXQ6IGBsaW50KClgIGNvcGllcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBpbiDigJQgd2hpY2ggaXMgYnVpbHQgb24gdGhpcyBvbmUg4oCUIGJlZm9yZSBpdCBsaW50cywgc28gYVxuICAgIC8vIHJ1biB3aXRob3V0IGl0IHdvdWxkIGFwcGx5IG1hcmtkb3dubGludCdzIHN0b2NrIGRlZmF1bHRzIGluc3RlYWQsIGFuZCBgTUQwMTMvbGluZS1sZW5ndGhgIHdvdWxkIGZhaWwgYXRcbiAgICAvLyA4MCBjb2x1bW5zIG9uIGFuIG9yZGluYXJ5IHJlbGVhc2Ugbm90ZSB0aGF0IGBsaW50Om1kYCBpcyBwZXJmZWN0bHkgaGFwcHkgd2l0aC4gU2luY2UgYSByZXBvc2l0b3J5J3Mgb3duXG4gICAgLy8gY29uZmlndXJhdGlvbiBvdmVycmlkZXMgdGhpcyBrZXkgYnkga2V5LCB0aGUgd29yc3QgYSBtaXNtYXRjaCBjYW4gZG8gaXMgbWlzcyBhIGZpbmRpbmcsIG5ldmVyIGludmVudCBvbmUuXG4gICAgb3B0aW9uc0RlZmF1bHQ6IG9ic2lkaWFuRGV2VXRpbHNDb25maWdcbiAgfSk7XG5cbiAgLy8gV2hldGhlciB0aGlzIGlzIGEgRkFJTFVSRSBpcyB0aGUgdG9vbCdzIG93biBhbnN3ZXIsIG5vdCBhIGNvdW50IG9mIHRoZSBsaW5lcyBpdCBwcmludGVkOiBhIHJ1bGUgY29uZmlndXJlZFxuICAvLyB3aXRoIGBzZXZlcml0eTogd2FybmluZ2AgaXMgcHJpbnRlZCB0aHJvdWdoIGBsb2dFcnJvcmAgbGlrZSBhbnkgb3RoZXIgYW5kIHN0aWxsIGV4aXRzIGAwYCwgc28gcmV0dXJuaW5nIHRoZVxuICAvLyBsaW5lcyBhbG9uZSB3b3VsZCBmYWlsIGEgcmVsZWFzZSBvbiBzb21ldGhpbmcgYGxpbnQ6bWRgIGl0c2VsZiBwYXNzZXMuXG4gIHJldHVybiBleGl0Q29kZSA9PT0gU1VDQ0VTU19FWElUX0NPREUgPyBbXSA6IGZpbmRpbmdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxtQkFBK0I7QUFDL0Isa0JBQTRCO0FBQzVCLDBCQUEyQjtBQUMzQiwrQkFBeUM7QUFFekMsa0JBQThCO0FBQzlCLHNDQUF1QztBQUt2QyxNQUFNLG9CQUFvQjtBQTBEMUIsZUFBc0IsbUJBQW1CLFFBQXFFO0FBQzVHLFFBQU0sRUFBRSxTQUFTLEtBQUssU0FBUyxJQUFJO0FBQ25DLFFBQU0sc0JBQWtCLDZCQUFlLGlDQUFpQztBQUN4RSxRQUFNLGdCQUE2QixDQUFDO0FBRXBDLFlBQU0seUJBQUFBLE1BQWlCO0FBQUEsSUFDckIsZUFBVywyQkFBYyxHQUFHLEtBQUssT0FBTyxRQUFRLElBQUk7QUFBQSxJQUNwRCxZQUFZLENBQUMsWUFBMEI7QUFDckMsc0JBQWdCLE9BQU87QUFBQSxJQUN6QjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsaUJBQWlCLEVBQUUsS0FBQyx5QkFBWSxRQUFRLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDcEQsZ0JBQWdCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsTUFDZixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLE1BQVk7QUFDekMsc0JBQWMsS0FBSyxHQUFHLFFBQVEsT0FBTyxDQUFDLFdBQVcsT0FBTyxZQUFZLElBQUksQ0FBQztBQUFBLE1BQzNFLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPO0FBQUEsSUFDTCxTQUFTLGNBQWMsV0FBVyxJQUFJLGNBQVUsZ0NBQVcsU0FBUyxhQUFhO0FBQUEsSUFDakYsVUFBVSxjQUFjO0FBQUEsRUFDMUI7QUFDRjtBQVNBLGVBQXNCLG9CQUFvQixRQUFzRDtBQUM5RixRQUFNLEVBQUUsU0FBUyxLQUFLLFNBQVMsSUFBSTtBQUNuQyxRQUFNLFdBQXFCLENBQUM7QUFDNUIsUUFBTSxzQkFBa0IsNkJBQWUsa0NBQWtDO0FBRXpFLFFBQU0sV0FBVyxVQUFNLHlCQUFBQSxNQUFpQjtBQUFBLElBQ3RDLGVBQVcsMkJBQWMsR0FBRyxLQUFLLE9BQU8sUUFBUSxJQUFJO0FBQUEsSUFDcEQsVUFBVSxDQUFDLFlBQTBCO0FBQ25DLGVBQVMsS0FBSyxPQUFPO0FBQUEsSUFDdkI7QUFBQSxJQUNBLFlBQVksQ0FBQyxZQUEwQjtBQUNyQyxzQkFBZ0IsT0FBTztBQUFBLElBQ3pCO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJQSxTQUFTO0FBQUEsSUFDVCxpQkFBaUIsRUFBRSxLQUFDLHlCQUFZLFFBQVEsQ0FBQyxHQUFHLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNcEQsZ0JBQWdCO0FBQUEsRUFDbEIsQ0FBQztBQUtELFNBQU8sYUFBYSxvQkFBb0IsQ0FBQyxJQUFJO0FBQy9DOyIsIm5hbWVzIjpbIm1hcmtkb3dubGludENsaTIiXX0=
@@ -16,6 +16,23 @@
16
16
  * defaults, and loads the custom rules. Reaching for the string API means hand-rolling that resolution over
17
17
  * five configuration file formats, which is a copy of `markdownlint-cli2` that can only ever drift from it.
18
18
  */
19
+ /**
20
+ * Parameters for {@link fixMarkdownContent}, the same as {@link lintMarkdownContent}'s.
21
+ */
22
+ export type FixMarkdownContentParams = LintMarkdownContentParams;
23
+ /**
24
+ * The result of {@link fixMarkdownContent}.
25
+ */
26
+ export interface FixMarkdownContentResult {
27
+ /**
28
+ * The content with every fixable finding fixed.
29
+ */
30
+ readonly content: string;
31
+ /**
32
+ * How many findings were fixed.
33
+ */
34
+ readonly fixCount: number;
35
+ }
19
36
  /**
20
37
  * Parameters for {@link lintMarkdownContent}.
21
38
  */
@@ -37,6 +54,19 @@ export interface LintMarkdownContentParams {
37
54
  */
38
55
  readonly filePath: string;
39
56
  }
57
+ /**
58
+ * Applies the fixes `lint:md:fix` would apply to markdown that is not on disk, with the configuration `lint:md`
59
+ * would have used for it.
60
+ *
61
+ * `markdownlint-cli2`'s own `fix` reads and writes files only, and skips `nonFileContents`. So the content is linted
62
+ * as {@link lintMarkdownContent} lints it, an output formatter collects the findings with their `fixInfo`, and
63
+ * markdownlint's own `applyFixes` applies them. That is one pass, as `lint:md:fix` makes one: a finding left over is
64
+ * for the caller's next lint to report.
65
+ *
66
+ * @param params - The {@link FixMarkdownContentParams}.
67
+ * @returns A {@link Promise} that resolves to the {@link FixMarkdownContentResult}.
68
+ */
69
+ export declare function fixMarkdownContent(params: FixMarkdownContentParams): Promise<FixMarkdownContentResult>;
40
70
  /**
41
71
  * Lints markdown content that is not on disk, with the configuration `lint:md` would have used for it.
42
72
  *
@@ -5,13 +5,35 @@
5
5
  * The types for `markdownlint-cli2`'s programmatic entry point, which the package itself describes in JSDoc
6
6
  * and ships no declaration for. Vendored here, beside the configuration-schema types, for the same reason.
7
7
  *
8
- * Only the parameters {@link lintMarkdownContent} passes are declared. The full parameter object also carries
9
- * `argv`, `allowStdin`, `fileContents`, `fs`, `noImport` and `optionsOverride`, none of which a caller linting
8
+ * Only the parameters {@link lintMarkdownContent} and {@link fixMarkdownContent} pass are declared. The full parameter
9
+ * object also carries `argv`, `allowStdin`, `fileContents`, `fs` and `noImport`, none of which a caller linting
10
10
  * one in-memory document has any use for — and declaring an option nobody passes is a claim about a shape
11
11
  * nothing here ever checks.
12
12
  */
13
13
 
14
14
  declare module 'markdownlint-cli2' {
15
+ /**
16
+ * What `markdownlint-cli2` hands an output formatter.
17
+ */
18
+ interface MarkdownlintCli2FormatterOptions {
19
+ /**
20
+ * Every finding of the run, each one markdownlint's own `LintError` with the reported path added, so a fixable
21
+ * one still carries its `fixInfo`.
22
+ */
23
+ readonly results: readonly (import('markdownlint', { with: { 'resolution-mode': 'import' } }).LintError & { readonly fileName: string })[];
24
+ }
25
+
26
+ /**
27
+ * The options that win over every configuration `markdownlint-cli2` discovers.
28
+ */
29
+ interface MarkdownlintCli2OptionsOverride {
30
+ /**
31
+ * The output formatters, each a module id or the formatter function itself, followed by its parameters. Setting
32
+ * it replaces the default formatter, so nothing reaches `logError`.
33
+ */
34
+ readonly outputFormatters?: readonly (readonly [(options: MarkdownlintCli2FormatterOptions) => Promise<void> | void])[] | undefined;
35
+ }
36
+
15
37
  /**
16
38
  * The parameters of {@link main}.
17
39
  */
@@ -54,6 +76,11 @@ declare module 'markdownlint-cli2' {
54
76
  * key by key and every other option is replaced wholesale, so anything the repository states itself wins.
55
77
  */
56
78
  readonly optionsDefault?: import('./markdownlint-cli2-config-schema.d.cjs').MarkdownlintCli2ConfigurationSchema | undefined;
79
+
80
+ /**
81
+ * The options merged over everything discovered, which win over the repository's own configuration.
82
+ */
83
+ readonly optionsOverride?: MarkdownlintCli2OptionsOverride | undefined;
57
84
  }
58
85
 
59
86
  /**
@@ -36,6 +36,8 @@ __export(test_runners_exports, {
36
36
  auto: () => auto,
37
37
  jest: () => jest,
38
38
  "jest-config": () => jest_config,
39
+ stryker: () => stryker,
40
+ "stryker-config": () => stryker_config,
39
41
  vitest: () => vitest,
40
42
  "vitest-config": () => vitest_config
41
43
  });
@@ -43,6 +45,8 @@ module.exports = __toCommonJS(test_runners_exports);
43
45
  var auto = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./auto.cjs')), 1);
44
46
  var jest_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./jest-config.cjs')), 1);
45
47
  var jest = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./jest.cjs')), 1);
48
+ var stryker_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./stryker-config.cjs')), 1);
49
+ var stryker = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./stryker.cjs')), 1);
46
50
  var vitest_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./vitest-config.cjs')), 1);
47
51
  var vitest = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./vitest.cjs')), 1);
48
52
  // Annotate the CommonJS export names for ESM import in node:
@@ -50,7 +54,9 @@ var vitest = __toESM(((module) => module && module.__esModule && 'default' in mo
50
54
  auto,
51
55
  jest,
52
56
  "jest-config": null,
57
+ stryker,
58
+ "stryker-config": null,
53
59
  vitest,
54
60
  "vitest-config": null
55
61
  });
56
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhdXRvJyBmcm9tICcuL2F1dG8udHMnO1xuZXhwb3J0ICogYXMgJ2plc3QtY29uZmlnJyBmcm9tICcuL2plc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdqZXN0JyBmcm9tICcuL2plc3QudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdC1jb25maWcnIGZyb20gJy4vdml0ZXN0LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0JyBmcm9tICcuL3ZpdGVzdC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUFBQTtBQUFBLEVBQUE7QUFBQSx5QkFBQUM7QUFBQTtBQUFBO0FBRUEsV0FBd0I7QUFDeEIsSUFBQUQsY0FBK0I7QUFDL0IsV0FBd0I7QUFDeEIsSUFBQUMsZ0JBQWlDO0FBQ2pDLGFBQTBCOyIsCiAgIm5hbWVzIjogWyJqZXN0LWNvbmZpZyIsICJ2aXRlc3QtY29uZmlnIl0KfQo=
62
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhdXRvJyBmcm9tICcuL2F1dG8udHMnO1xuZXhwb3J0ICogYXMgJ2plc3QtY29uZmlnJyBmcm9tICcuL2plc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdqZXN0JyBmcm9tICcuL2plc3QudHMnO1xuZXhwb3J0ICogYXMgJ3N0cnlrZXItY29uZmlnJyBmcm9tICcuL3N0cnlrZXItY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdzdHJ5a2VyJyBmcm9tICcuL3N0cnlrZXIudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdC1jb25maWcnIGZyb20gJy4vdml0ZXN0LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0JyBmcm9tICcuL3ZpdGVzdC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUFBQTtBQUFBLEVBQUE7QUFBQSwwQkFBQUM7QUFBQSxFQUFBO0FBQUEseUJBQUFDO0FBQUE7QUFBQTtBQUVBLFdBQXdCO0FBQ3hCLElBQUFGLGNBQStCO0FBQy9CLFdBQXdCO0FBQ3hCLElBQUFDLGlCQUFrQztBQUNsQyxjQUEyQjtBQUMzQixJQUFBQyxnQkFBaUM7QUFDakMsYUFBMEI7IiwKICAibmFtZXMiOiBbImplc3QtY29uZmlnIiwgInN0cnlrZXItY29uZmlnIiwgInZpdGVzdC1jb25maWciXQp9Cg==
@@ -2,5 +2,7 @@
2
2
  export * as 'auto' from './auto.cjs';
3
3
  export * as 'jest-config' from './jest-config.cjs';
4
4
  export * as 'jest' from './jest.cjs';
5
+ export * as 'stryker-config' from './stryker-config.cjs';
6
+ export * as 'stryker' from './stryker.cjs';
5
7
  export * as 'vitest-config' from './vitest-config.cjs';
6
8
  export * as 'vitest' from './vitest.cjs';
@@ -0,0 +1,102 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ "use strict";
7
+ var __create = Object.create;
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __getProtoOf = Object.getPrototypeOf;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26
+ // If the importer is in node compatibility mode or this is not an ESM
27
+ // file that has been converted to a CommonJS file using a Babel-
28
+ // compatible transform (i.e. "__esModule" has not been set), then set
29
+ // "default" to the CommonJS "module.exports" for node compatibility.
30
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31
+ mod
32
+ ));
33
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
+ var stryker_config_exports = {};
35
+ __export(stryker_config_exports, {
36
+ DEFAULT_STRYKER_IGNORE_PATTERNS: () => DEFAULT_STRYKER_IGNORE_PATTERNS,
37
+ DEFAULT_STRYKER_MUTATE: () => DEFAULT_STRYKER_MUTATE,
38
+ STRYKER_TEST_FILES_ENV_VARIABLE: () => STRYKER_TEST_FILES_ENV_VARIABLE,
39
+ STRYKER_VITEST_CONFIG_FILE_NAME: () => STRYKER_VITEST_CONFIG_FILE_NAME,
40
+ defineStrykerConfig: () => defineStrykerConfig,
41
+ getStrykerTestInclude: () => getStrykerTestInclude
42
+ });
43
+ module.exports = __toCommonJS(stryker_config_exports);
44
+ var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
45
+ const DEFAULT_CONCURRENCY = 4;
46
+ const DEFAULT_TIMEOUT_IN_MILLISECONDS = 1e4;
47
+ const STRYKER_TEST_FILES_ENV_VARIABLE = "STRYKER_TEST_FILES";
48
+ const STRYKER_VITEST_CONFIG_FILE_NAME = "vitest.stryker.config.ts";
49
+ const DEFAULT_STRYKER_MUTATE = [
50
+ "src/**/*.ts",
51
+ "!src/**/*.test.ts",
52
+ "!src/**/*.d.ts",
53
+ "!src/**/index.ts",
54
+ "!src/__merged.ts",
55
+ "!src/test-helpers/**",
56
+ "!src/**/@types/**"
57
+ ];
58
+ const DEFAULT_STRYKER_IGNORE_PATTERNS = [
59
+ "/.astro",
60
+ "/.claude",
61
+ "/.codex",
62
+ "/coverage",
63
+ "/dist",
64
+ "/docs",
65
+ "/reports"
66
+ ];
67
+ function defineStrykerConfig(overrides = {}) {
68
+ return {
69
+ checkers: [],
70
+ concurrency: DEFAULT_CONCURRENCY,
71
+ coverageAnalysis: "perTest",
72
+ htmlReporter: { fileName: "reports/mutation/mutation.html" },
73
+ ignorePatterns: [...DEFAULT_STRYKER_IGNORE_PATTERNS],
74
+ inPlace: true,
75
+ jsonReporter: { fileName: "reports/mutation/mutation.json" },
76
+ mutate: [...DEFAULT_STRYKER_MUTATE],
77
+ reporters: ["clear-text", "progress-append-only", "json", "html"],
78
+ // eslint-disable-next-line unicorn/name-replacements -- `tempDirName` is a Stryker option.
79
+ tempDirName: ".stryker-tmp",
80
+ testRunner: "vitest",
81
+ timeoutMS: DEFAULT_TIMEOUT_IN_MILLISECONDS,
82
+ vitest: {
83
+ configFile: STRYKER_VITEST_CONFIG_FILE_NAME,
84
+ related: false
85
+ },
86
+ ...overrides
87
+ };
88
+ }
89
+ function getStrykerTestInclude(defaultInclude) {
90
+ const testFiles = import_node_process.default.env[STRYKER_TEST_FILES_ENV_VARIABLE];
91
+ return testFiles ? testFiles.split(",") : [...defaultInclude];
92
+ }
93
+ // Annotate the CommonJS export names for ESM import in node:
94
+ 0 && (module.exports = {
95
+ DEFAULT_STRYKER_IGNORE_PATTERNS,
96
+ DEFAULT_STRYKER_MUTATE,
97
+ STRYKER_TEST_FILES_ENV_VARIABLE,
98
+ STRYKER_VITEST_CONFIG_FILE_NAME,
99
+ defineStrykerConfig,
100
+ getStrykerTestInclude
101
+ });
102
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9zdHJ5a2VyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBzaGFyZWQgU3RyeWtlciBjb25maWd1cmF0aW9uIGZvciBhbiBvbi1kZW1hbmQgbXV0YXRpb24gcnVuICh7QGxpbmsgZGVmaW5lU3RyeWtlckNvbmZpZ30pLCBhbmQgdGhlIHRlc3QgbGlzdCB0aGVcbiAqIG11dGF0aW9uIHJ1bidzIHZpdGVzdCBjb25maWd1cmF0aW9uIHJlYWRzICh7QGxpbmsgZ2V0U3RyeWtlclRlc3RJbmNsdWRlfSkuXG4gKlxuICogVGhlIG1vZHVsZSBpbXBvcnRzIG5vdGhpbmcgYnV0IGBub2RlOnByb2Nlc3NgIGFuZCBob2xkcyBubyBUeXBlU2NyaXB0IHN5bnRheCBOb2RlIGNhbm5vdCBzdHJpcCwgc28gYSByZXBvc2l0b3J5XG4gKiB0aGF0IGNhbm5vdCBpbnN0YWxsIHRoaXMgcGFja2FnZSAodGhpcyBvbmUpIGxvYWRzIGl0IHN0cmFpZ2h0IGZyb20gaXRzIGBzdHJ5a2VyLmNvbmZpZy5tanNgLlxuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmNvbnN0IERFRkFVTFRfQ09OQ1VSUkVOQ1kgPSA0O1xuY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwXzAwMDtcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYHRlc3RNdXRhdGlvbmAgaGFuZHMgdGhlIHNjb3BlZCBydW4ncyB0ZXN0IGZpbGVzIGluLCBjb21tYS1zZXBhcmF0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVFJZS0VSX1RFU1RfRklMRVNfRU5WX1ZBUklBQkxFID0gJ1NUUllLRVJfVEVTVF9GSUxFUyc7XG5cbi8qKlxuICogVGhlIHZpdGVzdCBjb25maWd1cmF0aW9uIGZpbGUgdGhlIG11dGF0aW9uIHJ1biByZWFkcywgYmVzaWRlIHRoZSBwcm9qZWN0J3Mgb3duIGB2aXRlc3QuY29uZmlnLipgLlxuICovXG5leHBvcnQgY29uc3QgU1RSWUtFUl9WSVRFU1RfQ09ORklHX0ZJTEVfTkFNRSA9ICd2aXRlc3Quc3RyeWtlci5jb25maWcudHMnO1xuXG4vKipcbiAqIFRoZSBmaWxlcyBtdXRhdGVkIGJ5IGEgcnVuIHRoYXQgbmFtZXMgbm9uZTogZXZlcnkgc291cmNlIGZpbGUgYnV0IHRoZSB0ZXN0cywgdGhlIGRlY2xhcmF0aW9ucywgdGhlIGdlbmVyYXRlZFxuICogYmFycmVscyBhbmQgdGhlIHRlc3QgaGVscGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RSWUtFUl9NVVRBVEU6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnc3JjLyoqLyoudHMnLFxuICAnIXNyYy8qKi8qLnRlc3QudHMnLFxuICAnIXNyYy8qKi8qLmQudHMnLFxuICAnIXNyYy8qKi9pbmRleC50cycsXG4gICchc3JjL19fbWVyZ2VkLnRzJyxcbiAgJyFzcmMvdGVzdC1oZWxwZXJzLyoqJyxcbiAgJyFzcmMvKiovQHR5cGVzLyoqJ1xuXTtcblxuLyoqXG4gKiBUaGUgZm9sZGVycyBTdHJ5a2VyIG5ldmVyIHJlYWRzLiBBIGRvY3VtZW50YXRpb24gc2l0ZSdzIGBkb2NzL2AgYWxvbmUgaGVsZCAxOCwwMDAgZmlsZXMgaW4gdGhlIHBpbG90OiBjb3B5aW5nIGl0XG4gKiB0b29rIDUgbWludXRlcywgYW5kIHRoZW4gdGhlIG1haW4gcHJvY2VzcyBkaWVkIG9mIGEgNCBHQiBoZWFwIE9PTS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RSWUtFUl9JR05PUkVfUEFUVEVSTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnLy5hc3RybycsXG4gICcvLmNsYXVkZScsXG4gICcvLmNvZGV4JyxcbiAgJy9jb3ZlcmFnZScsXG4gICcvZGlzdCcsXG4gICcvZG9jcycsXG4gICcvcmVwb3J0cydcbl07XG5cbi8qKlxuICogQSBTdHJ5a2VyIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBhcyBhIGBzdHJ5a2VyLmNvbmZpZy5tanNgIGV4cG9ydHMgaXQuXG4gKlxuICogS2VwdCBsb29zZSByYXRoZXIgdGhhbiB0eXBlZCBieSBgQHN0cnlrZXItbXV0YXRvci9hcGlgLCBzbyBhIGNvbnN1bWVyIHRoYXQgbmV2ZXIgcnVucyBTdHJ5a2VyIG5ldmVyIG5lZWRzIGl0c1xuICogdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0cnlrZXJDb25maWcgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBTdHJ5a2VyIGNvbmZpZ3VyYXRpb24gb2YgYW4gb24tZGVtYW5kIG11dGF0aW9uIHJ1bi5cbiAqXG4gKiBUaGUgZGVmYXVsdHMgZW5jb2RlIHdoYXQgdGhlIHBpbG90IG1lYXN1cmVkOlxuICpcbiAqIC0gYGluUGxhY2U6IHRydWVgLCBiZWNhdXNlIFN0cnlrZXIncyBzYW5kYm94IGNvcHkgYnJlYWtzIG1vZHVsZSByZXNvbHV0aW9uIHRocm91Z2ggYSBzeW1saW5rZWQgYG5vZGVfbW9kdWxlc2AuIEluXG4gKiAgIHBsYWNlLCBTdHJ5a2VyIG11dGF0ZXMgdGhlIHRyZWUgaXRzZWxmIGFuZCBwdXRzIGJhY2sgdGhlIFdIT0xFIHRyZWUgYXMgaXQgd2FzIHdoZW4gdGhlIHJ1biBzdGFydGVkLCBzbyB0aGUgcnVuXG4gKiAgIG5lZWRzIGEgY29tbWl0dGVkIHRyZWUgYW5kIG5vYm9keSBtYXkgZWRpdCBpdCB3aGlsZSB0aGUgcnVuIGlzIGdvaW5nLlxuICogLSBgdml0ZXN0LnJlbGF0ZWQ6IGZhbHNlYCwgYmVjYXVzZSBgdml0ZXN0LnJlbGF0ZWRgIGZvdW5kIG5vIHRlc3RzIGF0IGFsbDsgdGhlIHNjb3BlZCBydW4gbmFtZXMgaXRzIHRlc3QgZmlsZXNcbiAqICAgdGhyb3VnaCB7QGxpbmsgZ2V0U3RyeWtlclRlc3RJbmNsdWRlfSBpbnN0ZWFkLlxuICogLSBgaWdub3JlUGF0dGVybnNgLCBzZWUge0BsaW5rIERFRkFVTFRfU1RSWUtFUl9JR05PUkVfUEFUVEVSTlN9LlxuICpcbiAqIEBwYXJhbSBvdmVycmlkZXMgLSBLZXlzIHRoYXQgcmVwbGFjZSB0aGUgZGVmYXVsdHMuIFRoZSBtZXJnZSBpcyBzaGFsbG93OiBhbiBvdmVycmlkZSBvZiBgdml0ZXN0YCByZXBsYWNlcyB0aGVcbiAqICAgd2hvbGUgYHZpdGVzdGAgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gdG8gZXhwb3J0IGZyb20gYHN0cnlrZXIuY29uZmlnLm1qc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdHJ5a2VyQ29uZmlnKG92ZXJyaWRlczogU3RyeWtlckNvbmZpZyA9IHt9KTogU3RyeWtlckNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgY2hlY2tlcnM6IFtdLFxuICAgIGNvbmN1cnJlbmN5OiBERUZBVUxUX0NPTkNVUlJFTkNZLFxuICAgIGNvdmVyYWdlQW5hbHlzaXM6ICdwZXJUZXN0JyxcbiAgICBodG1sUmVwb3J0ZXI6IHsgZmlsZU5hbWU6ICdyZXBvcnRzL211dGF0aW9uL211dGF0aW9uLmh0bWwnIH0sXG4gICAgaWdub3JlUGF0dGVybnM6IFsuLi5ERUZBVUxUX1NUUllLRVJfSUdOT1JFX1BBVFRFUk5TXSxcbiAgICBpblBsYWNlOiB0cnVlLFxuICAgIGpzb25SZXBvcnRlcjogeyBmaWxlTmFtZTogJ3JlcG9ydHMvbXV0YXRpb24vbXV0YXRpb24uanNvbicgfSxcbiAgICBtdXRhdGU6IFsuLi5ERUZBVUxUX1NUUllLRVJfTVVUQVRFXSxcbiAgICByZXBvcnRlcnM6IFsnY2xlYXItdGV4dCcsICdwcm9ncmVzcy1hcHBlbmQtb25seScsICdqc29uJywgJ2h0bWwnXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdGVtcERpck5hbWVgIGlzIGEgU3RyeWtlciBvcHRpb24uXG4gICAgdGVtcERpck5hbWU6ICcuc3RyeWtlci10bXAnLFxuICAgIHRlc3RSdW5uZXI6ICd2aXRlc3QnLFxuICAgIHRpbWVvdXRNUzogREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICB2aXRlc3Q6IHtcbiAgICAgIGNvbmZpZ0ZpbGU6IFNUUllLRVJfVklURVNUX0NPTkZJR19GSUxFX05BTUUsXG4gICAgICByZWxhdGVkOiBmYWxzZVxuICAgIH0sXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5cbi8qKlxuICogUGlja3MgdGhlIHRlc3QgZmlsZXMgb2YgdGhlIG11dGF0aW9uIHJ1bidzIHZpdGVzdCBjb25maWd1cmF0aW9uOiB0aGUgb25lcyBgdGVzdE11dGF0aW9uYCBuYW1lZCBmb3IgYSBzY29wZWQgcnVuLCBvclxuICogdGhlIGdpdmVuIGRlZmF1bHRzIGZvciBhIGZ1bGwgb25lLlxuICpcbiAqIEBwYXJhbSBkZWZhdWx0SW5jbHVkZSAtIFRoZSBgaW5jbHVkZWAgZ2xvYnMgb2YgYSBmdWxsIHJ1bi5cbiAqIEByZXR1cm5zIFRoZSBgaW5jbHVkZWAgbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0cnlrZXJUZXN0SW5jbHVkZShkZWZhdWx0SW5jbHVkZTogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRlc3RGaWxlcyA9IHByb2Nlc3MuZW52W1NUUllLRVJfVEVTVF9GSUxFU19FTlZfVkFSSUFCTEVdO1xuICByZXR1cm4gdGVzdEZpbGVzID8gdGVzdEZpbGVzLnNwbGl0KCcsJykgOiBbLi4uZGVmYXVsdEluY2x1ZGVdO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSwwQkFBb0I7QUFFcEIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxrQ0FBa0M7QUFLakMsTUFBTSxrQ0FBa0M7QUFLeEMsTUFBTSxrQ0FBa0M7QUFNeEMsTUFBTSx5QkFBNEM7QUFBQSxFQUN2RDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBTU8sTUFBTSxrQ0FBcUQ7QUFBQSxFQUNoRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBMEJPLFNBQVMsb0JBQW9CLFlBQTJCLENBQUMsR0FBa0I7QUFDaEYsU0FBTztBQUFBLElBQ0wsVUFBVSxDQUFDO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQixjQUFjLEVBQUUsVUFBVSxpQ0FBaUM7QUFBQSxJQUMzRCxnQkFBZ0IsQ0FBQyxHQUFHLCtCQUErQjtBQUFBLElBQ25ELFNBQVM7QUFBQSxJQUNULGNBQWMsRUFBRSxVQUFVLGlDQUFpQztBQUFBLElBQzNELFFBQVEsQ0FBQyxHQUFHLHNCQUFzQjtBQUFBLElBQ2xDLFdBQVcsQ0FBQyxjQUFjLHdCQUF3QixRQUFRLE1BQU07QUFBQTtBQUFBLElBRWhFLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxNQUNOLFlBQVk7QUFBQSxNQUNaLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxHQUFHO0FBQUEsRUFDTDtBQUNGO0FBU08sU0FBUyxzQkFBc0IsZ0JBQTZDO0FBQ2pGLFFBQU0sWUFBWSxvQkFBQUEsUUFBUSxJQUFJLCtCQUErQjtBQUM3RCxTQUFPLFlBQVksVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsY0FBYztBQUM5RDsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
@@ -0,0 +1,60 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The shared Stryker configuration for an on-demand mutation run ({@link defineStrykerConfig}), and the test list the
6
+ * mutation run's vitest configuration reads ({@link getStrykerTestInclude}).
7
+ *
8
+ * The module imports nothing but `node:process` and holds no TypeScript syntax Node cannot strip, so a repository
9
+ * that cannot install this package (this one) loads it straight from its `stryker.config.mjs`.
10
+ */
11
+ /**
12
+ * The environment variable `testMutation` hands the scoped run's test files in, comma-separated.
13
+ */
14
+ export declare const STRYKER_TEST_FILES_ENV_VARIABLE = "STRYKER_TEST_FILES";
15
+ /**
16
+ * The vitest configuration file the mutation run reads, beside the project's own `vitest.config.*`.
17
+ */
18
+ export declare const STRYKER_VITEST_CONFIG_FILE_NAME = "vitest.stryker.config.ts";
19
+ /**
20
+ * The files mutated by a run that names none: every source file but the tests, the declarations, the generated
21
+ * barrels and the test helpers.
22
+ */
23
+ export declare const DEFAULT_STRYKER_MUTATE: readonly string[];
24
+ /**
25
+ * The folders Stryker never reads. A documentation site's `docs/` alone held 18,000 files in the pilot: copying it
26
+ * took 5 minutes, and then the main process died of a 4 GB heap OOM.
27
+ */
28
+ export declare const DEFAULT_STRYKER_IGNORE_PATTERNS: readonly string[];
29
+ /**
30
+ * A Stryker configuration object, as a `stryker.config.mjs` exports it.
31
+ *
32
+ * Kept loose rather than typed by `@stryker-mutator/api`, so a consumer that never runs Stryker never needs its
33
+ * types.
34
+ */
35
+ export type StrykerConfig = Record<string, unknown>;
36
+ /**
37
+ * Defines the Stryker configuration of an on-demand mutation run.
38
+ *
39
+ * The defaults encode what the pilot measured:
40
+ *
41
+ * - `inPlace: true`, because Stryker's sandbox copy breaks module resolution through a symlinked `node_modules`. In
42
+ * place, Stryker mutates the tree itself and puts back the WHOLE tree as it was when the run started, so the run
43
+ * needs a committed tree and nobody may edit it while the run is going.
44
+ * - `vitest.related: false`, because `vitest.related` found no tests at all; the scoped run names its test files
45
+ * through {@link getStrykerTestInclude} instead.
46
+ * - `ignorePatterns`, see {@link DEFAULT_STRYKER_IGNORE_PATTERNS}.
47
+ *
48
+ * @param overrides - Keys that replace the defaults. The merge is shallow: an override of `vitest` replaces the
49
+ * whole `vitest` object.
50
+ * @returns The configuration to export from `stryker.config.mjs`.
51
+ */
52
+ export declare function defineStrykerConfig(overrides?: StrykerConfig): StrykerConfig;
53
+ /**
54
+ * Picks the test files of the mutation run's vitest configuration: the ones `testMutation` named for a scoped run, or
55
+ * the given defaults for a full one.
56
+ *
57
+ * @param defaultInclude - The `include` globs of a full run.
58
+ * @returns The `include` list.
59
+ */
60
+ export declare function getStrykerTestInclude(defaultInclude: readonly string[]): string[];
@@ -0,0 +1,105 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ "use strict";
40
+ var __defProp = Object.defineProperty;
41
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
42
+ var __getOwnPropNames = Object.getOwnPropertyNames;
43
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
44
+ var __export = (target, all) => {
45
+ for (var name in all)
46
+ __defProp(target, name, { get: all[name], enumerable: true });
47
+ };
48
+ var __copyProps = (to, from, except, desc) => {
49
+ if (from && typeof from === "object" || typeof from === "function") {
50
+ for (let key of __getOwnPropNames(from))
51
+ if (!__hasOwnProp.call(to, key) && key !== except)
52
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
53
+ }
54
+ return to;
55
+ };
56
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
57
+ var stryker_exports = {};
58
+ __export(stryker_exports, {
59
+ testMutation: () => testMutation
60
+ });
61
+ module.exports = __toCommonJS(stryker_exports);
62
+ var import_path = require('@mnaoumov/typescript-lib/path');
63
+ var import_node_fs = require('node:fs');
64
+ var import_package_manager = require('../package-manager.cjs');
65
+ var import_root = require('../root.cjs');
66
+ var import_stryker_config = require('./stryker-config.cjs');
67
+ const TS_EXTENSION_REG_EXP = /\.ts$/;
68
+ async function testMutation(options = {}) {
69
+ const modulePaths = (options.modulePaths ?? []).map((modulePath) => (0, import_path.toPosixPath)(modulePath));
70
+ const testFiles = getSiblingTestFiles(modulePaths);
71
+ const status = await (0, import_root.execFromRoot)("git status --porcelain --untracked-files=all", { isQuiet: true });
72
+ if (status) {
73
+ throw new Error(
74
+ `Mutation testing needs a committed tree: Stryker mutates it in place and puts the whole tree back as it was when the run started, so an uncommitted change would be lost.
75
+ ${status}`
76
+ );
77
+ }
78
+ const runArguments = modulePaths.length > 0 ? ["--mutate", modulePaths.join(",")] : ["--incremental"];
79
+ const env = modulePaths.length > 0 ? { [import_stryker_config.STRYKER_TEST_FILES_ENV_VARIABLE]: testFiles.join(",") } : {};
80
+ await (0, import_root.execFromRoot)([...(0, import_package_manager.resolveToolCommand)({ tool: "stryker" }), "run", ...runArguments], { env, isInteractive: true });
81
+ }
82
+ function getSiblingTestFiles(modulePaths) {
83
+ const problems = [];
84
+ const testFiles = modulePaths.map((modulePath) => {
85
+ if (!modulePath.endsWith(".ts") || modulePath.endsWith(".d.ts") || modulePath.endsWith(".test.ts")) {
86
+ problems.push(`${modulePath}: not a .ts module`);
87
+ return modulePath;
88
+ }
89
+ const testFile = modulePath.replace(TS_EXTENSION_REG_EXP, ".test.ts");
90
+ if (!(0, import_node_fs.existsSync)((0, import_root.resolvePathFromRootSafe)({ path: testFile }))) {
91
+ problems.push(`${modulePath}: no sibling test ${testFile}`);
92
+ }
93
+ return testFile;
94
+ });
95
+ if (problems.length > 0) {
96
+ throw new Error(`Cannot scope the mutation run:
97
+ ${problems.join("\n")}`);
98
+ }
99
+ return testFiles;
100
+ }
101
+ // Annotate the CommonJS export names for ESM import in node:
102
+ 0 && (module.exports = {
103
+ testMutation
104
+ });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvc3RyeWtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUnVucyBTdHJ5a2VyIG11dGF0aW9uIHRlc3Rpbmcgb24gZGVtYW5kOiBvdmVyIG5hbWVkIG1vZHVsZXMgYW5kIHRoZWlyIHNpYmxpbmcgdGVzdHMsIG9yIGluY3JlbWVudGFsbHkgb3ZlciB0aGVcbiAqIHdob2xlIHByb2plY3QuIE5ldmVyIHBhcnQgb2YgYSBnYXRlOiBhIGZ1bGwgcnVuIHRha2VzIGFib3V0IGFuIGhvdXIuXG4gKi9cblxuaW1wb3J0IHsgdG9Qb3NpeFBhdGggfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgU1RSWUtFUl9URVNUX0ZJTEVTX0VOVl9WQVJJQUJMRSB9IGZyb20gJy4vc3RyeWtlci1jb25maWcudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0ZXN0TXV0YXRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RNdXRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1vZHVsZXMgdG8gbXV0YXRlLCBhcyBwYXRocyBmcm9tIHRoZSBwcm9qZWN0IHJvb3QuIEVhY2ggbmVlZHMgYSBzaWJsaW5nIGAqLnRlc3QudHNgLCBhbmQgb25seSB0aG9zZSB0ZXN0cyBydW4uXG4gICAqIFdpdGggbm9uZSwgZXZlcnkgZmlsZSB0aGUgY29uZmlndXJhdGlvbidzIGBtdXRhdGVgIGdsb2JzIG5hbWUgaXMgbXV0YXRlZCwgaW5jcmVtZW50YWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUGF0aHM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuY29uc3QgVFNfRVhURU5TSU9OX1JFR19FWFAgPSAvXFwudHMkLztcblxuLyoqXG4gKiBSdW5zIFN0cnlrZXIgbXV0YXRpb24gdGVzdGluZy5cbiAqXG4gKiBUaGUgcnVuIG11dGF0ZXMgdGhlIHRyZWUgaW4gcGxhY2UgYW5kLCB3aGVuIGl0IGVuZHMsIHB1dHMgYmFjayB0aGUgd2hvbGUgdHJlZSBhcyBpdCB3YXMgd2hlbiBpdCBzdGFydGVkLCBzbyBpdFxuICogcmVmdXNlcyB0byBzdGFydCBvbiBhIHRyZWUgd2l0aCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBhbmQgbm90aGluZyBtYXkgYmUgZWRpdGVkIHdoaWxlIGl0IHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFRlc3RNdXRhdGlvbk9wdGlvbnN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIFN0cnlrZXIgZXhpdHMuXG4gKiBAdGhyb3dzIElmIHRoZSB0cmVlIGhhcyB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBhIHBhdGggaXMgbm90IGEgYC50c2AgbW9kdWxlLCBvciBhIG1vZHVsZSBoYXMgbm8gc2libGluZyB0ZXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdE11dGF0aW9uKG9wdGlvbnM6IFRlc3RNdXRhdGlvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtb2R1bGVQYXRocyA9IChvcHRpb25zLm1vZHVsZVBhdGhzID8/IFtdKS5tYXAoKG1vZHVsZVBhdGgpID0+IHRvUG9zaXhQYXRoKG1vZHVsZVBhdGgpKTtcbiAgY29uc3QgdGVzdEZpbGVzID0gZ2V0U2libGluZ1Rlc3RGaWxlcyhtb2R1bGVQYXRocyk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZXhlY0Zyb21Sb290KCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPWFsbCcsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgaWYgKHN0YXR1cykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNdXRhdGlvbiB0ZXN0aW5nIG5lZWRzIGEgY29tbWl0dGVkIHRyZWU6IFN0cnlrZXIgbXV0YXRlcyBpdCBpbiBwbGFjZSBhbmQgcHV0cyB0aGUgd2hvbGUgdHJlZSBiYWNrIGFzIGl0IHdhcyB3aGVuIHRoZSBydW4gc3RhcnRlZCwgc28gYW4gdW5jb21taXR0ZWQgY2hhbmdlIHdvdWxkIGJlIGxvc3QuXFxuJHtzdGF0dXN9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5Bcmd1bWVudHMgPSBtb2R1bGVQYXRocy5sZW5ndGggPiAwID8gWyctLW11dGF0ZScsIG1vZHVsZVBhdGhzLmpvaW4oJywnKV0gOiBbJy0taW5jcmVtZW50YWwnXTtcbiAgY29uc3QgZW52ID0gbW9kdWxlUGF0aHMubGVuZ3RoID4gMCA/IHsgW1NUUllLRVJfVEVTVF9GSUxFU19FTlZfVkFSSUFCTEVdOiB0ZXN0RmlsZXMuam9pbignLCcpIH0gOiB7fTtcblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdzdHJ5a2VyJyB9KSwgJ3J1bicsIC4uLnJ1bkFyZ3VtZW50c10sIHsgZW52LCBpc0ludGVyYWN0aXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIERlcml2ZXMgZWFjaCBtb2R1bGUncyBzaWJsaW5nIHRlc3QgZmlsZS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlUGF0aHMgLSBUaGUgbW9kdWxlcywgYXMgUE9TSVggcGF0aHMgZnJvbSB0aGUgcHJvamVjdCByb290LlxuICogQHJldHVybnMgVGhlIHRlc3QgZmlsZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuICogQHRocm93cyBJZiBhIHBhdGggaXMgbm90IGEgYC50c2AgbW9kdWxlLCBvciBpdHMgc2libGluZyB0ZXN0IGRvZXMgbm90IGV4aXN0LlxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5nVGVzdEZpbGVzKG1vZHVsZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcHJvYmxlbXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHRlc3RGaWxlcyA9IG1vZHVsZVBhdGhzLm1hcCgobW9kdWxlUGF0aCkgPT4ge1xuICAgIGlmICghbW9kdWxlUGF0aC5lbmRzV2l0aCgnLnRzJykgfHwgbW9kdWxlUGF0aC5lbmRzV2l0aCgnLmQudHMnKSB8fCBtb2R1bGVQYXRoLmVuZHNXaXRoKCcudGVzdC50cycpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKGAke21vZHVsZVBhdGh9OiBub3QgYSAudHMgbW9kdWxlYCk7XG4gICAgICByZXR1cm4gbW9kdWxlUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXN0RmlsZSA9IG1vZHVsZVBhdGgucmVwbGFjZShUU19FWFRFTlNJT05fUkVHX0VYUCwgJy50ZXN0LnRzJyk7XG4gICAgaWYgKCFleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogdGVzdEZpbGUgfSkpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKGAke21vZHVsZVBhdGh9OiBubyBzaWJsaW5nIHRlc3QgJHt0ZXN0RmlsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVzdEZpbGU7XG4gIH0pO1xuXG4gIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2NvcGUgdGhlIG11dGF0aW9uIHJ1bjpcXG4ke3Byb2JsZW1zLmpvaW4oJ1xcbicpfWApO1xuICB9XG5cbiAgcmV0dXJuIHRlc3RGaWxlcztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0Esa0JBQTRCO0FBQzVCLHFCQUEyQjtBQUUzQiw2QkFBbUM7QUFDbkMsa0JBR087QUFDUCw0QkFBZ0Q7QUFlaEQsTUFBTSx1QkFBdUI7QUFZN0IsZUFBc0IsYUFBYSxVQUErQixDQUFDLEdBQWtCO0FBQ25GLFFBQU0sZUFBZSxRQUFRLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBZSx5QkFBWSxVQUFVLENBQUM7QUFDM0YsUUFBTSxZQUFZLG9CQUFvQixXQUFXO0FBRWpELFFBQU0sU0FBUyxVQUFNLDBCQUFhLGdEQUFnRCxFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQ25HLE1BQUksUUFBUTtBQUNWLFVBQU0sSUFBSTtBQUFBLE1BQ1I7QUFBQSxFQUE4SyxNQUFNO0FBQUEsSUFDdEw7QUFBQSxFQUNGO0FBRUEsUUFBTSxlQUFlLFlBQVksU0FBUyxJQUFJLENBQUMsWUFBWSxZQUFZLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlO0FBQ3BHLFFBQU0sTUFBTSxZQUFZLFNBQVMsSUFBSSxFQUFFLENBQUMscURBQStCLEdBQUcsVUFBVSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFFbkcsWUFBTSwwQkFBYSxDQUFDLE9BQUcsMkNBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUMsR0FBRyxPQUFPLEdBQUcsWUFBWSxHQUFHLEVBQUUsS0FBSyxlQUFlLEtBQUssQ0FBQztBQUN2SDtBQVNBLFNBQVMsb0JBQW9CLGFBQTBDO0FBQ3JFLFFBQU0sV0FBcUIsQ0FBQztBQUM1QixRQUFNLFlBQVksWUFBWSxJQUFJLENBQUMsZUFBZTtBQUNoRCxRQUFJLENBQUMsV0FBVyxTQUFTLEtBQUssS0FBSyxXQUFXLFNBQVMsT0FBTyxLQUFLLFdBQVcsU0FBUyxVQUFVLEdBQUc7QUFDbEcsZUFBUyxLQUFLLEdBQUcsVUFBVSxvQkFBb0I7QUFDL0MsYUFBTztBQUFBLElBQ1Q7QUFFQSxVQUFNLFdBQVcsV0FBVyxRQUFRLHNCQUFzQixVQUFVO0FBQ3BFLFFBQUksS0FBQywrQkFBVyxxQ0FBd0IsRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLEdBQUc7QUFDNUQsZUFBUyxLQUFLLEdBQUcsVUFBVSxxQkFBcUIsUUFBUSxFQUFFO0FBQUEsSUFDNUQ7QUFFQSxXQUFPO0FBQUEsRUFDVCxDQUFDO0FBRUQsTUFBSSxTQUFTLFNBQVMsR0FBRztBQUN2QixVQUFNLElBQUksTUFBTTtBQUFBLEVBQW1DLFNBQVMsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUFBLEVBQzFFO0FBRUEsU0FBTztBQUNUOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,30 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Runs Stryker mutation testing on demand: over named modules and their sibling tests, or incrementally over the
6
+ * whole project. Never part of a gate: a full run takes about an hour.
7
+ */
8
+ /**
9
+ * Options for {@link testMutation}.
10
+ */
11
+ export interface TestMutationOptions {
12
+ /**
13
+ * The modules to mutate, as paths from the project root. Each needs a sibling `*.test.ts`, and only those tests run.
14
+ * With none, every file the configuration's `mutate` globs name is mutated, incrementally.
15
+ *
16
+ * @default `[]`
17
+ */
18
+ readonly modulePaths?: readonly string[];
19
+ }
20
+ /**
21
+ * Runs Stryker mutation testing.
22
+ *
23
+ * The run mutates the tree in place and, when it ends, puts back the whole tree as it was when it started, so it
24
+ * refuses to start on a tree with uncommitted changes, and nothing may be edited while it runs.
25
+ *
26
+ * @param options - The {@link TestMutationOptions}.
27
+ * @returns A {@link Promise} that resolves when Stryker exits.
28
+ * @throws If the tree has uncommitted changes, a path is not a `.ts` module, or a module has no sibling test.
29
+ */
30
+ export declare function testMutation(options?: TestMutationOptions): Promise<void>;