@systemfsoftware/stryker-js 10.1.2 → 11.0.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 (34) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +34 -26
  3. package/dist/Run.schema-B_qdjbe9.mjs +226 -0
  4. package/dist/{Run.schema-BsSOfQnD.d.mts → Run.schema-CUpTIyrj.d.mts} +91 -19
  5. package/dist/RunEnvironment.service-zgwzyXpO.d.mts +456 -0
  6. package/dist/config.d.mts +6 -22
  7. package/dist/config.mjs +2 -7
  8. package/dist/dist-ClUhPgb6.mjs +8020 -0
  9. package/dist/{dist-CjdAPjrJ.mjs → dist-DKhCurgc.mjs} +95 -1
  10. package/dist/events.d.mts +2 -2
  11. package/dist/events.mjs +2 -2
  12. package/dist/index-CMCCQdTd.d.mts +4087 -0
  13. package/dist/index.d.mts +1084 -3319
  14. package/dist/index.mjs +116 -3
  15. package/dist/main.mjs +114232 -86470
  16. package/dist/promises.d.mts +4 -4
  17. package/dist/promises.mjs +6 -10
  18. package/dist/{rolldown-runtime-XITHOX9H.mjs → rolldown-runtime-8H4AJuhK.mjs} +1 -2
  19. package/dist/run-stages.cell-CPpkn7og.mjs +8639 -0
  20. package/dist/stryker-config.schema-CCnDtVuW.mjs +82 -0
  21. package/dist/stryker-config.schema-lr7GMjpY.d.mts +35 -0
  22. package/package.json +33 -48
  23. package/dist/Run.schema-57k1klOe.mjs +0 -8785
  24. package/dist/compiler-BTpMWGqK.mjs +0 -48955
  25. package/dist/compiler-CEwQzMxZ.mjs +0 -48955
  26. package/dist/dist-Cpq7Esc3.mjs +0 -17404
  27. package/dist/dist-Dmv1WEP8.mjs +0 -5337
  28. package/dist/dist-DsmXFb2_.mjs +0 -17404
  29. package/dist/index-CogNSD0V.d.mts +0 -1214
  30. package/dist/merge-config-CHZWyvVQ.mjs +0 -19
  31. package/dist/mutation-test.cell-DS86DvC9.d.mts +0 -1757
  32. package/dist/output-mode-CfGHDpi5.d.mts +0 -17
  33. package/dist/sourcemap-codec-qFD3eFBj.mjs +0 -186
  34. package/dist/src-jn0C-9I0.mjs +0 -6558
@@ -0,0 +1,82 @@
1
+ import { n as Options_exports } from "./dist-ClUhPgb6.mjs";
2
+ import * as Match from "effect/Match";
3
+ import * as Option from "effect/Option";
4
+ import * as Predicate from "effect/Predicate";
5
+ import * as S from "effect/Schema";
6
+ import * as Effect from "effect/Effect";
7
+ import { dual } from "effect/Function";
8
+ import * as Record from "effect/Record";
9
+ //#region src/config/stryker-config.schema.ts
10
+ /**
11
+ * Whether an entry takes part in a merge: a key literally named `__proto__` never does — the
12
+ * merged record must not gain a document-decided prototype — and an explicitly `undefined`
13
+ * value states that the author left the key unset, not that they want it set to nothing.
14
+ */
15
+ const usable = (value, key) => key !== "__proto__" && value !== void 0;
16
+ const usableEntries = (source) => Record.filter(source, usable);
17
+ const isConfigRecord = (value) => Predicate.isObject(value);
18
+ const asConfigRecord = (value) => Option.filter(Option.fromUndefinedOr(value), isConfigRecord);
19
+ const mergeNested = (base, override) => Option.match(asConfigRecord(override), {
20
+ onNone: () => override,
21
+ onSome: (overrideRecord) => mergeRecords(base, overrideRecord)
22
+ });
23
+ const hasUsableMember = (key) => (merged) => merged.hasOwnProperty(key) && merged[key] !== void 0;
24
+ const ownValueOf = (merged, key) => Option.map(Option.liftPredicate(merged, hasUsableMember(key)), (present) => present[key]);
25
+ const baseRecordOf = (ownValue) => Option.filter(Option.flatMap(ownValue, Option.fromUndefinedOr), isConfigRecord);
26
+ const mergeKeyInto = (merged, override, key) => ({
27
+ ...merged,
28
+ [key]: Option.match(baseRecordOf(ownValueOf(merged, key)), {
29
+ onNone: () => override,
30
+ onSome: (baseRecord) => mergeNested(baseRecord, override)
31
+ })
32
+ });
33
+ const mergeRecords = (base, overrides) => Record.reduce(usableEntries(overrides), usableEntries(base), mergeKeyInto);
34
+ S.Struct({
35
+ command: S.Literals(["run", "merge-reports"]),
36
+ isDryRun: S.Boolean,
37
+ mode: S.Literals(["human", "machine"]),
38
+ isCi: S.Boolean
39
+ });
40
+ const isNonNullObject = (value) => typeof value === "object" && value !== null;
41
+ const isRecordValue = (value) => isNonNullObject(value) && Array.isArray(value) === false;
42
+ const isArrayValue = (value) => Array.isArray(value);
43
+ const freezeArrayValue = (value) => Object.freeze(value.map((element) => deepFreeze(element)));
44
+ const freezeMapEntry = ([entryKey, entryValue]) => [deepFreeze(entryKey), deepFreeze(entryValue)];
45
+ const freezeMapValue = (value) => Object.freeze(new Map([...value.entries()].map(freezeMapEntry)));
46
+ const freezeSetValue = (value) => Object.freeze(new Set([...value.values()].map((element) => deepFreeze(element))));
47
+ const freezeRegExpValue = (value) => Object.freeze(value);
48
+ const freezeRecordValue = (value) => Object.freeze(Record.map(value, (propertyValue) => deepFreeze(propertyValue)));
49
+ function deepFreeze(target) {
50
+ return Match.value(target).pipe(Match.when(isArrayValue, freezeArrayValue), Match.when((value) => value instanceof Map, freezeMapValue), Match.when((value) => value instanceof RegExp, freezeRegExpValue), Match.when((value) => value instanceof Set, freezeSetValue), Match.when(isRecordValue, freezeRecordValue), Match.orElse(() => target));
51
+ }
52
+ const configFileNames = (extensions) => extensions.map((extension) => `stryker.config${extension}`);
53
+ const CONFIG_FILE_NAMES = Object.freeze(configFileNames([
54
+ ".ts",
55
+ ".mts",
56
+ ".js",
57
+ ".mjs"
58
+ ]));
59
+ const CONFIG_SYNTAX_HELP = `
60
+ Example of how a config file should look:
61
+ /**
62
+ * @type {import('@systemfsoftware/stryker-js-plugin-interface').StrykerOptions}
63
+ */
64
+ export default {
65
+ mutate: ['src/**/*.js'],
66
+ testRunner: 'vitest',
67
+ reporters: ['progress', 'clear-text', 'html'],
68
+ concurrency: 4
69
+ };
70
+ See https://stryker-mutator.io/docs/stryker-js/config-file for more information.`.trim();
71
+ var StrykerConfig = class StrykerConfig extends S.Class("StrykerConfig")({ entries: S.Record(S.String, S.Unknown) }) {
72
+ static define(config) {
73
+ return config;
74
+ }
75
+ static merge = dual(2, (defaults, overrides) => mergeRecords(defaults, overrides));
76
+ static createDefaultOptions = S.decodeEffect(Options_exports.StrykerOptionsSchema)({}).pipe(Effect.orDie);
77
+ static defaultOptions = Effect.map(StrykerConfig.createDefaultOptions, (options) => deepFreeze(options));
78
+ static supportedFileNames = CONFIG_FILE_NAMES;
79
+ static syntaxHelp = CONFIG_SYNTAX_HELP;
80
+ };
81
+ //#endregion
82
+ export { StrykerConfig as t };
@@ -0,0 +1,35 @@
1
+ import { n as mod_d_exports$2 } from "./index-CMCCQdTd.mjs";
2
+ import * as S from "effect/Schema";
3
+ import * as Effect from "effect/Effect";
4
+ //#region src/config/stryker-config.schema.d.ts
5
+ type Primitive = boolean | number | string | null | undefined;
6
+ type ImmutablePrimitive = Primitive | ((...args: never[]) => void);
7
+ type Immutable<T> = T extends ImmutablePrimitive ? T : T extends Array<infer U> ? ReadonlyArray<Immutable<U>> : T extends Map<infer K, infer V> ? ReadonlyMap<Immutable<K>, Immutable<V>> : T extends Set<infer M> ? ReadonlySet<Immutable<M>> : T extends RegExp ? Readonly<RegExp> : { readonly [K in keyof T]: Immutable<T[K]>; };
8
+ declare const ConfigEnvSchema: S.Struct<{
9
+ readonly command: S.Literals<readonly ["run", "merge-reports"]>;
10
+ readonly isDryRun: S.Boolean;
11
+ readonly mode: S.Literals<readonly ["human", "machine"]>;
12
+ readonly isCi: S.Boolean;
13
+ }>;
14
+ type ConfigEnv = typeof ConfigEnvSchema.Type;
15
+ type StrykerConfigFn = (env: ConfigEnv) => mod_d_exports$2.PartialStrykerOptions | Promise<mod_d_exports$2.PartialStrykerOptions>;
16
+ type StrykerConfigExport = mod_d_exports$2.PartialStrykerOptions | Promise<mod_d_exports$2.PartialStrykerOptions> | StrykerConfigFn;
17
+ declare const StrykerConfig_base: S.Class<StrykerConfig, S.Struct<{
18
+ readonly entries: S.$Record<S.String, S.Unknown>;
19
+ }>, {}>;
20
+ declare class StrykerConfig extends StrykerConfig_base {
21
+ static define(config: mod_d_exports$2.PartialStrykerOptions): mod_d_exports$2.PartialStrykerOptions;
22
+ static define(config: Promise<mod_d_exports$2.PartialStrykerOptions>): Promise<mod_d_exports$2.PartialStrykerOptions>;
23
+ static define(config: StrykerConfigFn): StrykerConfigFn;
24
+ static define(config: StrykerConfigExport): StrykerConfigExport;
25
+ static readonly merge: {
26
+ (overrides: mod_d_exports$2.PartialStrykerOptions): (defaults: mod_d_exports$2.PartialStrykerOptions) => mod_d_exports$2.PartialStrykerOptions;
27
+ (defaults: mod_d_exports$2.PartialStrykerOptions, overrides: mod_d_exports$2.PartialStrykerOptions): mod_d_exports$2.PartialStrykerOptions;
28
+ };
29
+ static readonly createDefaultOptions: Effect.Effect<mod_d_exports$2.StrykerOptions>;
30
+ static readonly defaultOptions: Effect.Effect<Immutable<mod_d_exports$2.StrykerOptions>, never, never>;
31
+ static readonly supportedFileNames: readonly string[];
32
+ static readonly syntaxHelp: string;
33
+ }
34
+ //#endregion
35
+ export { StrykerConfig as a, Primitive as i, Immutable as n, StrykerConfigExport as o, ImmutablePrimitive as r, StrykerConfigFn as s, ConfigEnv as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@systemfsoftware/stryker-js",
3
- "version": "10.1.2",
3
+ "version": "11.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git",
@@ -23,42 +23,51 @@
23
23
  "node": ">=24.13.1"
24
24
  },
25
25
  "dependencies": {
26
- "@effect/opentelemetry": "4.0.0-rc.116",
27
- "@effect/platform-node": "4.0.0-rc.116",
28
- "@effect/platform-node-shared": "4.0.0-rc.116",
26
+ "@effect/opentelemetry": "4.0.0-rc.117",
27
+ "@effect/platform-node": "4.0.0-rc.117",
28
+ "@effect/platform-node-shared": "4.0.0-rc.117",
29
29
  "@noble/hashes": "^2",
30
30
  "@opentelemetry/api": "^1.9.0",
31
31
  "@opentelemetry/exporter-metrics-otlp-http": "^0.222.0",
32
32
  "@opentelemetry/exporter-trace-otlp-http": "^0.222.0",
33
33
  "@opentelemetry/sdk-metrics": "^2.11.0",
34
34
  "@opentelemetry/sdk-trace-base": "^2.2.0",
35
- "@systemfsoftware/effect-cell-types": "^8.3.2",
36
- "@systemfsoftware/stryker-vm-harness": "^1.0.0"
35
+ "@systemfsoftware/effect-cell-types": "^10.1.1",
36
+ "@systemfsoftware/stryker-vm-harness": "^3.0.0"
37
37
  },
38
38
  "peerDependencies": {
39
- "effect": "4.0.0-rc.116"
39
+ "effect": "4.0.0-rc.117"
40
+ },
41
+ "peerDependenciesMeta": {
42
+ "effect": {
43
+ "optional": true
44
+ }
40
45
  },
41
46
  "devDependencies": {
42
47
  "@effect/tsgo": "^0.45.0",
43
- "@effect/vitest": "4.0.0-rc.116",
48
+ "@effect/vitest": "4.0.0-rc.117",
44
49
  "@microsoft/api-extractor": "^7",
45
50
  "@oxc-parser/binding-wasm32-wasi": "^0.150.0",
46
51
  "@std/jsonc": "npm:@jsr/std__jsonc@^1",
47
52
  "@systemfsoftware/arethetypeswrong-cli": "^4.2.0",
48
- "@systemfsoftware/effect-gherkin-spec": "^4.2.2",
49
- "@systemfsoftware/effect-schema-law": "^2.2.1",
50
- "@systemfsoftware/effect-schema-vite": "^2.2.1",
51
- "@systemfsoftware/oxlint-config-recommended": "^1.1.0",
53
+ "@systemfsoftware/differential-spec": "^0.3.0",
54
+ "@systemfsoftware/effect-gherkin-spec": "^4.3.1",
55
+ "@systemfsoftware/effect-schema-law": "^2.3.1",
56
+ "@systemfsoftware/effect-schema-vite": "^2.2.3",
57
+ "@systemfsoftware/oxlint-config-recommended": "^2.0.2",
52
58
  "@systemfsoftware/stryker-ignorer-effect-schema-declarations": "latest",
53
59
  "@systemfsoftware/stryker-ignorer-in-source-vitest-block": "latest",
54
60
  "@systemfsoftware/stryker-js": "latest",
55
61
  "@systemfsoftware/stryker-js-typescript-checker": "latest",
56
62
  "@systemfsoftware/stryker-js-vitest-runner": "latest",
57
63
  "@systemfsoftware/stryker-test-contribution": "latest",
58
- "@systemfsoftware/tsconfig": "^1.3.6",
64
+ "@systemfsoftware/tsconfig": "^2.0.1",
59
65
  "@types/node": "^24",
60
66
  "@vitest/coverage-v8": "^5",
61
67
  "concurrently": "^10",
68
+ "fast-check": "^4",
69
+ "happy-dom": "^20",
70
+ "jsdom": "^30",
62
71
  "mutation-testing-elements": "3.9.0",
63
72
  "oxc-parser": "^0.150.0",
64
73
  "oxlint": "^1",
@@ -67,14 +76,15 @@
67
76
  "tsdown": "^0.23.0",
68
77
  "typescript": "^7",
69
78
  "vitest": "^5",
70
- "@systemfsoftware/stryker-js-html-reporter": "^4.0.5",
71
- "@systemfsoftware/stryker-js-instrumenter": "^8.0.2",
72
- "@systemfsoftware/stryker-js-plugin-runtime": "^5.0.3",
73
- "@systemfsoftware/stryker-config": "^0.1.0",
74
- "@systemfsoftware/tsdown-config": "^0.1.0",
79
+ "@systemfsoftware/stryker-framework-interface": "^0.0.0",
75
80
  "@systemfsoftware/stryker-ignorer-interface": "^0.1.1",
76
- "@systemfsoftware/stryker-js-plugin-interface": "^7.2.1",
77
- "@systemfsoftware/vitest-config": "^0.1.0"
81
+ "@systemfsoftware/stryker-config": "^0.1.0",
82
+ "@systemfsoftware/stryker-js-html-reporter": "^5.0.0",
83
+ "@systemfsoftware/stryker-js-instrumenter": "^9.0.0",
84
+ "@systemfsoftware/stryker-js-plugin-interface": "^8.0.0",
85
+ "@systemfsoftware/stryker-js-plugin-runtime": "^6.0.0",
86
+ "@systemfsoftware/vitest-config": "^0.1.0",
87
+ "@systemfsoftware/tsdown-config": "^0.1.0"
78
88
  },
79
89
  "publishConfig": {
80
90
  "access": "public",
@@ -101,44 +111,19 @@
101
111
  },
102
112
  "inlinedDependencies": {
103
113
  "@eslint-community/regexpp": "4.12.2",
104
- "@jridgewell/gen-mapping": "0.3.13",
105
- "@jridgewell/remapping": "2.3.5",
106
- "@jridgewell/resolve-uri": "3.1.2",
107
- "@jridgewell/sourcemap-codec": "1.6.0",
108
- "@jridgewell/trace-mapping": "0.3.31",
109
114
  "@jsr/std__jsonc": "1.0.2",
110
- "@sveltejs/acorn-typescript": "1.0.13",
111
- "acorn": "8.18.0",
112
- "angular-html-parser": "10.12.0",
113
- "aria-query": "5.3.1",
114
- "axobject-query": "4.1.0",
115
- "chai": "6.2.2",
116
- "esrap": "2.3.7",
117
- "expect-type": "1.4.0",
118
- "is-reference": "3.0.3",
119
- "locate-character": "3.0.0",
120
- "magic-string": [
121
- "0.30.21",
122
- "1.4.1"
123
- ],
124
- "oxc-parser": "0.150.0",
125
- "oxc-walker": "1.1.1",
126
- "svelte": "5.57.0",
127
- "tinybench": "6.1.4",
128
- "vite": "8.2.2",
129
- "vitest": "5.0.1",
130
- "zimmerframe": "1.1.5"
115
+ "oxc-parser": "0.150.0"
131
116
  },
132
117
  "scripts": {
133
118
  "clean": "rimraf dist",
134
119
  "build": "pnpm run typecheck && rimraf dist && tsdown --config tsdown.bin.config.ts && tsdown --config tsdown.config.ts",
135
- "typecheck": "tsc --noEmit --incremental && tsc -p tsconfig.node.json --noEmit",
120
+ "typecheck": "tsc -b",
136
121
  "test": "vitest run",
137
122
  "mutation": "stryker run",
138
123
  "attw": "attw --pack .",
139
124
  "lint": "f=${OXLINT_FORMAT:-${AGENT:+agent}}; oxlint . --format=${f:-default}",
140
125
  "api:check": "api-extractor run",
141
126
  "api:update": "api-extractor run --local",
142
- "lint:tsgo": "effect-tsgo diagnostics --project tsconfig.json --format ${TSGO_FORMAT:-text}"
127
+ "lint:tsgo": "effect-tsgo diagnostics --project tsconfig.app.json --format ${TSGO_FORMAT:-text} && effect-tsgo diagnostics --project tsconfig.test.json --format ${TSGO_FORMAT:-text}"
143
128
  }
144
129
  }