@systemfsoftware/stryker-js 10.1.0 → 10.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.mjs CHANGED
@@ -1452,7 +1452,7 @@ const random = (self) => {
1452
1452
  * @category hashing
1453
1453
  * @since 2.0.0
1454
1454
  */
1455
- const combine$3 = /*#__PURE__*/ dual(2, (self, b) => self * 53 ^ b);
1455
+ const combine$2 = /*#__PURE__*/ dual(2, (self, b) => self * 53 ^ b);
1456
1456
  /**
1457
1457
  * Applies bit manipulation techniques to optimize a hash value.
1458
1458
  *
@@ -1613,7 +1613,7 @@ const string$2 = (str) => {
1613
1613
  */
1614
1614
  const structureKeys = (o, keys) => {
1615
1615
  let h = 12289;
1616
- for (const key of keys) h ^= combine$3(hash(key), hash(o[key]));
1616
+ for (const key of keys) h ^= combine$2(hash(key), hash(o[key]));
1617
1617
  return optimize(h);
1618
1618
  };
1619
1619
  /**
@@ -1691,7 +1691,7 @@ const iterableWith = (seed, f) => (iter) => {
1691
1691
  * @since 2.0.0
1692
1692
  */
1693
1693
  const array = /*#__PURE__*/ iterableWith(6151, hash);
1694
- const hashMap = /*#__PURE__*/ iterableWith(/*#__PURE__*/ string$2("Map"), ([k, v]) => combine$3(hash(k), hash(v)));
1694
+ const hashMap = /*#__PURE__*/ iterableWith(/*#__PURE__*/ string$2("Map"), ([k, v]) => combine$2(hash(k), hash(v)));
1695
1695
  const hashSet = /*#__PURE__*/ iterableWith(/*#__PURE__*/ string$2("Set"), hash);
1696
1696
  const randomHashCache = /*#__PURE__*/ new WeakMap();
1697
1697
  const hashCache = /*#__PURE__*/ new WeakMap();
@@ -2732,7 +2732,7 @@ var Fail = class extends ReasonBase {
2732
2732
  return isFailReason$1(that) && equals$2(this.error, that.error) && equals$2(this.annotations, that.annotations);
2733
2733
  }
2734
2734
  [symbol$2]() {
2735
- return combine$3(string$2(this._tag))(combine$3(hash(this.error))(hash(this.annotations)));
2735
+ return combine$2(string$2(this._tag))(combine$2(hash(this.error))(hash(this.annotations)));
2736
2736
  }
2737
2737
  };
2738
2738
  /** @internal */
@@ -2760,7 +2760,7 @@ var Die = class extends ReasonBase {
2760
2760
  return isDieReason$1(that) && equals$2(this.defect, that.defect) && equals$2(this.annotations, that.annotations);
2761
2761
  }
2762
2762
  [symbol$2]() {
2763
- return combine$3(string$2(this._tag))(combine$3(hash(this.defect))(hash(this.annotations)));
2763
+ return combine$2(string$2(this._tag))(combine$2(hash(this.defect))(hash(this.annotations)));
2764
2764
  }
2765
2765
  };
2766
2766
  /** @internal */
@@ -2822,7 +2822,7 @@ const makeExit = (options) => {
2822
2822
  return isExit$1(that) && that._tag === this._tag && equals$2(this[args], that[args]);
2823
2823
  },
2824
2824
  [symbol$2]() {
2825
- return combine$3(string$2(options.op), hash(this[args]));
2825
+ return combine$2(string$2(options.op), hash(this[args]));
2826
2826
  }
2827
2827
  };
2828
2828
  const ExitPrimitive = function(value) {
@@ -2969,7 +2969,7 @@ const SomeProto = /*#__PURE__*/ Object.defineProperty(/*#__PURE__*/ Object.assig
2969
2969
  return isOption$1(that) && isSome$1(that) && equals$2(this.value, that.value);
2970
2970
  },
2971
2971
  [symbol$2]() {
2972
- return combine$3(hash(this._tag))(hash(this.value));
2972
+ return combine$2(hash(this._tag))(hash(this.value));
2973
2973
  },
2974
2974
  toString() {
2975
2975
  return `some(${format$2(this.value)})`;
@@ -3041,7 +3041,7 @@ const SuccessProto = /*#__PURE__*/ Object.assign(/*#__PURE__*/ Object.create(Com
3041
3041
  return isResult$1(that) && isSuccess$2(that) && equals$2(this.success, that.success);
3042
3042
  },
3043
3043
  [symbol$2]() {
3044
- return combine$3(hash(this._tag))(hash(this.success));
3044
+ return combine$2(hash(this._tag))(hash(this.success));
3045
3045
  },
3046
3046
  toString() {
3047
3047
  return `success(${format$2(this.success)})`;
@@ -3061,7 +3061,7 @@ const FailureProto = /*#__PURE__*/ Object.assign(/*#__PURE__*/ Object.create(Com
3061
3061
  return isResult$1(that) && isFailure$2(that) && equals$2(this.failure, that.failure);
3062
3062
  },
3063
3063
  [symbol$2]() {
3064
- return combine$3(hash(this._tag))(hash(this.failure));
3064
+ return combine$2(hash(this._tag))(hash(this.failure));
3065
3065
  },
3066
3066
  toString() {
3067
3067
  return `failure(${format$2(this.failure)})`;
@@ -5519,22 +5519,6 @@ const findFirst$1 = /*#__PURE__*/ dual(2, (self, f) => {
5519
5519
  */
5520
5520
  const empty$9 = () => ({});
5521
5521
  /**
5522
- * Determines if a mutable record is empty.
5523
- *
5524
- * **Example** (Checking for an empty record)
5525
- *
5526
- * ```ts import.meta.vitest
5527
- * import { Record } from "effect"
5528
- *
5529
- * Record.isEmptyRecord({}) // => true
5530
- * Record.isEmptyRecord({ a: 3 }) // => false
5531
- * ```
5532
- *
5533
- * @category guards
5534
- * @since 2.0.0
5535
- */
5536
- const isEmptyRecord = (self) => Object.keys(self).length === 0;
5537
- /**
5538
5522
  * Checks whether a given `key` exists in a record.
5539
5523
  *
5540
5524
  * **Example** (Checking key membership)
@@ -5653,30 +5637,6 @@ const isSubrecordBy = (equivalence) => dual(2, (self, that) => {
5653
5637
  return true;
5654
5638
  });
5655
5639
  /**
5656
- * Merges two records, preserving entries that exist in either of the records.
5657
- * For keys that exist in both records, the provided combine function is used to merge the values.
5658
- *
5659
- * **Example** (Merging records with union)
5660
- *
5661
- * ```ts import.meta.vitest
5662
- * import { Record } from "effect"
5663
- *
5664
- * Record.union({ a: 1, b: 2 }, { b: 3, c: 4 }, (a, b) => a + b) // => { a: 1, b: 5, c: 4 }
5665
- * ```
5666
- *
5667
- * @category combining
5668
- * @since 2.0.0
5669
- */
5670
- const union$1 = /*#__PURE__*/ dual(3, (self, that, combine) => {
5671
- if (isEmptyRecord(self)) return { ...that };
5672
- if (isEmptyRecord(that)) return { ...self };
5673
- const out = empty$9();
5674
- for (const key of keys$3(self)) if (has$3(that, key)) assignProperty$1(out, key, combine(self[key], that[key]));
5675
- else assignProperty$1(out, key, self[key]);
5676
- for (const key of keys$3(that)) if (!has$3(out, key)) assignProperty$1(out, key, that[key]);
5677
- return out;
5678
- });
5679
- /**
5680
5640
  * Create an `Equivalence` for records using the provided `Equivalence` for values.
5681
5641
  * Two records are considered equivalent if they have the same keys and their corresponding values are equivalent.
5682
5642
  *
@@ -8018,7 +7978,7 @@ var Interrupt = class extends ReasonBase {
8018
7978
  return isInterruptReason(that) && this.fiberId === that.fiberId && this.annotations === that.annotations;
8019
7979
  }
8020
7980
  [symbol$2]() {
8021
- return combine$3(string$2(`${this._tag}:${this.fiberId}`))(random(this.annotations));
7981
+ return combine$2(string$2(`${this._tag}:${this.fiberId}`))(random(this.annotations));
8022
7982
  }
8023
7983
  };
8024
7984
  /** @internal */
@@ -24558,7 +24518,7 @@ const layer$12 = /* @__PURE__ */ succeed$6(Stdio, /*#__PURE__*/ make$29({
24558
24518
  }));
24559
24519
  //#endregion
24560
24520
  //#region package.json
24561
- var version = "10.1.0";
24521
+ var version = "10.1.1";
24562
24522
  var engines = { "node": ">=22.18.0" };
24563
24523
  //#endregion
24564
24524
  //#region ../../node_modules/.pnpm/effect@4.0.0-rc.116/node_modules/effect/dist/Logger.js
@@ -25715,7 +25675,7 @@ const BigDecimalProto = {
25715
25675
  [TypeId$25]: TypeId$25,
25716
25676
  [symbol$2]() {
25717
25677
  const normalized = normalize(this);
25718
- return combine$3(hash(normalized.value), number$2(normalized.scale));
25678
+ return combine$2(hash(normalized.value), number$2(normalized.scale));
25719
25679
  },
25720
25680
  [symbol$1](that) {
25721
25681
  return isBigDecimal(that) && equals(this, that);
@@ -31626,6 +31586,150 @@ function toStandardSchemaV1$1(self, options) {
31626
31586
  } });
31627
31587
  }
31628
31588
  //#endregion
31589
+ //#region ../../node_modules/.pnpm/effect@4.0.0-rc.116/node_modules/effect/dist/internal/schema/toEquivalence.js
31590
+ /** @internal */
31591
+ const toEquivalence$1 = /*#__PURE__*/ memoize((ast) => {
31592
+ return recur(ast, []);
31593
+ });
31594
+ function recur(ast, path) {
31595
+ const annotation = resolve$1(ast)?.["toEquivalence"];
31596
+ if (annotation) return annotation(isDeclaration(ast) ? ast.typeParameters.map((tp) => recur(tp, path)) : []);
31597
+ switch (ast._tag) {
31598
+ case "Never": return strictEqual();
31599
+ case "Declaration": return declarationEquivalence(ast, path);
31600
+ case "Null":
31601
+ case "Undefined":
31602
+ case "Void":
31603
+ case "Unknown":
31604
+ case "Any":
31605
+ case "String":
31606
+ case "Number":
31607
+ case "Boolean":
31608
+ case "BigInt":
31609
+ case "Symbol":
31610
+ case "Literal":
31611
+ case "UniqueSymbol":
31612
+ case "ObjectKeyword":
31613
+ case "Enum":
31614
+ case "TemplateLiteral": return equals$2;
31615
+ case "Arrays": {
31616
+ const elements = ast.elements.map((e, i) => recur(e, [...path, i]));
31617
+ const len = ast.elements.length;
31618
+ const rest = ast.rest.map((r, i) => recur(r, [...path, len + i]));
31619
+ return make$44((a, b) => {
31620
+ if (!Array.isArray(a) || !Array.isArray(b)) return false;
31621
+ const len = a.length;
31622
+ if (len !== b.length) return false;
31623
+ let i = 0;
31624
+ for (; i < Math.min(len, ast.elements.length); i++) if (!elements[i](a[i], b[i])) return false;
31625
+ if (rest.length > 0) {
31626
+ const [head, ...tail] = rest;
31627
+ for (; i < len - tail.length; i++) if (!head(a[i], b[i])) return false;
31628
+ for (let j = 0; j < tail.length; j++) if (!tail[j](a[i + j], b[i + j])) return false;
31629
+ }
31630
+ return true;
31631
+ });
31632
+ }
31633
+ case "Objects": {
31634
+ if (ast.propertySignatures.length === 0 && ast.indexSignatures.length === 0) return equals$2;
31635
+ const propertySignatures = ast.propertySignatures.map((ps) => recur(ps.type, [...path, ps.name]));
31636
+ const indexSignatures = ast.indexSignatures.map((is) => recur(is.type, path));
31637
+ return make$44((a, b) => {
31638
+ if (!isObject(a) || !isObject(b)) return false;
31639
+ for (let i = 0; i < propertySignatures.length; i++) {
31640
+ const ps = ast.propertySignatures[i];
31641
+ const name = ps.name;
31642
+ const aHas = Object.hasOwn(a, name);
31643
+ const bHas = Object.hasOwn(b, name);
31644
+ if (isOptional(ps.type)) {
31645
+ if (aHas !== bHas) return false;
31646
+ }
31647
+ if (aHas && bHas && !propertySignatures[i](a[name], b[name])) return false;
31648
+ }
31649
+ for (let i = 0; i < indexSignatures.length; i++) {
31650
+ const is = ast.indexSignatures[i];
31651
+ const aKeys = getIndexSignatureKeys(a, is.parameter);
31652
+ const bKeys = getIndexSignatureKeys(b, is.parameter);
31653
+ if (aKeys.length !== bKeys.length) return false;
31654
+ for (let j = 0; j < aKeys.length; j++) {
31655
+ const key = aKeys[j];
31656
+ if (!Object.hasOwn(b, key) || !indexSignatures[i](a[key], b[key])) return false;
31657
+ }
31658
+ }
31659
+ return true;
31660
+ });
31661
+ }
31662
+ case "Union": {
31663
+ const types = toType(ast).types;
31664
+ const compiled = new Map(types.map((candidate, i) => [candidate, [_is(candidate), recur(ast.types[i], path)]]));
31665
+ return make$44((a, b) => {
31666
+ const candidates = getCandidates(a, types);
31667
+ for (let i = 0; i < candidates.length; i++) {
31668
+ const [is, equivalence] = compiled.get(candidates[i]);
31669
+ if (is(a) && is(b)) return equivalence(a, b);
31670
+ }
31671
+ return false;
31672
+ });
31673
+ }
31674
+ case "Suspend": {
31675
+ let equivalence;
31676
+ return make$44((a, b) => (equivalence ??= recur(ast.thunk(), path))(a, b));
31677
+ }
31678
+ }
31679
+ }
31680
+ function declarationEquivalence(ast, path) {
31681
+ const representation = ast.annotations?.representation;
31682
+ if (representation === void 0) return equals$2;
31683
+ switch (representation.id) {
31684
+ case "effect/schema/Option": {
31685
+ const [value] = declarationTypeParameters(ast, path);
31686
+ return (a, b) => a._tag === b._tag && (a._tag === "None" || value(a.value, b.value));
31687
+ }
31688
+ case "effect/schema/Result": {
31689
+ const [success, failure] = declarationTypeParameters(ast, path);
31690
+ return (a, b) => a._tag === b._tag && (a._tag === "Success" ? success(a.success, b.success) : failure(a.failure, b.failure));
31691
+ }
31692
+ case "effect/schema/CauseReason": {
31693
+ const [error, defect] = declarationTypeParameters(ast, path);
31694
+ return causeReasonEquivalence(error, defect);
31695
+ }
31696
+ case "effect/schema/Cause": {
31697
+ const [error, defect] = declarationTypeParameters(ast, path);
31698
+ return causeEquivalence(error, defect);
31699
+ }
31700
+ case "effect/schema/Exit": {
31701
+ const [value, error, defect] = declarationTypeParameters(ast, path);
31702
+ const cause = causeEquivalence(error, defect);
31703
+ return (a, b) => a._tag === b._tag && (a._tag === "Success" ? value(a.value, b.value) : cause(a.cause, b.cause));
31704
+ }
31705
+ case "effect/schema/ReadonlyMap": {
31706
+ const [key, value] = declarationTypeParameters(ast, path);
31707
+ return makeCompareMap(key, value);
31708
+ }
31709
+ case "effect/schema/ReadonlySet": return makeCompareSet(declarationTypeParameters(ast, path)[0]);
31710
+ case "effect/schema/RegExp": return (a, b) => a.source === b.source && a.flags === b.flags;
31711
+ case "effect/schema/URL": return (a, b) => a.toString() === b.toString();
31712
+ default: return equals$2;
31713
+ }
31714
+ }
31715
+ function declarationTypeParameters(ast, path) {
31716
+ return ast.typeParameters.map((parameter) => recur(parameter, path));
31717
+ }
31718
+ function causeReasonEquivalence(error, defect) {
31719
+ return (a, b) => {
31720
+ if (a._tag !== b._tag) return false;
31721
+ switch (a._tag) {
31722
+ case "Fail": return error(a.error, b.error);
31723
+ case "Die": return defect(a.defect, b.defect);
31724
+ case "Interrupt": return a.fiberId === b.fiberId;
31725
+ }
31726
+ };
31727
+ }
31728
+ function causeEquivalence(error, defect) {
31729
+ const reasons = Array_(causeReasonEquivalence(error, defect));
31730
+ return (a, b) => reasons(a.reasons, b.reasons);
31731
+ }
31732
+ //#endregion
31629
31733
  //#region ../../node_modules/.pnpm/effect@4.0.0-rc.116/node_modules/effect/dist/Struct.js
31630
31734
  /**
31631
31735
  * Wraps a plain function as a {@link Lambda} value so it can be used with
@@ -34277,6 +34381,28 @@ const TaggedError = (identifier) => {
34277
34381
  };
34278
34382
  };
34279
34383
  /**
34384
+ * Derives an `Equivalence` from a schema. Two values are considered equal when
34385
+ * every field (and nested field) compares equal according to the schema
34386
+ * structure.
34387
+ *
34388
+ * **Example** (Comparing structs)
34389
+ *
34390
+ * ```ts import.meta.vitest
34391
+ * import { Schema } from "effect"
34392
+ *
34393
+ * const eq = Schema.toEquivalence(Schema.Struct({ id: Schema.Number, name: Schema.String }))
34394
+ *
34395
+ * eq({ id: 1, name: "Alice" }, { id: 1, name: "Alice" }) // => true
34396
+ * eq({ id: 1, name: "Alice" }, { id: 2, name: "Alice" }) // => false
34397
+ * ```
34398
+ *
34399
+ * @category instances
34400
+ * @since 4.0.0
34401
+ */
34402
+ function toEquivalence(schema) {
34403
+ return toEquivalence$1(schema.ast);
34404
+ }
34405
+ /**
34280
34406
  * Returns a JSON Schema document using draft 2020-12.
34281
34407
  *
34282
34408
  * **When to use**
@@ -36500,7 +36626,7 @@ const ulidString = (timestampMillis, bytes) => {
36500
36626
  //#region ../../node_modules/.pnpm/effect@4.0.0-rc.116/node_modules/effect/dist/internal/uuid.js
36501
36627
  const hex = (byte) => byte.toString(16).padStart(2, "0");
36502
36628
  /** @internal */
36503
- const stringify$1 = (bytes) => {
36629
+ const stringify = (bytes) => {
36504
36630
  return [
36505
36631
  bytes.subarray(0, 4),
36506
36632
  bytes.subarray(4, 6),
@@ -36517,7 +36643,7 @@ function v4Bytes(bytes = randomBytes$2()) {
36517
36643
  return bytes;
36518
36644
  }
36519
36645
  /** @internal */
36520
- const v4String = (bytes) => stringify$1(bytes === void 0 ? v4Bytes() : v4Bytes(bytes));
36646
+ const v4String = (bytes) => stringify(bytes === void 0 ? v4Bytes() : v4Bytes(bytes));
36521
36647
  const maxV7Timestamp = 2 ** 48 - 1;
36522
36648
  /** @internal */
36523
36649
  function v7Bytes(timestampMillis, bytes = randomBytes$2()) {
@@ -36533,7 +36659,7 @@ function v7Bytes(timestampMillis, bytes = randomBytes$2()) {
36533
36659
  return bytes;
36534
36660
  }
36535
36661
  /** @internal */
36536
- const v7String = (timestampMillis, bytes) => stringify$1(bytes === void 0 ? v7Bytes(timestampMillis) : v7Bytes(timestampMillis, bytes));
36662
+ const v7String = (timestampMillis, bytes) => stringify(bytes === void 0 ? v7Bytes(timestampMillis) : v7Bytes(timestampMillis, bytes));
36537
36663
  //#endregion
36538
36664
  //#region ../../node_modules/.pnpm/effect@4.0.0-rc.116/node_modules/effect/dist/Crypto.js
36539
36665
  /**
@@ -40387,24 +40513,29 @@ const COMMENT_KEYS = /* @__PURE__ */ new Set(["leadingComments", "trailingCommen
40387
40513
  function isCommentKey(key) {
40388
40514
  return typeof key === "string" && COMMENT_KEYS.has(key);
40389
40515
  }
40516
+ function walkTraverse(root, stack, visitors) {
40517
+ walk(walkableNode(root), {
40518
+ enter(node, _parent, context) {
40519
+ readPath(stack, node, this, context, visitors);
40520
+ },
40521
+ leave(_node, _parent, context) {
40522
+ closePath(stack, context, visitors);
40523
+ }
40524
+ });
40525
+ }
40526
+ const toTraverseError = (error) => error instanceof Error ? error : new Error("Traversal failed", { cause: error });
40527
+ const handleTraverseError = (error) => {
40528
+ const err = toTraverseError(error);
40529
+ if (!is$2(TraversalStopped)(err)) throw err;
40530
+ };
40390
40531
  function traverse(root, visitors) {
40391
40532
  const stack = [];
40392
40533
  try {
40393
- walk(walkableNode(root), {
40394
- enter(node, _parent, context) {
40395
- readPath(stack, node, this, context, visitors);
40396
- },
40397
- leave(_node, _parent, context) {
40398
- closePath(stack, context, visitors);
40399
- }
40400
- });
40534
+ walkTraverse(root, stack, visitors);
40401
40535
  } catch (error) {
40402
- rethrowUnlessStopped(error);
40536
+ handleTraverseError(error);
40403
40537
  }
40404
40538
  }
40405
- const rethrowUnlessStopped = (error) => {
40406
- if (!is$2(TraversalStopped)(error)) throw error;
40407
- };
40408
40539
  const readPath = (stack, node, controls, context, visitors) => {
40409
40540
  if (isCommentKey(context.key)) return;
40410
40541
  const path = createPath(node, parentOf(stack), controls, context);
@@ -40472,7 +40603,7 @@ function writeInto(parent, key, index, replacement) {
40472
40603
  writeAtKey(parent, key, index, replacement);
40473
40604
  }
40474
40605
  function writeAtKey(parent, key, index, replacement) {
40475
- value(key).pipe(when(isString, (slot) => writeAtSlot(parent, slot, index, replacement)), orElse$1(() => void 0));
40606
+ if (isString(key)) writeAtSlot(parent, key, index, replacement);
40476
40607
  }
40477
40608
  function writeAtSlot(parent, key, index, replacement) {
40478
40609
  value(index).pipe(when(_null, () => overwrite(parent, key, replacement)), orElse$1((position) => writeElement(parent[key], position, replacement)));
@@ -40552,17 +40683,16 @@ function isRangedBaseNode(value) {
40552
40683
  function isNonEmptyArray(value) {
40553
40684
  return Array.isArray(value) && value.length > 0;
40554
40685
  }
40555
- function hasField(value, key) {
40556
- return isPlainRecord(value) && key in value;
40557
- }
40558
- function hasContent(value) {
40559
- return hasField(value, "content");
40686
+ function hasContentField(value) {
40687
+ return isPlainRecord(value) && "content" in value;
40560
40688
  }
40561
- function hasHtml(value) {
40562
- return hasField(value, "html");
40689
+ function hasHtmlField(value) {
40690
+ return isPlainRecord(value) && "html" in value;
40563
40691
  }
40564
- function fieldOf$1(value$25, key) {
40565
- return value(value$25).pipe(when(isPlainRecord, (record) => record[key]), orElse$1(() => void 0));
40692
+ const readRecordField = (record, key) => record[key];
40693
+ function fieldOf$1(value, key) {
40694
+ if (!isPlainRecord(value)) return void 0;
40695
+ return readRecordField(value, key);
40566
40696
  }
40567
40697
  function appendIfDefined(values, value) {
40568
40698
  if (value !== void 0) values.push(value);
@@ -40836,12 +40966,12 @@ function isTextRange(value) {
40836
40966
  function isTemplateExpressionTag(value) {
40837
40967
  return isTypedRecord(value) && TEMPLATE_EXPRESSION_TYPES[value["type"]] === true;
40838
40968
  }
40839
- /**
40840
- * The first child of a `<script>` element node. A template `<script>` tag
40841
- * carries its code as that single `Text` child.
40842
- */
40969
+ const firstChild = (element) => {
40970
+ const children = element["children"];
40971
+ return isNonEmptyArray(children) ? getOrUndefined$1(head(children)) : void 0;
40972
+ };
40843
40973
  function scriptChild(node) {
40844
- return value(node).pipe(when(isScriptElement, (element) => value(element["children"]).pipe(when(isNonEmptyArray, (values) => getOrUndefined$1(head(values))), orElse$1(() => void 0))), orElse$1(() => void 0));
40974
+ return isScriptElement(node) ? firstChild(node) : void 0;
40845
40975
  }
40846
40976
  function tryGetScriptRangeFromElement(node) {
40847
40977
  return value(scriptChild(node)).pipe(when(isTextRange, (range) => ({
@@ -40851,14 +40981,14 @@ function tryGetScriptRangeFromElement(node) {
40851
40981
  })), orElse$1(() => void 0));
40852
40982
  }
40853
40983
  function templateExpressionRange(node) {
40854
- return value(node).pipe(when(isTemplateExpressionTag, (tag) => rangedExpressionOf(tag["expression"])), orElse$1(() => void 0));
40984
+ return isTemplateExpressionTag(node) ? rangedExpressionOf(node["expression"]) : void 0;
40855
40985
  }
40856
40986
  function rangedExpressionOf(payload) {
40857
- return value(payload).pipe(when(isRangedBaseNode, (expression) => ({
40858
- start: expression.start,
40859
- end: expression.end,
40987
+ if (isRangedBaseNode(payload)) return {
40988
+ start: payload.start,
40989
+ end: payload.end,
40860
40990
  isExpression: true
40861
- })), orElse$1(() => void 0));
40991
+ };
40862
40992
  }
40863
40993
  /**
40864
40994
  * Allow instrumentation of Svelte 5 projects without dropping support for Svelte 4.
@@ -40870,9 +41000,10 @@ const loadWalker = (version, fileName) => value(isAtLeast(version, SVELTE_5)).pi
40870
41000
  * The specifier is chosen at run time and both modules are optional peers of
40871
41001
  * this package, so neither can be a static import.
40872
41002
  */
41003
+ const findWalker = (module) => isRecordWithWalk(module) ? module.walk : void 0;
40873
41004
  const loadWalkerModule = (specifier, fileName, cause) => gen(function* () {
40874
41005
  const module = yield* promise(() => import(specifier));
40875
- const walk = value(module).pipe(when(isRecordWithWalk, (record) => record.walk), orElse$1(() => void 0));
41006
+ const walk = findWalker(module);
40876
41007
  if (walk === void 0) return yield* SvelteWalkerNotFound.make({
40877
41008
  fileName,
40878
41009
  cause
@@ -40947,29 +41078,31 @@ function getTemplateScriptRanges(ast, walker) {
40947
41078
  return ranges;
40948
41079
  }
40949
41080
  function htmlRootOf(ast) {
40950
- return value(ast).pipe(when(hasHtml, (record) => record["html"]), orElse$1(() => {
40951
- throw new Error("Svelte AST without html");
40952
- }));
41081
+ if (!hasHtmlField(ast)) throw new Error("Svelte AST without html");
41082
+ return ast["html"];
40953
41083
  }
40954
41084
  function instanceScriptRange(ast) {
40955
- return value(fieldOf$1(ast, "instance")).pipe(when(hasContent, (instance) => scriptContentRange(instance["content"], INSTANCE_RANGE_MISSING)), orElse$1(() => void 0));
41085
+ const record = contentFieldOf(fieldOf$1(ast, "instance"));
41086
+ return record === void 0 ? void 0 : scriptContentRange(record["content"], INSTANCE_RANGE_MISSING);
40956
41087
  }
40957
41088
  function scriptContentRange(content, missingRange) {
40958
- return value(content).pipe(when(isRange, (range) => ({
40959
- start: range.start,
40960
- end: range.end,
41089
+ if (isRange(content)) return {
41090
+ start: content.start,
41091
+ end: content.end,
40961
41092
  isExpression: false
40962
- })), orElse$1(() => {
40963
- throw new Error(missingRange);
40964
- }));
41093
+ };
41094
+ throw new Error(missingRange);
40965
41095
  }
40966
41096
  function getModuleScriptRange(svelteAst) {
40967
41097
  return value(fieldOf$1(svelteAst, "module")).pipe(when(void 0, () => void 0), when(null, () => void 0), orElse$1((block) => moduleBlockRange(block)));
40968
41098
  }
41099
+ function contentFieldOf(value) {
41100
+ return getOrUndefined$1(filter$4(fromNullishOr(value), hasContentField));
41101
+ }
40969
41102
  function moduleBlockRange(block) {
40970
- return value(block).pipe(when(hasContent, (record) => scriptContentRange(record["content"], MODULE_RANGE_MISSING)), orElse$1(() => {
40971
- throw new Error(MODULE_RANGE_MISSING);
40972
- }));
41103
+ const record = contentFieldOf(block);
41104
+ if (record === void 0) throw new Error(MODULE_RANGE_MISSING);
41105
+ return scriptContentRange(record["content"], MODULE_RANGE_MISSING);
40973
41106
  }
40974
41107
  /**
40975
41108
  * Remaps script locations back to the original places using the script map
@@ -43167,16 +43300,19 @@ function literalWithoutRegex(node) {
43167
43300
  return valueLiteralText(node.value);
43168
43301
  }
43169
43302
  function valueLiteralText(value) {
43170
- switch (typeof value) {
43171
- case "string": return JSON.stringify(value);
43172
- case "number": return String(value);
43173
- case "boolean": return String(value);
43174
- case "bigint": return `${value}n`;
43175
- case "symbol":
43176
- case "undefined":
43177
- case "object":
43178
- case "function": return "null";
43179
- }
43303
+ if (typeof value === "string") return JSON.stringify(value);
43304
+ return nonStringLiteralText(value);
43305
+ }
43306
+ function nonStringLiteralText(value) {
43307
+ if (typeof value === "number") return String(value);
43308
+ return booleanOrBigintText(value);
43309
+ }
43310
+ function booleanOrBigintText(value) {
43311
+ if (typeof value === "boolean") return String(value);
43312
+ return bigintText(value);
43313
+ }
43314
+ function bigintText(value) {
43315
+ return typeof value === "bigint" ? `${value}n` : "null";
43180
43316
  }
43181
43317
  function flagText(present, text) {
43182
43318
  switch (Boolean(present)) {
@@ -43228,13 +43364,12 @@ const HASHBANG_FIELDS = {
43228
43364
  function isHashbang(value) {
43229
43365
  return isObject(value) && Object.entries(HASHBANG_FIELDS).every(([key, accepts]) => accepts(value[key]));
43230
43366
  }
43231
- const hashbangOf = (root) => {
43232
- const hashbang = Reflect.get(root, "hashbang");
43233
- if (!isHashbang(hashbang)) return null;
43234
- return hashbang;
43235
- };
43236
- const jsPrint = (file) => printProgram(file.root, { hashbang: hashbangOf(file.root) });
43237
- const tsPrint = (file) => printProgram(file.root, { hashbang: hashbangOf(file.root) });
43367
+ const toHashbang = (hashbang) => isHashbang(hashbang) ? hashbang : null;
43368
+ function getHashbang(root) {
43369
+ return toHashbang("hashbang" in root ? root.hashbang : null);
43370
+ }
43371
+ const jsPrint = (file) => printProgram(file.root, { hashbang: getHashbang(file.root) });
43372
+ const tsPrint = (file) => printProgram(file.root, { hashbang: getHashbang(file.root) });
43238
43373
  function getScriptStart$1(script) {
43239
43374
  const span = spanOf(script.root);
43240
43375
  if (span === void 0) throw new Error("Script AST root without start");
@@ -43298,18 +43433,23 @@ function normalizeFileName$4(fileName) {
43298
43433
  }
43299
43434
  const hasText = (value) => isString(value) && value.length > 0;
43300
43435
  const textIfNonEmpty = (value) => getOrUndefined$1(filter$4(fromUndefinedOr(value), hasText));
43301
- const fieldOf = (value$32, key) => value(key in value$32).pipe(when(true, () => {
43302
- return Reflect.get(value$32, key);
43303
- }), orElse$1(() => void 0));
43436
+ function readFieldOf(record, key) {
43437
+ return record[key];
43438
+ }
43439
+ const hasFieldIn = (value, key) => key in value;
43440
+ const fieldOf = (value, key) => {
43441
+ if (!hasFieldIn(value, key)) return;
43442
+ return readFieldOf(value, key);
43443
+ };
43304
43444
  const hasStringCode = (error) => value(fieldOf(error, "code")).pipe(when(string, () => true), orElse$1(() => false));
43305
43445
  function isErrnoException(error) {
43306
43446
  return value(error).pipe(when(instanceOf(Error), hasStringCode), orElse$1(() => false));
43307
43447
  }
43308
- const isEmptyNumber = (value$28) => value(value$28).pipe(when(0, () => true), orElse$1(Number.isNaN));
43448
+ const isEmptyNumber = (value$21) => value(value$21).pipe(when(0, () => true), orElse$1(Number.isNaN));
43309
43449
  const isEmptyError = (error) => value(error).pipe(when(_undefined, () => true), when(_null, () => true), when(string, (text) => text.length === 0), when(number, isEmptyNumber), when(boolean, (value) => !value), orElse$1(() => false));
43310
43450
  const formatErrnoException = (error) => value(error.stack).pipe(when(hasText, (stack) => `${error.name}: ${error.code} (${error.syscall}) ${stack}`), orElse$1(() => `${error.name}: ${error.code} (${error.syscall})`));
43311
43451
  const formatError = (error) => value(error.stack).pipe(when(hasText, (stack) => `${error.name}: ${error.message}\n${stack}`), orElse$1(() => `${error.name}: ${error.message}`));
43312
- const isJsonPrimitive = (value$26) => value(value$26).pipe(when(number, () => true), when(boolean, () => true), when(bigint, () => true), orElse$1(() => false));
43452
+ const isJsonPrimitive = (value$19) => value(value$19).pipe(when(number, () => true), when(boolean, () => true), when(bigint, () => true), orElse$1(() => false));
43313
43453
  const jsonText = (error) => {
43314
43454
  try {
43315
43455
  return textIfNonEmpty(JSON.stringify(error));
@@ -43324,33 +43464,54 @@ const isNonPlaceholderText = (text) => value({
43324
43464
  hasLength: true,
43325
43465
  isPlaceholder: false
43326
43466
  }, () => true), orElse$1(() => false));
43327
- const isUsableText = (value$36) => value(value$36).pipe(when(string, isNonPlaceholderText), orElse$1(() => false));
43328
- const usableText = (value$34) => value(value$34).pipe(when(isUsableText, (text) => text), orElse$1(() => ""));
43329
- const objectToStringText = (value$30) => value(fieldOf(value$30, "toString")).pipe(when(instanceOf(Function), (callable) => {
43467
+ const isUsableText = (value$18) => value(value$18).pipe(when(string, isNonPlaceholderText), orElse$1(() => false));
43468
+ const usableText = (value) => isUsableText(value) ? value : "";
43469
+ const objectToStringText = (value$22) => value(fieldOf(value$22, "toString")).pipe(when(instanceOf(Function), (callable) => {
43330
43470
  try {
43331
- return usableText(Reflect.apply(callable, value$30, []));
43471
+ return usableText(Reflect.apply(callable, value$22, []));
43332
43472
  } catch {
43333
43473
  return "";
43334
43474
  }
43335
43475
  }), orElse$1(() => ""));
43336
43476
  const isObjectType = (cause) => typeof cause === "object";
43337
- const toStringText = (error) => value(error).pipe(when(_null, () => ""), when(isObjectType, (value) => objectToStringText(value)), orElse$1(() => ""));
43338
- const stringifyRest = (error) => value(jsonText(error)).pipe(when(hasText, (json) => json), orElse$1(() => toStringText(error)));
43339
- const stringifyNonError = (error) => value(error).pipe(when(string, (text) => text), when(isJsonPrimitive, (primitive) => JSON.stringify(primitive)), orElse$1(() => stringifyRest(error)));
43477
+ const isNonNullObjectType = (error) => error !== null && isObjectType(error);
43478
+ const toStringText = (error) => isNonNullObjectType(error) ? objectToStringText(error) : "";
43479
+ const stringifyRest = (error) => {
43480
+ const json = jsonText(error);
43481
+ return hasText(json) ? json : toStringText(error);
43482
+ };
43483
+ function primitiveJsonOf(error) {
43484
+ return isJsonPrimitive(error) ? JSON.stringify(error) : void 0;
43485
+ }
43486
+ const stringifyNonError = (error) => typeof error === "string" ? error : nonStringTextOf(error);
43487
+ function nonStringTextOf(error) {
43488
+ return primitiveJsonOf(error) ?? stringifyRest(error);
43489
+ }
43340
43490
  const errorText$2 = (error) => value(error).pipe(when(isErrnoException, formatErrnoException), orElse$1(() => formatError(error)));
43341
43491
  function errorToString(error) {
43342
43492
  return value(error).pipe(when(isEmptyError, () => ""), when(instanceOf(Error), errorText$2), orElse$1(() => stringifyNonError(error)));
43343
43493
  }
43344
43494
  Object.freeze({ NoSuchFileOrDirectory: "ENOENT" });
43345
- const errorNameOf = (value$31) => value(value$31).pipe(when(instanceOf(Error), (error) => textIfNonEmpty(error.name)), orElse$1(() => void 0));
43346
- const tagOf = (value$33) => value(textIfNonEmpty(fieldOf(value$33, "_tag"))).pipe(when(hasText, (tag) => tag), orElse$1(() => errorNameOf(value$33)));
43495
+ const errorNameOf = (value$17) => value(value$17).pipe(when(instanceOf(Error), (error) => textIfNonEmpty(error.name)), orElse$1(() => void 0));
43496
+ const tagOf = (value$20) => value(textIfNonEmpty(fieldOf(value$20, "_tag"))).pipe(when(hasText, (tag) => tag), orElse$1(() => errorNameOf(value$20)));
43347
43497
  const textWithNested = (own, nested) => value(own).pipe(when(hasText, (text) => appendNested(text, nested)), orElse$1(() => nested));
43348
43498
  const appendNested = (own, nested) => value(nested).pipe(when(hasText, (text) => `${own}: ${text}`), orElse$1(() => own));
43349
43499
  const errorMessage = (error) => value(error.message.length > 0).pipe(when(true, () => error.message), orElse$1(() => tagOf(error)));
43350
- const errorMessageOrTag = (value$29) => value(value$29).pipe(when(instanceOf(Error), errorMessage), orElse$1(() => tagOf(value$29)));
43351
- const messageText = (value$35) => value(textIfNonEmpty(fieldOf(value$35, "message"))).pipe(when(hasText, (message) => message), orElse$1(() => errorMessageOrTag(value$35)));
43352
- const ownCauseText = (value$27) => value(textIfNonEmpty(fieldOf(value$27, "reason"))).pipe(when(hasText, (reason) => reason), orElse$1(() => messageText(value$27)));
43353
- const causeText = (cause, depth) => value(cause).pipe(when(() => depth > 4, () => void 0), when(_undefined, () => void 0), when(_null, () => void 0), when(string, textIfNonEmpty), when(isObjectType, (value) => textWithNested(ownCauseText(value), causeText(fieldOf(value, "cause"), depth + 1))), orElse$1(() => void 0));
43500
+ const errorMessageOrTag = (value$16) => value(value$16).pipe(when(instanceOf(Error), errorMessage), orElse$1(() => tagOf(value$16)));
43501
+ const messageText = (value$23) => value(textIfNonEmpty(fieldOf(value$23, "message"))).pipe(when(hasText, (message) => message), orElse$1(() => errorMessageOrTag(value$23)));
43502
+ const ownCauseText = (value$15) => value(textIfNonEmpty(fieldOf(value$15, "reason"))).pipe(when(hasText, (reason) => reason), orElse$1(() => messageText(value$15)));
43503
+ const isPastDepth = (depth) => depth > 4;
43504
+ const isMissingCause = (cause) => cause === void 0 || cause === null;
43505
+ const causeText = (cause, depth) => isPastDepth(depth) ? void 0 : missingCauseTextOf(cause, depth);
43506
+ function missingCauseTextOf(cause, depth) {
43507
+ return isMissingCause(cause) ? void 0 : causeTextOfValue(cause, depth);
43508
+ }
43509
+ function causeTextOfValue(cause, depth) {
43510
+ return typeof cause === "string" ? textIfNonEmpty(cause) : objectCauseTextOf(cause, depth);
43511
+ }
43512
+ function objectCauseTextOf(cause, depth) {
43513
+ return isObjectType(cause) ? textWithNested(ownCauseText(cause), causeText(fieldOf(cause, "cause"), depth + 1)) : void 0;
43514
+ }
43354
43515
  /**
43355
43516
  * Mutator — every mutation operator and its registry.
43356
43517
  */
@@ -43637,9 +43798,10 @@ function withOperator(node, operator) {
43637
43798
  function mutantsWhen(holds, build) {
43638
43799
  return value(holds).pipe(when(true, build), orElse$1(() => NO_MUTANTS));
43639
43800
  }
43640
- /** A named property of a node that may or may not carry it. */
43801
+ const hasPropertyIn = (node, key) => key in node;
43802
+ const readPropertyOf = (node, key) => hasPropertyIn(node, key) ? node[key] : void 0;
43641
43803
  function propertyOf(node, key) {
43642
- return value(node).pipe(when((candidate) => hasProperty(candidate, key), (host) => host[key]), orElse$1(() => void 0));
43804
+ return isObject(node) ? readPropertyOf(node, key) : void 0;
43643
43805
  }
43644
43806
  function isIdentifier(node) {
43645
43807
  return nodeType(node) === "Identifier";
@@ -44703,7 +44865,8 @@ function frozenContainer(value) {
44703
44865
  freezableChildren(object).forEach((child) => {
44704
44866
  deepFreeze$2(child);
44705
44867
  });
44706
- return Object.freeze(object);
44868
+ Object.freeze(object);
44869
+ return value;
44707
44870
  });
44708
44871
  }
44709
44872
  function freezableChildren(value) {
@@ -45747,7 +45910,7 @@ const FrameworkInformationSchema = Struct({
45747
45910
  branding: optional$4(BrandingInformationSchema),
45748
45911
  dependencies: optional$4(DependenciesSchema)
45749
45912
  });
45750
- const MutationTestResultSchema$1 = Struct({
45913
+ const MutationTestResultSchema = Struct({
45751
45914
  schemaVersion: String$7,
45752
45915
  files: FileResultDictionarySchema,
45753
45916
  thresholds: ThresholdsSchema,
@@ -45893,7 +46056,7 @@ var MutantTested = class extends TaggedClass()("mutantTested", {
45893
46056
  total: NonNegativeInt
45894
46057
  }) {};
45895
46058
  var MutationTestReportReady = class extends TaggedClass()("mutationTestReportReady", {
45896
- report: MutationTestResultSchema$1,
46059
+ report: MutationTestResultSchema,
45897
46060
  metrics: MetricsResultSchema
45898
46061
  }) {};
45899
46062
  const ReporterEventUnion = Union([
@@ -47130,7 +47293,7 @@ const cyanBright = `${ESC}96m`;
47130
47293
  const annotate = (text, ...styles) => {
47131
47294
  return `${styles.flat().join("")}${text}${reset$1}`;
47132
47295
  };
47133
- const combine$2 = (...styles) => styles;
47296
+ const combine$1 = (...styles) => styles;
47134
47297
  /** @internal */
47135
47298
  const cursorTo = (column, row) => {
47136
47299
  if (row === void 0) return `${ESC}${Math.max(column + 1, 0)}G`;
@@ -47226,7 +47389,7 @@ const getTheme = (options) => map$7(Theme, (theme) => ({
47226
47389
  ...options.theme
47227
47390
  }));
47228
47391
  const annotateLine = (line) => annotate(line, bold);
47229
- const annotateErrorLine = (line, color) => annotate(line, combine$2(italicized, color));
47392
+ const annotateErrorLine = (line, color) => annotate(line, combine$1(italicized, color));
47230
47393
  const annotateSymbol = (symbol, ...styles) => symbol.length === 0 ? "" : annotate(symbol, ...styles);
47231
47394
  const separateSymbol = (symbol, text) => symbol.length === 0 ? text : symbol + " " + text;
47232
47395
  const renderPagingPrefix = (theme, showArrowUp, showArrowDown) => {
@@ -47700,7 +47863,7 @@ const renderParts = (state, theme, submitted = false) => {
47700
47863
  return reduce$2(state.dateParts, "", (doc, part, currentIndex) => {
47701
47864
  const partDoc = part.toString();
47702
47865
  if (currentIndex === state.cursor && !submitted) {
47703
- const annotation = combine$2(underlined, theme.primaryColor);
47866
+ const annotation = combine$1(underlined, theme.primaryColor);
47704
47867
  return doc + annotate(partDoc, annotation);
47705
47868
  }
47706
47869
  return doc + partDoc;
@@ -48129,7 +48292,7 @@ const handleNumberClear = (options) => {
48129
48292
  const renderNumberInput = (state, submitted, theme, renderOptions) => {
48130
48293
  const value = state.value === "" ? "" : `${state.value}`;
48131
48294
  if (submitted || renderOptions?.plain === true) return value;
48132
- const annotation = isSome(state.error) ? theme.errorColor : combine$2(underlined, theme.primaryColor);
48295
+ const annotation = isSome(state.error) ? theme.errorColor : combine$1(underlined, theme.primaryColor);
48133
48296
  return annotate(value, annotation);
48134
48297
  };
48135
48298
  const renderNumberError = (state, pointer, theme, renderOptions) => {
@@ -48301,7 +48464,7 @@ const renderChoicePrefix = (state, choices, toDisplay, currentIndex, figures, re
48301
48464
  const prefix = renderPagingPrefix(figures, currentIndex === toDisplay.startIndex && toDisplay.startIndex > 0, currentIndex === toDisplay.endIndex - 1 && toDisplay.endIndex < choices.length);
48302
48465
  if (renderOptions?.plain === true) return state === currentIndex ? figures.pointer + prefix : prefix + " ".repeat(figures.pointer.length);
48303
48466
  if (choices[currentIndex].disabled) {
48304
- const annotation = combine$2(bold, figures.mutedColor);
48467
+ const annotation = combine$1(bold, figures.mutedColor);
48305
48468
  return state === currentIndex ? annotateSymbol(figures.pointer, annotation) + prefix : prefix + " ".repeat(figures.pointer.length);
48306
48469
  }
48307
48470
  return state === currentIndex ? annotateSymbol(figures.pointer, figures.primaryColor) + prefix : prefix + " ".repeat(figures.pointer.length);
@@ -48309,8 +48472,8 @@ const renderChoicePrefix = (state, choices, toDisplay, currentIndex, figures, re
48309
48472
  const renderChoiceTitle = (choice, isSelected, theme, renderOptions) => {
48310
48473
  if (renderOptions?.plain === true) return choice.title;
48311
48474
  const title = choice.title;
48312
- if (isSelected) return choice.disabled ? annotate(title, combine$2(underlined, theme.mutedColor)) : annotate(title, combine$2(underlined, theme.primaryColor));
48313
- return choice.disabled ? annotate(title, combine$2(strikethrough, theme.mutedColor)) : title;
48475
+ if (isSelected) return choice.disabled ? annotate(title, combine$1(underlined, theme.mutedColor)) : annotate(title, combine$1(underlined, theme.primaryColor));
48476
+ return choice.disabled ? annotate(title, combine$1(strikethrough, theme.mutedColor)) : title;
48314
48477
  };
48315
48478
  const renderSelectChoices = (state, options, figures, renderOptions) => {
48316
48479
  const choices = options.choices;
@@ -48402,7 +48565,7 @@ const renderTextInput = (nextState, options, theme, submitted, renderOptions) =>
48402
48565
  case "text": return text;
48403
48566
  }
48404
48567
  if (text.length === 0) return "";
48405
- const annotation = isSome(nextState.error) ? theme.errorColor : submitted ? theme.submittedColor : combine$2(underlined, theme.primaryColor);
48568
+ const annotation = isSome(nextState.error) ? theme.errorColor : submitted ? theme.submittedColor : combine$1(underlined, theme.primaryColor);
48406
48569
  switch (options.type) {
48407
48570
  case "hidden": return "";
48408
48571
  case "password": return annotateSymbol(theme.passwordMask.repeat(text.length), annotation);
@@ -48581,7 +48744,7 @@ const handleToggleClear = /*#__PURE__*/ fnUntraced(function* (options) {
48581
48744
  });
48582
48745
  const renderToggle = (value, options, theme, submitted = false) => {
48583
48746
  const separator = annotateSymbol(theme.toggleSeparator, theme.mutedColor);
48584
- const selectedAnnotation = combine$2(underlined, submitted ? theme.submittedColor : theme.primaryColor);
48747
+ const selectedAnnotation = combine$1(underlined, submitted ? theme.submittedColor : theme.primaryColor);
48585
48748
  const inactive = value ? options.inactive : annotate(options.inactive, selectedAnnotation);
48586
48749
  return (value ? annotate(options.active, selectedAnnotation) : options.active) + " " + separateSymbol(separator, inactive);
48587
48750
  };
@@ -52977,9 +53140,7 @@ const PriorReportDocument = Struct({
52977
53140
  }))
52978
53141
  }))
52979
53142
  });
52980
- const isArray = Array.isArray;
52981
- const { entries: objectEntries$1, fromEntries: objectFromEntries$1, keys: objectKeys } = Object;
52982
- const stringify = JSON.stringify;
53143
+ const { entries: objectEntries$1, fromEntries: objectFromEntries$1 } = Object;
52983
53144
  const SURVIVORS_RUN_FIRST_REMEDIATION = "run a full `stryker run` first, then re-run with --survivors";
52984
53145
  const SURVIVORS_BOOKKEEPING_KEYS = ["survivorsPriorReport"];
52985
53146
  function stripSurvivorsKeys(config) {
@@ -52988,11 +53149,22 @@ function stripSurvivorsKeys(config) {
52988
53149
  function wasProducedBySurvivorsRun(priorReport) {
52989
53150
  return exists$1(liftPredicate(priorReport.config, record), (config) => SURVIVORS_BOOKKEEPING_KEYS.some((bookkeeping) => bookkeeping in config));
52990
53151
  }
52991
- function serializeSurvivorsHashInput(input) {
52992
- return stringify(sortKeys(input));
52993
- }
52994
- function sortKeys(value$24) {
52995
- return value(value$24).pipe(when(isArray, (many) => many.map((member) => sortKeys(member))), when(record, (named) => objectFromEntries$1(objectKeys(named).sort().map((key) => [key, sortKeys(named[key])]))), orElse$1((leaf) => leaf));
53152
+ const hashValueSchema = () => Union([
53153
+ Null,
53154
+ Finite$3,
53155
+ Boolean$5,
53156
+ String$7,
53157
+ ArraySchema(suspend$1(hashValueSchema)),
53158
+ Record(String$7, suspend$1(hashValueSchema))
53159
+ ]);
53160
+ const SurvivorsHashInput = Struct({
53161
+ frameworkVersion: UndefinedOr(String$7),
53162
+ resolvedOptions: Record(String$7, UndefinedOr(suspend$1(hashValueSchema))),
53163
+ sourceContentHashes: Record(String$7, String$7)
53164
+ });
53165
+ const hashesEquivalent = toEquivalence(SurvivorsHashInput);
53166
+ function decodeSurvivorsHashInput(input) {
53167
+ return decodeUnknownResult(SurvivorsHashInput)(input);
52996
53168
  }
52997
53169
  var PriorReportFacts = class extends Class("PriorReportFacts")({
52998
53170
  config: Record(String$7, Unknown),
@@ -53010,14 +53182,20 @@ const NO_REPORT_DETAIL = "No prior mutation report found — a --survivors run n
53010
53182
  const SURVIVORS_RUN_SOURCE_DETAIL = "The prior mutation report was itself produced by a --survivors run, so it is not a valid input for another one.";
53011
53183
  const MISMATCH_DETAIL = "The prior mutation report does not match the current run (resolved options, framework version, or source content differ).";
53012
53184
  function hashesMatch(priorReport, input) {
53013
- return serializeSurvivorsHashInput({
53185
+ return match$6(decodeSurvivorsHashInput({
53014
53186
  resolvedOptions: stripSurvivorsKeys(priorReport.config),
53015
53187
  frameworkVersion: priorReport.frameworkVersion,
53016
53188
  sourceContentHashes: input.priorSourceHashes
53017
- }) === serializeSurvivorsHashInput({
53018
- resolvedOptions: stripSurvivorsKeys(input.currentConfig),
53019
- frameworkVersion: input.frameworkVersion,
53020
- sourceContentHashes: input.sourceContentHashes
53189
+ }), {
53190
+ onFailure: () => false,
53191
+ onSuccess: (prior) => match$6(decodeSurvivorsHashInput({
53192
+ resolvedOptions: stripSurvivorsKeys(input.currentConfig),
53193
+ frameworkVersion: input.frameworkVersion,
53194
+ sourceContentHashes: input.sourceContentHashes
53195
+ }), {
53196
+ onFailure: () => false,
53197
+ onSuccess: (current) => hashesEquivalent(prior, current)
53198
+ })
53021
53199
  });
53022
53200
  }
53023
53201
  const SurvivorsAdmissionTypeId = Symbol.for("@systemfsoftware/stryker-js/SurvivorsAdmission");
@@ -53169,8 +53347,8 @@ const rejectNonFileUrlPlugin = (flagName) => (specifiers) => {
53169
53347
  return `--${flagName} takes plugin entrypoints as file URLs. Resolve each one with import.meta.resolve in your config. Not a file URL: ${specifiers.filter((specifier) => isNone(decodePluginFileUrl(specifier))).join(", ")}`;
53170
53348
  };
53171
53349
  const CLEAN_TEMP_DIR_DISABLED = ["false", "0"];
53172
- function parseCleanDirOption(value$23) {
53173
- const normalized = value$23.toLocaleLowerCase();
53350
+ function parseCleanDirOption(value$14) {
53351
+ const normalized = value$14.toLocaleLowerCase();
53174
53352
  return value(normalized).pipe(when("always", () => "always"), orElse$1(() => !CLEAN_TEMP_DIR_DISABLED.some((disabled) => disabled === normalized)));
53175
53353
  }
53176
53354
  function parseConcurrency(value) {
@@ -53299,8 +53477,10 @@ const carriesExitClass = (value) => isObjectOrArray(value) && "exitClass" in val
53299
53477
  const carriesCause = (value) => isObjectOrArray(value) && "cause" in value;
53300
53478
  const carriesReason = (value) => isObjectOrArray(value) && "reason" in value;
53301
53479
  const carriesMessageField = (value) => isObjectOrArray(value) && "message" in value;
53302
- function exitClassOf(value$19) {
53303
- return getOrUndefined$1(value(value$19).pipe(when(carriesExitClass, (carrier) => asExitClass(carrier.exitClass)), orElse$1(() => none())));
53480
+ const isNonNullObject$2 = (value) => typeof value === "object" && value !== null;
53481
+ function exitClassOf(value) {
53482
+ if (!carriesExitClass(value)) return;
53483
+ return getOrUndefined$1(asExitClass(value.exitClass));
53304
53484
  }
53305
53485
  const MAX_TRAVERSAL_DEPTH = 10;
53306
53486
  function isUnseenObject(value, seen) {
@@ -53312,9 +53492,12 @@ function isReachableValue(value, depth, seen) {
53312
53492
  function isChildList(value) {
53313
53493
  return Array.isArray(value);
53314
53494
  }
53315
- function causeChildrenOf(value$16) {
53316
- const cause = value(value$16).pipe(when(carriesCause, (carrier) => carrier.cause), orElse$1(() => void 0));
53317
- return value(cause).pipe(when(isChildList, (children) => children), orElse$1(() => [cause]));
53495
+ function causeChildrenOf(value) {
53496
+ const cause = carriesCause(value) ? value.cause : void 0;
53497
+ return match$7(fromNullishOr(cause), {
53498
+ onNone: () => [],
53499
+ onSome: (settled) => isChildList(settled) ? settled : [settled]
53500
+ });
53318
53501
  }
53319
53502
  function visitReachableValue(value, depth, seen, visit) {
53320
53503
  if (isReachableValue(value, depth, seen)) {
@@ -53329,7 +53512,13 @@ function findReachableValue(value, depth, seen, read) {
53329
53512
  return orElse$3(read(value), () => findFirst(causeChildrenOf(value), (child) => findReachableValue(child, depth + 1, seen, read)));
53330
53513
  }
53331
53514
  function causePayloadOf(reason) {
53332
- return value(reason).pipe(when(isFailReason, (failed) => failed.error), when(isDieReason, (died) => died.defect), orElse$1(() => void 0));
53515
+ return isFailReason(reason) ? reason.error : objectPayloadOf(reason);
53516
+ }
53517
+ function objectPayloadOf(reason) {
53518
+ return getOrUndefined$1(filter$4(dieDefectOf(reason), isNonNullObject$2));
53519
+ }
53520
+ function dieDefectOf(reason) {
53521
+ return isDieReason(reason) ? some(reason.defect) : none();
53333
53522
  }
53334
53523
  const failedExit = liftPredicate(isFailure);
53335
53524
  function failurePayloads(exit) {
@@ -53346,20 +53535,20 @@ function collectExitClasses(exit) {
53346
53535
  return out;
53347
53536
  }
53348
53537
  const nonEmptyText = liftPredicate(is$2(NonEmptyString));
53349
- function reasonOf$1(value$21) {
53350
- const declared = value(value$21).pipe(when(carriesReason, (carrier) => carrier.reason), orElse$1(() => void 0));
53351
- return getOrUndefined$1(map$13(nonEmptyText(declared), (reason) => match$7(fromNullishOr(causeTextOf(value$21)), {
53538
+ function reasonOf$1(value$13) {
53539
+ const declared = value(value$13).pipe(when(carriesReason, (carrier) => carrier.reason), orElse$1(() => void 0));
53540
+ return getOrUndefined$1(map$13(nonEmptyText(declared), (reason) => match$7(fromNullishOr(causeTextOf(value$13)), {
53352
53541
  onNone: () => reason,
53353
53542
  onSome: (detail) => `${reason}: ${detail}`
53354
53543
  })));
53355
53544
  }
53356
- function causeTextOf(value$18) {
53357
- const cause = value(value$18).pipe(when(carriesCause, (carrier) => carrier.cause), orElse$1(() => void 0));
53545
+ function causeTextOf(value$12) {
53546
+ const cause = value(value$12).pipe(when(carriesCause, (carrier) => carrier.cause), orElse$1(() => void 0));
53358
53547
  return causeText(cause, 1);
53359
53548
  }
53360
- function firstConfiguredText(value$14) {
53361
- const reason = value(value$14).pipe(when(carriesReason, (carrier) => carrier.reason), orElse$1(() => void 0));
53362
- const message = value(value$14).pipe(when(carriesMessageField, (carrier) => carrier.message), orElse$1(() => void 0));
53549
+ function firstConfiguredText(value$11) {
53550
+ const reason = value(value$11).pipe(when(carriesReason, (carrier) => carrier.reason), orElse$1(() => void 0));
53551
+ const message = value(value$11).pipe(when(carriesMessageField, (carrier) => carrier.message), orElse$1(() => void 0));
53363
53552
  return orElse$3(nonEmptyText(reason), () => nonEmptyText(message));
53364
53553
  }
53365
53554
  function configDetailAt(value) {
@@ -53384,8 +53573,20 @@ function isMessageError(value) {
53384
53573
  function declaresReasonText(value) {
53385
53574
  return carriesReason(value) && isSome(nonEmptyText(value.reason));
53386
53575
  }
53387
- function failureValueDescription(value$20) {
53388
- return value(value$20).pipe(when(is$2(SurvivorsRejection), (rejected) => some(rejected.remediation)), when(declaresReasonText, (carrier) => fromNullishOr(reasonOf$1(carrier))), when(isMessageError, (error) => some(error.message)), when(isPrimitiveText, (primitive) => some(String(primitive))), orElse$1(() => none()));
53576
+ function remediationTextOf(value) {
53577
+ return is$2(SurvivorsRejection)(value) ? some(value.remediation) : none();
53578
+ }
53579
+ function reasonTextOf(value) {
53580
+ return declaresReasonText(value) ? fromNullishOr(reasonOf$1(value)) : none();
53581
+ }
53582
+ function errorMessageTextOf(value) {
53583
+ return isMessageError(value) ? some(value.message) : none();
53584
+ }
53585
+ function primitiveTextOf(value) {
53586
+ return isPrimitiveText(value) ? some(String(value)) : none();
53587
+ }
53588
+ function failureValueDescription(value) {
53589
+ return remediationTextOf(value).pipe(orElse$3(() => reasonTextOf(value)), orElse$3(() => errorMessageTextOf(value)), orElse$3(() => primitiveTextOf(value)));
53389
53590
  }
53390
53591
  function failureDescriptionOf(exit) {
53391
53592
  return failureValueDescription(failureValue(exit)).pipe(orElse$3(() => fromNullishOr(firstConfigErrorDetail(exit))), orElse$3(() => flatMap$6(failedExit(exit), (failure) => nonEmptyText(pretty(failure.cause)))));
@@ -53396,8 +53597,18 @@ function describeFailure(exit) {
53396
53597
  function unrecognizedArgumentOf(exit, argv) {
53397
53598
  return getOrUndefined$1(cliErrorList(exit).pipe(flatMap$6((errors) => findFirst(errors, (error) => argumentHintOf(error, argv)))));
53398
53599
  }
53600
+ function showHelpErrors(help) {
53601
+ return help.errors;
53602
+ }
53603
+ function showHelpErrorsOf(value) {
53604
+ return is$2(ShowHelp)(value) ? some(showHelpErrors(value)) : none();
53605
+ }
53399
53606
  function cliErrorList(exit) {
53400
- return value(failureValue(exit)).pipe(when(is$2(ShowHelp), (help) => some(help.errors)), when(isCliError, (cliError) => some([cliError])), orElse$1(() => none()));
53607
+ const value = failureValue(exit);
53608
+ return match$7(showHelpErrorsOf(value), {
53609
+ onSome: (errors) => some(errors),
53610
+ onNone: () => isCliError(value) ? some([value]) : none()
53611
+ });
53401
53612
  }
53402
53613
  function argumentHintOf(error, argv) {
53403
53614
  return value(error).pipe(tag("UnrecognizedOption", (unrecognized) => some(unrecognizedArgument(argv, unrecognized.option))), tag("UnexpectedArgument", (unexpected) => fromNullishOr(unexpected.arguments[0])), tag("UnknownSubcommand", (unknown) => some(unknown.subcommand)), orElse$1(() => none()));
@@ -53414,17 +53625,20 @@ function failureValue(exit) {
53414
53625
  const SIGNAL_REMEDIATION = "the run was interrupted by a signal; re-run it to continue";
53415
53626
  const PARSE_REMEDIATION = "re-run with --help to see the full usage";
53416
53627
  const DEFAULT_REMEDIATION = "see --reportFile or the verdict envelope on stdout";
53417
- function verdictExitClass(value$15) {
53418
- return value(value$15).pipe(when(hasProperty("verdict"), (carrier) => getOrUndefined$1(asExitClass(carrier.verdict))), orElse$1(() => void 0));
53628
+ function verdictExitClass(value) {
53629
+ return hasProperty("verdict")(value) ? getOrUndefined$1(asExitClass(value.verdict)) : void 0;
53419
53630
  }
53420
53631
  function successExitClassOf(exit) {
53421
- return value(exit).pipe(when(isSuccess, (success) => verdictExitClass(success.value)), orElse$1(() => void 0));
53632
+ return isSuccess(exit) ? verdictExitClass(exit.value) : void 0;
53633
+ }
53634
+ function showHelpErrorCount(help) {
53635
+ return help.errors.length;
53422
53636
  }
53423
- function helpErrorCountOf(value$22) {
53424
- return value(value$22).pipe(when(is$2(ShowHelp), (help) => help.errors.length), orElse$1(() => void 0));
53637
+ function helpErrorCountOf(value) {
53638
+ return is$2(ShowHelp)(value) ? showHelpErrorCount(value) : void 0;
53425
53639
  }
53426
- function survivorsRejectionOf(value$17) {
53427
- return value(value$17).pipe(when(is$2(SurvivorsRejection), (survivors) => survivors), orElse$1(() => void 0));
53640
+ function survivorsRejectionOf(value) {
53641
+ return is$2(SurvivorsRejection)(value) ? value : void 0;
53428
53642
  }
53429
53643
  function present(value) {
53430
53644
  if (value === null) return;
@@ -53546,11 +53760,9 @@ function formatTemplate(template, args) {
53546
53760
  const trailing = progress.args.slice(progress.cursor).map((argument) => ` ${inspectValue(argument)}`);
53547
53761
  return progress.text + trailing.join("");
53548
53762
  }
53549
- function isTextTemplate(args) {
53550
- return typeof args[0] === "string";
53551
- }
53552
53763
  function formatArgs(args) {
53553
- return value(args).pipe(when(isTextTemplate, (values) => formatTemplate(values[0], values.slice(1))), orElse$1((values) => values.map(inspectValue).join(" ")));
53764
+ const [first, ...rest] = args;
53765
+ return typeof first === "string" ? formatTemplate(first, rest) : args.map(inspectValue).join(" ");
53554
53766
  }
53555
53767
  function captureSync(args) {
53556
53768
  capturedConsoleChunks.push(formatArgs(args));
@@ -53630,18 +53842,19 @@ function resetCapturedConsole() {
53630
53842
  //#endregion
53631
53843
  //#region src/config-defaults.ts
53632
53844
  const isNonNullObject$1 = (value) => typeof value === "object" && value !== null;
53845
+ const isRecordValue$1 = (value) => isNonNullObject$1(value) && Array.isArray(value) === false;
53633
53846
  const isArrayValue$1 = (value) => Array.isArray(value);
53634
- const freezeArrayValue$1 = (value) => Object.freeze(value.map(deepFreeze$1));
53847
+ const freezeArrayValue$1 = (value) => Object.freeze(value.map((element) => deepFreeze$1(element)));
53635
53848
  const freezeMapEntry$1 = ([entryKey, entryValue]) => [deepFreeze$1(entryKey), deepFreeze$1(entryValue)];
53636
53849
  const freezeMapValue$1 = (value) => Object.freeze(new Map([...value.entries()].map(freezeMapEntry$1)));
53637
- const freezeSetValue$1 = (value) => Object.freeze(new Set([...value.values()].map(deepFreeze$1)));
53850
+ const freezeSetValue$1 = (value) => Object.freeze(new Set([...value.values()].map((element) => deepFreeze$1(element))));
53638
53851
  const freezeRegExpValue$1 = (value) => Object.freeze(value);
53639
53852
  const freezeRecordValue$1 = (value) => Object.freeze(Object.entries(value).reduce((frozen, [property, propertyValue]) => {
53640
53853
  frozen[property] = deepFreeze$1(propertyValue);
53641
53854
  return frozen;
53642
53855
  }, {}));
53643
53856
  function deepFreeze$1(target) {
53644
- return value(target).pipe(when(isArrayValue$1, freezeArrayValue$1), when((value) => value instanceof Map, freezeMapValue$1), when((value) => value instanceof RegExp, freezeRegExpValue$1), when((value) => value instanceof Set, freezeSetValue$1), when(isNonNullObject$1, freezeRecordValue$1), orElse$1(() => target));
53857
+ return value(target).pipe(when(isArrayValue$1, freezeArrayValue$1), when((value) => value instanceof Map, freezeMapValue$1), when((value) => value instanceof RegExp, freezeRegExpValue$1), when((value) => value instanceof Set, freezeSetValue$1), when(isRecordValue$1, freezeRecordValue$1), orElse$1(() => target));
53645
53858
  }
53646
53859
  const optionsPath$1 = (...path) => path.join(".");
53647
53860
  const SUPPORTED_CONFIG_FILE_EXTENSIONS$1 = [
@@ -53665,6 +53878,51 @@ export default {
53665
53878
  };
53666
53879
  See https://stryker-mutator.io/docs/stryker-js/config-file for more information.`.trim();
53667
53880
  const defaultOptions$1 = map$7(decodeEffect(StrykerOptionsSchema)({}).pipe(orDie), (opts) => deepFreeze$1(opts));
53881
+ const scopedUnserializable = (scope) => (description) => ({
53882
+ ...description,
53883
+ path: [scope, ...description.path]
53884
+ });
53885
+ const describeUnserializableChild = (child, scope) => value(findUnserializables(child)).pipe(when(void 0, () => []), orElse$1((descriptions) => descriptions.map(scopedUnserializable(scope))));
53886
+ const collectUnserializables = (groups) => {
53887
+ const found = groups.flat();
53888
+ if (found.length > 0) return found;
53889
+ };
53890
+ const describeUnserializableArray = (value) => collectUnserializables(value.map((child, index) => describeUnserializableChild(child, index.toString())));
53891
+ const describeUnserializableRecord = (value) => collectUnserializables(Object.entries(value).map(([key, child]) => describeUnserializableChild(child, key)));
53892
+ const isPlainObjectValue = (value) => !Array.isArray(value) && value.constructor === Object;
53893
+ const classNameOf = (value$10) => value(value$10.constructor).pipe(when(defined, (ctor) => ctor.name), orElse$1(() => "Object"));
53894
+ const describeUnserializableInstance = (value) => [{
53895
+ path: [],
53896
+ reason: `Value is an instance of "${classNameOf(value)}", this detail will get lost in translation during serialization`
53897
+ }];
53898
+ const describeUnserializableObject = (value$9) => value(value$9).pipe(when(isArrayValue$1, describeUnserializableArray), when(isPlainObjectValue, describeUnserializableRecord), orElse$1(describeUnserializableInstance));
53899
+ const NON_JSON_PRIMITIVE_TYPES = [
53900
+ "bigint",
53901
+ "function",
53902
+ "symbol"
53903
+ ];
53904
+ const isNonJsonPrimitive = (value) => NON_JSON_PRIMITIVE_TYPES.includes(typeof value);
53905
+ const describeNonJsonPrimitive = (value) => [{
53906
+ path: [],
53907
+ reason: `Primitive type "${typeof value}" has no JSON representation`
53908
+ }];
53909
+ const describeNumber = (value) => {
53910
+ if (isFinite(value)) return void 0;
53911
+ return [{
53912
+ reason: `Number value \`${value}\` has no JSON representation`,
53913
+ path: []
53914
+ }];
53915
+ };
53916
+ function findUnserializables(thing) {
53917
+ if (typeof thing === "number") return describeNumber(thing);
53918
+ return describeNonNumberValue(thing);
53919
+ }
53920
+ function describeNonNumberValue(thing) {
53921
+ return isNonJsonPrimitive(thing) ? describeNonJsonPrimitive(thing) : describeObjectValue(thing);
53922
+ }
53923
+ function describeObjectValue(thing) {
53924
+ return isNonNullObject$1(thing) ? describeUnserializableObject(thing) : void 0;
53925
+ }
53668
53926
  function isWarningEnabled$1(warningType, warningOptions) {
53669
53927
  if (typeof warningOptions === "boolean") return warningOptions;
53670
53928
  else return warningOptions[warningType] === true;
@@ -54265,7 +54523,6 @@ function emitMachineModeOutput(stream, mode, outcome, basePath, pathService) {
54265
54523
  }
54266
54524
  //#endregion
54267
54525
  //#region ../stryker-js-html-reporter/dist/index.mjs
54268
- const MutationTestResultSchema = Unknown;
54269
54526
  var HtmlReportCommand = class extends TaggedClass()("HtmlReportCommand", {
54270
54527
  report: MutationTestResultSchema,
54271
54528
  scriptContent: String$7
@@ -54365,7 +54622,7 @@ const ReportPart = Struct({
54365
54622
  label: String$7,
54366
54623
  outcome: String$7,
54367
54624
  incomplete: Boolean$5,
54368
- report: optional$4(MutationTestResultSchema$1)
54625
+ report: optional$4(MutationTestResultSchema)
54369
54626
  });
54370
54627
  const MergeVerdictRow = Struct({
54371
54628
  label: String$7,
@@ -54387,7 +54644,7 @@ var MergeReportPartsCommand = class extends Class("MergeReportPartsCommand")({
54387
54644
  }) {};
54388
54645
  const MergeReportPartsTypeId = Symbol.for("@systemfsoftware/stryker-js/MergeReportParts");
54389
54646
  var MergedReports = class extends TaggedClass()("MergedReports", {
54390
- report: MutationTestResultSchema$1,
54647
+ report: MutationTestResultSchema,
54391
54648
  rows: ArraySchema(MergeVerdictRow),
54392
54649
  survivors: ArraySchema(MergeSurvivor)
54393
54650
  }) {
@@ -54692,7 +54949,7 @@ const decodedPart = (bytes) => match$7(flatMap$6(fromNullishOr(bytes.metaText),
54692
54949
  incomplete: false
54693
54950
  };
54694
54951
  return match$7(fromNullishOr(bytes.reportText), {
54695
- onSome: (text) => match$7(decodeOption(fromJsonString(MutationTestResultSchema$1))(text), {
54952
+ onSome: (text) => match$7(decodeOption(fromJsonString(MutationTestResultSchema))(text), {
54696
54953
  onNone: () => ({
54697
54954
  part: some(base),
54698
54955
  unreadable: true
@@ -61438,9 +61695,10 @@ const sandboxFor = (platform, fileName, activeMutantId) => {
61438
61695
  exports: moduleExports,
61439
61696
  __filename: fileName
61440
61697
  };
61441
- sandbox["global"] = sandbox;
61442
- sandbox["globalThis"] = sandbox;
61443
- return sandbox;
61698
+ return Object.assign(sandbox, {
61699
+ global: sandbox,
61700
+ globalThis: sandbox
61701
+ });
61444
61702
  };
61445
61703
  const resultFromRun = (failureMessage, timeSpentMs) => value(failureMessage).pipe(when(string, (failure) => ({
61446
61704
  status: "complete",
@@ -61464,10 +61722,7 @@ const isPlainObject = (value) => {
61464
61722
  if (!isObject(value)) return false;
61465
61723
  return true;
61466
61724
  };
61467
- const descriptorValue = (descriptor) => {
61468
- if (descriptor === void 0) return;
61469
- return descriptor.value;
61470
- };
61725
+ const descriptorValue = (descriptor) => descriptor === void 0 ? void 0 : descriptor.value;
61471
61726
  const hostStrykerNamespace = () => {
61472
61727
  const current = descriptorValue(Object.getOwnPropertyDescriptor(globalThis, INSTRUMENTER_CONSTANTS.NAMESPACE));
61473
61728
  if (isPlainObject(current)) return current;
@@ -79214,8 +79469,12 @@ const incrementalDiffOfChanges = (input) => {
79214
79469
  };
79215
79470
  };
79216
79471
  const computeIncrementalDiff = (input) => value(input.force).pipe(when(true, () => forcedDiff(input)), orElse$1(() => incrementalDiffOfChanges(input)));
79217
- const previousFilesOf = (rawReport) => value(rawReport).pipe(when(isObject, (report) => getOrElse(filter$4(fromUndefinedOr(report["files"]), is$2(PreviousFilesSchema)), () => ({}))), orElse$1(() => ({})));
79218
- const previousTestFilesOf = (rawReport) => value(rawReport).pipe(when(isObject, (report) => getOrElse(filter$4(fromUndefinedOr(report["testFiles"]), is$2(PreviousTestFilesSchema)), () => ({}))), orElse$1(() => ({})));
79472
+ const filesFieldOf = (report) => getOrElse(decodeUnknownOption(PreviousFilesSchema)(report.files), () => ({}));
79473
+ const previousFilesFrom = (report) => hasProperty(report, "files") ? filesFieldOf(report) : {};
79474
+ const previousFilesOf = (rawReport) => isObject(rawReport) ? previousFilesFrom(rawReport) : {};
79475
+ const testFilesFieldOf = (report) => getOrElse(decodeUnknownOption(PreviousTestFilesSchema)(report.testFiles), () => ({}));
79476
+ const previousTestFilesFrom = (report) => hasProperty(report, "testFiles") ? testFilesFieldOf(report) : {};
79477
+ const previousTestFilesOf = (rawReport) => isObject(rawReport) ? previousTestFilesFrom(rawReport) : {};
79219
79478
  const hasTestFileName = (result) => result.fileName !== void 0;
79220
79479
  const testIdsByRelativeFile = (testCoverage, basePath) => {
79221
79480
  const byFile = {};
@@ -79302,15 +79561,18 @@ const compileIgnoreRule = (pattern) => {
79302
79561
  //#endregion
79303
79562
  //#region src/config/merge-config.ts
79304
79563
  const usable = (value, key) => key !== "__proto__" && value !== void 0;
79305
- const combineNested = (left, right) => {
79306
- if (isObject(right)) return mergeRecords(left, right);
79307
- return right;
79564
+ const isConfigRecord = (value) => isObject(value);
79565
+ const copyRecord = (source) => filter$3(source, usable);
79566
+ const mergeNested = (base, override) => isConfigRecord(override) ? mergeRecords(base, override) : override;
79567
+ const mergeKeyInto = (merged, key, override) => {
79568
+ const base = merged[key];
79569
+ merged[key] = isConfigRecord(base) ? mergeNested(base, override) : override;
79570
+ };
79571
+ const mergeRecords = (base, overrides) => {
79572
+ const merged = copyRecord(base);
79573
+ for (const [key, override] of Object.entries(filter$3(overrides, usable))) mergeKeyInto(merged, key, override);
79574
+ return merged;
79308
79575
  };
79309
- const combine$1 = (left, right) => {
79310
- if (isObject(left)) return combineNested(left, right);
79311
- return right;
79312
- };
79313
- const mergeRecords = (base, overrides) => union$1(base, filter$3(overrides, usable), combine$1);
79314
79576
  const mergeConfig = (defaults, overrides) => mergeRecords(defaults, overrides);
79315
79577
  //#endregion
79316
79578
  //#region src/Project.ignore.ts
@@ -79619,6 +79881,7 @@ const buildTestRunner = (context, childProcessRunner) => gen(function* () {
79619
79881
  //#endregion
79620
79882
  //#region src/run/load-config.cell.ts
79621
79883
  const isNonNullObject = (value) => typeof value === "object" && value !== null;
79884
+ const isRecordValue = (value) => isNonNullObject(value) && Array.isArray(value) === false;
79622
79885
  const optionsPath = (...path) => path.join(".");
79623
79886
  const combine = (prefixes, suffixes, extensions) => prefixes.flatMap((prefix) => suffixes.flatMap((suffix) => extensions.map((extension) => `${prefix}stryker${suffix}.${extension}`)));
79624
79887
  const CONFIG_FILE_NAME_PREFIXES = ["", "."];
@@ -79639,55 +79902,19 @@ const unsupportedConfigHint = (file) => `"${file}" is not a supported config fil
79639
79902
  const extendsChildHint = (file) => `The extended config "${file}" is a JSON or CommonJS config file, which Stryker no longer reads. Convert it to a config module — Stryker reads config modules with ${SUPPORTED_CONFIG_FILE_EXTENSION_GUIDE} — and point "extends" at the converted file.`;
79640
79903
  const shadowedLegacyWarning = (legacyFile, supportedFile) => `Ignoring the legacy config file "${legacyFile}": "${supportedFile}" is the config Stryker reads. Stryker no longer reads JSON or CommonJS config files; delete the legacy file.`;
79641
79904
  const isArrayValue = (value) => Array.isArray(value);
79642
- const freezeArrayValue = (value) => Object.freeze(value.map(deepFreeze));
79905
+ const isMapValue = (value) => value instanceof Map;
79906
+ const isSetValue = (value) => value instanceof Set;
79907
+ const freezeArrayValue = (value) => Object.freeze(value.map((element) => deepFreeze(element)));
79643
79908
  const freezeMapEntry = ([entryKey, entryValue]) => [deepFreeze(entryKey), deepFreeze(entryValue)];
79644
79909
  const freezeMapValue = (value) => Object.freeze(new Map([...value.entries()].map(freezeMapEntry)));
79645
- const freezeSetValue = (value) => Object.freeze(new Set([...value.values()].map(deepFreeze)));
79910
+ const freezeSetValue = (value) => Object.freeze(new Set([...value.values()].map((element) => deepFreeze(element))));
79646
79911
  const freezeRegExpValue = (value) => Object.freeze(value);
79647
79912
  const freezeRecordValue = (value) => Object.freeze(Object.entries(value).reduce((frozen, [property, propertyValue]) => {
79648
79913
  frozen[property] = deepFreeze(propertyValue);
79649
79914
  return frozen;
79650
79915
  }, {}));
79651
79916
  function deepFreeze(target) {
79652
- return value(target).pipe(when(isArrayValue, freezeArrayValue), when((value) => value instanceof Map, freezeMapValue), when((value) => value instanceof RegExp, freezeRegExpValue), when((value) => value instanceof Set, freezeSetValue), when(isNonNullObject, freezeRecordValue), orElse$1(() => target));
79653
- }
79654
- const scopedUnserializable = (scope) => (description) => ({
79655
- ...description,
79656
- path: [scope, ...description.path]
79657
- });
79658
- const describeUnserializableChild = (child, scope) => value(findUnserializables(child)).pipe(when(void 0, () => []), orElse$1((descriptions) => descriptions.map(scopedUnserializable(scope))));
79659
- const collectUnserializables = (groups) => {
79660
- const found = groups.flat();
79661
- if (found.length > 0) return found;
79662
- };
79663
- const describeUnserializableArray = (value) => collectUnserializables(value.map((child, index) => describeUnserializableChild(child, index.toString())));
79664
- const describeUnserializableRecord = (value) => collectUnserializables(Object.entries(value).map(([key, child]) => describeUnserializableChild(child, key)));
79665
- const isPlainObjectValue = (value) => !Array.isArray(value) && value.constructor === Object;
79666
- const classNameOf = (value$9) => value(value$9.constructor).pipe(when(defined, (ctor) => ctor.name), orElse$1(() => "Object"));
79667
- const describeUnserializableInstance = (value) => [{
79668
- path: [],
79669
- reason: `Value is an instance of "${classNameOf(value)}", this detail will get lost in translation during serialization`
79670
- }];
79671
- const describeUnserializableObject = (value$10) => value(value$10).pipe(when(isArrayValue, describeUnserializableArray), when(isPlainObjectValue, describeUnserializableRecord), orElse$1(describeUnserializableInstance));
79672
- const NON_JSON_PRIMITIVE_TYPES = [
79673
- "bigint",
79674
- "function",
79675
- "symbol"
79676
- ];
79677
- const isNonJsonPrimitive = (value) => NON_JSON_PRIMITIVE_TYPES.includes(typeof value);
79678
- const describeNonJsonPrimitive = (value) => [{
79679
- path: [],
79680
- reason: `Primitive type "${typeof value}" has no JSON representation`
79681
- }];
79682
- const describeNumber = (value) => {
79683
- if (isFinite(value)) return void 0;
79684
- return [{
79685
- reason: `Number value \`${value}\` has no JSON representation`,
79686
- path: []
79687
- }];
79688
- };
79689
- function findUnserializables(thing) {
79690
- return value(thing).pipe(when((value) => typeof value === "number", describeNumber), when(isNonJsonPrimitive, describeNonJsonPrimitive), when(isNonNullObject, describeUnserializableObject), orElse$1(() => void 0));
79917
+ return value(target).pipe(when(isArrayValue, freezeArrayValue), when(isMapValue, freezeMapValue), when((value) => value instanceof RegExp, freezeRegExpValue), when(isSetValue, freezeSetValue), when(isRecordValue, freezeRecordValue), orElse$1(() => target));
79691
79918
  }
79692
79919
  function isWarningEnabled(warningType, warningOptions) {
79693
79920
  if (typeof warningOptions === "boolean") return warningOptions;
@@ -79748,10 +79975,18 @@ const mergePluginDescriptors = (parentPlugins, childPlugins) => {
79748
79975
  const merged = [...parentPlugins, ...childPlugins];
79749
79976
  return merged.filter(isFirstDescriptorOccurrence(merged));
79750
79977
  };
79751
- const inheritNested = (parentValue, childValue) => value(parentValue).pipe(when((value) => isNonNullObject(value) && Array.isArray(value) === false, (parentNested) => value(childValue).pipe(when((value) => isNonNullObject(value) && Array.isArray(value) === false, (childNested) => ({
79752
- ...parentNested,
79753
- ...childNested
79754
- })), orElse$1(() => childValue))), orElse$1(() => childValue));
79978
+ const isConfigOptionsRecord = (value) => isNonNullObject(value) && Array.isArray(value) === false;
79979
+ function mergeConfigRecords(parentNested, childNested) {
79980
+ return {
79981
+ ...parentNested,
79982
+ ...childNested
79983
+ };
79984
+ }
79985
+ const toConfigRecordOption = (value) => isConfigOptionsRecord(value) ? some(value) : none();
79986
+ const inheritNested = (parentValue, childValue) => match$7(all$2([toConfigRecordOption(parentValue), toConfigRecordOption(childValue)]), {
79987
+ onSome: ([parentNested, childNested]) => mergeConfigRecords(parentNested, childNested),
79988
+ onNone: () => childValue
79989
+ });
79755
79990
  const inheritEntry = (out, key, parentValue, childValue) => value(childValue).pipe(when(null, () => {
79756
79991
  const next = { ...out };
79757
79992
  delete next[key];
@@ -79807,15 +80042,20 @@ const decodeConfigDocument = (configFile, document) => decodeUnknownEffect(Confi
79807
80042
  file: configFile,
79808
80043
  cause
79809
80044
  })));
79810
- const requireDefaultExport = (configFile, defaultExport) => value(defaultExport).pipe(when(void 0, () => fail$2(ConfigFileInvalidError.make({
79811
- file: configFile,
79812
- cause: "Config file must have a default export!"
79813
- }))), when(isNonNullObject, (value) => succeed$5(value)), orElse$1(() => fail$2(ConfigFileInvalidError.make({
80045
+ const failInvalidConfig = (configFile, cause) => fail$2(ConfigFileInvalidError.make({
79814
80046
  file: configFile,
79815
- cause: "Default export of config file must be an object!"
79816
- }))));
80047
+ cause
80048
+ }));
80049
+ const requireDefaultExport = (configFile, defaultExport) => defaultExport === void 0 ? failInvalidConfig(configFile, "Config file must have a default export!") : settleObjectExport(configFile, defaultExport);
80050
+ function settleObjectExport(configFile, value) {
80051
+ return isNonNullObject(value) ? succeed$5(value) : failInvalidConfig(configFile, "Default export of config file must be an object!");
80052
+ }
79817
80053
  const isConfigFactory = (value) => typeof value === "function";
79818
- const factoryFailureCause = (cause) => value(cause).pipe(when(instanceOf(Error), (error) => new Error(`Evaluating the config module's exported factory failed: ${error.message}`, { cause: error })), orElse$1(() => cause));
80054
+ function wrappedFactoryFailure(error) {
80055
+ return new Error(`Evaluating the config module's exported factory failed: ${error.message}`, { cause: error });
80056
+ }
80057
+ const factoryFailureCause = (cause) => cause instanceof Error ? wrappedFactoryFailure(cause) : cause;
80058
+ const applyConfigFactory = (factory, configEnv) => factory(configEnv);
79819
80059
  /**
79820
80060
  * Settle a config module's default export into the object the document schema decodes.
79821
80061
  *
@@ -79826,7 +80066,7 @@ const factoryFailureCause = (cause) => value(cause).pipe(when(instanceOf(Error),
79826
80066
  * non-null object and would otherwise reach the document decoder as one.
79827
80067
  */
79828
80068
  const settleConfigDefault = (configFile, defaultExport, configEnv) => tryPromise({
79829
- try: () => Promise.resolve(defaultExport).then((exported) => value(exported).pipe(when(isConfigFactory, (factory) => factory(configEnv)), orElse$1((value) => value))),
80069
+ try: () => Promise.resolve(defaultExport).then((exported) => isConfigFactory(exported) ? applyConfigFactory(exported, configEnv) : exported),
79830
80070
  catch: (cause) => ConfigFileInvalidError.make({
79831
80071
  file: configFile,
79832
80072
  cause: factoryFailureCause(cause)
@@ -79834,14 +80074,14 @@ const settleConfigDefault = (configFile, defaultExport, configEnv) => tryPromise
79834
80074
  }).pipe(flatMap$2((settled) => requireDefaultExport(configFile, settled)));
79835
80075
  const ERASABLE_SYNTAX_HELP = "Config modules may use only erasable TypeScript syntax: no enums, no namespaces with runtime code, no parameter properties, and no decorators.";
79836
80076
  const carriesCode = (cause) => cause instanceof Error && "code" in cause;
79837
- const errorCodeOf = (cause) => {
79838
- const code = value(cause).pipe(when(carriesCode, (error) => error.code), orElse$1(() => void 0));
79839
- if (typeof code === "string") return code;
79840
- };
79841
- const errorMessageOf = (cause) => {
79842
- const message = value(cause).pipe(when(instanceOf(Error), (error) => error.message), orElse$1(() => void 0));
79843
- if (typeof message === "string") return message;
79844
- };
80077
+ function codeOf(coded) {
80078
+ return typeof coded.code === "string" ? coded.code : void 0;
80079
+ }
80080
+ const errorCodeOf = (cause) => carriesCode(cause) ? codeOf(cause) : void 0;
80081
+ const errorMessageOf = (cause) => cause instanceof Error ? errorTextOf(cause) : void 0;
80082
+ function errorTextOf(error) {
80083
+ return typeof error.message === "string" ? error.message : void 0;
80084
+ }
79845
80085
  const importFailureDetail = (failure) => errorMessageOf(failure.cause) ?? failure.message;
79846
80086
  const configImportCause = (configFile, failure) => value(errorCodeOf(failure.cause)).pipe(when("ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX", () => new Error(`The config file "${configFile}" uses TypeScript syntax Node cannot execute. ${ERASABLE_SYNTAX_HELP}`, { cause: failure.cause })), when("ERR_UNKNOWN_FILE_EXTENSION", () => new Error(`The config file "${configFile}" has an extension Node cannot load. Stryker reads config modules with ${SUPPORTED_CONFIG_FILE_EXTENSION_GUIDE}.`, { cause: failure.cause })), when("ERR_MODULE_NOT_FOUND", () => new Error(`The config file "${configFile}" 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: ${importFailureDetail(failure)}`, { cause: failure.cause })), when("ERR_PACKAGE_PATH_NOT_EXPORTED", () => new Error(`The config file "${configFile}" 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: ${importFailureDetail(failure)}`, { cause: failure.cause })), orElse$1(() => failure));
79847
80087
  const configModuleUrl = (configFile, pathService) => value(configFile.startsWith("file:")).pipe(when(true, () => try_({
@@ -80070,10 +80310,10 @@ const discoverConfigFile = () => firstExistingConfigFile([...SUPPORTED_CONFIG_FI
80070
80310
  onSome: (supportedFile) => warnShadowedLegacyConfig(supportedFile)
80071
80311
  })));
80072
80312
  function findConfigFile(configFileName) {
80073
- return value(configFileName).pipe(when(string, (fileName) => configFileFor(fileName)), orElse$1(() => discoverConfigFile()));
80313
+ return typeof configFileName === "string" ? configFileFor(configFileName) : discoverConfigFile();
80074
80314
  }
80075
- const resolveChildExtends = (configFile, child, configEnv) => value("extends" in child).pipe(when(true, () => resolveExtends(configFile, child, configEnv)), orElse$1(() => succeed$5(child)));
80076
- const isCiEnvironment = String$6("CI").pipe(map$7((value$11) => value(value$11.trim().toLowerCase()).pipe(when("", () => false), when("0", () => false), when("false", () => false), orElse$1(() => true))), orElseSucceed(() => false));
80315
+ const resolveChildExtends = (configFile, child, configEnv) => "extends" in child ? resolveExtends(configFile, child, configEnv) : succeed$5(child);
80316
+ const isCiEnvironment = String$6("CI").pipe(map$7((value$8) => value(value$8.trim().toLowerCase()).pipe(when("", () => false), when("0", () => false), when("false", () => false), orElse$1(() => true))), orElseSucceed(() => false));
80077
80317
  function loadOptionsFromConfigFile(cliOptions, configEnv) {
80078
80318
  return findConfigFile(cliOptions["configFile"]).pipe(flatMap$2((configFile) => value(configFile).pipe(when(void 0, () => succeed$5({})), orElse$1((found) => readConfigModule(found, configEnv).pipe(flatMap$2((child) => resolveChildExtends(found, child, configEnv)))))));
80079
80319
  }
@@ -80087,7 +80327,7 @@ function readConfig(cliOptions, invocation) {
80087
80327
  };
80088
80328
  const cliRecord = yield* decodeEffect(ConfigDocumentSchema)(cliOptions).pipe(orDie);
80089
80329
  const fileRecord = yield* loadOptionsFromConfigFile(cliRecord, configEnv);
80090
- const fileOptions = yield* match$6(decodeUnknownResult(ConfigDocumentSchema)(fileRecord), {
80330
+ const fileOptions = yield* match$6(decodeResult(ConfigDocumentSchema)(fileRecord), {
80091
80331
  onFailure: (cause) => fail$2(ConfigFileInvalidError.make({
80092
80332
  file: "config",
80093
80333
  cause
@@ -80197,7 +80437,9 @@ const failPluginLoad = (descriptor, error) => logWarning(`Error during loading "
80197
80437
  }))));
80198
80438
  const modulePluginContributions = (module) => value(hasProperty(module, "strykerPlugins")).pipe(when(true, () => decodeUnknownResult(PluginModuleSchema)(module).pipe(map$12((pluginModule) => pluginModule.strykerPlugins))), orElse$1(() => succeed$9(void 0)));
80199
80439
  const moduleIgnorers = (module) => value(hasProperty(module, "strykerIgnorers")).pipe(when(true, () => decodeUnknownResult(IgnorerModuleSchema)(module).pipe(map$12((ignorerModule) => ignorerModule.strykerIgnorers))), orElse$1(() => succeed$9(void 0)));
80200
- const moduleSchemaContribution = (module) => value(module).pipe(when(hasValidationSchemaContribution, (contribution) => contribution.strykerValidationSchema), orElse$1(() => void 0));
80440
+ const moduleSchemaContribution = (module) => {
80441
+ if (hasValidationSchemaContribution(module)) return module.strykerValidationSchema;
80442
+ };
80201
80443
  const pluginContributionsOf = (module) => flatMap$5(moduleIgnorers(module), (ignorers) => map$12(modulePluginContributions(module), (plugins) => ({
80202
80444
  plugins,
80203
80445
  ignorers,
@@ -80346,9 +80588,9 @@ const declaresTerminalReport = (result) => {
80346
80588
  if (result.done !== true) return isTerminalReportEvent(result.value);
80347
80589
  return false;
80348
80590
  };
80349
- const closeIterator = (iterator, value$8) => {
80591
+ const closeIterator = (iterator, value$7) => {
80350
80592
  const finish = iterator.return?.bind(iterator);
80351
- return value(finish).pipe(when(void 0, () => Promise.resolve(closedIteratorResult)), orElse$1((close) => close(value$8)));
80593
+ return value(finish).pipe(when(void 0, () => Promise.resolve(closedIteratorResult)), orElse$1((close) => close(value$7)));
80352
80594
  };
80353
80595
  const attachReporterFactories = (inputs, options, init) => forEach$1(inputs, (input) => gen(function* () {
80354
80596
  const inbox = yield* bounded(256);
@@ -80924,9 +81166,9 @@ function resolveAgainstBase(basePath, pattern) {
80924
81166
  const base = trimTrailingSlashes(normalizeFileName$1(basePath));
80925
81167
  return value(normalized.startsWith("/")).pipe(when(true, () => normalized), orElse$1(() => value(normalized.startsWith("./")).pipe(when(true, () => `${base}/${normalized.slice(2)}`), orElse$1(() => `${base}/${normalized}`))));
80926
81168
  }
80927
- function trimTrailingSlashes(value$7) {
80928
- const trimmed = value$7.replace(/\/+$/, "");
80929
- return value(trimmed.length === 0).pipe(when(true, () => value$7.slice(0, 1)), orElse$1(() => trimmed));
81169
+ function trimTrailingSlashes(value$6) {
81170
+ const trimmed = value$6.replace(/\/+$/, "");
81171
+ return value(trimmed.length === 0).pipe(when(true, () => value$6.slice(0, 1)), orElse$1(() => trimmed));
80930
81172
  }
80931
81173
  function globPatternOf(pattern) {
80932
81174
  if (typeof pattern === "boolean") return value(pattern).pipe(when(true, () => DEFAULT_GLOB$1), orElse$1(() => void 0));
@@ -81611,7 +81853,10 @@ const parseJsonText = (jsonText) => {
81611
81853
  return fail$6(errorToString(error));
81612
81854
  }
81613
81855
  };
81614
- const parseTsConfigShape = (fileName, parsed) => value(parsed).pipe(when(is$2(TsConfigSchema), (config) => succeed$9(config)), orElse$1(() => fail$6(tsConfigParseError(fileName, `parsed to ${JSON.stringify(parsed)}, which does not match the tsconfig shape this package consumes`))));
81856
+ const parseTsConfigShape = (fileName, parsed) => {
81857
+ if (is$2(TsConfigSchema)(parsed)) return succeed$9(parsed);
81858
+ return fail$6(tsConfigParseError(fileName, `parsed to ${JSON.stringify(parsed)}, which does not match the tsconfig shape this package consumes`));
81859
+ };
81615
81860
  function parseTsConfig(fileName, jsonText) {
81616
81861
  return match$6(parseJsonText(jsonText), {
81617
81862
  onFailure: (reason) => fail$6(tsConfigParseError(fileName, reason)),
@@ -81851,7 +82096,7 @@ const restoreOriginalFiles = (workingDirectory, backupDirectory, basePath) => ad
81851
82096
  yield* logInfo(`Resetting your original files from ${p.relative(basePath, backupDirectory)}.`);
81852
82097
  yield* moveDirectoryRecursive(backupDirectory, workingDirectory).pipe(orDie);
81853
82098
  }).pipe(orDie));
81854
- const isNonEmptyString = (value$6) => value(value$6).pipe(when(isString, (text) => text !== ""), orElse$1(() => false));
82099
+ const isNonEmptyString = (value$5) => value(value$5).pipe(when(isString, (text) => text !== ""), orElse$1(() => false));
81855
82100
  const runConfiguredBuild = (options, workingDirectory) => value(options.buildCommand).pipe(when(isNonEmptyString, (command) => logInfo(`Running build command "${command}" in "${workingDirectory}".`).pipe(andThen$2(() => runBuildCommandIn(command, workingDirectory)))), orElse$1(() => void_$1));
81856
82101
  const linksNodeModules = (options) => value(options.symlinkNodeModules).pipe(when(true, () => !options.inPlace), orElse$1(() => false));
81857
82102
  const linkNodeModules = (nodeModules, workingDirectory, basePath, pathService) => gen(function* () {
@@ -82897,8 +83142,8 @@ const reportDroppedMutants = (dropped) => value(dropped.length).pipe(when(0, ()
82897
83142
  yield* update$1(checkerMutantsSkipped, dropped.length);
82898
83143
  yield* logWarning(`${dropped.length} mutant(s) cannot be described to a checker and were left out of the run (${droppedIdsOf(dropped)})`);
82899
83144
  })));
82900
- const hasStringReason = (r) => "reason" in r && typeof r.reason === "string";
82901
- const reasonOf = (result) => value(result).pipe(when((r) => typeof r === "object" && r !== null, (r) => value(r).pipe(when(hasStringReason, (obj) => obj.reason), orElse$1(() => void 0))), orElse$1(() => void 0));
83145
+ const stringReasonOrUndefined = (val) => typeof val === "string" ? val : void 0;
83146
+ const reasonOf = (result) => "reason" in result ? stringReasonOrUndefined(result.reason) : void 0;
82902
83147
  const stopWallClock = (result) => {
82903
83148
  if (!wallClockTimeoutStopsRun(result.status, reasonOf(result))) return void_$1;
82904
83149
  return fail$2(StageError.make({
@@ -83244,7 +83489,7 @@ const padColumn = (column, input) => value(column.kind === "file").pipe(when(tru
83244
83489
  const drawLine = (column) => repeat("-", columnWidth(column));
83245
83490
  const drawHeader = (column) => padColumn(column, column.header);
83246
83491
  const mutationScoreOf = (scoreType, metrics) => value(scoreType).pipe(when("total", () => metrics.mutationScore), when("covered", () => metrics.mutationScoreBasedOnCoveredCode), exhaustive);
83247
- const thresholdColor = (thresholds, value$5) => value(value$5).pipe(when((present) => Number.isNaN(present), () => ansi.grey), when((present) => present >= thresholds.high, () => ansi.green), when((present) => present >= thresholds.low, () => ansi.yellow), orElse$1(() => ansi.red));
83492
+ const thresholdColor = (thresholds, value$4) => value(value$4).pipe(when((present) => Number.isNaN(present), () => ansi.grey), when((present) => present >= thresholds.high, () => ansi.green), when((present) => present >= thresholds.low, () => ansi.yellow), orElse$1(() => ansi.red));
83248
83493
  const scoreColor = (column, score) => value(column.allowColor).pipe(when(true, () => thresholdColor(column.thresholds, mutationScoreOf(column.scoreType, score.metrics))), when(false, () => (input) => input), exhaustive);
83249
83494
  const colorFor = (column, score) => value(column).pipe(discriminator("kind")("mutationScore", (scored) => scoreColor(scored, score)), orElse$1(() => (input) => input));
83250
83495
  const drawTableCell = (column, score, ancestorCount) => {
@@ -83365,7 +83610,7 @@ const drawMutationScoreTable = (metricsResult, options) => {
83365
83610
  //#endregion
83366
83611
  //#region src/Reporter.schema.ts
83367
83612
  var ClearTextReportCommand = class extends TaggedClass()("ClearTextReportCommand", {
83368
- report: MutationTestResultSchema$1,
83613
+ report: MutationTestResultSchema,
83369
83614
  metrics: MetricsResultSchema
83370
83615
  }) {};
83371
83616
  //#endregion
@@ -83849,9 +84094,7 @@ var MachineReporters = class extends TaggedClass()("MachineReporters", { reporte
83849
84094
  const planPrepare = Workflow_exports.total(PrepareDecoded, (decoded) => value(decoded.mode).pipe(when("human", () => succeed$9(HumanReporters.make({ reporters: decoded.reporters }))), when("machine", () => succeed$9(MachineReporters.make({ reporters: decoded.reporters }))), exhaustive));
83850
84095
  //#endregion
83851
84096
  //#region src/run/prepare.cell.ts
83852
- const isRecord = isObject;
83853
- const asRecord = (value$4) => value(value$4).pipe(when(isRecord, (record) => Object.fromEntries(Object.entries(record))), orElse$1(() => ({})));
83854
- const schemaPropertiesOf = (document) => asRecord(asRecord(document)["properties"]);
84097
+ const schemaPropertiesOf = (document) => getOrElse(fromNullishOr(document.properties), () => ({}));
83855
84098
  const buildMergedSchema = (core, contributions) => value(contributions.length === 0).pipe(when(true, () => core), orElse$1(() => ({
83856
84099
  ...core,
83857
84100
  properties: Object.assign({}, schemaPropertiesOf(core), ...contributions.map((contribution) => schemaPropertiesOf(contribution)))
@@ -84575,7 +84818,7 @@ const sha256 = /* @__PURE__ */ createHasher(() => new _SHA256(), /* @__PURE__ */
84575
84818
  //#endregion
84576
84819
  //#region src/Survivors.ts
84577
84820
  const DEFAULT_SURVIVORS_PRIOR_REPORT = "reports/mutation-report.json";
84578
- const decodePriorReport = decodeUnknownResult(PriorReportDocument);
84821
+ const decodePriorReport = (raw) => decodeUnknownResult(PriorReportDocument)(raw);
84579
84822
  const { entries: objectEntries, fromEntries: objectFromEntries } = Object;
84580
84823
  const EMPTY_CONFIG = {};
84581
84824
  function sourceContentHash(content, hash) {