@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.
- package/CHANGELOG.md +12 -0
- package/dist/{Run.schema-BlvpjFjJ.d.mts → Run.schema-BwLLAYqu.d.mts} +1 -1
- package/dist/{Run.schema-Bj7b_FMA.mjs → Run.schema-Cv2_Kup0.mjs} +6 -3
- package/dist/{RunEnvironment.service-BJAsZsdn.d.mts → RunEnvironment.service-rkMZ8nm1.d.mts} +8 -2
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +1 -1
- package/dist/{dist-BscHZmXN.mjs → dist-CQ7r4AaH.mjs} +315 -262
- package/dist/events.d.mts +1 -1
- package/dist/events.mjs +1 -1
- package/dist/{index-C09A80iv.d.mts → index-Ptvmn934.d.mts} +15 -5
- package/dist/index.d.mts +10 -6
- package/dist/index.mjs +3 -3
- package/dist/main.mjs +259 -51
- package/dist/{merge-config-X_AxYxMY.d.mts → merge-config-BVdwN_LJ.d.mts} +1 -1
- package/dist/{merge-config-DA_v1hGx.mjs → merge-config-DZHwEkGY.mjs} +1 -1
- package/dist/promises.d.mts +2 -2
- package/dist/promises.mjs +1 -1
- package/dist/{run-stages.cell-BN__EOCk.mjs → run-stages.cell-rdoY0cVH.mjs} +323 -255
- package/package.json +14 -14
|
@@ -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-
|
|
2
|
-
import { n as mergeConfigs, t as mergeConfig } from "./merge-config-
|
|
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-
|
|
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.
|
|
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
|
-
|
|
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),
|