@systemfsoftware/stryker-js 13.0.0 → 13.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
- import { a as Reporter_exports, c as ErrorText_exports, d as Mutant_exports, i as Report_exports, l as Format_exports, n as Options_exports, o as TestRunner_exports, r as Plugin_exports, s as Trace_exports$1, t as Checker_exports, u as Instrument_exports } from "./dist-BscHZmXN.mjs";
2
- import { n as mergeConfigs, t as mergeConfig } from "./merge-config-DA_v1hGx.mjs";
3
- import { A as PluginLoadRefusedError, D as StreamSchemaVersion, E as VerdictReached, M as ModeSignal, N as OutputMode, O as PeerFailureTag, S as RunStarted, T as VerdictMutant, _ as RunFailed, c as Heartbeat, d as PhaseEntered, f as PlanKnown, g as RunEvent, i as FormatRegistryResolved, j as PluginNotFoundError, l as HelpRendered, m as PluginsReported, n as StageError, t as PrepareError, v as RunId, w as SkippedReported } from "./Run.schema-Bj7b_FMA.mjs";
1
+ import { a as Reporter_exports, c as ErrorText_exports, d as Mutant_exports, i as Report_exports, l as Format_exports, n as Options_exports, o as TestRunner_exports, r as Plugin_exports, s as Trace_exports$1, t as Checker_exports, u as Instrument_exports } from "./dist-CQ7r4AaH.mjs";
2
+ import { n as mergeConfigs, t as mergeConfig } from "./merge-config-DZHwEkGY.mjs";
3
+ import { A as PluginLoadRefusedError, D as StreamSchemaVersion, E as VerdictReached, M as ModeSignal, N as OutputMode, O as PeerFailureTag, S as RunStarted, T as VerdictMutant, _ as RunFailed, c as Heartbeat, d as PhaseEntered, f as PlanKnown, g as RunEvent, i as FormatRegistryResolved, j as PluginNotFoundError, l as HelpRendered, m as PluginsReported, n as StageError, t as PrepareError, v as RunId, w as SkippedReported } from "./Run.schema-Cv2_Kup0.mjs";
4
4
  import { Blueprint, Cell, Handle, Sandwich, Workflow } from "@systemfsoftware/effect-cell-types";
5
5
  import * as Boolean$1 from "effect/Boolean";
6
- import * as Match from "effect/Match";
6
+ import * as Match$1 from "effect/Match";
7
7
  import * as Option$1 from "effect/Option";
8
8
  import * as Predicate$1 from "effect/Predicate";
9
9
  import * as Result from "effect/Result";
@@ -13,7 +13,7 @@ import { absurd, dual, pipe } from "effect/Function";
13
13
  import * as SchemaGetter$1 from "effect/SchemaGetter";
14
14
  import * as Arr from "effect/Array";
15
15
  import * as Context from "effect/Context";
16
- import { Boolean, Option, Predicate, Record, Schema, SchemaGetter, SchemaTransformation } from "effect";
16
+ import { Boolean, Match, Option, Predicate, Record, Schema, SchemaGetter, SchemaTransformation } from "effect";
17
17
  import * as RpcMiddleware from "effect/unstable/rpc/RpcMiddleware";
18
18
  import * as Metric from "effect/Metric";
19
19
  import * as Cause from "effect/Cause";
@@ -75,12 +75,20 @@ var CheckerAnsweredUnrequested = class extends S.TaggedError()("CheckerAnsweredU
75
75
  phase: S.Literals(["check", "group"]),
76
76
  unrequestedIds: S.Array(S.String),
77
77
  requestedIds: S.Array(S.String)
78
- }) {};
78
+ }) {
79
+ get message() {
80
+ return `Checker "${this.checkerName}" answered about mutants it was not asked about (${this.phase} phase): ${this.unrequestedIds.join(", ")}`;
81
+ }
82
+ };
79
83
  var CheckerSkippedRequested = class extends S.TaggedError()("CheckerSkippedRequested", {
80
84
  checkerName: S.String,
81
85
  phase: S.Literals(["check", "group"]),
82
86
  missingIds: S.Array(S.String)
83
- }) {};
87
+ }) {
88
+ get message() {
89
+ return `Checker "${this.checkerName}" skipped requested mutants (${this.phase} phase): ${this.missingIds.join(", ")}`;
90
+ }
91
+ };
84
92
  var CheckerCommand = class extends S.TaggedClass()("CheckerCommand", {
85
93
  checkerName: S.String,
86
94
  requestedIds: S.Array(Mutant_exports.MutantId),
@@ -137,7 +145,7 @@ const admitCheckerAnswer = Workflow.make({
137
145
  command: CheckerCommand,
138
146
  decision: S.Union([CheckGroupDecision, CheckResultDecision]),
139
147
  error: S.Union([CheckerAnsweredUnrequested, CheckerSkippedRequested]),
140
- decide: (command) => Match.value(command.phase).pipe(Match.when("group", () => evaluateGroup(command)), Match.when("check", () => evaluateCheckResult(command)), Match.exhaustive)
148
+ decide: (command) => Match$1.value(command.phase).pipe(Match$1.when("group", () => evaluateGroup(command)), Match$1.when("check", () => evaluateCheckResult(command)), Match$1.exhaustive)
141
149
  });
142
150
  Schema.TaggedError()("WorkerMethodError", {
143
151
  message: Schema.String,
@@ -161,6 +169,13 @@ var ChildProcessCrashedError = class extends Schema.TaggedError()("ChildProcessC
161
169
  }) {
162
170
  [WorkerExitTypeId$1] = WorkerExitTypeId$1;
163
171
  exitClass = "InternalError";
172
+ get message() {
173
+ const exit = Match.valueTags(this.exit, {
174
+ Code: ({ code }) => `exit code ${code}`,
175
+ Signal: ({ signal }) => `signal ${signal}`
176
+ });
177
+ return `Worker child process ${this.pid} crashed (${exit})`;
178
+ }
164
179
  };
165
180
  var OutOfMemoryError = class extends Schema.TaggedError()("OutOfMemoryError", {
166
181
  pid: ProcessId,
@@ -168,9 +183,15 @@ var OutOfMemoryError = class extends Schema.TaggedError()("OutOfMemoryError", {
168
183
  }) {
169
184
  [WorkerExitTypeId$1] = WorkerExitTypeId$1;
170
185
  exitClass = "RuntimeError";
186
+ get message() {
187
+ return `Worker process ${this.pid} ran out of memory (exit code ${this.exitCode})`;
188
+ }
171
189
  };
172
190
  var WorkerBootTimeoutError = class extends Schema.TaggedError()("WorkerBootTimeoutError", { pid: ProcessId }) {
173
191
  exitClass = "InternalError";
192
+ get message() {
193
+ return `Worker process ${this.pid} did not boot before the boot window closed`;
194
+ }
174
195
  };
175
196
  //#endregion
176
197
  //#region src/Checker/Checker.handle.ts
@@ -194,7 +215,7 @@ const connectionCrashed = (cause) => ChildProcessCrashedError.make({
194
215
  const recordCheckerCall = (spanName, checkerName, mutants, call) => call.pipe(Effect$1.withSpan(spanName, { attributes: {
195
216
  "stryker.checker.name": checkerName,
196
217
  "stryker.mutants.count": mutants.length
197
- } }), Effect$1.timed, Effect$1.onExit((exit) => Match.value(exit).pipe(Match.tag("Success", () => Metric.update(checkerMutantsChecked, mutants.length)), Match.tag("Failure", (failure) => failure.cause.pipe(Cause.hasInterruptsOnly, Match.value, Match.when(true, () => Effect$1.void), Match.orElse(() => Metric.update(checkerRpcFailures, 1)))), Match.exhaustive)), Effect$1.tap(([duration]) => Metric.update(checkerDuration, duration)), Effect$1.map(([, result]) => result), Effect$1.mapError((error) => Match.value(error).pipe(Match.tag("CheckerFailed", (failed) => failed), Match.orElse((e) => connectionCrashed(e.message)))));
218
+ } }), Effect$1.timed, Effect$1.onExit((exit) => Match$1.value(exit).pipe(Match$1.tag("Success", () => Metric.update(checkerMutantsChecked, mutants.length)), Match$1.tag("Failure", (failure) => failure.cause.pipe(Cause.hasInterruptsOnly, Match$1.value, Match$1.when(true, () => Effect$1.void), Match$1.orElse(() => Metric.update(checkerRpcFailures, 1)))), Match$1.exhaustive)), Effect$1.tap(([duration]) => Metric.update(checkerDuration, duration)), Effect$1.map(([, result]) => result), Effect$1.mapError((error) => Match$1.value(error).pipe(Match$1.tag("CheckerFailed", (failed) => failed), Match$1.orElse((e) => connectionCrashed(e.message)))));
198
219
  const checkOf = (self, checkerName, mutants) => recordCheckerCall("stryker.checker.check", checkerName, mutants, CheckerHandle.slot(self).check({
199
220
  checkerName,
200
221
  mutants: [...mutants]
@@ -214,6 +235,9 @@ var UndescribableMutant = class extends S.TaggedError()("UndescribableMutant", {
214
235
  reason: S.String
215
236
  }) {
216
237
  static skipped = Metric.counter("stryker.checker.mutants.skipped", { description: "Total number of mutants dropped because they cannot be described to a checker" });
238
+ get message() {
239
+ return `Mutant ${this.id} in ${this.fileName} cannot be described to a checker: ${this.reason}`;
240
+ }
217
241
  };
218
242
  const CheckerMutant = S.toType(Checker_exports.CheckerMutantWire);
219
243
  const CheckerMutantFromMutant = S.decodeTo(CheckerMutant, SchemaTransformation$1.transform({
@@ -407,7 +431,7 @@ const freezeSetValue = (value) => Object.freeze(new Set([...value.values()].map(
407
431
  const freezeRegExpValue = (value) => Object.freeze(value);
408
432
  const freezeRecordValue = (value) => Object.freeze(Record$1.map(value, (propertyValue) => deepFreeze(propertyValue)));
409
433
  function deepFreeze(target) {
410
- return Match.value(target).pipe(Match.when(isArrayValue$1, 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));
434
+ return Match$1.value(target).pipe(Match$1.when(isArrayValue$1, freezeArrayValue), Match$1.when((value) => value instanceof Map, freezeMapValue), Match$1.when((value) => value instanceof RegExp, freezeRegExpValue), Match$1.when((value) => value instanceof Set, freezeSetValue), Match$1.when(isRecordValue, freezeRecordValue), Match$1.orElse(() => target));
411
435
  }
412
436
  const createDefaultOptions = S.decodeEffect(Options_exports.StrykerOptionsSchema)({}).pipe(Effect$1.orDie);
413
437
  const defaultOptions = Effect$1.map(createDefaultOptions, (options) => deepFreeze(options));
@@ -415,6 +439,9 @@ const defaultOptions = Effect$1.map(createDefaultOptions, (options) => deepFreez
415
439
  //#region src/ConfigError.schema.ts
416
440
  var ConfigFileNotFoundError = class extends S.TaggedError()("ConfigFileNotFoundError", { file: S.String }) {
417
441
  exitClass = "ConfigError";
442
+ get message() {
443
+ return `Config file not found: ${this.file}`;
444
+ }
418
445
  };
419
446
  var ConfigFileUnsupportedError = class extends S.TaggedError()("ConfigFileUnsupportedError", {
420
447
  file: S.String,
@@ -430,12 +457,18 @@ var ConfigFileUnreadableError = class extends S.TaggedError()("ConfigFileUnreada
430
457
  cause: S.Unknown
431
458
  }) {
432
459
  exitClass = "ConfigError";
460
+ get message() {
461
+ return `Config file is unreadable: ${this.file}`;
462
+ }
433
463
  };
434
464
  var ConfigFileInvalidError = class extends S.TaggedError()("ConfigFileInvalidError", {
435
465
  file: S.String,
436
466
  cause: S.Unknown
437
467
  }) {
438
468
  exitClass = "ConfigError";
469
+ get message() {
470
+ return `Invalid config file: ${this.file}`;
471
+ }
439
472
  };
440
473
  var ConfigFactoryFailed = class extends S.TaggedError()("ConfigFactoryFailed", {
441
474
  message: S.String,
@@ -484,7 +517,7 @@ const unloadableOf = (file, code, message) => ConfigImportDescribed.make({
484
517
  code,
485
518
  message
486
519
  });
487
- const importDecisionOf = (command) => Match.value(errorCodeOf(command.cause)).pipe(Match.when("ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX", (code) => unloadableOf(command.file, code, `The config file "${command.file}" uses TypeScript syntax Node cannot execute. ${ERASABLE_SYNTAX_HELP}`)), Match.when("ERR_UNKNOWN_FILE_EXTENSION", (code) => unloadableOf(command.file, code, `The config file "${command.file}" has an extension Node cannot load. Stryker reads config modules with ${SUPPORTED_CONFIG_FILE_EXTENSION_GUIDE$1}.`)), Match.when("ERR_MODULE_NOT_FOUND", (code) => unloadableOf(command.file, code, `The config file "${command.file}" imports a module Node cannot find. The specifier is most likely not installed — install it as a dependency of the project, or remove the import. Node reported: ${importFailureDetailOf(command)}`)), Match.when("ERR_PACKAGE_PATH_NOT_EXPORTED", (code) => unloadableOf(command.file, code, `The config file "${command.file}" imports a path a package does not export. The package is installed but its "exports" map leaves this specifier out — import a path the package publishes. Node reported: ${importFailureDetailOf(command)}`)), Match.orElse(() => ConfigImportUnclassified.make({})));
520
+ const importDecisionOf = (command) => Match$1.value(errorCodeOf(command.cause)).pipe(Match$1.when("ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX", (code) => unloadableOf(command.file, code, `The config file "${command.file}" uses TypeScript syntax Node cannot execute. ${ERASABLE_SYNTAX_HELP}`)), Match$1.when("ERR_UNKNOWN_FILE_EXTENSION", (code) => unloadableOf(command.file, code, `The config file "${command.file}" has an extension Node cannot load. Stryker reads config modules with ${SUPPORTED_CONFIG_FILE_EXTENSION_GUIDE$1}.`)), Match$1.when("ERR_MODULE_NOT_FOUND", (code) => unloadableOf(command.file, code, `The config file "${command.file}" imports a module Node cannot find. The specifier is most likely not installed — install it as a dependency of the project, or remove the import. Node reported: ${importFailureDetailOf(command)}`)), Match$1.when("ERR_PACKAGE_PATH_NOT_EXPORTED", (code) => unloadableOf(command.file, code, `The config file "${command.file}" imports a path a package does not export. The package is installed but its "exports" map leaves this specifier out — import a path the package publishes. Node reported: ${importFailureDetailOf(command)}`)), Match$1.orElse(() => ConfigImportUnclassified.make({})));
488
521
  const describeConfigModuleFailure = Workflow.make({
489
522
  command: DescribeConfigImportCommand,
490
523
  decision: S.Union([ConfigImportDescribed, ConfigImportUnclassified]),
@@ -632,13 +665,13 @@ const nextStateOf = (state, file, document) => ({
632
665
  }]
633
666
  });
634
667
  const doneOf = (state) => ExtendsStepDone.make({ options: mergeChainDocuments(state.documents) });
635
- const extendsValueOf = (extendValue, state) => Match.value(isModuleSpecifier(extendValue)).pipe(Match.when(true, () => ExtendsStepResolve.make({
668
+ const extendsValueOf = (extendValue, state) => Match$1.value(isModuleSpecifier(extendValue)).pipe(Match$1.when(true, () => ExtendsStepResolve.make({
636
669
  specifier: extendValue,
637
670
  state
638
- })), Match.when(false, () => ExtendsStepRead.make({
671
+ })), Match$1.when(false, () => ExtendsStepRead.make({
639
672
  specifier: extendValue,
640
673
  state
641
- })), Match.exhaustive);
674
+ })), Match$1.exhaustive);
642
675
  const cycleRefusalOf = (file) => ExtendsStepRefused.make({
643
676
  reason: "cycle",
644
677
  file
@@ -649,9 +682,9 @@ const nonStringRefusalOf = (file) => ExtendsStepRefused.make({
649
682
  });
650
683
  const advanceStepOf = (command) => {
651
684
  const nextState = nextStateOf(command.state, command.file, command.document);
652
- return Match.value(command.document["extends"]).pipe(Match.when(void 0, () => doneOf(nextState)), Match.when(null, () => doneOf(nextState)), Match.when(Match.string, (extendValue) => extendsValueOf(extendValue, nextState)), Match.orElse(() => nonStringRefusalOf(command.file)));
685
+ return Match$1.value(command.document["extends"]).pipe(Match$1.when(void 0, () => doneOf(nextState)), Match$1.when(null, () => doneOf(nextState)), Match$1.when(Match$1.string, (extendValue) => extendsValueOf(extendValue, nextState)), Match$1.orElse(() => nonStringRefusalOf(command.file)));
653
686
  };
654
- const stepDecisionOf = (command) => Match.value(command.state.visited.includes(command.file)).pipe(Match.when(true, () => cycleRefusalOf(command.file)), Match.orElse(() => advanceStepOf(command)));
687
+ const stepDecisionOf = (command) => Match$1.value(command.state.visited.includes(command.file)).pipe(Match$1.when(true, () => cycleRefusalOf(command.file)), Match$1.orElse(() => advanceStepOf(command)));
655
688
  const extendsStepWorkflow = Workflow.make({
656
689
  command: ExtendsStepCommand,
657
690
  decision: S.Union([
@@ -670,7 +703,11 @@ var StrykerError = class extends Schema.TaggedError()("StrykerError", {
670
703
  message: Schema.String,
671
704
  cause: Schema.optional(Schema.Unknown)
672
705
  }) {};
673
- var ReporterStageForged = class extends Schema.TaggedError()("ReporterStageForged", {}) {};
706
+ var ReporterStageForged = class extends Schema.TaggedError()("ReporterStageForged", {}) {
707
+ get message() {
708
+ return "Reporter stage is missing its attachments";
709
+ }
710
+ };
674
711
  var ReporterFactoryThrew = class extends Schema.TaggedError()("ReporterFactoryThrew", {
675
712
  reporterName: Schema.String,
676
713
  message: Schema.String,
@@ -715,7 +752,7 @@ const extendsChildKind = (configFile, pathService) => Boolean$1.match(isLegacyCo
715
752
  onFalse: () => "supported"
716
753
  });
717
754
  const exists = Effect$1.fn("stryker.config.exists")(function* (fileName) {
718
- return yield* (yield* FileSystem.FileSystem).access(fileName).pipe(Effect$1.as(true), Effect$1.catchTag("PlatformError", (error) => Match.value(error.reason).pipe(Match.tag("NotFound", () => Effect$1.succeed(false)), Match.orElse(() => Effect$1.fail(ConfigFileUnreadableError.make({
755
+ return yield* (yield* FileSystem.FileSystem).access(fileName).pipe(Effect$1.as(true), Effect$1.catchTag("PlatformError", (error) => Match$1.value(error.reason).pipe(Match$1.tag("NotFound", () => Effect$1.succeed(false)), Match$1.orElse(() => Effect$1.fail(ConfigFileUnreadableError.make({
719
756
  file: fileName,
720
757
  cause: error
721
758
  }))))), Effect$1.mapError((error) => ConfigFileUnreadableError.make({
@@ -728,13 +765,13 @@ const firstExistingConfigFile = (fileNames) => Stream.fromIterable(fileNames).pi
728
765
  present
729
766
  })))), Stream.filter((probed) => probed.present), Stream.map((probed) => probed.fileName), Stream.runHead);
730
767
  const discoveryDecisionOf = (command) => Result.getOrElse(discoverConfigFile(command), (neverError) => neverError);
731
- const actionableConfigFileOf = (decision) => Match.value(decision).pipe(Match.tag("ConfigFileRead", (read) => Option$1.match(Option$1.fromUndefinedOr(read.shadowedLegacyWarning), {
768
+ const actionableConfigFileOf = (decision) => Match$1.value(decision).pipe(Match$1.tag("ConfigFileRead", (read) => Option$1.match(Option$1.fromUndefinedOr(read.shadowedLegacyWarning), {
732
769
  onSome: (warning) => Effect$1.as(Effect$1.logWarning(warning), Option$1.some(read.file)),
733
770
  onNone: () => Effect$1.succeedSome(read.file)
734
- })), Match.tag("ConfigFileRefused", (refused) => Effect$1.fail(ConfigFileUnsupportedError.make({
771
+ })), Match$1.tag("ConfigFileRefused", (refused) => Effect$1.fail(ConfigFileUnsupportedError.make({
735
772
  file: refused.file,
736
773
  hint: refused.hint
737
- }))), Match.tag("ConfigFileMissing", (missing) => Effect$1.fail(ConfigFileNotFoundError.make({ file: missing.file }))), Match.tag("NoConfigFile", () => Effect$1.succeedNone), Match.exhaustive);
774
+ }))), Match$1.tag("ConfigFileMissing", (missing) => Effect$1.fail(ConfigFileNotFoundError.make({ file: missing.file }))), Match$1.tag("NoConfigFile", () => Effect$1.succeedNone), Match$1.exhaustive);
738
775
  const configFilePresence = (configFileName, kind) => kind === "supported" ? exists(configFileName) : Effect$1.succeed(false);
739
776
  const expectedConfigFileOf = Effect$1.fn("stryker.config.expectedFile")(function* (configFileName, context) {
740
777
  const pathService = yield* Path.Path;
@@ -801,16 +838,16 @@ const resolveExtendsSpecifier = (specifier) => Effect$1.try({
801
838
  cause
802
839
  })
803
840
  });
804
- const configImportCauseOf = (configFile, failure) => Match.value(Result.getOrElse(describeConfigModuleFailure(DescribeConfigImportCommand.make({
841
+ const configImportCauseOf = (configFile, failure) => Match$1.value(Result.getOrElse(describeConfigModuleFailure(DescribeConfigImportCommand.make({
805
842
  file: configFile,
806
843
  message: failure.message,
807
844
  cause: failure.cause
808
- })), (neverError) => neverError)).pipe(Match.tag("ConfigImportDescribed", (described) => ConfigModuleUnloadable.make({
845
+ })), (neverError) => neverError)).pipe(Match$1.tag("ConfigImportDescribed", (described) => ConfigModuleUnloadable.make({
809
846
  code: described.code,
810
847
  file: configFile,
811
848
  message: described.message,
812
849
  cause: failure.cause
813
- })), Match.tag("ConfigImportUnclassified", () => failure), Match.exhaustive);
850
+ })), Match$1.tag("ConfigImportUnclassified", () => failure), Match$1.exhaustive);
814
851
  const FACTORY_FAILED = "Evaluating the config module's exported factory failed";
815
852
  const factoryFailureOf = (cause) => ConfigFactoryFailed.make({
816
853
  cause,
@@ -868,14 +905,14 @@ const resolveExtends = Effect$1.fn("stryker.config.extends")(function* (configFi
868
905
  return yield* loop(nextState, childFile, childDocument);
869
906
  });
870
907
  const resolvedChild = (specifier, nextState) => resolveExtendsSpecifier(specifier).pipe(Effect$1.flatMap((resolvedUrl) => readExtendsChild(resolvedUrl, configEnv).pipe(Effect$1.flatMap((childDocument) => loop(nextState, resolvedUrl, childDocument)))));
871
- return yield* Match.value(extendsStep(ExtendsStepCommand.make({
908
+ return yield* Match$1.value(extendsStep(ExtendsStepCommand.make({
872
909
  state,
873
910
  document: currentDocument,
874
911
  file: canonicalFile
875
- }))).pipe(Match.tag("done", (decision) => Effect$1.succeed(decision.options)), Match.tag("read", (decision) => readChild(decision.specifier, decision.state)), Match.tag("resolve", (decision) => resolvedChild(decision.specifier, decision.state)), Match.tag("refused", (decision) => Effect$1.fail(ConfigFileInvalidError.make({
912
+ }))).pipe(Match$1.tag("done", (decision) => Effect$1.succeed(decision.options)), Match$1.tag("read", (decision) => readChild(decision.specifier, decision.state)), Match$1.tag("resolve", (decision) => resolvedChild(decision.specifier, decision.state)), Match$1.tag("refused", (decision) => Effect$1.fail(ConfigFileInvalidError.make({
876
913
  file: decision.file,
877
- cause: Match.value(decision.reason).pipe(Match.when("cycle", () => `Config inheritance cycle detected at "${decision.file}"`), Match.orElse(() => `Invalid config file "${decision.file}". "extends" must be a string`))
878
- }))), Match.exhaustive);
914
+ cause: Match$1.value(decision.reason).pipe(Match$1.when("cycle", () => `Config inheritance cycle detected at "${decision.file}"`), Match$1.orElse(() => `Invalid config file "${decision.file}". "extends" must be a string`))
915
+ }))), Match$1.exhaustive);
879
916
  });
880
917
  return yield* loop(initialExtendsStepState, configFile, document);
881
918
  });
@@ -929,37 +966,37 @@ const PATH_LINE = /^at\s+(\[[^\]]*\])$/;
929
966
  const PATH_SEGMENT = /\["([^"]*)"\]|\[(\d+)\]/g;
930
967
  const EXPECTED_PATTERN = /^Expected a string matching the RegExp (.+)$/;
931
968
  const EXPECTED_TYPE = /^Expected (.+)$/;
932
- const appendPathSegment = (path, segment) => Match.value(segment[2]).pipe(Match.when(void 0, () => appendKeySegment(path, Option$1.getOrElse(Option$1.fromUndefinedOr(segment[1]), () => ""))), Match.orElse((index) => `${path}[${index}]`));
933
- const appendKeySegment = (path, key) => Match.value(path.length > 0).pipe(Match.when(true, () => `${path}.${key}`), Match.orElse(() => `${path}${key}`));
969
+ const appendPathSegment = (path, segment) => Match$1.value(segment[2]).pipe(Match$1.when(void 0, () => appendKeySegment(path, Option$1.getOrElse(Option$1.fromUndefinedOr(segment[1]), () => ""))), Match$1.orElse((index) => `${path}[${index}]`));
970
+ const appendKeySegment = (path, key) => Match$1.value(path.length > 0).pipe(Match$1.when(true, () => `${path}.${key}`), Match$1.orElse(() => `${path}${key}`));
934
971
  const dottedPath = (raw) => Array.from(raw.matchAll(PATH_SEGMENT)).reduce(appendPathSegment, "");
935
- const phraseExpectedType = (expectation) => Match.value(EXPECTED_TYPE.exec(expectation)).pipe(Match.when((match) => match !== null, (match) => `should be ${Option$1.getOrElse(Option$1.fromUndefinedOr(match[1]), () => "")}`), Match.orElse(() => expectation));
936
- const phrase = (expectation) => Match.value(EXPECTED_PATTERN.exec(expectation)).pipe(Match.when((match) => match !== null, (match) => `must match pattern "${Option$1.getOrElse(Option$1.fromUndefinedOr(match[1]), () => "")}"`), Match.orElse(() => phraseExpectedType(expectation)));
972
+ const phraseExpectedType = (expectation) => Match$1.value(EXPECTED_TYPE.exec(expectation)).pipe(Match$1.when((match) => match !== null, (match) => `should be ${Option$1.getOrElse(Option$1.fromUndefinedOr(match[1]), () => "")}`), Match$1.orElse(() => expectation));
973
+ const phrase = (expectation) => Match$1.value(EXPECTED_PATTERN.exec(expectation)).pipe(Match$1.when((match) => match !== null, (match) => `must match pattern "${Option$1.getOrElse(Option$1.fromUndefinedOr(match[1]), () => "")}"`), Match$1.orElse(() => phraseExpectedType(expectation)));
937
974
  const EMPTY_ERROR_DESCRIPTION_STATE = {
938
975
  messages: [],
939
976
  expectation: void 0
940
977
  };
941
978
  const isBlankLine = (line) => line.length === 0;
942
- const startExpectation = (state, line) => Match.value(state.expectation).pipe(Match.when(void 0, () => ({
979
+ const startExpectation = (state, line) => Match$1.value(state.expectation).pipe(Match$1.when(void 0, () => ({
943
980
  messages: state.messages,
944
981
  expectation: line
945
- })), Match.orElse((pending) => ({
982
+ })), Match$1.orElse((pending) => ({
946
983
  messages: [...state.messages, pending],
947
984
  expectation: line
948
985
  })));
949
- const completeExpectation = (state, pathText, line) => Match.value(state.expectation).pipe(Match.when(void 0, () => startExpectation(state, line)), Match.orElse((pending) => ({
986
+ const completeExpectation = (state, pathText, line) => Match$1.value(state.expectation).pipe(Match$1.when(void 0, () => startExpectation(state, line)), Match$1.orElse((pending) => ({
950
987
  messages: [...state.messages, `Config option "${dottedPath(pathText)}" ${phrase(pending)}.`],
951
988
  expectation: void 0
952
989
  })));
953
- const applyErrorLine = (state, line) => Match.value(PATH_LINE.exec(line)).pipe(Match.when((match) => match !== null, (match) => completeExpectation(state, Option$1.getOrElse(Option$1.fromUndefinedOr(match[1]), () => ""), line)), Match.orElse(() => startExpectation(state, line)));
954
- const advanceErrorDescription = (state, rawLine) => Match.value(rawLine.trim()).pipe(Match.when(isBlankLine, () => state), Match.orElse((line) => applyErrorLine(state, line)));
955
- const completedErrorMessages = (state) => Match.value(state.expectation).pipe(Match.when(void 0, () => state.messages), Match.orElse((pending) => [...state.messages, pending]));
956
- const errorMessageOrFallback = (messages, fallback) => Match.value(messages.length > 0).pipe(Match.when(true, () => [...messages]), Match.orElse(() => [fallback]));
990
+ const applyErrorLine = (state, line) => Match$1.value(PATH_LINE.exec(line)).pipe(Match$1.when((match) => match !== null, (match) => completeExpectation(state, Option$1.getOrElse(Option$1.fromUndefinedOr(match[1]), () => ""), line)), Match$1.orElse(() => startExpectation(state, line)));
991
+ const advanceErrorDescription = (state, rawLine) => Match$1.value(rawLine.trim()).pipe(Match$1.when(isBlankLine, () => state), Match$1.orElse((line) => applyErrorLine(state, line)));
992
+ const completedErrorMessages = (state) => Match$1.value(state.expectation).pipe(Match$1.when(void 0, () => state.messages), Match$1.orElse((pending) => [...state.messages, pending]));
993
+ const errorMessageOrFallback = (messages, fallback) => Match$1.value(messages.length > 0).pipe(Match$1.when(true, () => [...messages]), Match$1.orElse(() => [fallback]));
957
994
  const messageErrorsOf = (message) => {
958
995
  const state = message.split("\n").reduce(advanceErrorDescription, EMPTY_ERROR_DESCRIPTION_STATE);
959
996
  return completedErrorMessages(state);
960
997
  };
961
998
  const messageErrorsOrFallback = (messages, fallback) => errorMessageOrFallback(messages, fallback);
962
- const configErrorHeadline = (errors) => Match.value(errors.length === 1).pipe(Match.when(true, () => "Please correct this configuration error and try again."), Match.orElse(() => "Please correct these configuration errors and try again."));
999
+ const configErrorHeadline = (errors) => Match$1.value(errors.length === 1).pipe(Match$1.when(true, () => "Please correct this configuration error and try again."), Match$1.orElse(() => "Please correct these configuration errors and try again."));
963
1000
  const configErrorMessage = (errors) => `${configErrorHeadline(errors)} ${errors.join(" ")}`;
964
1001
  const describedOf = (command) => Option$1.match(Option$1.fromUndefinedOr(command.errors), {
965
1002
  onSome: (errors) => ConfigErrorDescribed.make({
@@ -1059,12 +1096,12 @@ const PRECEDENCE = [
1059
1096
  "VerdictFail"
1060
1097
  ];
1061
1098
  const precedenceOf = (pending) => Arr.findFirst(PRECEDENCE, (candidate) => pending.includes(candidate));
1062
- const decisionOf$2 = (exitClass) => Match.value(exitClass).pipe(Match.when("VerdictFail", () => ExitVerdictFailed.make({})), Match.when("ConfigError", () => ExitConfigErrored.make({})), Match.when("RuntimeError", () => ExitRuntimeErrored.make({})), Match.when("InternalError", () => ExitInternalErrored.make({})), Match.exhaustive);
1063
- const verdictExitClass = (score, breakingThreshold) => Match.valueTags(score, {
1099
+ const decisionOf$2 = (exitClass) => Match$1.value(exitClass).pipe(Match$1.when("VerdictFail", () => ExitVerdictFailed.make({})), Match$1.when("ConfigError", () => ExitConfigErrored.make({})), Match$1.when("RuntimeError", () => ExitRuntimeErrored.make({})), Match$1.when("InternalError", () => ExitInternalErrored.make({})), Match$1.exhaustive);
1100
+ const verdictExitClass = (score, breakingThreshold) => Match$1.valueTags(score, {
1064
1101
  Unscored: () => null,
1065
1102
  Scored: ({ percentage }) => Option$1.match(Option$1.fromNullishOr(breakingThreshold), {
1066
1103
  onNone: () => null,
1067
- onSome: (threshold) => Match.value(percentage < threshold).pipe(Match.when(true, () => "VerdictFail"), Match.when(false, () => null), Match.exhaustive)
1104
+ onSome: (threshold) => Match$1.value(percentage < threshold).pipe(Match$1.when(true, () => "VerdictFail"), Match$1.when(false, () => null), Match$1.exhaustive)
1068
1105
  })
1069
1106
  });
1070
1107
  const decide$15 = (command) => Option$1.match(Option$1.fromNullishOr(verdictExitClass(command.score, command.breakingThreshold)), {
@@ -1085,7 +1122,11 @@ const classifyExit = Workflow.make({
1085
1122
  var ManifestUnreadable = class extends Schema.TaggedError()("ManifestUnreadable", {
1086
1123
  specifier: Schema.String,
1087
1124
  cause: Schema.Unknown
1088
- }) {};
1125
+ }) {
1126
+ get message() {
1127
+ return `Package manifest is unreadable: ${this.specifier}`;
1128
+ }
1129
+ };
1089
1130
  const ManifestSchema = Schema.Struct({ version: Schema.optional(Schema.String) });
1090
1131
  //#endregion
1091
1132
  //#region src/project-files.service.ts
@@ -1142,7 +1183,11 @@ var __exportAll$1 = (all, no_symbols) => {
1142
1183
  };
1143
1184
  //#endregion
1144
1185
  //#region ../stryker-js-plugin-runtime/dist/index.mjs
1145
- var TraceContextUnavailable = class extends S.TaggedError()("TraceContextUnavailable", { reason: S.Literals(["invalid-span-context", "undecodable-parts"]) }) {};
1186
+ var TraceContextUnavailable = class extends S.TaggedError()("TraceContextUnavailable", { reason: S.Literals(["invalid-span-context", "undecodable-parts"]) }) {
1187
+ get message() {
1188
+ return Match$1.value(this.reason).pipe(Match$1.when("invalid-span-context", () => "Cannot read trace context: the span context is invalid"), Match$1.when("undecodable-parts", () => "Cannot read trace context: the trace context parts could not be decoded"), Match$1.exhaustive);
1189
+ }
1190
+ };
1146
1191
  const CURRENT_VERSION = "00";
1147
1192
  const SAMPLED_FLAG = 1;
1148
1193
  const EffectSpanShape = S.Struct({
@@ -1267,10 +1312,10 @@ var WorkerOptions = class WorkerOptions extends Context.Service()("@systemfsoftw
1267
1312
  const traceContextServer = layerTraceContextServer;
1268
1313
  const NAMED_PIPE_PREFIX = "\\\\.\\pipe\\";
1269
1314
  const restrictSocket = Effect$1.fn("restrictSocket")(function* (address) {
1270
- yield* Match.value(address).pipe(Match.tag("UnixPathAddress", ({ path }) => Boolean$1.match(path.startsWith(NAMED_PIPE_PREFIX), {
1315
+ yield* Match$1.value(address).pipe(Match$1.tag("UnixPathAddress", ({ path }) => Boolean$1.match(path.startsWith(NAMED_PIPE_PREFIX), {
1271
1316
  onTrue: () => Effect$1.void,
1272
1317
  onFalse: () => Effect$1.flatMap(FileSystem.FileSystem, (fs) => fs.chmod(path, 384))
1273
- })), Match.orElse(() => Effect$1.void));
1318
+ })), Match$1.orElse(() => Effect$1.void));
1274
1319
  });
1275
1320
  const restrictedSocket = Layer.effectDiscard(Effect$1.flatMap(SocketServer.SocketServer, (socket) => restrictSocket(socket.address)));
1276
1321
  const TypeId$12 = Symbol.for("~systemfsoftware/stryker-js-plugin-runtime/WorkerServer");
@@ -1482,7 +1527,7 @@ const offerToChannel = Effect$1.fn("stryker.reporterStream.offerToChannel")(func
1482
1527
  const offered = yield* PubSub.publish(attachment.channel, event).pipe(Effect$1.timeoutOption(REPORTER_STALL_TIMEOUT));
1483
1528
  return yield* Option$1.match(offered, {
1484
1529
  onNone: () => detachStalledReporter(attachment),
1485
- onSome: (accepted) => Match.value(accepted).pipe(Match.when(true, () => noteTerminalOffered(attachment, event)), Match.orElse(() => warnEventDropped(attachment)))
1530
+ onSome: (accepted) => Match$1.value(accepted).pipe(Match$1.when(true, () => noteTerminalOffered(attachment, event)), Match$1.orElse(() => warnEventDropped(attachment)))
1486
1531
  });
1487
1532
  });
1488
1533
  const deliverReporterEvent = (attachment, event) => Effect$1.flatMap(SynchronizedRef.get(attachment.state), (state) => Boolean$1.match(state.detached, {
@@ -1526,7 +1571,7 @@ const settleAttachment = Effect$1.fn("stryker.reporterStream.settle")(function*
1526
1571
  })
1527
1572
  });
1528
1573
  });
1529
- const failedReporterNames = (outcome) => Match.value(outcome).pipe(Match.when({ kind: "terminal-failed" }, (failed) => [failed.name]), Match.orElse(() => []));
1574
+ const failedReporterNames = (outcome) => Match$1.value(outcome).pipe(Match$1.when({ kind: "terminal-failed" }, (failed) => [failed.name]), Match$1.orElse(() => []));
1530
1575
  const shutdownUnreportedChannel = (attachment) => Effect$1.flatMap(SynchronizedRef.get(attachment.state), (state) => Boolean$1.match(state.terminalOffered, {
1531
1576
  onTrue: () => Effect$1.void,
1532
1577
  onFalse: () => PubSub.shutdown(attachment.channel)
@@ -1563,6 +1608,17 @@ const environmentTraceInit = Effect$1.fn("stryker.reporterStream.environmentTrac
1563
1608
  };
1564
1609
  });
1565
1610
  const initFromEnvironment = () => Effect$1.map(environmentTraceInit(), (init) => Option$1.getOrUndefined(Option$1.filter(Option$1.some(init), hasTraceFields)));
1611
+ Effect$1.gen(function* () {
1612
+ const traceparent = yield* Config.String("TRACEPARENT").pipe(Effect$1.option);
1613
+ const tracestate = yield* Config.String("TRACESTATE").pipe(Effect$1.option);
1614
+ return Option$1.map(Option$1.flatMap(traceparent, S.decodeOption(Trace_exports$1.Traceparent)), (parts) => ({
1615
+ ...parts,
1616
+ ...Option$1.match(Option$1.flatMap(tracestate, S.decodeOption(Trace_exports$1.Tracestate)), {
1617
+ onNone: () => ({}),
1618
+ onSome: (traceState) => ({ traceState })
1619
+ })
1620
+ }));
1621
+ });
1566
1622
  const currentReporterInit = Effect$1.fn("stryker.reporterStream.currentReporterInit")(function* (span) {
1567
1623
  const fromEnvironment = yield* initFromEnvironment();
1568
1624
  const current = Option$1.getOrUndefined(yield* Effect$1.currentSpan.pipe(Effect$1.option));
@@ -1582,7 +1638,7 @@ var MetricsResultFromReport = class MetricsResultFromReport extends S.Class("Met
1582
1638
  }) {};
1583
1639
  //#endregion
1584
1640
  //#region src/reporting/metrics-from-report.ts
1585
- const segmentOf = (fileName) => Match.value(fileName.indexOf("/")).pipe(Match.when((separator) => separator < 0, () => fileName), Match.orElse((separator) => fileName.slice(0, separator)));
1641
+ const segmentOf = (fileName) => Match$1.value(fileName.indexOf("/")).pipe(Match$1.when((separator) => separator < 0, () => fileName), Match$1.orElse((separator) => fileName.slice(0, separator)));
1586
1642
  const groupBySegment = (entries) => Arr.groupBy(entries, ([fileName]) => segmentOf(fileName));
1587
1643
  const metricsOf = (entries) => Report_exports.metricsFromMutants(Arr.flatMap(entries, ([, file]) => file.mutants));
1588
1644
  const fileResultOf = (fileName, file) => MetricsResultFromReport.make({
@@ -1598,7 +1654,7 @@ const nestedGroupResult = (segment, entries) => {
1598
1654
  childResults: childResultsOf(nested)
1599
1655
  });
1600
1656
  };
1601
- const groupResultsOf = (segment, entries) => Match.value(entries.every(([fileName]) => fileName === segment)).pipe(Match.when(true, () => entries.map(([fileName, file]) => fileResultOf(fileName, file))), Match.orElse(() => [nestedGroupResult(segment, entries)]));
1657
+ const groupResultsOf = (segment, entries) => Match$1.value(entries.every(([fileName]) => fileName === segment)).pipe(Match$1.when(true, () => entries.map(([fileName, file]) => fileResultOf(fileName, file))), Match$1.orElse(() => [nestedGroupResult(segment, entries)]));
1602
1658
  const childResultsOf = (entries) => Object.entries(groupBySegment(entries)).flatMap(([segment, grouped]) => groupResultsOf(segment, grouped)).sort((left, right) => left.name.localeCompare(right.name));
1603
1659
  const metricsResultFromFiles = (files) => MetricsResultFromReport.make({
1604
1660
  name: "All files",
@@ -1633,7 +1689,7 @@ const emitQuint = (accumulator) => {
1633
1689
  chars: accumulator.chars + CROCKFORD_BASE32[accumulator.value >>> bits & 31]
1634
1690
  };
1635
1691
  };
1636
- const drainQuints = (accumulator) => Match.value(accumulator.bits >= 5).pipe(Match.when(true, () => drainQuints(emitQuint(accumulator))), Match.when(false, () => accumulator), Match.exhaustive);
1692
+ const drainQuints = (accumulator) => Match$1.value(accumulator.bits >= 5).pipe(Match$1.when(true, () => drainQuints(emitQuint(accumulator))), Match$1.when(false, () => accumulator), Match$1.exhaustive);
1637
1693
  const pushByte = (accumulator, byte) => drainQuints({
1638
1694
  value: accumulator.value << 8 | byte,
1639
1695
  bits: accumulator.bits + 8,
@@ -1655,7 +1711,7 @@ const runIdTextOf = (now) => {
1655
1711
  bits: 0,
1656
1712
  chars: ""
1657
1713
  }, pushByte);
1658
- return Match.value(drained.bits > 0).pipe(Match.when(true, () => drained.chars + CROCKFORD_BASE32[drained.value << 5 - drained.bits & 31]), Match.when(false, () => drained.chars), Match.exhaustive);
1714
+ return Match$1.value(drained.bits > 0).pipe(Match$1.when(true, () => drained.chars + CROCKFORD_BASE32[drained.value << 5 - drained.bits & 31]), Match$1.when(false, () => drained.chars), Match$1.exhaustive);
1659
1715
  };
1660
1716
  const generateRunId = (now) => RunId.make(runIdTextOf(now));
1661
1717
  const isActionableStatus = S.is(Mutant_exports.ActionableStatusSchema);
@@ -1702,7 +1758,7 @@ var RunEvents = class extends Context.Service()("@systemfsoftware/stryker-js/run
1702
1758
  var RunIdentity = class extends Context.Service()("@systemfsoftware/stryker-js/run-events.service/RunIdentity") {};
1703
1759
  //#endregion
1704
1760
  //#region package.json
1705
- var version = "13.0.0";
1761
+ var version = "13.1.0";
1706
1762
  //#endregion
1707
1763
  //#region src/stryker-package.schema.ts
1708
1764
  var StrykerPackage = class extends S.Class("StrykerPackage")({
@@ -1784,11 +1840,11 @@ const reasonedOutcomeOf = (reason) => Option$1.match(Option$1.fromNullishOr(reas
1784
1840
  onNone: () => ({}),
1785
1841
  onSome: (present) => ({ statusReason: present })
1786
1842
  });
1787
- const mapRunResult = (mutant, result) => Match.value(result).pipe(Match.discriminator("status")("error", (errored) => reportMutant(mutant, "RuntimeError", { statusReason: errored.errorMessage })), Match.discriminator("status")("killed", (killed) => reportMutant(mutant, "Killed", {
1843
+ const mapRunResult = (mutant, result) => Match$1.value(result).pipe(Match$1.discriminator("status")("error", (errored) => reportMutant(mutant, "RuntimeError", { statusReason: errored.errorMessage })), Match$1.discriminator("status")("killed", (killed) => reportMutant(mutant, "Killed", {
1788
1844
  testsCompleted: killed.nrOfTests,
1789
1845
  killedBy: [...killed.killedBy],
1790
1846
  statusReason: killed.failureMessage
1791
- })), Match.discriminator("status")("timeout", (timedOut) => reportMutant(mutant, "Timeout", reasonedOutcomeOf(timedOut.reason))), Match.discriminator("status")("survived", (survived) => reportMutant(mutant, "Survived", { testsCompleted: survived.nrOfTests })), Match.exhaustive);
1847
+ })), Match$1.discriminator("status")("timeout", (timedOut) => reportMutant(mutant, "Timeout", reasonedOutcomeOf(timedOut.reason))), Match$1.discriminator("status")("survived", (survived) => reportMutant(mutant, "Survived", { testsCompleted: survived.nrOfTests })), Match$1.exhaustive);
1792
1848
  const uniqueNames = (names) => Arr.dedupe(Arr.filter(names, (name) => name !== void 0));
1793
1849
  const partitionByFile = (files, fileNames) => {
1794
1850
  const [missing, present] = Arr.separate(Arr.map(fileNames, (fileName) => Option$1.match(MutableHashMap.get(files, fileName), {
@@ -2002,7 +2058,7 @@ const determineExitCode = (input) => (metrics) => {
2002
2058
  breakingThreshold: breaking
2003
2059
  })), {
2004
2060
  onFailure: (refused) => refused,
2005
- onSuccess: (decision) => Match.value(decision).pipe(Match.tag("ExitVerdictFailed", () => "VerdictFail"), Match.orElse(() => null))
2061
+ onSuccess: (decision) => Match$1.value(decision).pipe(Match$1.tag("ExitVerdictFailed", () => "VerdictFail"), Match$1.orElse(() => null))
2006
2062
  }));
2007
2063
  return Report_exports.MutationScore.match(score, {
2008
2064
  Scored: ({ percentage }) => Option$1.match(failure, {
@@ -2012,8 +2068,8 @@ const determineExitCode = (input) => (metrics) => {
2012
2068
  Unscored: () => Effect$1.as(logUnscored(breaking), Option$1.getOrNull(failure))
2013
2069
  });
2014
2070
  };
2015
- const logScoredPass = (breaking, percentage) => Match.value(breaking).pipe(Match.when(null, () => Effect$1.logDebug("No breaking threshold configured. Won't fail the build no matter how low your mutation score is. Set `thresholds.break` to change this behavior.")), Match.orElse((threshold) => Effect$1.logInfo(`Final mutation score of ${percentage.toFixed(2)} is greater than or equal to break threshold ${String(threshold)}`)));
2016
- const logUnscored = (breaking) => Match.value(breaking).pipe(Match.when(null, () => Effect$1.void), Match.orElse((threshold) => Effect$1.logInfo(`No valid mutant was tested, so there is no mutation score to hold against break threshold ${String(threshold)}`)));
2071
+ const logScoredPass = (breaking, percentage) => Match$1.value(breaking).pipe(Match$1.when(null, () => Effect$1.logDebug("No breaking threshold configured. Won't fail the build no matter how low your mutation score is. Set `thresholds.break` to change this behavior.")), Match$1.orElse((threshold) => Effect$1.logInfo(`Final mutation score of ${percentage.toFixed(2)} is greater than or equal to break threshold ${String(threshold)}`)));
2072
+ const logUnscored = (breaking) => Match$1.value(breaking).pipe(Match$1.when(null, () => Effect$1.void), Match$1.orElse((threshold) => Effect$1.logInfo(`No valid mutant was tested, so there is no mutation score to hold against break threshold ${String(threshold)}`)));
2017
2073
  const logBroken = (breaking, percentage) => Effect$1.andThen(Effect$1.logError(`Final mutation score ${percentage.toFixed(2)} under breaking threshold ${String(breaking)}, setting exit code to 1 (failure).`), Effect$1.logInfo("(improve mutation score or set `thresholds.break = null` to prevent this error in the future)"));
2018
2074
  const emitVerdict = Effect$1.fn("stryker.mutationReporting.emitVerdict")(function* (deps, input, report) {
2019
2075
  const envelope = buildVerdictEnvelope(report, input.resolvedMode.mode, input.resolvedMode.signal, RunId.make(input.runId), input.basePath, deps.path);
@@ -2050,7 +2106,7 @@ const reportAll = Effect$1.fn("stryker.mutationReporting.reportAll")(function* (
2050
2106
  breakingThreshold: null
2051
2107
  })), {
2052
2108
  onFailure: (refused) => refused,
2053
- onSuccess: (decision) => Match.value(decision).pipe(Match.tag("ExitVerdictFailed", () => "VerdictFail"), Match.tag("ExitConfigErrored", () => "ConfigError"), Match.tag("ExitRuntimeErrored", () => "RuntimeError"), Match.tag("ExitInternalErrored", () => "InternalError"), Match.orElse(() => null))
2109
+ onSuccess: (decision) => Match$1.value(decision).pipe(Match$1.tag("ExitVerdictFailed", () => "VerdictFail"), Match$1.tag("ExitConfigErrored", () => "ConfigError"), Match$1.tag("ExitRuntimeErrored", () => "RuntimeError"), Match$1.tag("ExitInternalErrored", () => "InternalError"), Match$1.orElse(() => null))
2054
2110
  });
2055
2111
  yield* emitVerdict(deps, input, report);
2056
2112
  yield* Boolean$1.match(input.options.incremental, {
@@ -2200,7 +2256,7 @@ const emphasized = (allowColor, tone) => Boolean$1.match(allowColor, {
2200
2256
  onFalse: () => "plain"
2201
2257
  });
2202
2258
  const codePointOf = (char) => Option$1.getOrElse(Option$1.fromNullishOr(char.codePointAt(0)), () => 0);
2203
- const charWidth = (char) => Match.value(char).pipe(Match.when((candidate) => KNOWN_EMOJI[candidate] === true, () => 2), Match.when((candidate) => codePointOf(candidate) > 65535, () => 2), Match.orElse(() => 1));
2259
+ const charWidth = (char) => Match$1.value(char).pipe(Match$1.when((candidate) => KNOWN_EMOJI[candidate] === true, () => 2), Match$1.when((candidate) => codePointOf(candidate) > 65535, () => 2), Match$1.orElse(() => 1));
2204
2260
  const stringWidth = (text) => Arr.reduce(Array.from(text), 0, (width, char) => width + charWidth(char));
2205
2261
  const spanWidth = (span) => span.leftPad + span.rightPad + stringWidth(span.text) * span.repeat;
2206
2262
  const lineWidth = (line) => Arr.reduce(line, 0, (width, span) => width + spanWidth(span));
@@ -2210,13 +2266,13 @@ const paddingWidth = (style) => Boolean$1.match(isFirstColumn(style), {
2210
2266
  onTrue: () => 1,
2211
2267
  onFalse: () => 2
2212
2268
  });
2213
- const padsOf = (style, contentWidth, netWidth) => Match.value(style).pipe(Match.when("file", () => ({
2269
+ const padsOf = (style, contentWidth, netWidth) => Match$1.value(style).pipe(Match$1.when("file", () => ({
2214
2270
  leftPad: 0,
2215
2271
  rightPad: max(netWidth + 1 - contentWidth, 0)
2216
- })), Match.when("first", () => ({
2272
+ })), Match$1.when("first", () => ({
2217
2273
  leftPad: max(netWidth - contentWidth, 0),
2218
2274
  rightPad: 1
2219
- })), Match.orElse(() => ({
2275
+ })), Match$1.orElse(() => ({
2220
2276
  leftPad: max(netWidth - contentWidth, 0) + 1,
2221
2277
  rightPad: 1
2222
2278
  })));
@@ -2350,7 +2406,7 @@ const statusReasonTail = (mutant) => Option$1.match(Option$1.fromUndefinedOr(mut
2350
2406
  onNone: () => [],
2351
2407
  onSome: (statusReason) => [[plain("Error message: "), plain(statusReason)]]
2352
2408
  });
2353
- const statusTail = (mutant, render) => Match.value(mutant.status).pipe(Match.when("Survived", () => survivorTail(mutant, render)), Match.when("Killed", () => killerTail(mutant)), Match.whenOr("RuntimeError", "CompileError", () => statusReasonTail(mutant)), Match.orElse(() => []));
2409
+ const statusTail = (mutant, render) => Match$1.value(mutant.status).pipe(Match$1.when("Survived", () => survivorTail(mutant, render)), Match$1.when("Killed", () => killerTail(mutant)), Match$1.whenOr("RuntimeError", "CompileError", () => statusReasonTail(mutant)), Match$1.orElse(() => []));
2354
2410
  const completedTests = (entry) => Option$1.getOrElse(Option$1.fromUndefinedOr(entry.mutant.testsCompleted), () => 0);
2355
2411
  const chunkListFor = (entries, channel, render) => entries.filter((entry) => CHANNEL_BY_STATUS[entry.mutant.status] === channel).flatMap((entry) => mutantBlock(entry, render));
2356
2412
  const mutantBlock = (entry, render) => [
@@ -2399,7 +2455,7 @@ const mutantReportSection = (report, metrics, render) => Boolean$1.match(render.
2399
2455
  },
2400
2456
  onFalse: () => EMPTY_SECTIONS
2401
2457
  });
2402
- const hasFullScore = (metrics) => Match.valueTags(metrics.mutationScore, {
2458
+ const hasFullScore = (metrics) => Match$1.valueTags(metrics.mutationScore, {
2403
2459
  Scored: ({ percentage }) => percentage === 100,
2404
2460
  Unscored: () => false
2405
2461
  });
@@ -2411,13 +2467,13 @@ const drawsScoreTable = (metrics, render) => Boolean$1.match(render.reportScoreT
2411
2467
  onTrue: () => partialScoresVisible(metrics, render),
2412
2468
  onFalse: () => false
2413
2469
  });
2414
- const mutationScoreOf = (scoreType, metrics) => Match.value(scoreType).pipe(Match.when("total", () => metrics.mutationScore), Match.when("covered", () => metrics.mutationScoreBasedOnCoveredCode), Match.exhaustive);
2415
- const scoreText = (scoreType, row) => Match.valueTags(mutationScoreOf(scoreType, row.metrics), {
2470
+ const mutationScoreOf = (scoreType, metrics) => Match$1.value(scoreType).pipe(Match$1.when("total", () => metrics.mutationScore), Match$1.when("covered", () => metrics.mutationScoreBasedOnCoveredCode), Match$1.exhaustive);
2471
+ const scoreText = (scoreType, row) => Match$1.valueTags(mutationScoreOf(scoreType, row.metrics), {
2416
2472
  Scored: ({ percentage }) => percentage.toFixed(2),
2417
2473
  Unscored: () => "n/a"
2418
2474
  });
2419
- const thresholdTone = (thresholds, score) => Match.valueTags(score, {
2420
- Scored: ({ percentage }) => Match.value(percentage).pipe(Match.when((value) => value >= thresholds.high, () => "positive"), Match.when((value) => value >= thresholds.low, () => "warning"), Match.orElse(() => "negative")),
2475
+ const thresholdTone = (thresholds, score) => Match$1.valueTags(score, {
2476
+ Scored: ({ percentage }) => Match$1.value(percentage).pipe(Match$1.when((value) => value >= thresholds.high, () => "positive"), Match$1.when((value) => value >= thresholds.low, () => "warning"), Match$1.orElse(() => "negative")),
2421
2477
  Unscored: () => "muted"
2422
2478
  });
2423
2479
  const scoreTone = (thresholds, scoreType, allowColor) => Boolean$1.match(allowColor, {
@@ -2590,10 +2646,10 @@ const failAsClearText = (cause) => Reporter_exports.ReporterFailed.make({
2590
2646
  event: "mutationTestReportReady",
2591
2647
  cause: Option$1.getOrElse(Option$1.map(ErrorText_exports.errorTextOf(cause), (rendered) => rendered.text), () => "")
2592
2648
  });
2593
- const terminalReportOf = Filter.make((event) => Match.value(event).pipe(Match.tag("mutationTestReportReady", (ready) => Result.succeed({
2649
+ const terminalReportOf = Filter.make((event) => Match$1.value(event).pipe(Match$1.tag("mutationTestReportReady", (ready) => Result.succeed({
2594
2650
  report: ready.report,
2595
2651
  metrics: ready.metrics
2596
- })), Match.orElse(() => Result.fail("not-terminal"))));
2652
+ })), Match$1.orElse(() => Result.fail("not-terminal"))));
2597
2653
  const renderOptionsOf = (options) => ({
2598
2654
  allowColor: options.clearTextReporter.allowColor,
2599
2655
  allowEmojis: options.clearTextReporter.allowEmojis,
@@ -2696,7 +2752,7 @@ const failAsJsonReporter = (cause) => Reporter_exports.ReporterFailed.make({
2696
2752
  event: "mutationTestReportReady",
2697
2753
  cause: Option$1.getOrElse(Option$1.map(ErrorText_exports.errorTextOf(cause), (rendered) => rendered.text), () => "")
2698
2754
  });
2699
- const reportOf$1 = Filter.make((event) => Match.value(event).pipe(Match.tag("mutationTestReportReady", (ready) => Result.succeed(ready.report)), Match.orElse(() => Result.fail("not-ready"))));
2755
+ const reportOf$1 = Filter.make((event) => Match$1.value(event).pipe(Match$1.tag("mutationTestReportReady", (ready) => Result.succeed(ready.report)), Match$1.orElse(() => Result.fail("not-ready"))));
2700
2756
  const readJsonReport = (input) => Effect$1.map(Stream.fromAsyncIterable(input.events, failAsJsonReporter).pipe(Stream.filterMap(reportOf$1), Stream.run(Sink.last())), (last) => ({
2701
2757
  _tag: "JsonReportCommand",
2702
2758
  reported: Option$1.getOrUndefined(last),
@@ -2871,7 +2927,7 @@ const planReadyState = (state, planReady, now) => {
2871
2927
  }
2872
2928
  };
2873
2929
  };
2874
- const advance = (state, event, now) => Match.value(event).pipe(Match.tag("dryRunCompleted", (dryRun) => ({
2930
+ const advance = (state, event, now) => Match$1.value(event).pipe(Match$1.tag("dryRunCompleted", (dryRun) => ({
2875
2931
  kind: "skip",
2876
2932
  state: {
2877
2933
  ...state,
@@ -2881,10 +2937,10 @@ const advance = (state, event, now) => Match.value(event).pipe(Match.tag("dryRun
2881
2937
  capabilities: { reloadEnvironment: dryRun.capabilities.reloadEnvironment }
2882
2938
  }
2883
2939
  }
2884
- })), Match.tag("mutationTestingPlanReady", (planReady) => ({
2940
+ })), Match$1.tag("mutationTestingPlanReady", (planReady) => ({
2885
2941
  kind: "skip",
2886
2942
  state: planReadyState(state, planReady, now)
2887
- })), Match.tag("mutantTested", (tested) => Option$1.match(Record$1.get(state.tally.ticksByMutantId, tested.id), {
2943
+ })), Match$1.tag("mutantTested", (tested) => Option$1.match(Record$1.get(state.tally.ticksByMutantId, tested.id), {
2888
2944
  onNone: () => ({
2889
2945
  kind: "skip",
2890
2946
  state
@@ -2896,10 +2952,10 @@ const advance = (state, event, now) => Match.value(event).pipe(Match.tag("dryRun
2896
2952
  bar: Option$1.getOrNull(Option$1.map(Option$1.fromNullishOr(state.bar), (bar) => tickProgressBar(bar, ticks)))
2897
2953
  }
2898
2954
  })
2899
- })), Match.tag("mutationTestReportReady", () => ({
2955
+ })), Match$1.tag("mutationTestReportReady", () => ({
2900
2956
  kind: "skip",
2901
2957
  state
2902
- })), Match.exhaustive);
2958
+ })), Match$1.exhaustive);
2903
2959
  const progressStep = (state, event, now) => Option$1.match(Option$1.fromNullishOr(event), {
2904
2960
  onNone: () => ({
2905
2961
  kind: "finalize",
@@ -2912,10 +2968,10 @@ const secondsBetween = (now, startedAt) => floor$1((now - startedAt) / 1e3);
2912
2968
  const formatTime = (timeInSeconds) => {
2913
2969
  const hours = floor$1(timeInSeconds / 3600);
2914
2970
  const minutes = floor$1(timeInSeconds % 3600 / 60);
2915
- return Match.value(hours > 0).pipe(Match.when(true, () => `~${hours}h ${minutes}m`), Match.when(false, () => Match.value(minutes > 0).pipe(Match.when(true, () => `~${minutes}m`), Match.when(false, () => "<1m"), Match.exhaustive)), Match.exhaustive);
2971
+ return Match$1.value(hours > 0).pipe(Match$1.when(true, () => `~${hours}h ${minutes}m`), Match$1.when(false, () => Match$1.value(minutes > 0).pipe(Match$1.when(true, () => `~${minutes}m`), Match$1.when(false, () => "<1m"), Match$1.exhaustive)), Match$1.exhaustive);
2916
2972
  };
2917
2973
  const remainingSeconds = (tally, now) => floor$1(secondsBetween(now, tally.startedAt) / tally.ticks * (tally.total - tally.ticks));
2918
- const positiveTimeLabel = (remaining) => Match.value(remaining > 0).pipe(Match.when(true, () => formatTime(remaining)), Match.when(false, () => "n/a"), Match.exhaustive);
2974
+ const positiveTimeLabel = (remaining) => Match$1.value(remaining > 0).pipe(Match$1.when(true, () => formatTime(remaining)), Match$1.when(false, () => "n/a"), Match$1.exhaustive);
2919
2975
  const remainingLabel = (tally, now) => {
2920
2976
  const remaining = remainingSeconds(tally, now);
2921
2977
  return Boolean$1.match(Number.isFinite(remaining), {
@@ -2934,7 +2990,7 @@ const progressData = (tally, now) => ({
2934
2990
  etc: remainingLabel(tally, now)
2935
2991
  });
2936
2992
  const formatBar = (bar, data) => {
2937
- const ratio = Match.value(bar.total === 0).pipe(Match.when(true, () => 0), Match.when(false, () => min$1(bar.curr / bar.total, 1)), Match.exhaustive);
2993
+ const ratio = Match$1.value(bar.total === 0).pipe(Match$1.when(true, () => 0), Match$1.when(false, () => min$1(bar.curr / bar.total, 1)), Match$1.exhaustive);
2938
2994
  const filled = floor$1(ratio * bar.width);
2939
2995
  const filledBar = bar.complete.repeat(filled) + bar.incomplete.repeat(bar.width - filled);
2940
2996
  const percent = `${floor$1(ratio * 100).toString().padStart(3, " ")}%`;
@@ -2947,7 +3003,7 @@ const renderTick = (tick) => `\r${formatBar(tick.bar, progressData(tick.tally, t
2947
3003
  })}`;
2948
3004
  const renderDecisionOf = (command) => {
2949
3005
  const step = progressStep(command.state, command.event, command.now);
2950
- return Match.value(step.kind).pipe(Match.when("finalize", () => Option$1.match(Option$1.fromNullishOr(step.state.bar), {
3006
+ return Match$1.value(step.kind).pipe(Match$1.when("finalize", () => Option$1.match(Option$1.fromNullishOr(step.state.bar), {
2951
3007
  onNone: () => ProgressChunkSuppressed.make({ state: step.state }),
2952
3008
  onSome: (bar) => Boolean$1.match(isComplete(bar), {
2953
3009
  onTrue: () => ProgressChunkSuppressed.make({ state: step.state }),
@@ -2956,7 +3012,7 @@ const renderDecisionOf = (command) => {
2956
3012
  state: step.state
2957
3013
  })
2958
3014
  })
2959
- })), Match.when("skip", () => ProgressChunkSuppressed.make({ state: step.state })), Match.when("tick", () => Option$1.match(Option$1.fromNullishOr(step.state.bar), {
3015
+ })), Match$1.when("skip", () => ProgressChunkSuppressed.make({ state: step.state })), Match$1.when("tick", () => Option$1.match(Option$1.fromNullishOr(step.state.bar), {
2960
3016
  onNone: () => ProgressChunkSuppressed.make({ state: step.state }),
2961
3017
  onSome: (bar) => ProgressBarTick.make({
2962
3018
  chunk: renderTick({
@@ -2966,7 +3022,7 @@ const renderDecisionOf = (command) => {
2966
3022
  }),
2967
3023
  state: step.state
2968
3024
  })
2969
- })), Match.exhaustive);
3025
+ })), Match$1.exhaustive);
2970
3026
  };
2971
3027
  const renderProgressReport = Workflow.make({
2972
3028
  command: ProgressReportCommand,
@@ -3081,7 +3137,7 @@ var IdGenerator = class IdGenerator extends Context.Service()("@systemfsoftware/
3081
3137
  //#region src/run/RunEnvironment.service.ts
3082
3138
  var RunEnvironment = class RunEnvironment extends Context.Service()("@systemfsoftware/stryker-js/run/RunEnvironment.service/RunEnvironment") {
3083
3139
  static stage = dual((args) => Predicate$1.isObject(args[0]) && !Queue.isQueue(args[0]), (env, events) => {
3084
- const eventsLayer = Match.value(events).pipe(Match.when(void 0, () => Layer.effect(RunEvents, Queue.bounded(RunEvent.QUEUE_BOUND))), Match.orElse((queue) => Layer.succeed(RunEvents, queue)));
3140
+ const eventsLayer = Match$1.value(events).pipe(Match$1.when(void 0, () => Layer.effect(RunEvents, Queue.bounded(RunEvent.QUEUE_BOUND))), Match$1.orElse((queue) => Layer.succeed(RunEvents, queue)));
3085
3141
  const stageLayer = Layer.mergeAll(Layer.succeed(RunEnvironment, env), eventsLayer, IdGenerator.layer, ProjectFiles.layer, Layer.effect(Scope.Scope, Effect$1.gen(function* () {
3086
3142
  const stageScope = yield* Scope.make();
3087
3143
  yield* Effect$1.addFinalizer(() => Scope.close(stageScope, Exit.void));
@@ -3196,9 +3252,9 @@ var OptionsUndecodable = class extends S.TaggedClass()("OptionsUndecodable", {
3196
3252
  }) {
3197
3253
  [ValidateOptionsDecisionTypeId] = ValidateOptionsDecisionTypeId;
3198
3254
  };
3199
- const ignoreStaticErrors = (options) => Match.value(Boolean$1.and(options.ignoreStatic, options.coverageAnalysis !== "perTest")).pipe(Match.when(true, () => [`Config option "ignoreStatic" is not supported with coverage analysis "${options.coverageAnalysis}". Either turn off "ignoreStatic", or configure "coverageAnalysis" to be "perTest".`]), Match.orElse(() => []));
3200
- const startLineErrors = (index, mutationRange, start) => Match.value(start < 1).pipe(Match.when(true, () => [`Config option "mutate[${index}]" is invalid. Mutation range "${mutationRange}" is invalid, line ${start} does not exist (lines start at 1).`]), Match.orElse(() => []));
3201
- const lineOrderErrors = (index, mutationRange, start, end) => Match.value(start > end).pipe(Match.when(true, () => [`Config option "mutate[${index}]" is invalid. Mutation range "${mutationRange}" is invalid. The "from" line number (${start}) should be less then the "to" line number (${end}).`]), Match.orElse(() => []));
3255
+ const ignoreStaticErrors = (options) => Match$1.value(Boolean$1.and(options.ignoreStatic, options.coverageAnalysis !== "perTest")).pipe(Match$1.when(true, () => [`Config option "ignoreStatic" is not supported with coverage analysis "${options.coverageAnalysis}". Either turn off "ignoreStatic", or configure "coverageAnalysis" to be "perTest".`]), Match$1.orElse(() => []));
3256
+ const startLineErrors = (index, mutationRange, start) => Match$1.value(start < 1).pipe(Match$1.when(true, () => [`Config option "mutate[${index}]" is invalid. Mutation range "${mutationRange}" is invalid, line ${start} does not exist (lines start at 1).`]), Match$1.orElse(() => []));
3257
+ const lineOrderErrors = (index, mutationRange, start, end) => Match$1.value(start > end).pipe(Match$1.when(true, () => [`Config option "mutate[${index}]" is invalid. Mutation range "${mutationRange}" is invalid. The "from" line number (${start}) should be less then the "to" line number (${end}).`]), Match$1.orElse(() => []));
3202
3258
  const columnSuffixOf = (column) => Option$1.match(Option$1.fromUndefinedOr(column), {
3203
3259
  onNone: () => "",
3204
3260
  onSome: (present) => `:${present}`
@@ -3216,7 +3272,7 @@ const mutationRangeErrors = (mutateString, index) => Option$1.match(decodeMutati
3216
3272
  onSome: (specifier) => requireUnmagicalMutationRange(mutateString, index, specifier)
3217
3273
  });
3218
3274
  const IGNORED_NODE_ARGS_WARNING = "Using \"testRunnerNodeArgs\" together with the \"command\" test runner is not supported, these arguments will be ignored. You can add your custom arguments by setting the \"commandRunner.command\" option.";
3219
- const isCommandRunnerName = (name) => Match.value(name).pipe(Match.when(Match.string, (value) => value.toLowerCase() === "command"), Match.orElse(() => false));
3275
+ const isCommandRunnerName = (name) => Match$1.value(name).pipe(Match$1.when(Match$1.string, (value) => value.toLowerCase() === "command"), Match$1.orElse(() => false));
3220
3276
  const commandRunnerWarningsOf = (options) => Boolean$1.match(Boolean$1.and(isCommandRunnerName(options.testRunner), options.testRunnerNodeArgs.length > 0), {
3221
3277
  onTrue: () => [IGNORED_NODE_ARGS_WARNING],
3222
3278
  onFalse: () => []
@@ -3227,12 +3283,12 @@ const OPTIONS_ADDED_BY_STRYKER = [
3227
3283
  "configFile",
3228
3284
  "$schema"
3229
3285
  ];
3230
- const schemaPropertyNames = (schema) => Match.value(schema["properties"]).pipe(Match.when(isNonNullObject, (properties) => Object.keys(properties)), Match.orElse(() => []));
3286
+ const schemaPropertyNames = (schema) => Match$1.value(schema["properties"]).pipe(Match$1.when(isNonNullObject, (properties) => Object.keys(properties)), Match$1.orElse(() => []));
3231
3287
  const excessOptionNames = (options, schema) => {
3232
3288
  const schemaKeys = schemaPropertyNames(schema);
3233
3289
  return Object.keys(options).filter((key) => key.endsWith("_comment") === false).filter((key) => OPTIONS_ADDED_BY_STRYKER.includes(key) === false).filter((key) => schemaKeys.includes(key) === false);
3234
3290
  };
3235
- const warningRequested = (warning, warnings) => Match.value(warnings).pipe(Match.when(S.is(S.Boolean), (global) => global), Match.orElse((configured) => configured[warning] === true));
3291
+ const warningRequested = (warning, warnings) => Match$1.value(warnings).pipe(Match$1.when(S.is(S.Boolean), (global) => global), Match$1.orElse((configured) => configured[warning] === true));
3236
3292
  const pluginsJson = (options) => Result.getOrElse(S.encodeResult(S.String.pipe(S.Array, S.fromJsonString))([...options.plugins]), () => "[]");
3237
3293
  const POSSIBLE_CAUSES_OF = (loadedPlugins) => `Possible causes:
3238
3294
  * Is it a typo on your end?
@@ -3243,7 +3299,7 @@ const POSSIBLE_CAUSES_OF = (loadedPlugins) => `Possible causes:
3243
3299
  const unknownOptionWarnings = (options, schema) => {
3244
3300
  return excessOptionNames(options, schema).map((excess) => `Unknown stryker config option "${excess}".`).concat(POSSIBLE_CAUSES_OF(pluginsJson(options)));
3245
3301
  };
3246
- const excessOptionWarningsOf = (options, schema) => Match.value(warningRequested("unknownOptions", options.warnings)).pipe(Match.when(true, () => unknownOptionWarnings(options, schema)), Match.orElse(() => []));
3302
+ const excessOptionWarningsOf = (options, schema) => Match$1.value(warningRequested("unknownOptions", options.warnings)).pipe(Match$1.when(true, () => unknownOptionWarnings(options, schema)), Match$1.orElse(() => []));
3247
3303
  const NON_JSON_PRIMITIVE_TYPES = {
3248
3304
  bigint: true,
3249
3305
  function: true,
@@ -3258,7 +3314,7 @@ const describedChild = (scope) => (child) => Option$1.match(Option$1.fromUndefin
3258
3314
  onSome: (descriptions) => descriptions.map(scopedUnserializable(scope))
3259
3315
  });
3260
3316
  const describedEntries = (entries) => entries.flatMap(([scope, child]) => describedChild(scope)(child));
3261
- const classNameOf = (value) => Match.value(value.constructor).pipe(Match.when(Match.defined, (constructor) => constructor.name), Match.orElse(() => "Object"));
3317
+ const classNameOf = (value) => Match$1.value(value.constructor).pipe(Match$1.when(Match$1.defined, (constructor) => constructor.name), Match$1.orElse(() => "Object"));
3262
3318
  const describeUnserializableInstance = (value) => [{
3263
3319
  path: [],
3264
3320
  reason: `Value is an instance of "${classNameOf(value)}", this detail will get lost in translation during serialization`
@@ -3266,7 +3322,7 @@ const describeUnserializableInstance = (value) => [{
3266
3322
  const isArrayValue = (value) => Array.isArray(value);
3267
3323
  const isPlainObjectValue = (value) => Boolean$1.and(Array.isArray(value) === false, value.constructor === Object);
3268
3324
  const describedIndexedChildren = (arrayed) => describedEntries(arrayed.map((child, index) => [index.toString(), child]));
3269
- const describeUnserializableObject = (value) => Match.value(value).pipe(Match.when(isArrayValue, describedIndexedChildren), Match.orElse((recorded) => Option$1.match(Option$1.liftPredicate(recorded, isPlainObjectValue), {
3325
+ const describeUnserializableObject = (value) => Match$1.value(value).pipe(Match$1.when(isArrayValue, describedIndexedChildren), Match$1.orElse((recorded) => Option$1.match(Option$1.liftPredicate(recorded, isPlainObjectValue), {
3270
3326
  onNone: () => describeUnserializableInstance(recorded),
3271
3327
  onSome: (plain) => describedEntries(Object.entries(plain))
3272
3328
  })));
@@ -3305,7 +3361,7 @@ const unserializableWarningsOf = (options) => Option$1.match(Option$1.fromUndefi
3305
3361
  onNone: () => [],
3306
3362
  onSome: (unserializables) => unserializables.map((unserializable) => `Config option "${unserializable.path.join(".")}" is not (fully) serializable. ${unserializable.reason}. Any test runner or checker worker processes might not receive this value as intended.`).concat("(disable \"warnings.unserializableOptions\" to ignore this warning)")
3307
3363
  });
3308
- const unserializableOptionsWarningsOf = (options) => Match.value(warningRequested("unserializableOptions", options.warnings)).pipe(Match.when(true, () => unserializableWarningsOf(options)), Match.orElse(() => []));
3364
+ const unserializableOptionsWarningsOf = (options) => Match$1.value(warningRequested("unserializableOptions", options.warnings)).pipe(Match$1.when(true, () => unserializableWarningsOf(options)), Match$1.orElse(() => []));
3309
3365
  const markOptions = (options, schema) => [...excessOptionWarningsOf(options, schema), ...unserializableOptionsWarningsOf(options)];
3310
3366
  const validatedOf = (options, schema) => {
3311
3367
  const customErrors = customValidationErrors(options);
@@ -3506,7 +3562,7 @@ const nodeWorkerLauncherLayer = (childEnv) => Layer.effect(WorkerLauncher, Effec
3506
3562
  return { spawn: Effect$1.fn("stryker.worker.spawn")(function* (params) {
3507
3563
  const workerDir = yield* fs.makeTempDirectoryScoped({ prefix: params.tempDirPrefix });
3508
3564
  const workerId = yield* crypto.randomUUIDv4;
3509
- const socketPath = Match.value(globalThis.process.platform).pipe(Match.when("win32", () => `\\\\.\\pipe\\stryker-worker-${workerId}`), Match.orElse(() => path.join(workerDir, "worker.sock")));
3565
+ const socketPath = Match$1.value(globalThis.process.platform).pipe(Match$1.when("win32", () => `\\\\.\\pipe\\stryker-worker-${workerId}`), Match$1.orElse(() => path.join(workerDir, "worker.sock")));
3510
3566
  const optionsFile = path.join(workerDir, "options.json");
3511
3567
  yield* fs.writeFileString(optionsFile, params.optionsJson);
3512
3568
  yield* restrictToOwnerOrWarn(fs, optionsFile);
@@ -3528,17 +3584,17 @@ const nodeWorkerLauncherLayer = (childEnv) => Layer.effect(WorkerLauncher, Effec
3528
3584
  exitCode
3529
3585
  })), {
3530
3586
  onFailure: (refused) => Effect$1.fail(refused),
3531
- onSuccess: (decision) => Match.value(decision).pipe(Match.tag("WorkerOutOfMemory", (outOfMemory) => Effect$1.fail(OutOfMemoryError.make({
3587
+ onSuccess: (decision) => Match$1.value(decision).pipe(Match$1.tag("WorkerOutOfMemory", (outOfMemory) => Effect$1.fail(OutOfMemoryError.make({
3532
3588
  pid: outOfMemory.pid,
3533
3589
  exitCode: outOfMemory.exitCode
3534
- }))), Match.tag("WorkerCrashed", (crashed) => Effect$1.fail(ChildProcessCrashedError.make({
3590
+ }))), Match$1.tag("WorkerCrashed", (crashed) => Effect$1.fail(ChildProcessCrashedError.make({
3535
3591
  pid: crashed.pid,
3536
3592
  exit: {
3537
3593
  _tag: "Code",
3538
3594
  code: crashed.exitCode
3539
3595
  },
3540
3596
  cause: "worker exited before it accepted the RPC connection"
3541
- }))), Match.exhaustive)
3597
+ }))), Match$1.exhaustive)
3542
3598
  })));
3543
3599
  return make$3({
3544
3600
  pid: Number(handle.pid),
@@ -3689,7 +3745,7 @@ const buildReportHtml = (report, scriptContent) => `<!DOCTYPE html>
3689
3745
  </body>
3690
3746
  </html>`;
3691
3747
  const BUNDLE_SPECIFIER = "mutation-testing-elements/dist/mutation-test-elements.js";
3692
- const inlinedBundle = () => Match.value(typeof __STRYKER_HTML_REPORTER_CLIENT_BUNDLE__).pipe(Match.when("undefined", () => void 0), Match.orElse(() => __STRYKER_HTML_REPORTER_CLIENT_BUNDLE__));
3748
+ const inlinedBundle = () => Match$1.value(typeof __STRYKER_HTML_REPORTER_CLIENT_BUNDLE__).pipe(Match$1.when("undefined", () => void 0), Match$1.orElse(() => __STRYKER_HTML_REPORTER_CLIENT_BUNDLE__));
3693
3749
  const readBundleFromDisk = Effect$1.fn("html_report.read_bundle_from_disk")(function* () {
3694
3750
  const fs = yield* FileSystem.FileSystem;
3695
3751
  const bundlePath = yield* (yield* Path.Path).fromFileUrl(new URL(import.meta.resolve(BUNDLE_SPECIFIER)));
@@ -3780,11 +3836,11 @@ const percentageDetails = (text, availableParallelism) => Option$1.match(percent
3780
3836
  announcement: Option$1.none()
3781
3837
  })
3782
3838
  });
3783
- const detailsOf = (concurrency, availableParallelism) => Match.value(concurrency).pipe(Match.when(Predicate$1.isString, (text) => percentageDetails(text, availableParallelism)), Match.when(Predicate$1.isNumber, (total) => ({
3839
+ const detailsOf = (concurrency, availableParallelism) => Match$1.value(concurrency).pipe(Match$1.when(Predicate$1.isString, (text) => percentageDetails(text, availableParallelism)), Match$1.when(Predicate$1.isNumber, (total) => ({
3784
3840
  total,
3785
3841
  isPercentage: false,
3786
3842
  announcement: Option$1.none()
3787
- })), Match.orElse(() => ({
3843
+ })), Match$1.orElse(() => ({
3788
3844
  total: defaultedTotal(availableParallelism),
3789
3845
  isPercentage: false,
3790
3846
  announcement: Option$1.none()
@@ -3845,7 +3901,7 @@ const concurrencyCell = Sandwich.named("stryker.concurrency")(readConcurrency).d
3845
3901
  const CompileGlobTypeId = Symbol.for("@systemfsoftware/stryker-js/CompileGlobDecision");
3846
3902
  const escapeRegex = (value) => value.replace(/[\\^$.|()+]/g, "\\$&");
3847
3903
  const orEmpty = (value) => Option$1.getOrElse(Option$1.fromUndefinedOr(value), () => "");
3848
- const globSegmentToRegex = (segment) => Match.value(segment.length === 0).pipe(Match.withReturnType(), Match.when(true, () => ""), Match.orElse(() => Match.value(segment.charCodeAt(0) - 42).pipe(Match.withReturnType(), Match.when(0, () => {
3904
+ const globSegmentToRegex = (segment) => Match$1.value(segment.length === 0).pipe(Match$1.withReturnType(), Match$1.when(true, () => ""), Match$1.orElse(() => Match$1.value(segment.charCodeAt(0) - 42).pipe(Match$1.withReturnType(), Match$1.when(0, () => {
3849
3905
  const rest = segment.slice(1);
3850
3906
  return Boolean.match(rest.startsWith("*"), {
3851
3907
  onTrue: () => {
@@ -3857,7 +3913,7 @@ const globSegmentToRegex = (segment) => Match.value(segment.length === 0).pipe(M
3857
3913
  },
3858
3914
  onFalse: () => `[^/]*${globSegmentToRegex(rest)}`
3859
3915
  });
3860
- }), Match.when(21, () => `[^/]${globSegmentToRegex(segment.slice(1))}`), Match.when(81, () => {
3916
+ }), Match$1.when(21, () => `[^/]${globSegmentToRegex(segment.slice(1))}`), Match$1.when(81, () => {
3861
3917
  const close = segment.indexOf("}");
3862
3918
  return Boolean.match(close < 0, {
3863
3919
  onTrue: () => `${escapeRegex("{")}${globSegmentToRegex(segment.slice(1))}`,
@@ -3865,13 +3921,13 @@ const globSegmentToRegex = (segment) => Match.value(segment.length === 0).pipe(M
3865
3921
  return `(?:${segment.slice(1, close).split(",").map(globSegmentToRegex).join("|")})${globSegmentToRegex(segment.slice(close + 1))}`;
3866
3922
  }
3867
3923
  });
3868
- }), Match.when(49, () => {
3924
+ }), Match$1.when(49, () => {
3869
3925
  const close = segment.indexOf("]", 1);
3870
3926
  return Boolean.match(close < 0, {
3871
3927
  onTrue: () => `${escapeRegex("[")}${globSegmentToRegex(segment.slice(1))}`,
3872
3928
  onFalse: () => `${segment.slice(0, close + 1)}${globSegmentToRegex(segment.slice(close + 1))}`
3873
3929
  });
3874
- }), Match.orElse(() => `${escapeRegex(orEmpty(segment[0]))}${globSegmentToRegex(segment.slice(1))}`))));
3930
+ }), Match$1.orElse(() => `${escapeRegex(orEmpty(segment[0]))}${globSegmentToRegex(segment.slice(1))}`))));
3875
3931
  var GlobMatcher = class extends S.TaggedClass()("GlobMatcher", {
3876
3932
  source: S.String,
3877
3933
  flags: S.String
@@ -3895,7 +3951,7 @@ const matcherOf = (pattern, caseInsensitive) => GlobMatcher.make({
3895
3951
  onFalse: () => ""
3896
3952
  })
3897
3953
  });
3898
- const decisionOf$1 = (command) => Match.value(command.pattern).pipe(Match.withReturnType(), Match.when(Match.string, (value) => matcherOf(value, command.caseInsensitive)), Match.orElse(() => GlobUnmatchable.make({ pattern: command.pattern })));
3954
+ const decisionOf$1 = (command) => Match$1.value(command.pattern).pipe(Match$1.withReturnType(), Match$1.when(Match$1.string, (value) => matcherOf(value, command.caseInsensitive)), Match$1.orElse(() => GlobUnmatchable.make({ pattern: command.pattern })));
3899
3955
  const compileGlob = Workflow.make({
3900
3956
  command: CompileGlobCommand,
3901
3957
  decision: CompileGlobDecision,
@@ -3923,7 +3979,7 @@ const compileIgnoreRule = (pattern) => {
3923
3979
  onTrue: () => pattern.slice(1),
3924
3980
  onFalse: () => pattern
3925
3981
  });
3926
- return Match.value(expressionOf$1(body, true)).pipe(Match.withReturnType(), Match.tag("GlobMatcher", (matcher) => ruleOf(negate, new RegExp(matcher.source, matcher.flags))), Match.tag("GlobUnmatchable", () => ruleOf(negate, UNMATCHABLE)), Match.exhaustive);
3982
+ return Match$1.value(expressionOf$1(body, true)).pipe(Match$1.withReturnType(), Match$1.tag("GlobMatcher", (matcher) => ruleOf(negate, new RegExp(matcher.source, matcher.flags))), Match$1.tag("GlobUnmatchable", () => ruleOf(negate, UNMATCHABLE)), Match$1.exhaustive);
3927
3983
  };
3928
3984
  const matchesDirectoryPartially = (entryPath, rule) => [`/${entryPath}`, entryPath].some((candidate) => rule.prefix.test(candidate));
3929
3985
  const matchesFileCandidate = (entryName, entryPath, rule) => [
@@ -3999,7 +4055,7 @@ const decide$12 = (command) => Option$1.match(Option$1.fromUndefinedOr(command.r
3999
4055
  actual: void 0,
4000
4056
  expected: command.expectedVersion
4001
4057
  }),
4002
- onSome: (report) => Match.value(report.incrementalVersion === command.expectedVersion).pipe(Match.when(true, () => IncrementalReportKeep.make({ report })), Match.orElse(() => IncrementalReportDiscard.make({
4058
+ onSome: (report) => Match$1.value(report.incrementalVersion === command.expectedVersion).pipe(Match$1.when(true, () => IncrementalReportKeep.make({ report })), Match$1.orElse(() => IncrementalReportDiscard.make({
4003
4059
  actual: report.incrementalVersion,
4004
4060
  expected: command.expectedVersion
4005
4061
  })))
@@ -4065,10 +4121,10 @@ const consumeCharClass = (pattern, index) => {
4065
4121
  })
4066
4122
  });
4067
4123
  };
4068
- const consumeGlobChar = (pattern, index) => Match.value(pattern[index]).pipe(Match.withReturnType(), Match.when("*", () => consumeStar(pattern, index)), Match.when("?", () => ({
4124
+ const consumeGlobChar = (pattern, index) => Match$1.value(pattern[index]).pipe(Match$1.withReturnType(), Match$1.when("*", () => consumeStar(pattern, index)), Match$1.when("?", () => ({
4069
4125
  consumed: 1,
4070
4126
  output: "[^/]"
4071
- })), Match.when("{", () => consumeBrace(pattern, index)), Match.when("[", () => consumeCharClass(pattern, index)), Match.orElse(() => ({
4127
+ })), Match$1.when("{", () => consumeBrace(pattern, index)), Match$1.when("[", () => consumeCharClass(pattern, index)), Match$1.orElse(() => ({
4072
4128
  consumed: 1,
4073
4129
  output: escapeRegExp(Option$1.getOrElse(Option$1.fromUndefinedOr(pattern[index]), () => ""))
4074
4130
  })));
@@ -4098,7 +4154,7 @@ const resolveAgainstBase = (basePath, pattern) => {
4098
4154
  })}`
4099
4155
  });
4100
4156
  };
4101
- const globPatternOf = (pattern) => Match.value(pattern).pipe(Match.withReturnType(), Match.when(Match.string, (value) => normalizeFileName(value)), Match.when(true, () => DEFAULT_GLOB$1), Match.orElse(() => void 0));
4157
+ const globPatternOf = (pattern) => Match$1.value(pattern).pipe(Match$1.withReturnType(), Match$1.when(Match$1.string, (value) => normalizeFileName(value)), Match$1.when(true, () => DEFAULT_GLOB$1), Match$1.orElse(() => void 0));
4102
4158
  const hasHiddenSegment$1 = (fileName, base) => {
4103
4159
  return Boolean.match(fileName.startsWith(base), {
4104
4160
  onTrue: () => fileName.slice(base.length),
@@ -4112,7 +4168,7 @@ const isExcludedHiddenFile = (normalizedFile, base, allowHiddenFiles, patternHas
4112
4168
  onFalse: () => false
4113
4169
  })
4114
4170
  });
4115
- const createPureMatcher = (pattern, allowHiddenFiles, basePath) => Match.value(globPatternOf(pattern)).pipe(Match.withReturnType(), Match.when(void 0, () => () => false), Match.orElse((relative) => {
4171
+ const createPureMatcher = (pattern, allowHiddenFiles, basePath) => Match$1.value(globPatternOf(pattern)).pipe(Match$1.withReturnType(), Match$1.when(void 0, () => () => false), Match$1.orElse((relative) => {
4116
4172
  const regex = globToRegExp(resolveAgainstBase(basePath, relative));
4117
4173
  const patternHasDot = relative.includes(".");
4118
4174
  const base = `${trimTrailingSlashes(normalizeFileName(basePath))}/`;
@@ -4362,7 +4418,7 @@ const parseAndDecodeIncrementalReport = Schema.decodeUnknownResult(Schema.fromJs
4362
4418
  const reportOf = (contents) => Option$1.getOrUndefined(Option$1.flatMap(Option$1.fromUndefinedOr(contents), (text) => Result.getSuccess(parseAndDecodeIncrementalReport(text))));
4363
4419
  const incrementalContentsOf = (fs, options) => Boolean.match(options.incremental, {
4364
4420
  onFalse: () => Effect$1.succeedNone,
4365
- onTrue: () => fs.readFileString(options.incrementalFile).pipe(Effect$1.asSome, Effect$1.tapError((error) => Match.value(error.reason).pipe(Match.tag("NotFound", () => Effect$1.logInfo(`No incremental result file found at ${options.incrementalFile}, a full mutation testing run will be performed.`)), Match.orElse(() => Effect$1.void))), Effect$1.catchTag("PlatformError", (error) => Match.value(error.reason).pipe(Match.tag("NotFound", () => Effect$1.succeedNone), Match.orElse(() => Effect$1.fail(error)))))
4421
+ onTrue: () => fs.readFileString(options.incrementalFile).pipe(Effect$1.asSome, Effect$1.tapError((error) => Match$1.value(error.reason).pipe(Match$1.tag("NotFound", () => Effect$1.logInfo(`No incremental result file found at ${options.incrementalFile}, a full mutation testing run will be performed.`)), Match$1.orElse(() => Effect$1.void))), Effect$1.catchTag("PlatformError", (error) => Match$1.value(error.reason).pipe(Match$1.tag("NotFound", () => Effect$1.succeedNone), Match$1.orElse(() => Effect$1.fail(error)))))
4366
4422
  });
4367
4423
  const testFileSelectionOf = (options) => ({
4368
4424
  testFilePatterns: options.testFiles,
@@ -4523,28 +4579,28 @@ S.Struct({
4523
4579
  mode: OutputMode,
4524
4580
  signal: ModeSignal
4525
4581
  });
4526
- const nextFramingState = (state, event) => Match.value(event).pipe(Match.tag("verdict", "error", "help", () => FramingState.make({
4582
+ const nextFramingState = (state, event) => Match$1.value(event).pipe(Match$1.tag("verdict", "error", "help", () => FramingState.make({
4527
4583
  mode: state.mode,
4528
4584
  signal: state.signal,
4529
4585
  headerWritten: state.headerWritten,
4530
4586
  terminalSeen: true,
4531
4587
  completed: state.completed,
4532
4588
  total: state.total
4533
- })), Match.tag("plan", (e) => FramingState.make({
4589
+ })), Match$1.tag("plan", (e) => FramingState.make({
4534
4590
  mode: state.mode,
4535
4591
  signal: state.signal,
4536
4592
  headerWritten: state.headerWritten,
4537
4593
  terminalSeen: state.terminalSeen,
4538
4594
  completed: state.completed,
4539
4595
  total: e.total
4540
- })), Match.tag("mutantTested", (e) => FramingState.make({
4596
+ })), Match$1.tag("mutantTested", (e) => FramingState.make({
4541
4597
  mode: state.mode,
4542
4598
  signal: state.signal,
4543
4599
  headerWritten: state.headerWritten,
4544
4600
  terminalSeen: state.terminalSeen,
4545
4601
  completed: e.completed,
4546
4602
  total: e.total
4547
- })), Match.tag("stream", () => state), Match.tag("phase", () => state), Match.tag("tick", () => state), Match.tag("plugins", () => state), Match.tag("formats", () => state), Match.tag("skipped", () => state), Match.exhaustive);
4603
+ })), Match$1.tag("stream", () => state), Match$1.tag("phase", () => state), Match$1.tag("tick", () => state), Match$1.tag("plugins", () => state), Match$1.tag("formats", () => state), Match$1.tag("skipped", () => state), Match$1.exhaustive);
4548
4604
  const noteState = (state, event) => nextFramingState(state, event);
4549
4605
  const formatScore = (score) => Option$1.match(Option$1.fromNullishOr(score), {
4550
4606
  onNone: () => "n/a",
@@ -4554,7 +4610,7 @@ const formatTotal = (total) => Option$1.match(Option$1.fromNullishOr(total), {
4554
4610
  onNone: () => "?",
4555
4611
  onSome: (val) => String(val)
4556
4612
  });
4557
- const formatStderrEvent = (event) => Match.value(event).pipe(Match.tag("plan", (e) => `plan ${e.total} mutants`), Match.tag("phase", (e) => `phase ${e.phase}`), Match.tag("tick", (e) => `${e.completed}/${formatTotal(e.total)} elapsed ${e.elapsedMs}ms`), Match.tag("verdict", (e) => `score ${formatScore(e.score)} killed ${e.counts.killed} survived ${e.counts.survived}`), Match.tag("error", (e) => `error ${e.error}`), Match.tag("stream", () => null), Match.tag("mutantTested", () => null), Match.tag("help", () => null), Match.tag("plugins", () => null), Match.tag("formats", () => null), Match.tag("skipped", () => null), Match.exhaustive);
4613
+ const formatStderrEvent = (event) => Match$1.value(event).pipe(Match$1.tag("plan", (e) => `plan ${e.total} mutants`), Match$1.tag("phase", (e) => `phase ${e.phase}`), Match$1.tag("tick", (e) => `${e.completed}/${formatTotal(e.total)} elapsed ${e.elapsedMs}ms`), Match$1.tag("verdict", (e) => `score ${formatScore(e.score)} killed ${e.counts.killed} survived ${e.counts.survived}`), Match$1.tag("error", (e) => `error ${e.error}`), Match$1.tag("stream", () => null), Match$1.tag("mutantTested", () => null), Match$1.tag("help", () => null), Match$1.tag("plugins", () => null), Match$1.tag("formats", () => null), Match$1.tag("skipped", () => null), Match$1.exhaustive);
4558
4614
  const stderrLineFor = (state, event) => Boolean$1.match(Boolean$1.and(state.mode === "human", !state.terminalSeen), {
4559
4615
  onTrue: () => formatStderrEvent(event),
4560
4616
  onFalse: () => null
@@ -4564,14 +4620,14 @@ const decideFrame = (command) => {
4564
4620
  const nextState = noteState(command.state, command.event);
4565
4621
  const stderrLine = stderrLineFor(command.state, command.event);
4566
4622
  const framed = shouldFrame(command.state);
4567
- return Match.value(framed).pipe(Match.when(true, () => Result.succeed(EventFramed.make({
4623
+ return Match$1.value(framed).pipe(Match$1.when(true, () => Result.succeed(EventFramed.make({
4568
4624
  state: nextState,
4569
4625
  event: command.event,
4570
4626
  stderrLine
4571
- }))), Match.when(false, () => Result.succeed(EventSuppressed.make({
4627
+ }))), Match$1.when(false, () => Result.succeed(EventSuppressed.make({
4572
4628
  state: nextState,
4573
4629
  stderrLine
4574
- }))), Match.exhaustive);
4630
+ }))), Match$1.exhaustive);
4575
4631
  };
4576
4632
  const frameRunEvent = Workflow.make({
4577
4633
  command: FrameRunEventCommand,
@@ -4588,7 +4644,7 @@ const jsonArgumentText = (argument) => Result.getOrElse(Result.try({
4588
4644
  const inspectValue = (value) => Option$1.getOrElse(Option$1.liftPredicate(value, Predicate$1.isString), () => Formatter.format(value));
4589
4645
  const PLACEHOLDER = /(%[sdijfopO%])/g;
4590
4646
  const PLACEHOLDER_PART = /^%[sdijfopO%]$/;
4591
- const placeholderText = (placeholder, argument) => Match.value(placeholder).pipe(Match.when(Match.is("%s"), () => String(argument)), Match.when(Match.is("%d", "%i", "%f"), () => Number(argument).toString()), Match.when(Match.is("%j"), () => jsonArgumentText(argument)), Match.when(Match.is("%o", "%O", "%p"), () => inspectValue(argument)), Match.orElse((unmatched) => unmatched));
4647
+ const placeholderText = (placeholder, argument) => Match$1.value(placeholder).pipe(Match$1.when(Match$1.is("%s"), () => String(argument)), Match$1.when(Match$1.is("%d", "%i", "%f"), () => Number(argument).toString()), Match$1.when(Match$1.is("%j"), () => jsonArgumentText(argument)), Match$1.when(Match$1.is("%o", "%O", "%p"), () => inspectValue(argument)), Match$1.orElse((unmatched) => unmatched));
4592
4648
  const appendLiteral = (progress, literal) => ({
4593
4649
  args: progress.args,
4594
4650
  cursor: progress.cursor,
@@ -4602,8 +4658,8 @@ const substitutePlaceholder = (progress, placeholder) => Boolean$1.match(progres
4602
4658
  }),
4603
4659
  onFalse: () => appendLiteral(progress, placeholder)
4604
4660
  });
4605
- const consumePlaceholder = (progress, placeholder) => Match.value(placeholder).pipe(Match.when(Match.is("%%"), () => appendLiteral(progress, "%")), Match.orElse(() => substitutePlaceholder(progress, placeholder)));
4606
- const formatStep = (progress, part) => Match.value(part).pipe(Match.when((candidate) => PLACEHOLDER_PART.test(candidate), (placeholder) => consumePlaceholder(progress, placeholder)), Match.orElse((literal) => appendLiteral(progress, literal)));
4661
+ const consumePlaceholder = (progress, placeholder) => Match$1.value(placeholder).pipe(Match$1.when(Match$1.is("%%"), () => appendLiteral(progress, "%")), Match$1.orElse(() => substitutePlaceholder(progress, placeholder)));
4662
+ const formatStep = (progress, part) => Match$1.value(part).pipe(Match$1.when((candidate) => PLACEHOLDER_PART.test(candidate), (placeholder) => consumePlaceholder(progress, placeholder)), Match$1.orElse((literal) => appendLiteral(progress, literal)));
4607
4663
  const formatTemplate = (template, args) => {
4608
4664
  const progress = template.split(PLACEHOLDER).reduce(formatStep, {
4609
4665
  args,
@@ -4719,15 +4775,15 @@ const UNKNOWN_FAILURE = "Unknown failure";
4719
4775
  const SIGNAL_REMEDIATION = "the run was interrupted by a signal; re-run it to continue";
4720
4776
  const PARSE_REMEDIATION = "re-run with --help to see the full usage";
4721
4777
  const DEFAULT_REMEDIATION = "see --reportFile or the verdict envelope on stdout";
4722
- const exitCodeOf = (outcome) => Match.value(outcome).pipe(Match.tag("RunOk", () => 0), Match.tag("RunInterrupted", (error) => error.code), Match.tag("RunParseFailed", () => CONFIG_CODE), Match.tag("RunSurvivorsRejected", () => CONFIG_CODE), Match.tag("RunConfigFailed", () => CONFIG_CODE), Match.tag("RunFailed", (failed) => failed.code), Match.exhaustive);
4778
+ const exitCodeOf = (outcome) => Match$1.value(outcome).pipe(Match$1.tag("RunOk", () => 0), Match$1.tag("RunInterrupted", (error) => error.code), Match$1.tag("RunParseFailed", () => CONFIG_CODE), Match$1.tag("RunSurvivorsRejected", () => CONFIG_CODE), Match$1.tag("RunConfigFailed", () => CONFIG_CODE), Match$1.tag("RunFailed", (failed) => failed.code), Match$1.exhaustive);
4723
4779
  const nonEmptyText = Option$1.liftPredicate(S.is(S.NonEmptyString));
4724
4780
  const capturedOrUnknown = (captured) => Option$1.getOrElse(nonEmptyText(captured), () => UNKNOWN_FAILURE);
4725
4781
  const capturedThenRecorded = (captured, recorded) => Option$1.getOrElse(nonEmptyText(captured), () => Option$1.getOrElse(Option$1.fromNullishOr(recorded), () => UNKNOWN_FAILURE));
4726
- const failureTextOf = (error, captured) => Match.value(error).pipe(Match.tag("RunParseFailed", (failed) => Option$1.getOrElse(Option$1.map(Option$1.fromNullishOr(failed.unrecognized), (value) => `Received unknown argument: '${value}'`), () => capturedOrUnknown(captured))), Match.tag("RunSurvivorsRejected", (failed) => Option$1.getOrElse(Option$1.fromNullishOr(failed.diagnostic), () => UNKNOWN_FAILURE)), Match.tag("RunInterrupted", () => capturedOrUnknown(captured)), Match.tag("RunConfigFailed", (failed) => capturedThenRecorded(captured, failed.detail)), Match.tag("RunFailed", (failed) => capturedThenRecorded(captured, failed.diagnostic)), Match.exhaustive);
4727
- const remediationTextOf = (error) => Match.value(error).pipe(Match.tag("RunInterrupted", () => SIGNAL_REMEDIATION), Match.tag("RunParseFailed", () => PARSE_REMEDIATION), Match.tag("RunSurvivorsRejected", (failed) => Option$1.getOrElse(Option$1.fromNullishOr(failed.diagnostic), () => DEFAULT_REMEDIATION)), Match.tag("RunConfigFailed", (failed) => Option$1.match(Option$1.fromNullishOr(failed.detail), {
4782
+ const failureTextOf = (error, captured) => Match$1.value(error).pipe(Match$1.tag("RunParseFailed", (failed) => Option$1.getOrElse(Option$1.map(Option$1.fromNullishOr(failed.unrecognized), (value) => `Received unknown argument: '${value}'`), () => capturedOrUnknown(captured))), Match$1.tag("RunSurvivorsRejected", (failed) => Option$1.getOrElse(Option$1.fromNullishOr(failed.diagnostic), () => UNKNOWN_FAILURE)), Match$1.tag("RunInterrupted", () => capturedOrUnknown(captured)), Match$1.tag("RunConfigFailed", (failed) => capturedThenRecorded(captured, failed.detail)), Match$1.tag("RunFailed", (failed) => capturedThenRecorded(captured, failed.diagnostic)), Match$1.exhaustive);
4783
+ const remediationTextOf = (error) => Match$1.value(error).pipe(Match$1.tag("RunInterrupted", () => SIGNAL_REMEDIATION), Match$1.tag("RunParseFailed", () => PARSE_REMEDIATION), Match$1.tag("RunSurvivorsRejected", (failed) => Option$1.getOrElse(Option$1.fromNullishOr(failed.diagnostic), () => DEFAULT_REMEDIATION)), Match$1.tag("RunConfigFailed", (failed) => Option$1.match(Option$1.fromNullishOr(failed.detail), {
4728
4784
  onSome: (detail) => `check the config file: ${detail}`,
4729
4785
  onNone: () => "check the config file"
4730
- })), Match.tag("RunFailed", () => DEFAULT_REMEDIATION), Match.exhaustive);
4786
+ })), Match$1.tag("RunFailed", () => DEFAULT_REMEDIATION), Match$1.exhaustive);
4731
4787
  const errorEnvelopeFromOutcome = (input) => ErrorEnvelope.make({
4732
4788
  schemaVersion: StreamSchemaVersion.literal,
4733
4789
  code: exitCodeOf(input.error),
@@ -4773,7 +4829,7 @@ const stateAfter = (decision, fallback) => Result.match(decision, {
4773
4829
  });
4774
4830
  const framedEventOf = (decision) => Option$1.match(decision, {
4775
4831
  onNone: () => Result.fail(void 0),
4776
- onSome: (d) => Match.value(d).pipe(Match.tag("EventFramed", (framed) => Result.succeed(framed.event)), Match.tag("EventSuppressed", () => Result.fail(void 0)), Match.exhaustive)
4832
+ onSome: (d) => Match$1.value(d).pipe(Match$1.tag("EventFramed", (framed) => Result.succeed(framed.event)), Match$1.tag("EventSuppressed", () => Result.fail(void 0)), Match$1.exhaustive)
4777
4833
  });
4778
4834
  const DEFAULT_PROGRESS_STREAM_FILE = "reports/mutation-stream.jsonl";
4779
4835
  var RunEventDrain = class RunEventDrain extends Context.Service()("@systemfsoftware/stryker-js/run-event-stream.service/RunEventDrain") {
@@ -4884,10 +4940,10 @@ const emitMachineModeOutput = Effect$1.fn("stryker.runEventStream.emitMachineMod
4884
4940
  const { stream, mode, outcome, basePath, pathService } = params;
4885
4941
  const captured = (yield* MachineConsole).read();
4886
4942
  return yield* Result.match(outcome, {
4887
- onSuccess: (decision) => Match.value(decision).pipe(Match.tag("RunOk", (ok) => Option$1.match(helpPayload(ok, captured), {
4943
+ onSuccess: (decision) => Match$1.value(decision).pipe(Match$1.tag("RunOk", (ok) => Option$1.match(helpPayload(ok, captured), {
4888
4944
  onSome: (help) => emitHelpEnvelope(stream, help),
4889
4945
  onNone: () => emitNullScoreVerdictWhenOpen(stream, mode, basePath, pathService)
4890
- })), Match.tag("RunParseFailed", (failed) => offerFailureEnvelope(stream, failed, captured)), Match.tag("RunSurvivorsRejected", (failed) => offerFailureEnvelope(stream, failed, captured)), Match.tag("RunConfigFailed", (failed) => offerFailureEnvelope(stream, failed, captured)), Match.tag("RunFailed", (failed) => offerFailureEnvelope(stream, failed, captured)), Match.exhaustive),
4946
+ })), Match$1.tag("RunParseFailed", (failed) => offerFailureEnvelope(stream, failed, captured)), Match$1.tag("RunSurvivorsRejected", (failed) => offerFailureEnvelope(stream, failed, captured)), Match$1.tag("RunConfigFailed", (failed) => offerFailureEnvelope(stream, failed, captured)), Match$1.tag("RunFailed", (failed) => offerFailureEnvelope(stream, failed, captured)), Match$1.exhaustive),
4891
4947
  onFailure: (failure) => offerFailureEnvelope(stream, failure, captured)
4892
4948
  });
4893
4949
  });
@@ -5040,31 +5096,31 @@ var DryRunFailed = class extends S.TaggedClass()("DryRunFailed", {
5040
5096
  }) {
5041
5097
  [DryRunDecisionTypeId] = DryRunDecisionTypeId;
5042
5098
  };
5043
- const completeOutcomeOf = (command) => Match.value(command).pipe(Match.when({
5099
+ const completeOutcomeOf = (command) => Match$1.value(command).pipe(Match$1.when({
5044
5100
  testCount: 0,
5045
5101
  allowEmpty: false
5046
- }, () => "noTests"), Match.when({ failedTestCount: (count) => count > 0 }, () => "failed"), Match.orElse(() => "passed"));
5047
- const decideComplete = (command) => Match.value({
5102
+ }, () => "noTests"), Match$1.when({ failedTestCount: (count) => count > 0 }, () => "failed"), Match$1.orElse(() => "passed"));
5103
+ const decideComplete = (command) => Match$1.value({
5048
5104
  outcome: completeOutcomeOf(command),
5049
5105
  testCount: command.testCount,
5050
5106
  failedTestCount: command.failedTestCount,
5051
5107
  failedTests: command.failedTests
5052
- }).pipe(Match.when({ outcome: "noTests" }, () => Result.fail(DryRunError.make({
5108
+ }).pipe(Match$1.when({ outcome: "noTests" }, () => Result.fail(DryRunError.make({
5053
5109
  stage: "dryRunNoTests",
5054
5110
  reason: "No tests were executed. Stryker will exit prematurely. Please check your configuration."
5055
- }))), Match.when({ outcome: "failed" }, ({ testCount, failedTestCount, failedTests }) => Result.succeed(DryRunFailed.make({
5111
+ }))), Match$1.when({ outcome: "failed" }, ({ testCount, failedTestCount, failedTests }) => Result.succeed(DryRunFailed.make({
5056
5112
  testCount,
5057
5113
  failedTestCount,
5058
5114
  failedTests
5059
- }))), Match.when({ outcome: "passed" }, ({ testCount }) => Result.succeed(DryRunPassed.make({ testCount }))), Match.exhaustive);
5060
- const reasonOrDefault = (reason, fallback) => Match.value(reason).pipe(Match.when(void 0, () => fallback), Match.orElse((present) => present));
5061
- const decide$11 = (command) => Match.value(command.status).pipe(Match.when("Error", () => Result.fail(DryRunError.make({
5115
+ }))), Match$1.when({ outcome: "passed" }, ({ testCount }) => Result.succeed(DryRunPassed.make({ testCount }))), Match$1.exhaustive);
5116
+ const reasonOrDefault = (reason, fallback) => Match$1.value(reason).pipe(Match$1.when(void 0, () => fallback), Match$1.orElse((present) => present));
5117
+ const decide$11 = (command) => Match$1.value(command.status).pipe(Match$1.when("Error", () => Result.fail(DryRunError.make({
5062
5118
  stage: "dryRun",
5063
5119
  reason: reasonOrDefault(command.errorMessage, "Dry run error")
5064
- }))), Match.when("Timeout", () => Result.fail(DryRunError.make({
5120
+ }))), Match$1.when("Timeout", () => Result.fail(DryRunError.make({
5065
5121
  stage: "dryRun",
5066
5122
  reason: reasonOrDefault(command.reason, "Initial test run timed out")
5067
- }))), Match.when("Complete", () => decideComplete(command)), Match.exhaustive);
5123
+ }))), Match$1.when("Complete", () => decideComplete(command)), Match$1.exhaustive);
5068
5124
  const dryRun = Workflow.make({
5069
5125
  command: DryRunCommand,
5070
5126
  decision: S.Union([DryRunPassed, DryRunFailed]),
@@ -5101,14 +5157,14 @@ const failedTestSummariesOf = (tests) => tests.filter((test) => test.status ===
5101
5157
  name: test.name,
5102
5158
  failureMessage: test.failureMessage
5103
5159
  }));
5104
- const decide$10 = (command) => Match.value(command.dryRunResult).pipe(Match.discriminator("status")("complete", (complete) => Result.succeed(DryRunObservedComplete.make({
5160
+ const decide$10 = (command) => Match$1.value(command.dryRunResult).pipe(Match$1.discriminator("status")("complete", (complete) => Result.succeed(DryRunObservedComplete.make({
5105
5161
  testCount: complete.tests.length,
5106
5162
  failedTestCount: complete.tests.filter((test) => test.status === "failed").length,
5107
5163
  failedTests: failedTestSummariesOf(complete.tests)
5108
- }))), Match.discriminator("status")("error", (failed) => Result.succeed(DryRunObservedFailed.make({ errorMessage: failed.errorMessage }))), Match.discriminator("status")("timeout", (timedOut) => Result.succeed(DryRunObservedTimedOut.make(Option$1.match(Option$1.fromNullishOr(timedOut.reason), {
5164
+ }))), Match$1.discriminator("status")("error", (failed) => Result.succeed(DryRunObservedFailed.make({ errorMessage: failed.errorMessage }))), Match$1.discriminator("status")("timeout", (timedOut) => Result.succeed(DryRunObservedTimedOut.make(Option$1.match(Option$1.fromNullishOr(timedOut.reason), {
5109
5165
  onNone: () => ({}),
5110
5166
  onSome: (reason) => ({ reason })
5111
- })))), Match.exhaustive);
5167
+ })))), Match$1.exhaustive);
5112
5168
  const interpretDryRunObservation = Workflow.make({
5113
5169
  command: DryRunObservation,
5114
5170
  decision: S.Union([
@@ -5124,7 +5180,7 @@ const interpretDryRunObservation = Workflow.make({
5124
5180
  const TypeId$8 = Symbol.for("~systemfsoftware/stryker-js/Sandbox");
5125
5181
  const SandboxHandle = Handle.make()(TypeId$8);
5126
5182
  SandboxHandle.is;
5127
- const sandboxFileNameOf = (fileMap, fileName) => Match.value(fileMap.get(fileName)).pipe(Match.when(Predicate$1.isString, (sandboxFileName) => Result.succeed(sandboxFileName)), Match.orElse(() => Result.fail(StrykerError.make({ message: `Cannot find sandbox file for ${fileName}` }))));
5183
+ const sandboxFileNameOf = (fileMap, fileName) => Match$1.value(fileMap.get(fileName)).pipe(Match$1.when(Predicate$1.isString, (sandboxFileName) => Result.succeed(sandboxFileName)), Match$1.orElse(() => Result.fail(StrykerError.make({ message: `Cannot find sandbox file for ${fileName}` }))));
5128
5184
  const withoutLeadingSeparator = (suffix) => Boolean$1.match(suffix.startsWith("/"), {
5129
5185
  onTrue: () => suffix.slice(1),
5130
5186
  onFalse: () => suffix
@@ -5208,7 +5264,7 @@ var InterpretDryRunResultCommand = class extends S.TaggedClass()("InterpretDryRu
5208
5264
  const failedTestsOf = (tests) => tests.filter((test) => test.status === "failed");
5209
5265
  const countedTestsOf = (tests) => tests.filter((test) => test.status !== "skipped").length;
5210
5266
  const firstFailedTestOf = (failed) => Option$1.fromUndefinedOr(failed.at(0));
5211
- const decide$9 = (command) => Match.value(command.dryRunResult).pipe(Match.discriminator("status")("complete", (complete) => {
5267
+ const decide$9 = (command) => Match$1.value(command.dryRunResult).pipe(Match$1.discriminator("status")("complete", (complete) => {
5212
5268
  const failed = failedTestsOf(complete.tests);
5213
5269
  const nrOfTests = countedTestsOf(complete.tests);
5214
5270
  return Option$1.match(firstFailedTestOf(failed), {
@@ -5219,10 +5275,10 @@ const decide$9 = (command) => Match.value(command.dryRunResult).pipe(Match.discr
5219
5275
  nrOfTests
5220
5276
  }))
5221
5277
  });
5222
- }), Match.discriminator("status")("error", (errored) => Result.succeed(MutantRunErrored.make({ errorMessage: errored.errorMessage }))), Match.discriminator("status")("timeout", (timedOut) => Option$1.match(Option$1.fromUndefinedOr(timedOut.reason), {
5278
+ }), Match$1.discriminator("status")("error", (errored) => Result.succeed(MutantRunErrored.make({ errorMessage: errored.errorMessage }))), Match$1.discriminator("status")("timeout", (timedOut) => Option$1.match(Option$1.fromUndefinedOr(timedOut.reason), {
5223
5279
  onNone: () => Result.succeed(MutantRunTimedOut.make({})),
5224
5280
  onSome: (reason) => Result.succeed(MutantRunTimedOut.make({ reason }))
5225
- })), Match.exhaustive);
5281
+ })), Match$1.exhaustive);
5226
5282
  const interpretDryRunResult = Workflow.make({
5227
5283
  command: InterpretDryRunResultCommand,
5228
5284
  decision: S.Union([
@@ -5266,7 +5322,7 @@ const invalidatesRunnerPool = dual(2, (status, reason) => status === "timeout" &
5266
5322
  const maxRetries = 2;
5267
5323
  const exhaustedMessage = (cause) => `Test runner crashed. Tried ${maxRetries} times to restart it without any luck. ${Cause.pretty(cause)}`;
5268
5324
  const withRetry = (inner) => {
5269
- const attempt = (run, onExhausted) => run.pipe(Effect$1.tapError((error) => Match.value(error).pipe(Match.when(S.is(OutOfMemoryError), (outOfMemory) => Effect$1.logInfo(`Test runner process [${outOfMemory.pid}] ran out of memory. That usually means the tests leak memory. Stryker restarts the process and carries on, but the run is slower for it.`)), Match.orElse(() => Effect$1.void))), Effect$1.retry({ times: maxRetries }), Effect$1.catchCause((cause) => Effect$1.succeed(onExhausted(exhaustedMessage(cause)))));
5325
+ const attempt = (run, onExhausted) => run.pipe(Effect$1.tapError((error) => Match$1.value(error).pipe(Match$1.when(S.is(OutOfMemoryError), (outOfMemory) => Effect$1.logInfo(`Test runner process [${outOfMemory.pid}] ran out of memory. That usually means the tests leak memory. Stryker restarts the process and carries on, but the run is slower for it.`)), Match$1.orElse(() => Effect$1.void))), Effect$1.retry({ times: maxRetries }), Effect$1.catchCause((cause) => Effect$1.succeed(onExhausted(exhaustedMessage(cause)))));
5270
5326
  return make$1({
5271
5327
  ...inner,
5272
5328
  dryRun: (options) => attempt(inner.dryRun(options), (errorMessage) => ({
@@ -5279,7 +5335,7 @@ const withRetry = (inner) => {
5279
5335
  }))
5280
5336
  });
5281
5337
  };
5282
- const withMaxReuse = dual(2, (options, retire) => (inner) => Match.value(options.maxTestRunnerReuse).pipe(Match.when((restartAfter) => restartAfter <= 0, () => Effect$1.succeed(inner)), Match.orElse(Effect$1.fn("stryker.testRunner.withMaxReuse")(function* (restartAfter) {
5338
+ const withMaxReuse = dual(2, (options, retire) => (inner) => Match$1.value(options.maxTestRunnerReuse).pipe(Match$1.when((restartAfter) => restartAfter <= 0, () => Effect$1.succeed(inner)), Match$1.orElse(Effect$1.fn("stryker.testRunner.withMaxReuse")(function* (restartAfter) {
5283
5339
  const runs = yield* Ref.make(0);
5284
5340
  return make$1({
5285
5341
  ...inner,
@@ -5300,7 +5356,7 @@ const nextEnvironmentState = (requested) => Boolean$1.match(requested, {
5300
5356
  onFalse: () => "loaded"
5301
5357
  });
5302
5358
  const reloadEnvironmentDecision = (requested, current, canReload) => canReload && stateNeedsReload(requested, current);
5303
- const stateNeedsReload = (requested, current) => Match.value(requested).pipe(Match.when(true, () => current !== "pristine"), Match.orElse(() => current === "loaded-static-mutant"));
5359
+ const stateNeedsReload = (requested, current) => Match$1.value(requested).pipe(Match$1.when(true, () => current !== "pristine"), Match$1.orElse(() => current === "loaded-static-mutant"));
5304
5360
  const retireDecision = (current, canReload) => !canReload && current === "loaded-static-mutant";
5305
5361
  const reloadPlanOf = (requested, current, canReload) => ({
5306
5362
  reloadEnvironment: reloadEnvironmentDecision(requested, current, canReload),
@@ -5341,7 +5397,7 @@ const ALL_TESTS_ID = TestRunner_exports.TestId.make("all");
5341
5397
  const ALL_TESTS_NAME = "All tests";
5342
5398
  const isCommandRunner = (name) => typeof name === "string" && name.toLowerCase() === "command";
5343
5399
  const commandRunnerCapabilities = { reloadEnvironment: true };
5344
- const resultFromExit = (exitCode, output, timeSpentMs) => Match.value(exitCode).pipe(Match.when(0, () => ({
5400
+ const resultFromExit = (exitCode, output, timeSpentMs) => Match$1.value(exitCode).pipe(Match$1.when(0, () => ({
5345
5401
  status: "complete",
5346
5402
  tests: [{
5347
5403
  id: ALL_TESTS_ID,
@@ -5349,7 +5405,7 @@ const resultFromExit = (exitCode, output, timeSpentMs) => Match.value(exitCode).
5349
5405
  status: "success",
5350
5406
  timeSpentMs
5351
5407
  }]
5352
- })), Match.orElse(() => ({
5408
+ })), Match$1.orElse(() => ({
5353
5409
  status: "complete",
5354
5410
  tests: [{
5355
5411
  id: ALL_TESTS_ID,
@@ -5359,14 +5415,14 @@ const resultFromExit = (exitCode, output, timeSpentMs) => Match.value(exitCode).
5359
5415
  timeSpentMs
5360
5416
  }]
5361
5417
  })));
5362
- const mutantActivation = (activeMutantId) => Match.value(activeMutantId).pipe(Match.when(Predicate$1.isString, (id) => ({
5418
+ const mutantActivation = (activeMutantId) => Match$1.value(activeMutantId).pipe(Match$1.when(Predicate$1.isString, (id) => ({
5363
5419
  env: { [Mutant_exports.InstrumenterContext.ACTIVE_MUTANT_ENV_VARIABLE]: id },
5364
5420
  extendEnv: true
5365
- })), Match.orElse(() => void 0));
5366
- const spawnResult = (outcome, elapsed) => Match.value(outcome).pipe(Match.tag("Failure", (failed) => ({
5421
+ })), Match$1.orElse(() => void 0));
5422
+ const spawnResult = (outcome, elapsed) => Match$1.value(outcome).pipe(Match$1.tag("Failure", (failed) => ({
5367
5423
  status: "error",
5368
5424
  errorMessage: String(failed.cause)
5369
- })), Match.tag("Success", (exited) => resultFromExit(exited.value.exitCode, exited.value.output, elapsed)), Match.exhaustive);
5425
+ })), Match$1.tag("Success", (exited) => resultFromExit(exited.value.exitCode, exited.value.output, elapsed)), Match$1.exhaustive);
5370
5426
  const runCommand = Effect$1.fn("stryker.command_runner.run")(function* (config, activeMutantId) {
5371
5427
  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
5372
5428
  const startedAt = yield* Clock.currentTimeMillis;
@@ -5417,16 +5473,16 @@ const vmTestRunnerConfig = () => ({
5417
5473
  plugin: vmRunnerPluginUrl(),
5418
5474
  options: { ...vmRunnerOptions }
5419
5475
  });
5420
- const testRunnerConfigOf = (configured) => Match.value(configured).pipe(Match.when(isVmRunner, vmTestRunnerConfig), Match.orElse((unchanged) => unchanged));
5476
+ const testRunnerConfigOf = (configured) => Match$1.value(configured).pipe(Match$1.when(isVmRunner, vmTestRunnerConfig), Match$1.orElse((unchanged) => unchanged));
5421
5477
  //#endregion
5422
5478
  //#region src/TestRunner.blueprint.ts
5423
5479
  const TypeId$5 = Symbol.for("~systemfsoftware/stryker-js/TestRunner");
5424
- const toRunnerBootFailure = (runnerName) => (error) => Match.value(error).pipe(Match.tag("WorkerBootTimeoutError", (timeout) => TestRunner_exports.TestRunnerFailed.make({
5480
+ const toRunnerBootFailure = (runnerName) => (error) => Match$1.value(error).pipe(Match$1.tag("WorkerBootTimeoutError", (timeout) => TestRunner_exports.TestRunnerFailed.make({
5425
5481
  runnerName,
5426
5482
  phase: "init",
5427
5483
  cause: `Worker ${timeout.pid} did not accept the RPC connection before its boot window closed; its stderr above carries the reason`
5428
- })), Match.tag("ChildProcessCrashedError", (crashed) => crashed), Match.tag("OutOfMemoryError", (outOfMemory) => outOfMemory), Match.exhaustive);
5429
- const toRunnerFailure = (runnerName, phase) => (error) => Match.value(error).pipe(Match.tag("TestRunnerFailed", (e) => e), Match.orElse((e) => TestRunner_exports.TestRunnerFailed.make({
5484
+ })), Match$1.tag("ChildProcessCrashedError", (crashed) => crashed), Match$1.tag("OutOfMemoryError", (outOfMemory) => outOfMemory), Match$1.exhaustive);
5485
+ const toRunnerFailure = (runnerName, phase) => (error) => Match$1.value(error).pipe(Match$1.tag("TestRunnerFailed", (e) => e), Match$1.orElse((e) => TestRunner_exports.TestRunnerFailed.make({
5430
5486
  runnerName,
5431
5487
  phase,
5432
5488
  cause: e.message
@@ -5448,8 +5504,8 @@ const scopedOf = Effect$1.fnUntraced(function* (params) {
5448
5504
  ...params.options,
5449
5505
  testRunner: testRunnerConfigOf(params.options.testRunner)
5450
5506
  };
5451
- const runnerName = Match.value(options.testRunner).pipe(Match.when(Options_exports.isCustomTestRunner, (runner) => runner.plugin), Match.orElse((name) => name));
5452
- const execArgv = Match.value(options.testRunner).pipe(Match.when(Options_exports.isCustomTestRunner, (runner) => Match.value(runner.nodeArgs).pipe(Match.when(Match.undefined, () => options.testRunnerNodeArgs), Match.orElse((args) => args))), Match.orElse(() => options.testRunnerNodeArgs));
5507
+ const runnerName = Match$1.value(options.testRunner).pipe(Match$1.when(Options_exports.isCustomTestRunner, (runner) => runner.plugin), Match$1.orElse((name) => name));
5508
+ const execArgv = Match$1.value(options.testRunner).pipe(Match$1.when(Options_exports.isCustomTestRunner, (runner) => Match$1.value(runner.nodeArgs).pipe(Match$1.when(Match$1.undefined, () => options.testRunnerNodeArgs), Match$1.orElse((args) => args))), Match$1.orElse(() => options.testRunnerNodeArgs));
5453
5509
  const client = yield* makeWorkerClient({
5454
5510
  rpcs: Plugin_exports.TestRunnerRpcs,
5455
5511
  options,
@@ -5476,7 +5532,7 @@ const TestRunners = Blueprint.make()(TypeId$5).steps({
5476
5532
  });
5477
5533
  const makeChildProcessTestRunner = (params) => TestRunners.of(params).scoped;
5478
5534
  const commandRunnerEffect = (context) => ChildProcessSpawner.ChildProcessSpawner.pipe(Effect$1.map((spawner) => commandRunner(context, spawner).pipe(withTimeout, withRetry)));
5479
- const inProcessRunner = (context) => Match.value(context.options.testRunner).pipe(Match.when(isCommandRunner, () => Option$1.some(commandRunnerEffect(context))), Match.orElse(() => Option$1.none()));
5535
+ const inProcessRunner = (context) => Match$1.value(context.options.testRunner).pipe(Match$1.when(isCommandRunner, () => Option$1.some(commandRunnerEffect(context))), Match$1.orElse(() => Option$1.none()));
5480
5536
  const decorateChildRunner = Effect$1.fnUntraced(function* (context, childProcessRunner) {
5481
5537
  const base = yield* childProcessRunner;
5482
5538
  const timed = withTimeout(base);
@@ -5597,7 +5653,11 @@ var WorkerSpawnResolved = class extends S.TaggedClass()("WorkerSpawnResolved", {
5597
5653
  var WorkerSpawnMissing = class extends S.TaggedError()("WorkerSpawnMissing", {
5598
5654
  reason: S.String,
5599
5655
  descriptor: S.String
5600
- }) {};
5656
+ }) {
5657
+ get message() {
5658
+ return `${this.reason} (${this.descriptor})`;
5659
+ }
5660
+ };
5601
5661
  var WorkerSpawnCommand = class extends S.TaggedClass()("WorkerSpawnCommand", {
5602
5662
  sources: S.Array(PluginSourceSchema),
5603
5663
  kind: Plugin_exports.WorkerPluginKind,
@@ -5605,8 +5665,8 @@ var WorkerSpawnCommand = class extends S.TaggedClass()("WorkerSpawnCommand", {
5605
5665
  }) {
5606
5666
  static [Workflow.InstrumentationBrand] = { kind: "stryker.plugin.kind" };
5607
5667
  };
5608
- const labelOfKind = (kind) => Match.value(kind).pipe(Match.when("TestRunner", () => "test runner"), Match.when("Checker", () => "checker"), Match.when("Reporter", () => "reporter"), Match.exhaustive);
5609
- const kindIs = (kind) => (source) => Match.value(source.kind).pipe(Match.when(kind, () => true), Match.orElse(() => false));
5668
+ const labelOfKind = (kind) => Match$1.value(kind).pipe(Match$1.when("TestRunner", () => "test runner"), Match$1.when("Checker", () => "checker"), Match$1.when("Reporter", () => "reporter"), Match$1.exhaustive);
5669
+ const kindIs = (kind) => (source) => Match$1.value(source.kind).pipe(Match$1.when(kind, () => true), Match$1.orElse(() => false));
5610
5670
  const workerSourceOf = (sources, kind, matches) => Arr.findFirst(Arr.filter(sources, kindIs(kind)), matches);
5611
5671
  const resolvedSpawnOf = (command, matches, label) => Option$1.match(workerSourceOf(command.sources, command.kind, matches), {
5612
5672
  onSome: (worker) => Result.succeed(WorkerSpawnResolved.make({
@@ -5622,7 +5682,7 @@ const resolvedSpawnOf = (command, matches, label) => Option$1.match(workerSource
5622
5682
  }));
5623
5683
  }
5624
5684
  });
5625
- const decide$8 = (command) => Match.value(command.configured).pipe(Match.tag("ConfiguredPluginName", (configured) => resolvedSpawnOf(command, (worker) => worker.name.toLowerCase() === configured.name.toLowerCase(), configured.name)), Match.tag("ConfiguredPluginModulePath", (configured) => resolvedSpawnOf(command, (worker) => worker.modulePath === configured.modulePath, configured.modulePath)), Match.exhaustive);
5685
+ const decide$8 = (command) => Match$1.value(command.configured).pipe(Match$1.tag("ConfiguredPluginName", (configured) => resolvedSpawnOf(command, (worker) => worker.name.toLowerCase() === configured.name.toLowerCase(), configured.name)), Match$1.tag("ConfiguredPluginModulePath", (configured) => resolvedSpawnOf(command, (worker) => worker.modulePath === configured.modulePath, configured.modulePath)), Match$1.exhaustive);
5626
5686
  const resolveConfiguredPlugin = Workflow.make({
5627
5687
  command: WorkerSpawnCommand,
5628
5688
  decision: WorkerSpawnResolved,
@@ -5632,7 +5692,7 @@ const resolveConfiguredPlugin = Workflow.make({
5632
5692
  //#endregion
5633
5693
  //#region src/run/dry-run.cell.ts
5634
5694
  const sandboxPathsOf = (sandbox, fileNames) => Result.all(fileNames.map((fileName) => sandboxFileFor(sandbox, fileName)));
5635
- const configuredPluginOf$1 = (configured) => Match.value(testRunnerConfigOf(configured)).pipe(Match.when(Options_exports.isCustomTestRunner, (custom) => ConfiguredPluginModulePath.make({ modulePath: custom.plugin })), Match.orElse((name) => ConfiguredPluginName.make({ name })));
5695
+ const configuredPluginOf$1 = (configured) => Match$1.value(testRunnerConfigOf(configured)).pipe(Match$1.when(Options_exports.isCustomTestRunner, (custom) => ConfiguredPluginModulePath.make({ modulePath: custom.plugin })), Match$1.orElse((name) => ConfiguredPluginName.make({ name })));
5636
5696
  const workerSpawnOf = (stage, loaded, kind, configured) => Effect$1.mapError(Effect$1.fromResult(resolveConfiguredPlugin(WorkerSpawnCommand.make({
5637
5697
  sources: loaded.pluginSources,
5638
5698
  kind,
@@ -5660,14 +5720,14 @@ const resolveDryRunFiles = Effect$1.fn("stryker.dry_run.resolve_files")(function
5660
5720
  cause
5661
5721
  })));
5662
5722
  });
5663
- const dryRunCommandOfDecision = (decision, allowEmpty) => Match.value(decision).pipe(Match.tag("DryRunObservedComplete", ({ testCount, failedTestCount, failedTests }) => ({
5723
+ const dryRunCommandOfDecision = (decision, allowEmpty) => Match$1.value(decision).pipe(Match$1.tag("DryRunObservedComplete", ({ testCount, failedTestCount, failedTests }) => ({
5664
5724
  _tag: "DryRunCommand",
5665
5725
  status: "Complete",
5666
5726
  testCount,
5667
5727
  failedTestCount,
5668
5728
  failedTests,
5669
5729
  allowEmpty
5670
- })), Match.tag("DryRunObservedFailed", ({ errorMessage }) => ({
5730
+ })), Match$1.tag("DryRunObservedFailed", ({ errorMessage }) => ({
5671
5731
  _tag: "DryRunCommand",
5672
5732
  status: "Error",
5673
5733
  testCount: 0,
@@ -5675,7 +5735,7 @@ const dryRunCommandOfDecision = (decision, allowEmpty) => Match.value(decision).
5675
5735
  failedTests: [],
5676
5736
  allowEmpty,
5677
5737
  errorMessage
5678
- })), Match.tag("DryRunObservedTimedOut", ({ reason }) => ({
5738
+ })), Match$1.tag("DryRunObservedTimedOut", ({ reason }) => ({
5679
5739
  _tag: "DryRunCommand",
5680
5740
  status: "Timeout",
5681
5741
  testCount: 0,
@@ -5686,13 +5746,13 @@ const dryRunCommandOfDecision = (decision, allowEmpty) => Match.value(decision).
5686
5746
  onNone: () => ({}),
5687
5747
  onSome: (present) => ({ reason: present })
5688
5748
  })
5689
- })), Match.exhaustive);
5749
+ })), Match$1.exhaustive);
5690
5750
  const totalTestTime = (tests) => tests.reduce((total, test) => total + test.timeSpentMs, 0);
5691
5751
  const overheadMillisOf = (grossMillis, tests) => Math.max(0, grossMillis - totalTestTime(tests));
5692
- const withOriginalFileName = (test, prev) => Match.value(test.fileName).pipe(Match.when(Predicate$1.isString, (fileName) => ({
5752
+ const withOriginalFileName = (test, prev) => Match$1.value(test.fileName).pipe(Match$1.when(Predicate$1.isString, (fileName) => ({
5693
5753
  ...test,
5694
5754
  fileName: originalFileFor(prev.sandbox, fileName)
5695
- })), Match.orElse(() => test));
5755
+ })), Match$1.orElse(() => test));
5696
5756
  const withOriginalFileNames = (tests, prev) => tests.map((test) => withOriginalFileName(test, prev));
5697
5757
  const testsByIdOf = (result) => MutableHashMap.fromIterable(result.tests.map((test) => [test.id, test]));
5698
5758
  const coveredMutantIdsOf = (coverage) => Object.entries(coverage).filter(([, count]) => count > 0).map(([mutantId]) => mutantId);
@@ -5720,7 +5780,7 @@ const testCoverageFrom = (result) => {
5720
5780
  })
5721
5781
  };
5722
5782
  };
5723
- const announceDryRunOutcome = (tests, prev, gross, overheadMillis) => Match.value(tests.length).pipe(Match.when(0, () => Effect$1.logInfo("No tests were found")), Match.orElse(() => Effect$1.logInfo(`Initial test run succeeded. Ran ${tests.length} tests in ${Duration.format(gross)} (net ${totalTestTime(tests)} ms, overhead ${overheadMillis} ms).`).pipe(Effect$1.andThen(Effect$1.when(Effect$1.logInfo("Note: running the dry-run only. No mutations will be tested."), Effect$1.succeed(prev.options.dryRunOnly))))));
5783
+ const announceDryRunOutcome = (tests, prev, gross, overheadMillis) => Match$1.value(tests.length).pipe(Match$1.when(0, () => Effect$1.logInfo("No tests were found")), Match$1.orElse(() => Effect$1.logInfo(`Initial test run succeeded. Ran ${tests.length} tests in ${Duration.format(gross)} (net ${totalTestTime(tests)} ms, overhead ${overheadMillis} ms).`).pipe(Effect$1.andThen(Effect$1.when(Effect$1.logInfo("Note: running the dry-run only. No mutations will be tested."), Effect$1.succeed(prev.options.dryRunOnly))))));
5724
5784
  const completeDryRunResultOf = Effect$1.fn("stryker.dry_run.complete")(function* (raw, rawResult) {
5725
5785
  const tests = withOriginalFileNames(rawResult.tests, raw.prev);
5726
5786
  const dryRunResult = {
@@ -5746,13 +5806,13 @@ const completeDryRunResultOf = Effect$1.fn("stryker.dry_run.complete")(function*
5746
5806
  timeOverhead: Duration.millis(overheadMillis)
5747
5807
  };
5748
5808
  });
5749
- const completeDryRunPassed = (raw) => Match.value(raw.rawResult).pipe(Match.discriminator("status")("complete", (rawResult) => completeDryRunResultOf(raw, rawResult)), Match.discriminator("status")("error", () => Effect$1.fail(StageError.make({
5809
+ const completeDryRunPassed = (raw) => Match$1.value(raw.rawResult).pipe(Match$1.discriminator("status")("complete", (rawResult) => completeDryRunResultOf(raw, rawResult)), Match$1.discriminator("status")("error", () => Effect$1.fail(StageError.make({
5750
5810
  stage: "dryRun",
5751
5811
  reason: "Unexpected dry-run status after decision"
5752
- }))), Match.discriminator("status")("timeout", () => Effect$1.fail(StageError.make({
5812
+ }))), Match$1.discriminator("status")("timeout", () => Effect$1.fail(StageError.make({
5753
5813
  stage: "dryRun",
5754
5814
  reason: "Unexpected dry-run status after decision"
5755
- }))), Match.exhaustive);
5815
+ }))), Match$1.exhaustive);
5756
5816
  const readDryRun = Effect$1.fnUntraced(function* (command) {
5757
5817
  yield* Scope.Scope;
5758
5818
  const idGenerator = yield* IdGenerator;
@@ -5803,7 +5863,7 @@ const readDryRun = Effect$1.fnUntraced(function* (command) {
5803
5863
  }))),
5804
5864
  gross
5805
5865
  };
5806
- })).pipe(Effect$1.mapError((cause) => Match.value({ cause }).pipe(Match.when({ cause: (candidate) => S.is(StageError)(candidate) }, ({ cause }) => cause), Match.orElse(({ cause }) => StageError.make({
5866
+ })).pipe(Effect$1.mapError((cause) => Match$1.value({ cause }).pipe(Match$1.when({ cause: (candidate) => S.is(StageError)(candidate) }, ({ cause }) => cause), Match$1.orElse(({ cause }) => StageError.make({
5807
5867
  stage: "dryRun",
5808
5868
  reason: "Dry run failed to start test runner",
5809
5869
  cause
@@ -5893,14 +5953,14 @@ var EphemeralInstrument = class extends S.TaggedClass()("EphemeralInstrument", {
5893
5953
  }) {
5894
5954
  [InstrumentDecisionTypeId] = InstrumentDecisionTypeId;
5895
5955
  };
5896
- const decide$7 = (command) => Match.value(command.inPlace).pipe(Match.when(true, () => Result.succeed(InPlaceInstrument.make({
5956
+ const decide$7 = (command) => Match$1.value(command.inPlace).pipe(Match$1.when(true, () => Result.succeed(InPlaceInstrument.make({
5897
5957
  workingDirectoryHint: "inPlace",
5898
5958
  backupDirectoryHint: "backup",
5899
5959
  fileCount: command.fileCount
5900
- }))), Match.when(false, () => Result.succeed(EphemeralInstrument.make({
5960
+ }))), Match$1.when(false, () => Result.succeed(EphemeralInstrument.make({
5901
5961
  workingDirectoryHint: "temp",
5902
5962
  fileCount: command.fileCount
5903
- }))), Match.exhaustive);
5963
+ }))), Match$1.exhaustive);
5904
5964
  const planInstrumentation = Workflow.make({
5905
5965
  command: InstrumentCommand,
5906
5966
  decision: S.Union([InPlaceInstrument, EphemeralInstrument]),
@@ -6144,7 +6204,7 @@ const matchesGlob = (matcher, allowHiddenFiles, resolvedFileName) => Boolean.mat
6144
6204
  onFalse: () => Option$1.exists(regexpOf(matcher), (regexp) => regexp.test(resolvedFileName))
6145
6205
  })
6146
6206
  });
6147
- const matcherMatchesResolved = (resolvedPattern, allowHiddenFiles, resolvedFileName) => Match.value(expressionOf(resolvedPattern, false)).pipe(Match.withReturnType(), Match.tag("GlobMatcher", (matcher) => matchesGlob(matcher, allowHiddenFiles, resolvedFileName)), Match.tag("GlobUnmatchable", () => false), Match.exhaustive);
6207
+ const matcherMatchesResolved = (resolvedPattern, allowHiddenFiles, resolvedFileName) => Match$1.value(expressionOf(resolvedPattern, false)).pipe(Match$1.withReturnType(), Match$1.tag("GlobMatcher", (matcher) => matchesGlob(matcher, allowHiddenFiles, resolvedFileName)), Match$1.tag("GlobUnmatchable", () => false), Match$1.exhaustive);
6148
6208
  const hasHiddenSegment = (fileName) => fileName.split("/").some((entry) => entry.startsWith("."));
6149
6209
  var FileMatchCommand = class extends S.TaggedClass()("FileMatchCommand", {
6150
6210
  resolvedPattern: S.Union([S.Boolean, S.String]),
@@ -6174,7 +6234,7 @@ const admitFileMatch = Workflow.make({
6174
6234
  const DEFAULT_GLOB = "**/*.{js,ts,jsx,tsx,html,vue,mjs,mts,cts,cjs}";
6175
6235
  const matchesFile = dual(3, (matcher, pathService, fileName) => {
6176
6236
  const resolvedFileName = pathService.resolve(fileName).replace(/\\/g, "/");
6177
- const resolvedPattern = Match.value(matcher.pattern).pipe(Match.withReturnType(), Match.when(Match.string, (value) => pathService.resolve(value).replace(/\\/g, "/")), Match.when(true, () => DEFAULT_GLOB), Match.orElse(() => false));
6237
+ const resolvedPattern = Match$1.value(matcher.pattern).pipe(Match$1.withReturnType(), Match$1.when(Match$1.string, (value) => pathService.resolve(value).replace(/\\/g, "/")), Match$1.when(true, () => DEFAULT_GLOB), Match$1.orElse(() => false));
6178
6238
  return Option$1.exists(Result.getSuccess(admitFileMatch(FileMatchCommand.make({
6179
6239
  resolvedPattern,
6180
6240
  allowHiddenFiles: matcher.allowHiddenFiles,
@@ -6220,7 +6280,7 @@ const mergeUpdatedFile = (project, updated) => {
6220
6280
  onSome: () => MutableHashMap.set(project.filesToMutate, updated.name, updated)
6221
6281
  });
6222
6282
  };
6223
- const updateOf = (updated) => Match.value(updated).pipe(Match.when(void 0, () => void 0), Match.when(Option$1.isOption, (option) => Option$1.getOrUndefined(option)), Match.orElse((file) => file));
6283
+ const updateOf = (updated) => Match$1.value(updated).pipe(Match$1.when(void 0, () => void 0), Match$1.when(Option$1.isOption, (option) => Option$1.getOrUndefined(option)), Match$1.orElse((file) => file));
6224
6284
  const mergeUpdatedInto = (project) => (updated) => {
6225
6285
  const file = updateOf(updated);
6226
6286
  Option$1.match(Option$1.fromUndefinedOr(file), {
@@ -6256,7 +6316,7 @@ const parseJsonText = (jsonText) => Effect$1.try({
6256
6316
  const tsConfigShapeOf = (parsed) => Option$1.filter(Option$1.some(parsed), Schema.is(TsConfigSchema));
6257
6317
  const parseTsConfig = (fileName, jsonText) => Effect$1.flatMap(parseJsonText(jsonText), (parsed) => Effect$1.fromOption(tsConfigShapeOf(parsed), () => `parsed to ${JSON.stringify(parsed)}, which does not match the tsconfig shape this package consumes`));
6258
6318
  const makeTSConfigPreprocessor = (options, basePath) => {
6259
- const rewriteReferenceOrKeep = (reference, tsconfigFileName, pathService) => Match.value(tryRewriteReference(reference, tsconfigFileName, pathService, basePath)).pipe(Match.when(Predicate.isString, (rewritten) => rewritten), Match.orElse(() => reference));
6319
+ const rewriteReferenceOrKeep = (reference, tsconfigFileName, pathService) => Match$1.value(tryRewriteReference(reference, tsconfigFileName, pathService, basePath)).pipe(Match$1.when(Predicate.isString, (rewritten) => rewritten), Match$1.orElse(() => reference));
6260
6320
  const isStringArray = (value) => Array.isArray(value) && value.every((entry) => typeof entry === "string");
6261
6321
  const rewriteFileArrayProperty = (config, tsconfigFileName, prop, pathService) => {
6262
6322
  const value = config[prop];
@@ -6281,7 +6341,7 @@ const makeTSConfigPreprocessor = (options, basePath) => {
6281
6341
  onSuccess: (config) => Effect$1.all([rewriteExtends(config, tsconfigFileName, pathService, project), rewriteProjectReferences(config, tsconfigFileName, pathService, project)], { discard: true }).pipe(Effect$1.flatMap(() => rewriteFileArrayProperties(config, tsconfigFile, tsconfigFileName, pathService)))
6282
6342
  }))
6283
6343
  }));
6284
- const rewriteExtendsEntry = (config, extend, tsconfigFileName, pathService, project) => Match.value(tryRewriteReference(extend, tsconfigFileName, pathService, basePath)).pipe(Match.when(Predicate.isString, (rewritten) => Effect$1.succeed(rewritten)), Match.orElse(() => rewriteTSConfigFile(project, pathService.resolve(pathService.dirname(tsconfigFileName), extend), pathService).pipe(Effect$1.as(extend))));
6344
+ const rewriteExtendsEntry = (config, extend, tsconfigFileName, pathService, project) => Match$1.value(tryRewriteReference(extend, tsconfigFileName, pathService, basePath)).pipe(Match$1.when(Predicate.isString, (rewritten) => Effect$1.succeed(rewritten)), Match$1.orElse(() => rewriteTSConfigFile(project, pathService.resolve(pathService.dirname(tsconfigFileName), extend), pathService).pipe(Effect$1.as(extend))));
6285
6345
  const rewriteSingleExtends = (config, extend, tsconfigFileName, pathService, project) => Effect$1.flatMap(rewriteExtendsEntry(config, extend, tsconfigFileName, pathService, project), (rewritten) => {
6286
6346
  config.extends = rewritten;
6287
6347
  return Effect$1.void;
@@ -6290,15 +6350,15 @@ const makeTSConfigPreprocessor = (options, basePath) => {
6290
6350
  config.extends = rewritten;
6291
6351
  return Effect$1.void;
6292
6352
  }));
6293
- const rewriteExtends = (config, tsconfigFileName, pathService, project) => Match.value(config.extends).pipe(Match.when(Predicate.isString, (extend) => rewriteSingleExtends(config, extend, tsconfigFileName, pathService, project)), Match.when(Schema.is(ExtendsArraySchema), (extendEntries) => rewriteExtendsArray(config, extendEntries, tsconfigFileName, pathService, project)), Match.orElse(() => Effect$1.void));
6353
+ const rewriteExtends = (config, tsconfigFileName, pathService, project) => Match$1.value(config.extends).pipe(Match$1.when(Predicate.isString, (extend) => rewriteSingleExtends(config, extend, tsconfigFileName, pathService, project)), Match$1.when(Schema.is(ExtendsArraySchema), (extendEntries) => rewriteExtendsArray(config, extendEntries, tsconfigFileName, pathService, project)), Match$1.orElse(() => Effect$1.void));
6294
6354
  const referencedTsConfigPath = (referencePath) => Boolean.match(referencePath.endsWith(".json"), {
6295
6355
  onTrue: () => referencePath,
6296
6356
  onFalse: () => `${referencePath}/tsconfig.json`
6297
6357
  });
6298
- const rewriteReference = (ref, originTSConfigFileName, pathService, project) => Match.value(tryRewriteReference(ref.path, originTSConfigFileName, pathService, basePath)).pipe(Match.when(Predicate.isString, (rewritten) => {
6358
+ const rewriteReference = (ref, originTSConfigFileName, pathService, project) => Match$1.value(tryRewriteReference(ref.path, originTSConfigFileName, pathService, basePath)).pipe(Match$1.when(Predicate.isString, (rewritten) => {
6299
6359
  ref.path = rewritten;
6300
6360
  return Effect$1.void;
6301
- }), Match.orElse(() => rewriteTSConfigFile(project, pathService.resolve(pathService.dirname(originTSConfigFileName), referencedTsConfigPath(ref.path)), pathService)));
6361
+ }), Match$1.orElse(() => rewriteTSConfigFile(project, pathService.resolve(pathService.dirname(originTSConfigFileName), referencedTsConfigPath(ref.path)), pathService)));
6302
6362
  const rewriteProjectReferences = (config, originTSConfigFileName, pathService, project) => Option$1.match(Option$1.fromUndefinedOr(config.references), {
6303
6363
  onNone: () => Effect$1.void,
6304
6364
  onSome: (references) => Effect$1.forEach(references, (ref) => rewriteReference(ref, originTSConfigFileName, pathService, project)).pipe(Effect$1.asVoid)
@@ -6328,7 +6388,7 @@ const directoryChain = (from, pathService) => Boolean.match(pathService.dirname(
6328
6388
  });
6329
6389
  const binDirectoriesFrom = (from, pathService) => directoryChain(pathService.resolve(from), pathService).map((directory) => pathService.join(directory, "node_modules", ".bin"));
6330
6390
  const inheritedPath = () => Config.String("PATH").pipe(Effect$1.option, Effect$1.map((value) => Option$1.getOrUndefined(value) ?? ""));
6331
- const failOnBuildFailure = (command, result) => Match.value(result.exitCode).pipe(Match.when((exitCode) => exitCode !== 0, (exitCode) => Effect$1.fail(StrykerError.make({ message: `Build command "${command}" failed with exit code ${String(exitCode)}.\n${result.stderr}` }))), Match.orElse(() => Effect$1.void));
6391
+ const failOnBuildFailure = (command, result) => Match$1.value(result.exitCode).pipe(Match$1.when((exitCode) => exitCode !== 0, (exitCode) => Effect$1.fail(StrykerError.make({ message: `Build command "${command}" failed with exit code ${String(exitCode)}.\n${result.stderr}` }))), Match$1.orElse(() => Effect$1.void));
6332
6392
  const runBuildCommandIn = Effect$1.fn("stryker.sandbox.build.run")(function* (command, workingDirectory) {
6333
6393
  const pathService = yield* Path.Path;
6334
6394
  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
@@ -6358,7 +6418,7 @@ const runBuildCommandIn = Effect$1.fn("stryker.sandbox.build.run")(function* (co
6358
6418
  })));
6359
6419
  yield* failOnBuildFailure(command, result);
6360
6420
  });
6361
- const directoryRole = (dir, walk) => Match.value(walk.path.basename(dir)).pipe(Match.when((name) => name === walk.tempDirName, () => "skipped"), Match.when((name) => name === "node_modules", () => "nodeModules"), Match.orElse(() => "searchable"));
6421
+ const directoryRole = (dir, walk) => Match$1.value(walk.path.basename(dir)).pipe(Match$1.when((name) => name === walk.tempDirName, () => "skipped"), Match$1.when((name) => name === "node_modules", () => "nodeModules"), Match$1.orElse(() => "searchable"));
6362
6422
  const childDirectoriesOf = (dir, walk) => Effect$1.flatMap(walk.fs.readDirectory(walk.path.join(walk.basePath, dir)).pipe(Effect$1.orElseSucceed(() => [])), (entries) => Effect$1.map(Effect$1.forEach(entries, (entry) => {
6363
6423
  const child = walk.path.join(dir, entry);
6364
6424
  return Effect$1.map(walk.fs.stat(walk.path.join(walk.basePath, child)).pipe(Effect$1.map((info) => info.type), Effect$1.orElseSucceed(() => "Unknown")), (statType) => Boolean.match(statType === "Directory", {
@@ -6366,13 +6426,13 @@ const childDirectoriesOf = (dir, walk) => Effect$1.flatMap(walk.fs.readDirectory
6366
6426
  onFalse: () => Option$1.none()
6367
6427
  }));
6368
6428
  }, { concurrency: 1 }), (children) => children.filter(Option$1.isSome).map((some) => some.value)));
6369
- const walkStep = (dir, walk) => Match.value(directoryRole(dir, walk)).pipe(Match.when("nodeModules", () => Effect$1.succeed({
6429
+ const walkStep = (dir, walk) => Match$1.value(directoryRole(dir, walk)).pipe(Match$1.when("nodeModules", () => Effect$1.succeed({
6370
6430
  emit: [dir],
6371
6431
  children: []
6372
- })), Match.when("skipped", () => Effect$1.succeed({
6432
+ })), Match$1.when("skipped", () => Effect$1.succeed({
6373
6433
  emit: [],
6374
6434
  children: []
6375
- })), Match.orElse(() => Effect$1.map(childDirectoriesOf(dir, walk), (children) => ({
6435
+ })), Match$1.orElse(() => Effect$1.map(childDirectoriesOf(dir, walk), (children) => ({
6376
6436
  emit: [],
6377
6437
  children
6378
6438
  }))));
@@ -6440,7 +6500,7 @@ const restoreFromBackup = Effect$1.fn("stryker.sandbox.restore_original")(functi
6440
6500
  });
6441
6501
  const restoreOriginalFiles = (workingDirectory, backupDirectory, basePath) => Effect$1.addFinalizer(() => restoreFromBackup(backupDirectory, workingDirectory, basePath).pipe(Effect$1.orDie));
6442
6502
  const isNonEmptyString = (value) => value !== void 0 && value !== "";
6443
- const runConfiguredBuild = (options, workingDirectory) => Match.value(options.buildCommand).pipe(Match.when(isNonEmptyString, (command) => Effect$1.logInfo(`Running build command "${command}" in "${workingDirectory}".`).pipe(Effect$1.andThen(() => runBuildCommandIn(command, workingDirectory)))), Match.orElse(() => Effect$1.void));
6503
+ const runConfiguredBuild = (options, workingDirectory) => Match$1.value(options.buildCommand).pipe(Match$1.when(isNonEmptyString, (command) => Effect$1.logInfo(`Running build command "${command}" in "${workingDirectory}".`).pipe(Effect$1.andThen(() => runBuildCommandIn(command, workingDirectory)))), Match$1.orElse(() => Effect$1.void));
6444
6504
  const linksNodeModules = (options) => Boolean.match(options.symlinkNodeModules, {
6445
6505
  onTrue: () => !options.inPlace,
6446
6506
  onFalse: () => false
@@ -6552,11 +6612,11 @@ const claimedReasonOf = (extension, claimants) => `No loaded framework claims "$
6552
6612
  const unclaimedReasonOf = (extension) => `No loaded framework claims "${extension}". No installed package declares it as a framework plugin: install the framework plugin that claims this file type and add it to "plugins" to instrument it.`;
6553
6613
  const explainedOf = (command) => {
6554
6614
  const claimants = claimantsOf(command);
6555
- return Match.value(claimants.length > 0).pipe(Match.when(true, () => FileSkipExplained.make({
6615
+ return Match$1.value(claimants.length > 0).pipe(Match$1.when(true, () => FileSkipExplained.make({
6556
6616
  extension: command.extension,
6557
6617
  reason: claimedReasonOf(command.extension, claimants),
6558
6618
  ownerPackage: Option$1.getOrNull(Option$1.fromUndefinedOr(claimants.at(0)))
6559
- })), Match.orElse(() => FileSkipExplained.make({
6619
+ })), Match$1.orElse(() => FileSkipExplained.make({
6560
6620
  extension: command.extension,
6561
6621
  reason: unclaimedReasonOf(command.extension),
6562
6622
  ownerPackage: null
@@ -6577,7 +6637,7 @@ const explainFileSkip = Workflow.make({
6577
6637
  command: ExplainFileSkipCommand,
6578
6638
  decision: FileSkipDecision,
6579
6639
  error: S.Never,
6580
- decide: (command) => Match.value(skipKnownOrUnknownOf(explainedOf(command))).pipe(Match.tag("SkipKnownExplained", (known) => Result.succeed(known)), Match.tag("SkipUnknownExplained", (unknown) => Result.succeed(unknown)), Match.exhaustive)
6640
+ decide: (command) => Match$1.value(skipKnownOrUnknownOf(explainedOf(command))).pipe(Match$1.tag("SkipKnownExplained", (known) => Result.succeed(known)), Match$1.tag("SkipUnknownExplained", (unknown) => Result.succeed(unknown)), Match$1.exhaustive)
6581
6641
  });
6582
6642
  //#endregion
6583
6643
  //#region src/run/instrument.cell.ts
@@ -6738,18 +6798,18 @@ var MutationTestDryRunOnly = class extends S.TaggedClass()("MutationTestDryRunOn
6738
6798
  var MutationTestNoTests = class extends S.TaggedClass()("MutationTestNoTests", {}) {
6739
6799
  [MutationTestDecisionTypeId] = MutationTestDecisionTypeId;
6740
6800
  };
6741
- const decide$6 = (command) => Match.value({
6801
+ const decide$6 = (command) => Match$1.value({
6742
6802
  invalid: command.testCount < 0,
6743
6803
  dryRunOnly: command.dryRunOnly,
6744
6804
  isZero: command.isZero,
6745
6805
  allowEmpty: command.allowEmpty
6746
- }).pipe(Match.when({ invalid: true }, () => Result.fail(MutationTestError.make({
6806
+ }).pipe(Match$1.when({ invalid: true }, () => Result.fail(MutationTestError.make({
6747
6807
  stage: "mutationTest",
6748
6808
  reason: "Invalid test count"
6749
- }))), Match.when({ dryRunOnly: true }, () => Result.succeed(MutationTestDryRunOnly.make({}))), Match.when({
6809
+ }))), Match$1.when({ dryRunOnly: true }, () => Result.succeed(MutationTestDryRunOnly.make({}))), Match$1.when({
6750
6810
  isZero: true,
6751
6811
  allowEmpty: true
6752
- }, () => Result.succeed(MutationTestNoTests.make({}))), Match.orElse(() => Result.succeed(MutationTestProceed.make({}))));
6812
+ }, () => Result.succeed(MutationTestNoTests.make({}))), Match$1.orElse(() => Result.succeed(MutationTestProceed.make({}))));
6753
6813
  const admitMutationTest = Workflow.make({
6754
6814
  command: MutationTestCommand,
6755
6815
  decision: S.Union([
@@ -6811,20 +6871,20 @@ const TypeId$3 = Symbol.for("~systemfsoftware/stryker-js/CheckerPool");
6811
6871
  const CheckerPoolHandle = Handle.make()(TypeId$3);
6812
6872
  CheckerPoolHandle.is;
6813
6873
  const makeCheckerPoolHandle = (pool) => CheckerPoolHandle.make({}, pool);
6814
- const isCheckerCrash = (error) => Match.value(error).pipe(Match.tag("ChildProcessCrashedError", "OutOfMemoryError", () => true), Match.orElse(() => false));
6815
- const checkerBreachToStageError = (error) => Match.value(error).pipe(Match.tag("CheckerFailed", (failed) => StageError.make({
6874
+ const isCheckerCrash = (error) => Match$1.value(error).pipe(Match$1.tag("ChildProcessCrashedError", "OutOfMemoryError", () => true), Match$1.orElse(() => false));
6875
+ const checkerBreachToStageError = (error) => Match$1.value(error).pipe(Match$1.tag("CheckerFailed", (failed) => StageError.make({
6816
6876
  stage: "mutationTest",
6817
6877
  reason: failed.cause,
6818
6878
  cause: failed
6819
- })), Match.tag("CheckerAnsweredUnrequested", (breach) => StageError.make({
6879
+ })), Match$1.tag("CheckerAnsweredUnrequested", (breach) => StageError.make({
6820
6880
  stage: "mutationTest",
6821
6881
  reason: `Checker "${breach.checkerName}" answered about mutants it was not asked about (${breach.phase} phase): ${breach.unrequestedIds.join(", ")}`,
6822
6882
  cause: breach
6823
- })), Match.tag("CheckerSkippedRequested", (breach) => StageError.make({
6883
+ })), Match$1.tag("CheckerSkippedRequested", (breach) => StageError.make({
6824
6884
  stage: "mutationTest",
6825
6885
  reason: `Checker "${breach.checkerName}" skipped requested mutants (${breach.phase} phase): ${breach.missingIds.join(", ")}`,
6826
6886
  cause: breach
6827
- })), Match.exhaustive);
6887
+ })), Match$1.exhaustive);
6828
6888
  const invalidateSlot$1 = (pool, slot, error) => Effect$1.flatMap(Pool.invalidate(pool, slot), () => Effect$1.fail(error));
6829
6889
  const onCheckerSlot = (pool, checkerIndex, run) => Pool.use(pool, (slot) => Option$1.match(Option$1.fromUndefinedOr(slot[checkerIndex]), {
6830
6890
  onNone: () => Effect$1.die(/* @__PURE__ */ new Error(`checker slot has no entry at index ${checkerIndex}`)),
@@ -6890,7 +6950,7 @@ const checkerProcessCrashes = Metric.counter("stryker.checker.process_crashes",
6890
6950
  incremental: true
6891
6951
  });
6892
6952
  const TEMP_DIR_PREFIX = "stryker-checker-";
6893
- const nodeArgsOf = (options) => Match.value(options.checkers[0]?.nodeArgs).pipe(Match.when(Match.undefined, () => options.checkerNodeArgs), Match.orElse((args) => args));
6953
+ const nodeArgsOf = (options) => Match$1.value(options.checkers[0]?.nodeArgs).pipe(Match$1.when(Match$1.undefined, () => options.checkerNodeArgs), Match$1.orElse((args) => args));
6894
6954
  const serviceOf = (handle) => ({
6895
6955
  check: (checkerName, mutants) => check(handle, checkerName, mutants),
6896
6956
  group: (checkerName, mutants) => group(handle, checkerName, mutants)
@@ -6903,7 +6963,7 @@ const acquire$2 = Effect$1.fnUntraced(function* (spec) {
6903
6963
  workingDirectory: spec.workingDirectory,
6904
6964
  execArgv: [...nodeArgsOf(spec.options)],
6905
6965
  tempDirPrefix: TEMP_DIR_PREFIX
6906
- }).pipe(Effect$1.mapError((error) => Match.value(error).pipe(Match.tag("ChildProcessCrashedError", "OutOfMemoryError", (crash) => crash), Match.tag("WorkerBootTimeoutError", () => connectionCrashed(`Checker worker failed to start: its boot window closed before it accepted the RPC connection`)), Match.exhaustive)), Effect$1.tapError(() => Metric.update(checkerProcessCrashes, 1)));
6966
+ }).pipe(Effect$1.mapError((error) => Match$1.value(error).pipe(Match$1.tag("ChildProcessCrashedError", "OutOfMemoryError", (crash) => crash), Match$1.tag("WorkerBootTimeoutError", () => connectionCrashed(`Checker worker failed to start: its boot window closed before it accepted the RPC connection`)), Match$1.exhaustive)), Effect$1.tapError(() => Metric.update(checkerProcessCrashes, 1)));
6907
6967
  return serviceOf(makeCheckerHandle(client));
6908
6968
  });
6909
6969
  const Checkers = Blueprint.make()(TypeId$2).steps({
@@ -7232,8 +7292,16 @@ var PlannedEarlyResultMutant = class extends S.TaggedClass()("PlannedEarlyResult
7232
7292
  }) {
7233
7293
  [MutantPlanTypeId] = MutantPlanTypeId;
7234
7294
  };
7235
- var CoveredMutantHitCountMissing = class extends S.TaggedError()("CoveredMutantHitCountMissing", { missingIds: S.Array(S.String) }) {};
7236
- var MutantTimeoutNotFinite = class extends S.TaggedError()("MutantTimeoutNotFinite", { mutantId: Mutant_exports.MutantId }) {};
7295
+ var CoveredMutantHitCountMissing = class extends S.TaggedError()("CoveredMutantHitCountMissing", { missingIds: S.Array(S.String) }) {
7296
+ get message() {
7297
+ return `Hit count missing for covered mutants: ${this.missingIds.join(", ")}`;
7298
+ }
7299
+ };
7300
+ var MutantTimeoutNotFinite = class extends S.TaggedError()("MutantTimeoutNotFinite", { mutantId: Mutant_exports.MutantId }) {
7301
+ get message() {
7302
+ return `Computed test timeout for mutant ${this.mutantId} is not finite`;
7303
+ }
7304
+ };
7237
7305
  const firstDefined$1 = (first, second) => Option$1.getOrElse(Option$1.fromNullishOr(first), () => second);
7238
7306
  const staticField = (isStatic) => Option$1.match(Option$1.fromUndefinedOr(isStatic), {
7239
7307
  onNone: () => ({}),
@@ -7457,7 +7525,7 @@ const earlyResultPlanOf = (mutant, early) => ({
7457
7525
  coveredBy: early.coveredBy
7458
7526
  })
7459
7527
  });
7460
- const decide$1 = (command) => Match.value(command.plan).pipe(Match.tag("PlannedRunMutant", (run) => Result.succeed(MutantRunPlanMaterialized.make({ plan: runPlanOf(command.mutant, run) }))), Match.tag("PlannedEarlyResultMutant", (early) => Result.succeed(MutantEarlyResultPlanMaterialized.make({ plan: earlyResultPlanOf(command.mutant, early) }))), Match.exhaustive);
7528
+ const decide$1 = (command) => Match$1.value(command.plan).pipe(Match$1.tag("PlannedRunMutant", (run) => Result.succeed(MutantRunPlanMaterialized.make({ plan: runPlanOf(command.mutant, run) }))), Match$1.tag("PlannedEarlyResultMutant", (early) => Result.succeed(MutantEarlyResultPlanMaterialized.make({ plan: earlyResultPlanOf(command.mutant, early) }))), Match$1.exhaustive);
7461
7529
  const materializeMutantPlans = Workflow.make({
7462
7530
  command: MaterializeMutantPlanCommand,
7463
7531
  decision: S.Union([MutantRunPlanMaterialized, MutantEarlyResultPlanMaterialized]),
@@ -7521,13 +7589,13 @@ const readPlanCommand = Effect$1.fn("stryker.mutation_test.plan.read")(function*
7521
7589
  mutantsById: mutantsByIdOf(input.mutants)
7522
7590
  };
7523
7591
  });
7524
- const plannedPlanOf = (mutant, decision) => Match.value(decision).pipe(Match.tag("PlannedRunMutant", (run) => PlannedRunMutant.make({
7592
+ const plannedPlanOf = (mutant, decision) => Match$1.value(decision).pipe(Match$1.tag("PlannedRunMutant", (run) => PlannedRunMutant.make({
7525
7593
  ...run,
7526
7594
  mutantId: mutant.id
7527
- })), Match.tag("PlannedEarlyResultMutant", (early) => PlannedEarlyResultMutant.make({
7595
+ })), Match$1.tag("PlannedEarlyResultMutant", (early) => PlannedEarlyResultMutant.make({
7528
7596
  ...early,
7529
7597
  mutantId: mutant.id
7530
- })), Match.exhaustive);
7598
+ })), Match$1.exhaustive);
7531
7599
  const materializeDecision = Effect$1.fnUntraced(function* (decision, command) {
7532
7600
  const mutant = yield* Option$1.match(Record$1.get(command.mutantsById, decision.mutantId), {
7533
7601
  onNone: () => Effect$1.die(UnknownPlannedMutant.make({
@@ -7621,7 +7689,7 @@ const reportingInputOf = (input) => ({
7621
7689
  reporterStage: input.prev.reporterStage,
7622
7690
  formatRegistry: input.prev.formatRegistry
7623
7691
  });
7624
- const reasonOf = (result) => Match.value(result).pipe(Match.when({ status: "timeout" }, (timedOut) => timedOut.reason), Match.orElse(() => void 0));
7692
+ const reasonOf = (result) => Match$1.value(result).pipe(Match$1.when({ status: "timeout" }, (timedOut) => timedOut.reason), Match$1.orElse(() => void 0));
7625
7693
  const invalidateSlot = (pool, slot, error) => Effect$1.flatMap(Pool.invalidate(pool, slot), () => Effect$1.fail(error));
7626
7694
  const preparedStreamableOf = Effect$1.fnUntraced(function* (context, result) {
7627
7695
  return yield* Option$1.match(Option$1.filter(Option$1.some(result.status), isMutantStatus), {
@@ -7731,7 +7799,7 @@ const runOnePlan = (input) => mutantRunCell.run(input);
7731
7799
  //#region src/run/test-runner-pool.blueprint.ts
7732
7800
  const TypeId = Symbol.for("~systemfsoftware/stryker-js/TestRunnerPoolBlueprint");
7733
7801
  const IDLE_TIME_TO_LIVE = Duration.minutes(1);
7734
- const configuredPluginOf = (configured) => Match.value(testRunnerConfigOf(configured)).pipe(Match.when(Options_exports.isCustomTestRunner, (custom) => ConfiguredPluginModulePath.make({ modulePath: custom.plugin })), Match.orElse((name) => ConfiguredPluginName.make({ name })));
7802
+ const configuredPluginOf = (configured) => Match$1.value(testRunnerConfigOf(configured)).pipe(Match$1.when(Options_exports.isCustomTestRunner, (custom) => ConfiguredPluginModulePath.make({ modulePath: custom.plugin })), Match$1.orElse((name) => ConfiguredPluginName.make({ name })));
7735
7803
  const testRunnerWorkerSpawnOf = (loaded, configured) => Effect$1.mapError(Effect$1.fromResult(resolveConfiguredPlugin(WorkerSpawnCommand.make({
7736
7804
  sources: loaded.pluginSources,
7737
7805
  kind: "TestRunner",
@@ -7895,7 +7963,7 @@ const proceedPipeline = Effect$1.fnUntraced(function* (raw) {
7895
7963
  yield* Effect$1.logInfo(`Done in ${Duration.format(elapsed)}.`);
7896
7964
  return outcomeResult;
7897
7965
  });
7898
- const mapMutationTestCause = (cause) => Match.value({ cause }).pipe(Match.when({ cause: (candidate) => S.is(StageError)(candidate) }, ({ cause }) => cause), Match.orElse(({ cause }) => StageError.make({
7966
+ const mapMutationTestCause = (cause) => Match$1.value({ cause }).pipe(Match$1.when({ cause: (candidate) => S.is(StageError)(candidate) }, ({ cause }) => cause), Match$1.orElse(({ cause }) => StageError.make({
7899
7967
  stage: "mutationTest",
7900
7968
  reason: "Mutation testing failed",
7901
7969
  cause
@@ -8158,16 +8226,16 @@ const isArray = (value) => Array.isArray(value);
8158
8226
  const isMapRecord = (value) => Predicate$1.isObject(value);
8159
8227
  const subpathOf = (specifier) => {
8160
8228
  const segments = specifier.split("/");
8161
- const nameSegments = Match.value(specifier.startsWith("@")).pipe(Match.when(true, () => 2), Match.orElse(() => 1));
8229
+ const nameSegments = Match$1.value(specifier.startsWith("@")).pipe(Match$1.when(true, () => 2), Match$1.orElse(() => 1));
8162
8230
  return segments.slice(nameSegments).join("/");
8163
8231
  };
8164
- const exportKeyOf = (subpath) => Match.value(subpath.length === 0).pipe(Match.when(true, () => "."), Match.orElse(() => `./${subpath}`));
8232
+ const exportKeyOf = (subpath) => Match$1.value(subpath.length === 0).pipe(Match$1.when(true, () => "."), Match$1.orElse(() => `./${subpath}`));
8165
8233
  const checkedTargetOf = (target, relative) => Option$1.match(Option$1.some(target).pipe(Option$1.filter((candidate) => candidate.includes("*"))), {
8166
8234
  onSome: () => Wildcard.make({}),
8167
8235
  onNone: () => relative(target)
8168
8236
  });
8169
- const stringTargetOf = (target) => checkedTargetOf(target, () => Match.value(target.startsWith("./")).pipe(Match.when(true, () => Selected.make({ target })), Match.orElse(() => NotRelative.make({ target }))));
8170
- const fileTargetOf = (target) => checkedTargetOf(target, () => Match.value(target.startsWith("/")).pipe(Match.when(true, () => NotRelative.make({ target })), Match.orElse(() => Selected.make({ target }))));
8237
+ const stringTargetOf = (target) => checkedTargetOf(target, () => Match$1.value(target.startsWith("./")).pipe(Match$1.when(true, () => Selected.make({ target })), Match$1.orElse(() => NotRelative.make({ target }))));
8238
+ const fileTargetOf = (target) => checkedTargetOf(target, () => Match$1.value(target.startsWith("/")).pipe(Match$1.when(true, () => NotRelative.make({ target })), Match$1.orElse(() => Selected.make({ target }))));
8171
8239
  const arrayTargetOf = (elements) => Option$1.match(Option$1.fromUndefinedOr(elements.at(0)), {
8172
8240
  onNone: () => Nullish.make({}),
8173
8241
  onSome: (first) => targetOfValue(first)
@@ -8179,18 +8247,18 @@ const conditionTargetOf = (conditions) => Option$1.match(Option$1.fromUndefinedO
8179
8247
  onNone: () => Nullish.make({}),
8180
8248
  onSome: (found) => found
8181
8249
  });
8182
- const targetOfValue = (value) => Match.value(value).pipe(Match.when(isString, (target) => stringTargetOf(target)), Match.when(isArray, (elements) => arrayTargetOf(elements)), Match.when(isMapRecord, (map) => conditionTargetOf(map)), Match.orElse(() => Nullish.make({})));
8183
- const matchedOf = (selection, key) => Match.value(selection).pipe(Match.tag("Selected", () => Match.value(key).pipe(Match.when(".", () => selection), Match.orElse(() => Unmatched.make({ key })))), Match.orElse(() => selection));
8250
+ const targetOfValue = (value) => Match$1.value(value).pipe(Match$1.when(isString, (target) => stringTargetOf(target)), Match$1.when(isArray, (elements) => arrayTargetOf(elements)), Match$1.when(isMapRecord, (map) => conditionTargetOf(map)), Match$1.orElse(() => Nullish.make({})));
8251
+ const matchedOf = (selection, key) => Match$1.value(selection).pipe(Match$1.tag("Selected", () => Match$1.value(key).pipe(Match$1.when(".", () => selection), Match$1.orElse(() => Unmatched.make({ key })))), Match$1.orElse(() => selection));
8184
8252
  const isSubpathMap = (map) => Object.keys(map).some((key) => key.startsWith("."));
8185
- const mappedTargetOf = (map, key) => Match.value(isSubpathMap(map)).pipe(Match.when(true, () => Option$1.match(Option$1.fromUndefinedOr(map[key]), {
8253
+ const mappedTargetOf = (map, key) => Match$1.value(isSubpathMap(map)).pipe(Match$1.when(true, () => Option$1.match(Option$1.fromUndefinedOr(map[key]), {
8186
8254
  onNone: () => Unmatched.make({ key }),
8187
8255
  onSome: (target) => targetOfValue(target)
8188
- })), Match.orElse(() => matchedOf(conditionTargetOf(map), key)));
8256
+ })), Match$1.orElse(() => matchedOf(conditionTargetOf(map), key)));
8189
8257
  const declaredTargetOf = (exports, key) => Option$1.match(Option$1.fromUndefinedOr(exports), {
8190
8258
  onNone: () => Nullish.make({}),
8191
8259
  onSome: (value) => targetOfKey(value, key)
8192
8260
  });
8193
- const targetOfKey = (value, key) => Match.value(value).pipe(Match.when(isMapRecord, (map) => mappedTargetOf(map, key)), Match.orElse(() => matchedOf(targetOfValue(value), key)));
8261
+ const targetOfKey = (value, key) => Match$1.value(value).pipe(Match$1.when(isMapRecord, (map) => mappedTargetOf(map, key)), Match$1.orElse(() => matchedOf(targetOfValue(value), key)));
8194
8262
  const declaredEntryOf = (manifest) => Option$1.match(Option$1.fromNullishOr(manifest.module), {
8195
8263
  onSome: (entry) => checkedTargetOf(entry, fileTargetOf),
8196
8264
  onNone: () => Option$1.match(Option$1.fromNullishOr(manifest.main), {
@@ -8210,10 +8278,10 @@ const selectPackageEntry = Workflow.make({
8210
8278
  command: SelectPackageEntryCommand,
8211
8279
  decision: PackageEntryDecision,
8212
8280
  error: S.Never,
8213
- decide: (command) => Match.value(selectionOf(command)).pipe(Match.tag("Selected", ({ target }) => Result.succeed(PackageEntrySelected.make({
8281
+ decide: (command) => Match$1.value(selectionOf(command)).pipe(Match$1.tag("Selected", ({ target }) => Result.succeed(PackageEntrySelected.make({
8214
8282
  specifier: command.specifier,
8215
8283
  entry: target
8216
- }))), Match.tag("Undeclared", () => Result.succeed(unresolvedOf(command.specifier, `the package declares no "exports", "module", or "main" entry`))), Match.tag("Unmatched", ({ key }) => Result.succeed(unresolvedOf(command.specifier, `the package does not export "${key}"`))), Match.tag("Wildcard", () => Result.succeed(unresolvedOf(command.specifier, "the package declares a wildcard export, which this host does not resolve"))), Match.tag("Nullish", () => Result.succeed(unresolvedOf(command.specifier, "the matching package export resolves to null"))), Match.tag("NotRelative", ({ target }) => Result.succeed(unresolvedOf(command.specifier, `the package export "${target}" is not a relative path`))), Match.exhaustive)
8284
+ }))), Match$1.tag("Undeclared", () => Result.succeed(unresolvedOf(command.specifier, `the package declares no "exports", "module", or "main" entry`))), Match$1.tag("Unmatched", ({ key }) => Result.succeed(unresolvedOf(command.specifier, `the package does not export "${key}"`))), Match$1.tag("Wildcard", () => Result.succeed(unresolvedOf(command.specifier, "the package declares a wildcard export, which this host does not resolve"))), Match$1.tag("Nullish", () => Result.succeed(unresolvedOf(command.specifier, "the matching package export resolves to null"))), Match$1.tag("NotRelative", ({ target }) => Result.succeed(unresolvedOf(command.specifier, `the package export "${target}" is not a relative path`))), Match$1.exhaustive)
8217
8285
  });
8218
8286
  //#endregion
8219
8287
  //#region src/plugin-loader.service.ts
@@ -8235,11 +8303,11 @@ const buildPluginLoadPlan = (entries) => {
8235
8303
  return Option$1.some(plugins);
8236
8304
  }
8237
8305
  })), HashMap.empty());
8238
- const pluginSources = winningDeclarations.map((declaration) => Match.value(declaration.plugin).pipe(Match.when((plugin) => plugin.kind === "Evaluator", (evaluator) => ({
8306
+ const pluginSources = winningDeclarations.map((declaration) => Match$1.value(declaration.plugin).pipe(Match$1.when((plugin) => plugin.kind === "Evaluator", (evaluator) => ({
8239
8307
  kind: "Evaluator",
8240
8308
  name: evaluator.name,
8241
8309
  modulePath: declaration.moduleName
8242
- })), Match.orElse((worker) => ({
8310
+ })), Match$1.orElse((worker) => ({
8243
8311
  kind: worker.kind,
8244
8312
  name: worker.name,
8245
8313
  modulePath: declaration.moduleName,
@@ -8276,9 +8344,9 @@ const importFailure = (descriptor, crash) => PluginLoadRefusedError.make({
8276
8344
  }
8277
8345
  });
8278
8346
  const failPluginLoad = (descriptor, error) => Effect$1.logWarning(`Error during loading "${descriptor}" plugin`).pipe(Effect$1.annotateLogs("cause", error), Effect$1.andThen(() => Effect$1.fail(error)));
8279
- const modulePluginContributions = (module) => Match.value(Predicate$1.hasProperty(module, "strykerPlugins")).pipe(Match.when(true, () => S.decodeUnknownResult(PluginModuleSchema)(module).pipe(Result.map((pluginModule) => pluginModule.strykerPlugins))), Match.orElse(() => Result.succeed(void 0)));
8280
- const moduleIgnorers = (module) => Match.value(Predicate$1.hasProperty(module, "strykerIgnorers")).pipe(Match.when(true, () => S.decodeUnknownResult(IgnorerModuleSchema)(module).pipe(Result.map((ignorerModule) => ignorerModule.strykerIgnorers))), Match.orElse(() => Result.succeed(void 0)));
8281
- const moduleFrameworks = (module) => Match.value(Predicate$1.hasProperty(module, "strykerFrameworks")).pipe(Match.when(true, () => S.decodeUnknownResult(FrameworkModuleSchema)(module).pipe(Result.map((frameworkModule) => [...frameworkModule.strykerFrameworks]))), Match.orElse(() => Result.succeed(void 0)));
8347
+ const modulePluginContributions = (module) => Match$1.value(Predicate$1.hasProperty(module, "strykerPlugins")).pipe(Match$1.when(true, () => S.decodeUnknownResult(PluginModuleSchema)(module).pipe(Result.map((pluginModule) => pluginModule.strykerPlugins))), Match$1.orElse(() => Result.succeed(void 0)));
8348
+ const moduleIgnorers = (module) => Match$1.value(Predicate$1.hasProperty(module, "strykerIgnorers")).pipe(Match$1.when(true, () => S.decodeUnknownResult(IgnorerModuleSchema)(module).pipe(Result.map((ignorerModule) => ignorerModule.strykerIgnorers))), Match$1.orElse(() => Result.succeed(void 0)));
8349
+ const moduleFrameworks = (module) => Match$1.value(Predicate$1.hasProperty(module, "strykerFrameworks")).pipe(Match$1.when(true, () => S.decodeUnknownResult(FrameworkModuleSchema)(module).pipe(Result.map((frameworkModule) => [...frameworkModule.strykerFrameworks]))), Match$1.orElse(() => Result.succeed(void 0)));
8282
8350
  const hasValidationSchemaContribution = (module) => S.is(SchemaValidationContributionSchema)(module);
8283
8351
  const moduleSchemaContribution = (module) => Option$1.getOrUndefined(Option$1.map(Option$1.liftPredicate(hasValidationSchemaContribution)(module), (guarded) => guarded.strykerValidationSchema));
8284
8352
  const pluginContributionsOf = (module) => Result.flatMap(moduleIgnorers(module), (ignorers) => Result.flatMap(moduleFrameworks(module), (frameworks) => Result.map(modulePluginContributions(module), (plugins) => ({
@@ -8293,34 +8361,34 @@ const hasContribution = (contributions) => [
8293
8361
  contributions.frameworks,
8294
8362
  contributions.schemaContribution
8295
8363
  ].some((contribution) => contribution !== void 0);
8296
- const moduleFrameworkRefusalError = (descriptor, refusal) => Match.value(refusal.reason).pipe(Match.when("PeerMissing", () => PluginLoadRefusedError.make({
8364
+ const moduleFrameworkRefusalError = (descriptor, refusal) => Match$1.value(refusal.reason).pipe(Match$1.when("PeerMissing", () => PluginLoadRefusedError.make({
8297
8365
  descriptor,
8298
8366
  reason: {
8299
8367
  _tag: "PeerMissing",
8300
8368
  peer: refusal.peer
8301
8369
  }
8302
- })), Match.when("PeerVersionUnsupported", () => PluginLoadRefusedError.make({
8370
+ })), Match$1.when("PeerVersionUnsupported", () => PluginLoadRefusedError.make({
8303
8371
  descriptor,
8304
8372
  reason: {
8305
8373
  _tag: "PeerVersionUnsupported",
8306
8374
  peer: refusal.peer,
8307
8375
  detail: refusal.detail
8308
8376
  }
8309
- })), Match.when("PeerUnrecognized", () => PluginLoadRefusedError.make({
8377
+ })), Match$1.when("PeerUnrecognized", () => PluginLoadRefusedError.make({
8310
8378
  descriptor,
8311
8379
  reason: {
8312
8380
  _tag: "PeerUnrecognized",
8313
8381
  peer: refusal.peer
8314
8382
  }
8315
- })), Match.exhaustive);
8316
- const frameworkRefusalsOf = (descriptor, contributions) => Effect$1.forEach(contributions, (contribution) => Match.value(contribution).pipe(Match.when({ kind: "FrameworkRefusal" }, (refusal) => Effect$1.fail(moduleFrameworkRefusalError(descriptor, refusal))), Match.when({ kind: "Framework" }, (framework) => Effect$1.succeed(framework)), Match.exhaustive));
8383
+ })), Match$1.exhaustive);
8384
+ const frameworkRefusalsOf = (descriptor, contributions) => Effect$1.forEach(contributions, (contribution) => Match$1.value(contribution).pipe(Match$1.when({ kind: "FrameworkRefusal" }, (refusal) => Effect$1.fail(moduleFrameworkRefusalError(descriptor, refusal))), Match$1.when({ kind: "Framework" }, (framework) => Effect$1.succeed(framework)), Match$1.exhaustive));
8317
8385
  const warnUndescribedPluginModule = (descriptor) => Effect$1.logWarning(`Module "${descriptor}" did not contribute a StrykerJS plugin. It didn't export a "strykerPlugins", "strykerIgnorers", "strykerFrameworks", or "strykerValidationSchema".`).pipe(Effect$1.as(void 0));
8318
8386
  const describeLoadedPlugin = (descriptor, module) => Result.match(pluginContributionsOf(module), {
8319
8387
  onFailure: (cause) => Effect$1.as(failPluginLoad(descriptor, invalidContribution(descriptor, cause)), Option$1.none()),
8320
- onSuccess: (contributions) => Match.value(hasContribution(contributions)).pipe(Match.when(true, () => Effect$1.map(frameworkRefusalsOf(descriptor, contributions.frameworks ?? []), (frameworks) => Option$1.some({
8388
+ onSuccess: (contributions) => Match$1.value(hasContribution(contributions)).pipe(Match$1.when(true, () => Effect$1.map(frameworkRefusalsOf(descriptor, contributions.frameworks ?? []), (frameworks) => Option$1.some({
8321
8389
  ...contributions,
8322
8390
  frameworks
8323
- }))), Match.orElse(() => Effect$1.as(warnUndescribedPluginModule(descriptor), Option$1.none())))
8391
+ }))), Match$1.orElse(() => Effect$1.as(warnUndescribedPluginModule(descriptor), Option$1.none())))
8324
8392
  });
8325
8393
  const loadPlugin = Effect$1.fn("stryker.plugin_load.load_plugin")(function* (descriptor, entrypoint) {
8326
8394
  yield* Effect$1.logDebug(`Loading plugin ${descriptor}`);
@@ -8339,7 +8407,7 @@ const parseAndDecodeManifest = S.decodeUnknownResult(S.fromJsonString(PackageMan
8339
8407
  const selectManifestFields = (specifier, fields) => Effect$1.flatMap(Effect$1.fromResult(selectPackageEntry(SelectPackageEntryCommand.make({
8340
8408
  specifier,
8341
8409
  manifest: fields
8342
- }))), (decision) => Match.value(decision).pipe(Match.tag("PackageEntrySelected", (selected) => Effect$1.succeed(selected.entry)), Match.tag("PackageEntryUnresolved", (unresolved) => Effect$1.fail(importFailure(specifier, { cause: new Error(unresolved.reason) }))), Match.exhaustive));
8410
+ }))), (decision) => Match$1.value(decision).pipe(Match$1.tag("PackageEntrySelected", (selected) => Effect$1.succeed(selected.entry)), Match$1.tag("PackageEntryUnresolved", (unresolved) => Effect$1.fail(importFailure(specifier, { cause: new Error(unresolved.reason) }))), Match$1.exhaustive));
8343
8411
  const parsedManifestOf = (specifier, text) => Result.match(parseAndDecodeManifest(text), {
8344
8412
  onFailure: () => Effect$1.fail(manifestRefusalOf(specifier)),
8345
8413
  onSuccess: (fields) => selectManifestFields(specifier, fields)
@@ -8404,7 +8472,7 @@ const pluginUrlsFromOptions = (options) => [
8404
8472
  ...options.plugins,
8405
8473
  ...options.appendPlugins,
8406
8474
  ...options.ignorers,
8407
- ...Match.value(options.testRunner).pipe(Match.when(Options_exports.isCustomTestRunner, (runner) => [runner.plugin]), Match.when(isVmRunner, () => [vmRunnerPluginUrl()]), Match.orElse(() => [])),
8475
+ ...Match$1.value(options.testRunner).pipe(Match$1.when(Options_exports.isCustomTestRunner, (runner) => [runner.plugin]), Match$1.when(isVmRunner, () => [vmRunnerPluginUrl()]), Match$1.orElse(() => [])),
8408
8476
  ...options.checkers.map((checker) => checker.plugin)
8409
8477
  ];
8410
8478
  //#endregion
@@ -8471,8 +8539,8 @@ var KeepTempDirCommand = class extends S.TaggedClass()("KeepTempDirCommand", {
8471
8539
  }) {
8472
8540
  static [Workflow.InstrumentationBrand] = {};
8473
8541
  };
8474
- const keepOf = (failed) => Match.value(failed).pipe(Match.when(true, () => TempDirKept.make({})), Match.when(false, () => TempDirRemoved.make({})), Match.exhaustive, Result.succeed);
8475
- const decide = (command) => Match.value(command.cleanTempDir).pipe(Match.tag("KeepTempDirAlways", () => Result.succeed(TempDirRemoved.make({}))), Match.tag("KeepTempDirOnFailure", (option) => keepOf(option.failed)), Match.exhaustive);
8542
+ const keepOf = (failed) => Match$1.value(failed).pipe(Match$1.when(true, () => TempDirKept.make({})), Match$1.when(false, () => TempDirRemoved.make({})), Match$1.exhaustive, Result.succeed);
8543
+ const decide = (command) => Match$1.value(command.cleanTempDir).pipe(Match$1.tag("KeepTempDirAlways", () => Result.succeed(TempDirRemoved.make({}))), Match$1.tag("KeepTempDirOnFailure", (option) => keepOf(option.failed)), Match$1.exhaustive);
8476
8544
  const keepTempDir = Workflow.make({
8477
8545
  command: KeepTempDirCommand,
8478
8546
  decision: S.Union([TempDirKept, TempDirRemoved]),
@@ -8482,12 +8550,12 @@ const keepTempDir = Workflow.make({
8482
8550
  //#endregion
8483
8551
  //#region src/Sandbox.service.ts
8484
8552
  const keepTempDirCommand = (exit, cleanTempDir) => KeepTempDirCommand.make({
8485
- cleanTempDir: Match.value(cleanTempDir).pipe(Match.when("always", () => KeepTempDirAlways.make({})), Match.orElse((onFailure) => KeepTempDirOnFailure.make({ failed: onFailure }))),
8553
+ cleanTempDir: Match$1.value(cleanTempDir).pipe(Match$1.when("always", () => KeepTempDirAlways.make({})), Match$1.orElse((onFailure) => KeepTempDirOnFailure.make({ failed: onFailure }))),
8486
8554
  failed: Exit.isFailure(exit)
8487
8555
  });
8488
8556
  const removesTempDir = (exit, cleanTempDir) => Result.match(keepTempDir(keepTempDirCommand(exit, cleanTempDir)), {
8489
8557
  onFailure: () => false,
8490
- onSuccess: (decision) => Match.value(decision).pipe(Match.tag("TempDirRemoved", () => true), Match.tag("TempDirKept", () => false), Match.exhaustive)
8558
+ onSuccess: (decision) => Match$1.value(decision).pipe(Match$1.tag("TempDirRemoved", () => true), Match$1.tag("TempDirKept", () => false), Match$1.exhaustive)
8491
8559
  });
8492
8560
  const removeEmptyParentDirectory = Effect$1.fn("stryker.sandbox.remove_empty_parent")(function* (parent, fs) {
8493
8561
  const siblings = yield* fs.readDirectory(parent);
@@ -8580,7 +8648,7 @@ const planPrepare = Workflow.make({
8580
8648
  command: PrepareDecoded,
8581
8649
  decision: S.Union([HumanReporters$1, MachineReporters$1]),
8582
8650
  error: S.Never,
8583
- decide: (decoded) => Match.value(decoded.mode).pipe(Match.when("human", () => Result.succeed(HumanReporters$1.make({ reporters: decoded.reporters }))), Match.when("machine", () => Result.succeed(MachineReporters$1.make({ reporters: decoded.reporters }))), Match.exhaustive)
8651
+ decide: (decoded) => Match$1.value(decoded.mode).pipe(Match$1.when("human", () => Result.succeed(HumanReporters$1.make({ reporters: decoded.reporters }))), Match$1.when("machine", () => Result.succeed(MachineReporters$1.make({ reporters: decoded.reporters }))), Match$1.exhaustive)
8584
8652
  });
8585
8653
  //#endregion
8586
8654
  //#region src/run/plan-reporters.workflow.ts
@@ -8620,15 +8688,15 @@ const planReporters = Workflow.make({
8620
8688
  command: ReporterPlanCommand,
8621
8689
  decision: ReporterPlanDecision,
8622
8690
  error: S.Never,
8623
- decide: (command) => Match.value(command.mode).pipe(Match.when("human", () => Result.succeed(HumanReporters.make({ reporters: [...humanReportersFrom(command.configured)] }))), Match.when("machine", () => Result.succeed(MachineReporters.make({ reporters: [...machineReportersFrom(command.configured)] }))), Match.exhaustive)
8691
+ decide: (command) => Match$1.value(command.mode).pipe(Match$1.when("human", () => Result.succeed(HumanReporters.make({ reporters: [...humanReportersFrom(command.configured)] }))), Match$1.when("machine", () => Result.succeed(MachineReporters.make({ reporters: [...machineReportersFrom(command.configured)] }))), Match$1.exhaustive)
8624
8692
  });
8625
8693
  //#endregion
8626
8694
  //#region src/run/prepare.cell.ts
8627
8695
  const announceSummary = Effect$1.fn("stryker.prepare.announce-summary")(function* (input) {
8628
- yield* Match.value(input.env.resolvedMode.mode).pipe(Match.when("human", () => Boolean.match(input.env.allowConsoleColors, {
8696
+ yield* Match$1.value(input.env.resolvedMode.mode).pipe(Match$1.when("human", () => Boolean.match(input.env.allowConsoleColors, {
8629
8697
  onTrue: () => Console.log(`${AnsiCode.fields.green.literal}${input.summary}${AnsiCode.fields.reset.literal}`),
8630
8698
  onFalse: () => Console.log(input.summary)
8631
- })), Match.orElse(() => Effect$1.logInfo(input.summary)));
8699
+ })), Match$1.orElse(() => Effect$1.logInfo(input.summary)));
8632
8700
  });
8633
8701
  const NO_PLUGIN_DESCRIPTORS = [];
8634
8702
  const schemaPropertiesOf = (document) => Option$1.getOrElse(Option$1.fromNullishOr(document.properties), () => ({}));
@@ -8762,7 +8830,7 @@ const prepareCell = Sandwich.named("stryker.prepare")(readPrepare).decide(planPr
8762
8830
  });
8763
8831
  //#endregion
8764
8832
  //#region src/run/run-stages.cell.ts
8765
- const configReadReasonOf = (cause) => Match.value(cause).pipe(Match.tag("ConfigError", (refused) => refused.message), Match.orElse(() => "Failed to read config"));
8833
+ const configReadReasonOf = (cause) => Match$1.value(cause).pipe(Match$1.tag("ConfigError", (refused) => refused.message), Match$1.orElse(() => "Failed to read config"));
8766
8834
  const mutationTestCell = Cell.andThen(Cell.andThen(Cell.andThen(Cell.mapError(loadConfigCell, (cause) => StageError.make({
8767
8835
  stage: "prepare",
8768
8836
  reason: configReadReasonOf(cause),