@mnaoumov/typescript-dev-toolkit 3.10.0 → 3.11.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.
- package/dist/lib/cjs/commitlint-config.cjs +4 -1
- package/dist/lib/cjs/commitlint-config.d.cts +2 -2
- package/dist/lib/cjs/commitlint-lint-md-header.cjs +78 -0
- package/dist/lib/cjs/commitlint-lint-md-header.d.cts +40 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/index.cjs +7 -1
- package/dist/lib/cjs/test-runners/index.d.cts +2 -0
- package/dist/lib/cjs/test-runners/stryker-config.cjs +102 -0
- package/dist/lib/cjs/test-runners/stryker-config.d.cts +60 -0
- package/dist/lib/cjs/test-runners/stryker.cjs +105 -0
- package/dist/lib/cjs/test-runners/stryker.d.cts +30 -0
- package/dist/lib/cjs/version.cjs +50 -29
- package/dist/lib/esm/commitlint-config.d.mts +2 -2
- package/dist/lib/esm/commitlint-config.mjs +7 -1
- package/dist/lib/esm/commitlint-lint-md-header.d.mts +40 -0
- package/dist/lib/esm/commitlint-lint-md-header.mjs +52 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/test-runners/index.d.mts +2 -0
- package/dist/lib/esm/test-runners/index.mjs +5 -1
- package/dist/lib/esm/test-runners/stryker-config.d.mts +60 -0
- package/dist/lib/esm/test-runners/stryker-config.mjs +63 -0
- package/dist/lib/esm/test-runners/stryker.d.mts +30 -0
- package/dist/lib/esm/test-runners/stryker.mjs +84 -0
- package/dist/lib/esm/version.mjs +50 -29
- package/package.json +12 -1
- package/test-runners/stryker/package.json +6 -0
- package/test-runners/stryker-config/package.json +6 -0
|
@@ -63,6 +63,7 @@ module.exports = __toCommonJS(commitlint_config_exports);
|
|
|
63
63
|
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
64
64
|
var import_node_module = require('node:module');
|
|
65
65
|
var import_commitlint_forbidden_patterns = require('./commitlint-forbidden-patterns.cjs');
|
|
66
|
+
var import_commitlint_lint_md_header = require('./commitlint-lint-md-header.cjs');
|
|
66
67
|
var import_commitlint_spellcheck_header = require('./commitlint-spellcheck-header.cjs');
|
|
67
68
|
var __import_meta_url = globalThis["import.meta.url"] ?? (function getCjsImportMetaUrl() {
|
|
68
69
|
if (typeof __filename === "string") {
|
|
@@ -85,11 +86,13 @@ const commitlintConfig = {
|
|
|
85
86
|
{
|
|
86
87
|
rules: {
|
|
87
88
|
...import_commitlint_forbidden_patterns.forbiddenPatternsPlugin.rules,
|
|
89
|
+
...import_commitlint_lint_md_header.lintMdHeaderPlugin.rules,
|
|
88
90
|
...import_commitlint_spellcheck_header.spellcheckHeaderPlugin.rules
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
],
|
|
92
94
|
rules: {
|
|
95
|
+
[import_commitlint_lint_md_header.LINT_MD_HEADER_RULE_NAME]: [ERROR_SEVERITY, "always"],
|
|
93
96
|
[import_commitlint_forbidden_patterns.NO_FORBIDDEN_PATTERNS_RULE_NAME]: [ERROR_SEVERITY, "always"],
|
|
94
97
|
[import_commitlint_spellcheck_header.SPELLCHECK_HEADER_RULE_NAME]: [ERROR_SEVERITY, "always"]
|
|
95
98
|
}
|
|
@@ -100,4 +103,4 @@ const obsidianDevUtilsConfig = commitlintConfig;
|
|
|
100
103
|
commitlintConfig,
|
|
101
104
|
obsidianDevUtilsConfig
|
|
102
105
|
});
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21taXRsaW50LWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoZnVuY3Rpb24gZ2V0Q2pzSW1wb3J0TWV0YVVybCgpIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHRoZSBwYWdlIFVSTCwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duLlxuICByZXR1cm4gZ2xvYmFsVGhpcy5sb2NhdGlvbj8uaHJlZiA/
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21taXRsaW50LWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoZnVuY3Rpb24gZ2V0Q2pzSW1wb3J0TWV0YVVybCgpIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHRoZSBwYWdlIFVSTCwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duLlxuICByZXR1cm4gZ2xvYmFsVGhpcy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbn0pKCk7XG4vKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbiBmb3IgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBjb21taXRsaW50LCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlQ29uZmlnU2V2ZXJpdHksXG4gIFVzZXJDb25maWdcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5cbmltcG9ydCB7XG4gIGZvcmJpZGRlblBhdHRlcm5zUGx1Z2luLFxuICBOT19GT1JCSURERU5fUEFUVEVSTlNfUlVMRV9OQU1FXG59IGZyb20gJy4vY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuaW1wb3J0IHtcbiAgTElOVF9NRF9IRUFERVJfUlVMRV9OQU1FLFxuICBsaW50TWRIZWFkZXJQbHVnaW5cbn0gZnJvbSAnLi9jb21taXRsaW50LWxpbnQtbWQtaGVhZGVyLnRzJztcbmltcG9ydCB7XG4gIFNQRUxMQ0hFQ0tfSEVBREVSX1JVTEVfTkFNRSxcbiAgc3BlbGxjaGVja0hlYWRlclBsdWdpblxufSBmcm9tICcuL2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIudHMnO1xuXG4vKlxuICogYFJ1bGVDb25maWdTZXZlcml0eS5FcnJvcmAuIFRoZSBlbnVtIGxpdmVzIGluIGEgcGFja2FnZSB0aGlzIGxpYnJhcnkgb25seSBoYXMgYXMgYSBkZXZEZXBlbmRlbmN5LCBzbyBpdHMgdmFsdWUgY2Fubm90IGJlIGltcG9ydGVkIGF0IHJ1bnRpbWUuXG4gKi9cbmNvbnN0IEVSUk9SX1NFVkVSSVRZX0xFVkVMID0gMjtcbmNvbnN0IEVSUk9SX1NFVkVSSVRZID0gY2FzdFRvPFJ1bGVDb25maWdTZXZlcml0eT4oRVJST1JfU0VWRVJJVFlfTEVWRUwpO1xuXG4vKipcbiAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsYCdzIGVudHJ5LCByZXNvbHZlZCBmcm9tIHRoaXMgbW9kdWxlLiBDb21taXRsaW50IHJlc29sdmVzIGFcbiAqIGJhcmUgYGV4dGVuZHNgIG5hbWUgZnJvbSB0aGUgY29uc3VtZXIncyB3b3JraW5nIGRpcmVjdG9yeSwgd2hpY2ggZmluZHMgdGhpcyBwYWNrYWdlJ3Mgb3duIGRlcGVuZGVuY3kgb25seSB3aGVuIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGhhcHBlbmVkIHRvIGhvaXN0IGl0OyBhbiBhYnNvbHV0ZSBwYXRoIGZpbmRzIGl0IHdoZXJldmVyIGl0IHdhcyBpbnN0YWxsZWQuXG4gKi9cbmNvbnN0IENPTkZJR19DT05WRU5USU9OQUxfUEFUSCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKCdAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsJyk7XG5cbi8qKlxuICogQ29tbWl0bGludCBjb25maWd1cmF0aW9uIGV4dGVuZGluZyBgQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbGAsIHBsdXMgYSBydWxlIHJlZnVzaW5nIGEgbWVzc2FnZSB3aG9zZVxuICogaGVhZGVyLCBib2R5IG9yIGZvb3RlciBtYXRjaGVzIHRoZSB1bnB1Ymxpc2hlZCBmb3JiaWRkZW4tcGF0dGVybnMgbGlzdCAoYSBuby1vcCB3aGVuIG5vbmUgaXMgY29uZmlndXJlZCksIGFuZFxuICogdHdvIHJ1bGVzIGNoZWNraW5nIHRoZSBoZWFkZXIgdGhlIHdheSB0aGUgcmVsZWFzZSBjaGVja3MgdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lczogYSBzcGVsbGNoZWNrIChhIG5vLW9wXG4gKiBpbiBhIHByb2plY3Qgd2l0aCBubyBgc3BlbGxjaGVja2Agc2NyaXB0KSBhbmQgYSBtYXJrZG93bmxpbnQgKGEgbm8tb3AgaW4gYSBwcm9qZWN0IHdpdGggbm8gYGxpbnQ6bWRgIHNjcmlwdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21taXRsaW50Q29uZmlnOiBVc2VyQ29uZmlnID0ge1xuICBleHRlbmRzOiBbQ09ORklHX0NPTlZFTlRJT05BTF9QQVRIXSxcbiAgLy8gT05FIHBsdWdpbiBvYmplY3QsIG5ldmVyIHR3bzogYEBjb21taXRsaW50L2xvYWRgIHN0b3JlcyBldmVyeSBpbmxpbmUgcGx1Z2luIHVuZGVyIHRoZSBzYW1lIGBsb2NhbGAga2V5LCBzbyBhXG4gIC8vIHNlY29uZCBvYmplY3Qgc2lsZW50bHkgcmVwbGFjZXMgdGhlIGZpcnN0IGFuZCBpdHMgcnVsZSB0aGVuIGZhaWxzIGFzIFwiRm91bmQgcnVsZXMgd2l0aG91dCBpbXBsZW1lbnRhdGlvblwiLlxuICBwbHVnaW5zOiBbXG4gICAge1xuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLi4uZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4ucnVsZXMsXG4gICAgICAgIC4uLmxpbnRNZEhlYWRlclBsdWdpbi5ydWxlcyxcbiAgICAgICAgLi4uc3BlbGxjaGVja0hlYWRlclBsdWdpbi5ydWxlc1xuICAgICAgfVxuICAgIH1cbiAgXSxcbiAgcnVsZXM6IHtcbiAgICBbTElOVF9NRF9IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ10sXG4gICAgW05PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVdOiBbRVJST1JfU0VWRVJJVFksICdhbHdheXMnXSxcbiAgICBbU1BFTExDSEVDS19IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ11cbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgcHJldmlvdXMgbmFtZSBvZiB7QGxpbmsgY29tbWl0bGludENvbmZpZ30uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBjb21taXRsaW50Q29uZmlnfS4gVGhpcyBhbGlhcyBpcyByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogVXNlckNvbmZpZyA9IGNvbW1pdGxpbnRDb25maWc7XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLDBCQUF1QjtBQUN2Qix5QkFBOEI7QUFFOUIsMkNBR087QUFDUCx1Q0FHTztBQUNQLDBDQUdPO0FBdkNQLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sU0FBUyxzQkFBc0I7QUFDdkYsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxVQUFNLGVBQWU7QUFDckIsVUFBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxrQkFBa0IsWUFBWTtBQUMzQyxhQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFHQSxTQUFPLFdBQVcsVUFBVSxRQUFRO0FBQ3RDLEdBQUc7QUFpQ0gsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxxQkFBaUIsNEJBQTJCLG9CQUFvQjtBQU90RSxNQUFNLCtCQUEyQixrQ0FBYyxpQkFBZSxFQUFFLFFBQVEsaUNBQWlDO0FBUWxHLE1BQU0sbUJBQStCO0FBQUEsRUFDMUMsU0FBUyxDQUFDLHdCQUF3QjtBQUFBO0FBQUE7QUFBQSxFQUdsQyxTQUFTO0FBQUEsSUFDUDtBQUFBLE1BQ0UsT0FBTztBQUFBLFFBQ0wsR0FBRyw2REFBd0I7QUFBQSxRQUMzQixHQUFHLG9EQUFtQjtBQUFBLFFBQ3RCLEdBQUcsMkRBQXVCO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsQ0FBQyx5REFBd0IsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsSUFDckQsQ0FBQyxvRUFBK0IsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsSUFDNUQsQ0FBQywrREFBMkIsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsRUFDMUQ7QUFDRjtBQU9PLE1BQU0seUJBQXFDOyIsIm5hbWVzIjpbXX0=
|
|
@@ -8,8 +8,8 @@ import type { UserConfig } from '@commitlint/types' with { 'resolution-mode': 'i
|
|
|
8
8
|
/**
|
|
9
9
|
* Commitlint configuration extending `@commitlint/config-conventional`, plus a rule refusing a message whose
|
|
10
10
|
* header, body or footer matches the unpublished forbidden-patterns list (a no-op when none is configured), and
|
|
11
|
-
*
|
|
12
|
-
* project with no `spellcheck` script).
|
|
11
|
+
* two rules checking the header the way the release checks the changelog bullet it becomes: a spellcheck (a no-op
|
|
12
|
+
* in a project with no `spellcheck` script) and a markdownlint (a no-op in a project with no `lint:md` script).
|
|
13
13
|
*/
|
|
14
14
|
export declare const commitlintConfig: UserConfig;
|
|
15
15
|
/**
|
|
@@ -0,0 +1,78 @@
|
|
|
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 __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var commitlint_lint_md_header_exports = {};
|
|
25
|
+
__export(commitlint_lint_md_header_exports, {
|
|
26
|
+
LINT_MD_HEADER_RULE_NAME: () => LINT_MD_HEADER_RULE_NAME,
|
|
27
|
+
lintMdHeaderPlugin: () => lintMdHeaderPlugin,
|
|
28
|
+
lintMdHeaderRule: () => lintMdHeaderRule
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(commitlint_lint_md_header_exports);
|
|
31
|
+
var import_markdownlint_content = require('./linters/markdownlint-content.cjs');
|
|
32
|
+
var import_npm = require('./npm.cjs');
|
|
33
|
+
var import_repo_paths = require('./repo-paths.cjs');
|
|
34
|
+
var import_root = require('./root.cjs');
|
|
35
|
+
var import_version = require('./version.cjs');
|
|
36
|
+
const LINT_MD_HEADER_RULE_NAME = "typescript-dev-toolkit/lint-md-header";
|
|
37
|
+
const LINT_MD_SCRIPT_NAME = "lint:md";
|
|
38
|
+
const FALLBACK_VERSION = "0.0.0";
|
|
39
|
+
async function lintMdHeaderRule(commit) {
|
|
40
|
+
if (!commit.header) {
|
|
41
|
+
return [true];
|
|
42
|
+
}
|
|
43
|
+
const packageJson = await (0, import_npm.readPackageJson)();
|
|
44
|
+
if (!Object.keys(packageJson.scripts ?? {}).includes(LINT_MD_SCRIPT_NAME)) {
|
|
45
|
+
return [true];
|
|
46
|
+
}
|
|
47
|
+
const version = packageJson.version ?? FALLBACK_VERSION;
|
|
48
|
+
const findings = await (0, import_markdownlint_content.lintMarkdownContent)({
|
|
49
|
+
content: `# CHANGELOG
|
|
50
|
+
|
|
51
|
+
## ${version}
|
|
52
|
+
|
|
53
|
+
- ${(0, import_version.autolinkBareUrls)(commit.header)}
|
|
54
|
+
`,
|
|
55
|
+
filePath: (0, import_root.resolvePathFromRootSafe)({ path: import_repo_paths.RepoPaths.ChangelogMd })
|
|
56
|
+
});
|
|
57
|
+
if (findings.length === 0) {
|
|
58
|
+
return [true];
|
|
59
|
+
}
|
|
60
|
+
return [
|
|
61
|
+
false,
|
|
62
|
+
`the header does not pass \`${LINT_MD_SCRIPT_NAME}\`, and it ships verbatim into the next release's changelog:
|
|
63
|
+
${findings.join("\n")}
|
|
64
|
+
Reword it so the changelog bullet it becomes passes the project's markdownlint configuration.`
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
const lintMdHeaderPlugin = {
|
|
68
|
+
rules: {
|
|
69
|
+
[LINT_MD_HEADER_RULE_NAME]: lintMdHeaderRule
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
73
|
+
0 && (module.exports = {
|
|
74
|
+
LINT_MD_HEADER_RULE_NAME,
|
|
75
|
+
lintMdHeaderPlugin,
|
|
76
|
+
lintMdHeaderRule
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGNvbW1pdGxpbnQgcnVsZSB0aGF0IGxpbnRzIGEgY29tbWl0IEhFQURFUiB3aXRoIHRoZSBwcm9qZWN0J3Mgb3duIGBsaW50Om1kYCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoZSBoZWFkZXIgaXMgdGhlIG9uZSBwYXJ0IG9mIGEgY29tbWl0IG1lc3NhZ2UgdGhhdCBzaGlwcyB2ZXJiYXRpbTogYSByZWxlYXNlIHR1cm5zIGV2ZXJ5IGNvbW1pdCBzdWJqZWN0XG4gKiBzaW5jZSB0aGUgbGFzdCB0YWcgaW50byBhIGAtIDxzdWJqZWN0PmAgYnVsbGV0IG9mIHRoZSBuZXcgYENIQU5HRUxPRy5tZGAgc2VjdGlvbiwgYW5kIGxpbnRzIHRoYXQgc2VjdGlvbiB3aXRoXG4gKiBgbGludDptZGAgYmVmb3JlIHdyaXRpbmcgaXQuIFRoYXQgY2hlY2sgcnVucyBhdCByZWxlYXNlIHRpbWUsIGFmdGVyIHRoZSB3aG9sZSBwcmVmbGlnaHQgZ2F0ZSwgYW5kIHdlZWtzIGFmdGVyXG4gKiB0aGUgc3ViamVjdCB3YXMgcHVzaGVkOiBhIHJlbGVhc2Ugb25jZSBwYXNzZWQgaXRzIDI1LW1pbnV0ZSBwcmVmbGlnaHQgYW5kIHdhcyB0aGVuIHJlZnVzZWQgYmVjYXVzZSBhIGN1c3RvbVxuICogcnVsZSBmbGFnZ2VkIGEgcGx1Z2luIG5hbWUgaW4gYSBwdXNoZWQgYGRvY3MocmVhZG1lKTpgIHN1YmplY3QuIEEgcHVzaGVkIHN1YmplY3QgY2Fubm90IGJlIGNoYW5nZWQsIHNvIHRoZVxuICogcmVsZWFzZSBoYWQgdG8gYmUgcmUtcnVuIHdpdGggaGFuZC13cml0dGVuIG5vdGVzLiBUaGUgY29tbWl0LW1zZyBob29rIGlzIHRoZSBsYXN0IHBvaW50IGF0IHdoaWNoIHRoZSBzdWJqZWN0XG4gKiBjYW4gc3RpbGwgYmUgY2hhbmdlZCBmb3IgZnJlZS5cbiAqXG4gKiBUaGUgaGVhZGVyIGlzIGNoZWNrZWQgQVMgdGhlIHNlY3Rpb24gdGhlIHJlbGVhc2Ugd291bGQgYnVpbGQgZnJvbSBpdCwgYXR0cmlidXRlZCB0byBgQ0hBTkdFTE9HLm1kYCwgc28gdGhlXG4gKiB2ZXJkaWN0IGlzIHRoZSBvbmUgdGhlIHJlbGVhc2Ugd291bGQgZ2l2ZTogdGhlIHNhbWUgY29uZmlndXJhdGlvbiwgdGhlIHNhbWUgY3VzdG9tIHJ1bGVzLCBhbmQgYmFyZSBVUkxzXG4gKiBhdXRvbGlua2VkIHRoZSB3YXkgdGhlIHJlbGVhc2UgYXV0b2xpbmtzIHRoZW0uIEl0IHJ1bnMgb25seSB3aGVyZSB0aGUgcHJvamVjdCBkZWZpbmVzIGEgYGxpbnQ6bWRgIHNjcmlwdCxcbiAqIHdoaWNoIGlzIHRoZSBjb25kaXRpb24gdGhlIHJlbGVhc2UgYXBwbGllcyB0b28uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBc3luY1J1bGUsXG4gIFBsdWdpbixcbiAgUnVsZU91dGNvbWVcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBsaW50TWFya2Rvd25Db250ZW50IH0gZnJvbSAnLi9saW50ZXJzL21hcmtkb3dubGludC1jb250ZW50LnRzJztcbmltcG9ydCB7IHJlYWRQYWNrYWdlSnNvbiB9IGZyb20gJy4vbnBtLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290U2FmZSB9IGZyb20gJy4vcm9vdC50cyc7XG5pbXBvcnQgeyBhdXRvbGlua0JhcmVVcmxzIH0gZnJvbSAnLi92ZXJzaW9uLnRzJztcblxuLyoqXG4gKiBUaGUgbmFtZSB0aGUgcnVsZSBpcyByZWdpc3RlcmVkIHVuZGVyLlxuICovXG5leHBvcnQgY29uc3QgTElOVF9NRF9IRUFERVJfUlVMRV9OQU1FID0gJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbGludC1tZC1oZWFkZXInO1xuXG4vKipcbiAqIFRoZSBucG0gc2NyaXB0IHdob3NlIHByZXNlbmNlIG9wdHMgYSBwcm9qZWN0IGludG8gdGhlIGNoZWNrLlxuICovXG5jb25zdCBMSU5UX01EX1NDUklQVF9OQU1FID0gJ2xpbnQ6bWQnO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIHRoZSBzZWN0aW9uIGhlYWRpbmcgbmFtZXMgd2hlbiBgcGFja2FnZS5qc29uYCBoYXMgbm9uZS4gTWFya2Rvd25saW50IHJlYWRzIGl0IGFzIGFueSBoZWFkaW5nIHRleHQuXG4gKi9cbmNvbnN0IEZBTExCQUNLX1ZFUlNJT04gPSAnMC4wLjAnO1xuXG50eXBlIENvbW1pdCA9IFBhcmFtZXRlcnM8QXN5bmNSdWxlPlswXTtcblxuLyoqXG4gKiBMaW50cyB0aGUgY29tbWl0IGhlYWRlciBhcyB0aGUgY2hhbmdlbG9nIHNlY3Rpb24gdGhlIHJlbGVhc2Ugd291bGQgYnVpbGQgZnJvbSBpdC5cbiAqXG4gKiBPbmx5IHRoZSBgYWx3YXlzYCBjb25kaXRpb24gaXMgbWVhbmluZ2Z1bDogYG5ldmVyYCB3b3VsZCByZXF1aXJlIHRoZSBoZWFkZXIgdG8gZmFpbCBgbGludDptZGAsIHNvIGl0IGlzXG4gKiB0cmVhdGVkIHRoZSBzYW1lIHdheSByYXRoZXIgdGhhbiBpbnZlcnRlZC5cbiAqXG4gKiBAcGFyYW0gY29tbWl0IC0gVGhlIHBhcnNlZCBjb21taXQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBydWxlIG91dGNvbWUsIG5hbWluZyBlYWNoIGZpbmRpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW50TWRIZWFkZXJSdWxlKGNvbW1pdDogQ29tbWl0KTogUHJvbWlzZTxSdWxlT3V0Y29tZT4ge1xuICBpZiAoIWNvbW1pdC5oZWFkZXIpIHtcbiAgICByZXR1cm4gW3RydWVdO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24oKTtcbiAgaWYgKCFPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5zY3JpcHRzID8/IHt9KS5pbmNsdWRlcyhMSU5UX01EX1NDUklQVF9OQU1FKSkge1xuICAgIHJldHVybiBbdHJ1ZV07XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gcGFja2FnZUpzb24udmVyc2lvbiA/PyBGQUxMQkFDS19WRVJTSU9OO1xuICBjb25zdCBmaW5kaW5ncyA9IGF3YWl0IGxpbnRNYXJrZG93bkNvbnRlbnQoe1xuICAgIGNvbnRlbnQ6IGAjIENIQU5HRUxPR1xcblxcbiMjICR7dmVyc2lvbn1cXG5cXG4tICR7YXV0b2xpbmtCYXJlVXJscyhjb21taXQuaGVhZGVyKX1cXG5gLFxuICAgIGZpbGVQYXRoOiByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IFJlcG9QYXRocy5DaGFuZ2Vsb2dNZCB9KVxuICB9KTtcblxuICBpZiAoZmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFt0cnVlXTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgZmFsc2UsXG4gICAgYHRoZSBoZWFkZXIgZG9lcyBub3QgcGFzcyBcXGAke0xJTlRfTURfU0NSSVBUX05BTUV9XFxgLCBhbmQgaXQgc2hpcHMgdmVyYmF0aW0gaW50byB0aGUgbmV4dCByZWxlYXNlJ3MgY2hhbmdlbG9nOlxcbmBcbiAgICArIGAke2ZpbmRpbmdzLmpvaW4oJ1xcbicpfVxcbmBcbiAgICArICdSZXdvcmQgaXQgc28gdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lcyBwYXNzZXMgdGhlIHByb2plY3RcXCdzIG1hcmtkb3dubGludCBjb25maWd1cmF0aW9uLidcbiAgXTtcbn1cblxuLyoqXG4gKiBUaGUgY29tbWl0bGludCBwbHVnaW4gY2Fycnlpbmcge0BsaW5rIGxpbnRNZEhlYWRlclJ1bGV9LlxuICovXG5leHBvcnQgY29uc3QgbGludE1kSGVhZGVyUGx1Z2luOiBQbHVnaW4gPSB7XG4gIHJ1bGVzOiB7XG4gICAgW0xJTlRfTURfSEVBREVSX1JVTEVfTkFNRV06IGxpbnRNZEhlYWRlclJ1bGVcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsa0NBQW9DO0FBQ3BDLGlCQUFnQztBQUNoQyx3QkFBMEI7QUFDMUIsa0JBQXdDO0FBQ3hDLHFCQUFpQztBQUsxQixNQUFNLDJCQUEyQjtBQUt4QyxNQUFNLHNCQUFzQjtBQUs1QixNQUFNLG1CQUFtQjtBQWF6QixlQUFzQixpQkFBaUIsUUFBc0M7QUFDM0UsTUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNsQixXQUFPLENBQUMsSUFBSTtBQUFBLEVBQ2Q7QUFFQSxRQUFNLGNBQWMsVUFBTSw0QkFBZ0I7QUFDMUMsTUFBSSxDQUFDLE9BQU8sS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxtQkFBbUIsR0FBRztBQUN6RSxXQUFPLENBQUMsSUFBSTtBQUFBLEVBQ2Q7QUFFQSxRQUFNLFVBQVUsWUFBWSxXQUFXO0FBQ3ZDLFFBQU0sV0FBVyxVQUFNLGlEQUFvQjtBQUFBLElBQ3pDLFNBQVM7QUFBQTtBQUFBLEtBQXFCLE9BQU87QUFBQTtBQUFBLFFBQVMsaUNBQWlCLE9BQU8sTUFBTSxDQUFDO0FBQUE7QUFBQSxJQUM3RSxjQUFVLHFDQUF3QixFQUFFLE1BQU0sNEJBQVUsWUFBWSxDQUFDO0FBQUEsRUFDbkUsQ0FBQztBQUVELE1BQUksU0FBUyxXQUFXLEdBQUc7QUFDekIsV0FBTyxDQUFDLElBQUk7QUFBQSxFQUNkO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLDhCQUE4QixtQkFBbUI7QUFBQSxFQUM1QyxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQUE7QUFBQSxFQUUxQjtBQUNGO0FBS08sTUFBTSxxQkFBNkI7QUFBQSxFQUN4QyxPQUFPO0FBQUEsSUFDTCxDQUFDLHdCQUF3QixHQUFHO0FBQUEsRUFDOUI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* A commitlint rule that lints a commit HEADER with the project's own `lint:md` configuration.
|
|
6
|
+
*
|
|
7
|
+
* The header is the one part of a commit message that ships verbatim: a release turns every commit subject
|
|
8
|
+
* since the last tag into a `- <subject>` bullet of the new `CHANGELOG.md` section, and lints that section with
|
|
9
|
+
* `lint:md` before writing it. That check runs at release time, after the whole preflight gate, and weeks after
|
|
10
|
+
* the subject was pushed: a release once passed its 25-minute preflight and was then refused because a custom
|
|
11
|
+
* rule flagged a plugin name in a pushed `docs(readme):` subject. A pushed subject cannot be changed, so the
|
|
12
|
+
* release had to be re-run with hand-written notes. The commit-msg hook is the last point at which the subject
|
|
13
|
+
* can still be changed for free.
|
|
14
|
+
*
|
|
15
|
+
* The header is checked AS the section the release would build from it, attributed to `CHANGELOG.md`, so the
|
|
16
|
+
* verdict is the one the release would give: the same configuration, the same custom rules, and bare URLs
|
|
17
|
+
* autolinked the way the release autolinks them. It runs only where the project defines a `lint:md` script,
|
|
18
|
+
* which is the condition the release applies too.
|
|
19
|
+
*/
|
|
20
|
+
import type { AsyncRule, Plugin, RuleOutcome } from '@commitlint/types' with { 'resolution-mode': 'import' };
|
|
21
|
+
/**
|
|
22
|
+
* The name the rule is registered under.
|
|
23
|
+
*/
|
|
24
|
+
export declare const LINT_MD_HEADER_RULE_NAME = "typescript-dev-toolkit/lint-md-header";
|
|
25
|
+
type Commit = Parameters<AsyncRule>[0];
|
|
26
|
+
/**
|
|
27
|
+
* Lints the commit header as the changelog section the release would build from it.
|
|
28
|
+
*
|
|
29
|
+
* Only the `always` condition is meaningful: `never` would require the header to fail `lint:md`, so it is
|
|
30
|
+
* treated the same way rather than inverted.
|
|
31
|
+
*
|
|
32
|
+
* @param commit - The parsed commit.
|
|
33
|
+
* @returns A {@link Promise} that resolves to the rule outcome, naming each finding.
|
|
34
|
+
*/
|
|
35
|
+
export declare function lintMdHeaderRule(commit: Commit): Promise<RuleOutcome>;
|
|
36
|
+
/**
|
|
37
|
+
* The commitlint plugin carrying {@link lintMdHeaderRule}.
|
|
38
|
+
*/
|
|
39
|
+
export declare const lintMdHeaderPlugin: Plugin;
|
|
40
|
+
export {};
|
package/dist/lib/cjs/index.cjs
CHANGED
|
@@ -40,6 +40,7 @@ __export(index_exports, {
|
|
|
40
40
|
"code-generator": () => code_generator,
|
|
41
41
|
"commitlint-config": () => commitlint_config,
|
|
42
42
|
"commitlint-forbidden-patterns": () => commitlint_forbidden_patterns,
|
|
43
|
+
"commitlint-lint-md-header": () => commitlint_lint_md_header,
|
|
43
44
|
"commitlint-spellcheck-header": () => commitlint_spellcheck_header,
|
|
44
45
|
"docs-site": () => docs_site,
|
|
45
46
|
"env-toggle": () => env_toggle,
|
|
@@ -77,6 +78,7 @@ var cli_utils = __toESM(((module) => module && module.__esModule && 'default' in
|
|
|
77
78
|
var code_generator = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./code-generator.cjs')), 1);
|
|
78
79
|
var commitlint_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./commitlint-config.cjs')), 1);
|
|
79
80
|
var commitlint_forbidden_patterns = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./commitlint-forbidden-patterns.cjs')), 1);
|
|
81
|
+
var commitlint_lint_md_header = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./commitlint-lint-md-header.cjs')), 1);
|
|
80
82
|
var commitlint_spellcheck_header = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./commitlint-spellcheck-header.cjs')), 1);
|
|
81
83
|
var docs_site = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./docs-site/index.cjs')), 1);
|
|
82
84
|
var env_toggle = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./env-toggle.cjs')), 1);
|
|
@@ -114,6 +116,7 @@ var version = __toESM(((module) => module && module.__esModule && 'default' in m
|
|
|
114
116
|
"code-generator": null,
|
|
115
117
|
"commitlint-config": null,
|
|
116
118
|
"commitlint-forbidden-patterns": null,
|
|
119
|
+
"commitlint-lint-md-header": null,
|
|
117
120
|
"commitlint-spellcheck-header": null,
|
|
118
121
|
"docs-site": null,
|
|
119
122
|
"env-toggle": null,
|
|
@@ -143,4 +146,4 @@ var version = __toESM(((module) => module && module.__esModule && 'default' in m
|
|
|
143
146
|
"validate-dependencies": null,
|
|
144
147
|
version
|
|
145
148
|
});
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidW5kbGVycycgZnJvbSAnLi9idW5kbGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1zaXRlJyBmcm9tICcuL2RvY3Mtc2l0ZS9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZW52LXRvZ2dsZScgZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmV4cG9ydCAqIGFzICdleGVjJyBmcm9tICcuL2V4ZWMudHMnO1xuZXhwb3J0ICogYXMgJ2ZvcmJpZGRlbi1wYXR0ZXJucycgZnJvbSAnLi9mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2Zvcm1hdHRlcnMnIGZyb20gJy4vZm9ybWF0dGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZnMnIGZyb20gJy4vZnMudHMnO1xuZXhwb3J0ICogYXMgJ2dhdGUnIGZyb20gJy4vZ2F0ZS50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5LWJ1aWxkJyBmcm9tICcuL2xpYnJhcnktYnVpbGQudHMnO1xuZXhwb3J0ICogYXMgJ2xpbnRlcnMnIGZyb20gJy4vbGludGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbmFuby1zdGFnZWQtY29uZmlnJyBmcm9tICcuL25hbm8tc3RhZ2VkLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXB1Ymxpc2gnIGZyb20gJy4vbnBtLXB1Ymxpc2gudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1ydW4nIGZyb20gJy4vbnBtLXJ1bi50cyc7XG5leHBvcnQgKiBhcyAnbnBtJyBmcm9tICcuL25wbS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1sb2NrLWludGVncml0eScgZnJvbSAnLi9wYWNrYWdlLWxvY2staW50ZWdyaXR5LnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLW1hbmFnZXInIGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdyZWxlYXNlZC1pc3N1ZXMnIGZyb20gJy4vcmVsZWFzZWQtaXNzdWVzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLXBhdGhzJyBmcm9tICcuL3JlcG8tcGF0aHMudHMnO1xuZXhwb3J0ICogYXMgJ3Jvb3QnIGZyb20gJy4vcm9vdC50cyc7XG5leHBvcnQgKiBhcyAnc2hhcmVkLWNvbmZpZy1maWxlcycgZnJvbSAnLi9zaGFyZWQtY29uZmlnLWZpbGVzLnRzJztcbmV4cG9ydCAqIGFzICd0ZXN0LXJ1bm5lcnMnIGZyb20gJy4vdGVzdC1ydW5uZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jLWNsaScgZnJvbSAnLi91cHN0cmVhbS1zeW5jLWNsaS50cyc7XG5leHBvcnQgKiBhcyAndXBzdHJlYW0tc3luYycgZnJvbSAnLi91cHN0cmVhbS1zeW5jLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnIGZyb20gJy4vdmFsaWRhdGUtZGVjbGFyYXRpb25zLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZXBlbmRlbmNpZXMnIGZyb20gJy4vdmFsaWRhdGUtZGVwZW5kZW5jaWVzLnRzJztcbmV4cG9ydCAqIGFzICd2ZXJzaW9uJyBmcm9tICcuL3ZlcnNpb24udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBQUE7QUFBQSxFQUFBLG1CQUFBQztBQUFBLEVBQUEsd0JBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBLHVDQUFBQztBQUFBLEVBQUEsbUNBQUFDO0FBQUEsRUFBQSxzQ0FBQUM7QUFBQSxFQUFBLG1CQUFBQztBQUFBLEVBQUEsb0JBQUFDO0FBQUEsRUFBQTtBQUFBLDhCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHlCQUFBQztBQUFBLEVBQUE7QUFBQSw4QkFBQUM7QUFBQSxFQUFBO0FBQUEsdUJBQUFDO0FBQUEsRUFBQSxpQkFBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEseUJBQUFDO0FBQUEsRUFBQSx5QkFBQUM7QUFBQSxFQUFBLG9CQUFBQztBQUFBLEVBQUE7QUFBQSwrQkFBQUM7QUFBQSxFQUFBLHNCQUFBQztBQUFBLEVBQUEsdUJBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBLCtCQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFFQSxZQUF5QjtBQUN6QixlQUE0QjtBQUM1QixJQUFBdkIsc0JBQXVDO0FBQ3ZDLElBQUFDLFlBQTZCO0FBQzdCLElBQUFDLGlCQUFrQztBQUNsQyxJQUFBQyxvQkFBcUM7QUFDckMsSUFBQUMsZ0NBQWlEO0FBQ2pELElBQUFDLDRCQUE2QztBQUM3QyxJQUFBQywrQkFBZ0Q7QUFDaEQsSUFBQUMsWUFBNkI7QUFDN0IsSUFBQUMsYUFBOEI7QUFDOUIsV0FBd0I7QUFDeEIsSUFBQUMscUJBQXNDO0FBQ3RDLGlCQUE4QjtBQUM5QixTQUFzQjtBQUN0QixXQUF3QjtBQUN4QixVQUF1QjtBQUN2QixXQUF3QjtBQUN4QixJQUFBQyxnQkFBaUM7QUFDakMsY0FBMkI7QUFDM0IsSUFBQUMscUJBQXNDO0FBQ3RDLElBQUFDLGNBQStCO0FBQy9CLElBQUFDLFVBQTJCO0FBQzNCLFVBQXVCO0FBQ3ZCLElBQUFDLHlCQUEwQztBQUMxQyxJQUFBQyxrQkFBbUM7QUFDbkMsSUFBQUMsa0JBQW1DO0FBQ25DLElBQUFDLGFBQThCO0FBQzlCLFdBQXdCO0FBQ3hCLElBQUFDLHNCQUF1QztBQUN2QyxJQUFBQyxlQUFnQztBQUNoQyxJQUFBRSxvQkFBcUM7QUFDckMsSUFBQUQsZ0JBQWlDO0FBQ2pDLElBQUFFLHdCQUF5QztBQUN6QyxJQUFBQyx3QkFBeUM7QUFDekMsY0FBMkI7IiwKICAibmFtZXMiOiBbImNoZWNrLXByb2plY3QtdHlwZXMiLCAiY2xpLXV0aWxzIiwgImNvZGUtZ2VuZXJhdG9yIiwgImNvbW1pdGxpbnQtY29uZmlnIiwgImNvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zIiwgImNvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIiLCAiY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlciIsICJkb2NzLXNpdGUiLCAiZW52LXRvZ2dsZSIsICJmb3JiaWRkZW4tcGF0dGVybnMiLCAibGlicmFyeS1idWlsZCIsICJuYW5vLXN0YWdlZC1jb25maWciLCAibnBtLXB1Ymxpc2giLCAibnBtLXJ1biIsICJwYWNrYWdlLWxvY2staW50ZWdyaXR5IiwgInBhY2thZ2UtbWFuYWdlciIsICJyZWxlYXNlZC1pc3N1ZXMiLCAicmVwby1wYXRocyIsICJzaGFyZWQtY29uZmlnLWZpbGVzIiwgInRlc3QtcnVubmVycyIsICJ1cHN0cmVhbS1zeW5jIiwgInVwc3RyZWFtLXN5bmMtY2xpIiwgInZhbGlkYXRlLWRlY2xhcmF0aW9ucyIsICJ2YWxpZGF0ZS1kZXBlbmRlbmNpZXMiXQp9Cg==
|
package/dist/lib/cjs/index.d.cts
CHANGED
|
@@ -10,6 +10,7 @@ export * as 'cli-utils' from './cli-utils.cjs';
|
|
|
10
10
|
export * as 'code-generator' from './code-generator.cjs';
|
|
11
11
|
export * as 'commitlint-config' from './commitlint-config.cjs';
|
|
12
12
|
export * as 'commitlint-forbidden-patterns' from './commitlint-forbidden-patterns.cjs';
|
|
13
|
+
export * as 'commitlint-lint-md-header' from './commitlint-lint-md-header.cjs';
|
|
13
14
|
export * as 'commitlint-spellcheck-header' from './commitlint-spellcheck-header.cjs';
|
|
14
15
|
export * as 'docs-site' from './docs-site/index.cjs';
|
|
15
16
|
export * as 'env-toggle' from './env-toggle.cjs';
|
|
@@ -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,
|
|
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>;
|