lalph 0.1.87 → 0.1.91

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/cli.mjs CHANGED
@@ -488,7 +488,7 @@ function isString$1(input) {
488
488
  * @category guards
489
489
  * @since 2.0.0
490
490
  */
491
- function isNumber(input) {
491
+ function isNumber$1(input) {
492
492
  return typeof input === "number";
493
493
  }
494
494
  /**
@@ -610,7 +610,7 @@ function isSymbol(input) {
610
610
  * @since 4.0.0
611
611
  */
612
612
  function isPropertyKey(u) {
613
- return isString$1(u) || isNumber(u) || isSymbol(u);
613
+ return isString$1(u) || isNumber$1(u) || isSymbol(u);
614
614
  }
615
615
  /**
616
616
  * Checks whether a value is a `function`.
@@ -2791,7 +2791,7 @@ const TaggedError = TaggedError$1;
2791
2791
  * @category constructors
2792
2792
  * @since 2.0.0
2793
2793
  */
2794
- function make$53(compare) {
2794
+ function make$54(compare) {
2795
2795
  return (self$1, that) => self$1 === that ? 0 : compare(self$1, that);
2796
2796
  }
2797
2797
  /**
@@ -2825,7 +2825,7 @@ function make$53(compare) {
2825
2825
  * @category instances
2826
2826
  * @since 4.0.0
2827
2827
  */
2828
- const String$5 = /* @__PURE__ */ make$53((self$1, that) => self$1 < that ? -1 : 1);
2828
+ const String$5 = /* @__PURE__ */ make$54((self$1, that) => self$1 < that ? -1 : 1);
2829
2829
  /**
2830
2830
  * An `Order` instance for numbers that compares them numerically.
2831
2831
  *
@@ -2861,7 +2861,7 @@ const String$5 = /* @__PURE__ */ make$53((self$1, that) => self$1 < that ? -1 :
2861
2861
  * @category instances
2862
2862
  * @since 4.0.0
2863
2863
  */
2864
- const Number$4 = /* @__PURE__ */ make$53((self$1, that) => {
2864
+ const Number$5 = /* @__PURE__ */ make$54((self$1, that) => {
2865
2865
  if (globalThis.Number.isNaN(self$1) && globalThis.Number.isNaN(that)) return 0;
2866
2866
  if (globalThis.Number.isNaN(self$1)) return -1;
2867
2867
  if (globalThis.Number.isNaN(that)) return 1;
@@ -2897,7 +2897,7 @@ const Number$4 = /* @__PURE__ */ make$53((self$1, that) => {
2897
2897
  * @category instances
2898
2898
  * @since 4.0.0
2899
2899
  */
2900
- const BigInt$3 = /* @__PURE__ */ make$53((self$1, that) => self$1 < that ? -1 : 1);
2900
+ const BigInt$3 = /* @__PURE__ */ make$54((self$1, that) => self$1 < that ? -1 : 1);
2901
2901
  /**
2902
2902
  * Transforms an `Order` on type `A` into an `Order` on type `B` by providing a function that
2903
2903
  * maps values of type `B` to values of type `A`.
@@ -2932,7 +2932,7 @@ const BigInt$3 = /* @__PURE__ */ make$53((self$1, that) => self$1 < that ? -1 :
2932
2932
  * @category mapping
2933
2933
  * @since 2.0.0
2934
2934
  */
2935
- const mapInput = /* @__PURE__ */ dual(2, (self$1, f) => make$53((b1, b2) => self$1(f(b1), f(b2))));
2935
+ const mapInput = /* @__PURE__ */ dual(2, (self$1, f) => make$54((b1, b2) => self$1(f(b1), f(b2))));
2936
2936
  /**
2937
2937
  * An `Order` instance for `Date` objects that compares them chronologically by their timestamp.
2938
2938
  *
@@ -2966,7 +2966,7 @@ const mapInput = /* @__PURE__ */ dual(2, (self$1, f) => make$53((b1, b2) => self
2966
2966
  * @category instances
2967
2967
  * @since 2.0.0
2968
2968
  */
2969
- const Date$2 = /* @__PURE__ */ mapInput(Number$4, (date$2) => date$2.getTime());
2969
+ const Date$2 = /* @__PURE__ */ mapInput(Number$5, (date$2) => date$2.getTime());
2970
2970
  /**
2971
2971
  * Creates an `Order` for a tuple type based on orders for each element.
2972
2972
  *
@@ -3001,7 +3001,7 @@ const Date$2 = /* @__PURE__ */ mapInput(Number$4, (date$2) => date$2.getTime());
3001
3001
  * @since 4.0.0
3002
3002
  */
3003
3003
  function Tuple$2(elements) {
3004
- return make$53((self$1, that) => {
3004
+ return make$54((self$1, that) => {
3005
3005
  const len = elements.length;
3006
3006
  for (let i = 0; i < len; i++) {
3007
3007
  const o = elements[i](self$1[i], that[i]);
@@ -3045,7 +3045,7 @@ function Tuple$2(elements) {
3045
3045
  * @since 4.0.0
3046
3046
  */
3047
3047
  function Array$4(O) {
3048
- return make$53((self$1, that) => {
3048
+ return make$54((self$1, that) => {
3049
3049
  const aLen = self$1.length;
3050
3050
  const bLen = that.length;
3051
3051
  const len = Math.min(aLen, bLen);
@@ -3053,7 +3053,7 @@ function Array$4(O) {
3053
3053
  const o = O(self$1[i], that[i]);
3054
3054
  if (o !== 0) return o;
3055
3055
  }
3056
- return Number$4(aLen, bLen);
3056
+ return Number$5(aLen, bLen);
3057
3057
  });
3058
3058
  }
3059
3059
  /**
@@ -3099,7 +3099,7 @@ function Array$4(O) {
3099
3099
  */
3100
3100
  function Struct$2(fields) {
3101
3101
  const keys$1 = Object.keys(fields);
3102
- return make$53((self$1, that) => {
3102
+ return make$54((self$1, that) => {
3103
3103
  for (const key of keys$1) {
3104
3104
  const o = fields[key](self$1[key], that[key]);
3105
3105
  if (o !== 0) return o;
@@ -3410,7 +3410,7 @@ const liftThrowable = (f) => (...a) => {
3410
3410
 
3411
3411
  //#endregion
3412
3412
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Duration.js
3413
- const TypeId$56 = "~effect/time/Duration";
3413
+ const TypeId$57 = "~effect/time/Duration";
3414
3414
  const bigint0$1 = /* @__PURE__ */ BigInt(0);
3415
3415
  const bigint24 = /* @__PURE__ */ BigInt(24);
3416
3416
  const bigint60 = /* @__PURE__ */ BigInt(60);
@@ -3436,9 +3436,9 @@ const DURATION_REGEXP = /^(-?\d+(?:\.\d+)?)\s+(nanos?|micros?|millis?|seconds?|m
3436
3436
  */
3437
3437
  const fromDurationInputUnsafe = (input) => {
3438
3438
  if (isDuration(input)) return input;
3439
- if (isNumber(input)) return millis(input);
3439
+ if (isNumber$1(input)) return millis(input);
3440
3440
  if (isBigInt(input)) return nanos(input);
3441
- if (Array.isArray(input) && input.length === 2 && input.every(isNumber)) {
3441
+ if (Array.isArray(input) && input.length === 2 && input.every(isNumber$1)) {
3442
3442
  if (input[0] === -Infinity || input[1] === -Infinity || Number.isNaN(input[0]) || Number.isNaN(input[1])) return zero;
3443
3443
  if (input[0] === Infinity || input[1] === Infinity) return infinity;
3444
3444
  return nanos(BigInt(Math.round(input[0] * 1e9)) + BigInt(Math.round(input[1])));
@@ -3494,7 +3494,7 @@ const zeroDurationValue = {
3494
3494
  };
3495
3495
  const infinityDurationValue = { _tag: "Infinity" };
3496
3496
  const DurationProto = {
3497
- [TypeId$56]: TypeId$56,
3497
+ [TypeId$57]: TypeId$57,
3498
3498
  [symbol$3]() {
3499
3499
  return structure(this.value);
3500
3500
  },
@@ -3533,9 +3533,9 @@ const DurationProto = {
3533
3533
  return pipeArguments(this, arguments);
3534
3534
  }
3535
3535
  };
3536
- const make$52 = (input) => {
3536
+ const make$53 = (input) => {
3537
3537
  const duration = Object.create(DurationProto);
3538
- if (isNumber(input)) if (isNaN(input) || input <= 0) duration.value = zeroDurationValue;
3538
+ if (isNumber$1(input)) if (isNaN(input) || input <= 0) duration.value = zeroDurationValue;
3539
3539
  else if (!Number.isFinite(input)) duration.value = infinityDurationValue;
3540
3540
  else if (!Number.isInteger(input)) duration.value = {
3541
3541
  _tag: "Nanos",
@@ -3566,7 +3566,7 @@ const make$52 = (input) => {
3566
3566
  * @since 2.0.0
3567
3567
  * @category guards
3568
3568
  */
3569
- const isDuration = (u) => hasProperty(u, TypeId$56);
3569
+ const isDuration = (u) => hasProperty(u, TypeId$57);
3570
3570
  /**
3571
3571
  * Checks if a Duration is finite (not infinite).
3572
3572
  *
@@ -3616,7 +3616,7 @@ const isZero = (self$1) => {
3616
3616
  * @since 2.0.0
3617
3617
  * @category constructors
3618
3618
  */
3619
- const zero = /* @__PURE__ */ make$52(0);
3619
+ const zero = /* @__PURE__ */ make$53(0);
3620
3620
  /**
3621
3621
  * A Duration representing infinite time.
3622
3622
  *
@@ -3630,7 +3630,7 @@ const zero = /* @__PURE__ */ make$52(0);
3630
3630
  * @since 2.0.0
3631
3631
  * @category constructors
3632
3632
  */
3633
- const infinity = /* @__PURE__ */ make$52(Infinity);
3633
+ const infinity = /* @__PURE__ */ make$53(Infinity);
3634
3634
  /**
3635
3635
  * Creates a Duration from nanoseconds.
3636
3636
  *
@@ -3645,7 +3645,7 @@ const infinity = /* @__PURE__ */ make$52(Infinity);
3645
3645
  * @since 2.0.0
3646
3646
  * @category constructors
3647
3647
  */
3648
- const nanos = (nanos$1) => make$52(nanos$1);
3648
+ const nanos = (nanos$1) => make$53(nanos$1);
3649
3649
  /**
3650
3650
  * Creates a Duration from microseconds.
3651
3651
  *
@@ -3660,7 +3660,7 @@ const nanos = (nanos$1) => make$52(nanos$1);
3660
3660
  * @since 2.0.0
3661
3661
  * @category constructors
3662
3662
  */
3663
- const micros = (micros$1) => make$52(micros$1 * bigint1e3);
3663
+ const micros = (micros$1) => make$53(micros$1 * bigint1e3);
3664
3664
  /**
3665
3665
  * Creates a Duration from milliseconds.
3666
3666
  *
@@ -3675,7 +3675,7 @@ const micros = (micros$1) => make$52(micros$1 * bigint1e3);
3675
3675
  * @since 2.0.0
3676
3676
  * @category constructors
3677
3677
  */
3678
- const millis = (millis$1) => make$52(millis$1);
3678
+ const millis = (millis$1) => make$53(millis$1);
3679
3679
  /**
3680
3680
  * Creates a Duration from seconds.
3681
3681
  *
@@ -3690,7 +3690,7 @@ const millis = (millis$1) => make$52(millis$1);
3690
3690
  * @since 2.0.0
3691
3691
  * @category constructors
3692
3692
  */
3693
- const seconds = (seconds$1) => make$52(seconds$1 * 1e3);
3693
+ const seconds = (seconds$1) => make$53(seconds$1 * 1e3);
3694
3694
  /**
3695
3695
  * Creates a Duration from minutes.
3696
3696
  *
@@ -3705,7 +3705,7 @@ const seconds = (seconds$1) => make$52(seconds$1 * 1e3);
3705
3705
  * @since 2.0.0
3706
3706
  * @category constructors
3707
3707
  */
3708
- const minutes = (minutes$1) => make$52(minutes$1 * 6e4);
3708
+ const minutes = (minutes$1) => make$53(minutes$1 * 6e4);
3709
3709
  /**
3710
3710
  * Creates a Duration from hours.
3711
3711
  *
@@ -3720,7 +3720,7 @@ const minutes = (minutes$1) => make$52(minutes$1 * 6e4);
3720
3720
  * @since 2.0.0
3721
3721
  * @category constructors
3722
3722
  */
3723
- const hours = (hours$1) => make$52(hours$1 * 36e5);
3723
+ const hours = (hours$1) => make$53(hours$1 * 36e5);
3724
3724
  /**
3725
3725
  * Creates a Duration from days.
3726
3726
  *
@@ -3735,7 +3735,7 @@ const hours = (hours$1) => make$52(hours$1 * 36e5);
3735
3735
  * @since 2.0.0
3736
3736
  * @category constructors
3737
3737
  */
3738
- const days = (days$1) => make$52(days$1 * 864e5);
3738
+ const days = (days$1) => make$53(days$1 * 864e5);
3739
3739
  /**
3740
3740
  * Creates a Duration from weeks.
3741
3741
  *
@@ -3750,7 +3750,7 @@ const days = (days$1) => make$52(days$1 * 864e5);
3750
3750
  * @since 2.0.0
3751
3751
  * @category constructors
3752
3752
  */
3753
- const weeks = (weeks$1) => make$52(weeks$1 * 6048e5);
3753
+ const weeks = (weeks$1) => make$53(weeks$1 * 6048e5);
3754
3754
  /**
3755
3755
  * Converts a Duration to milliseconds.
3756
3756
  *
@@ -4065,7 +4065,7 @@ const format$2 = (self$1) => {
4065
4065
  * @category constructors
4066
4066
  * @since 2.0.0
4067
4067
  */
4068
- const make$51 = (isEquivalent) => (self$1, that) => self$1 === that || isEquivalent(self$1, that);
4068
+ const make$52 = (isEquivalent) => (self$1, that) => self$1 === that || isEquivalent(self$1, that);
4069
4069
  const isStrictEquivalent = (x, y) => x === y;
4070
4070
  /**
4071
4071
  * Creates an equivalence relation that uses strict equality (`===`) to compare values.
@@ -4175,7 +4175,7 @@ const strictEqual = () => isStrictEquivalent;
4175
4175
  * @since 4.0.0
4176
4176
  */
4177
4177
  function Tuple$1(elements) {
4178
- return make$51((self$1, that) => {
4178
+ return make$52((self$1, that) => {
4179
4179
  if (self$1.length !== that.length) return false;
4180
4180
  for (let i = 0; i < self$1.length; i++) if (!elements[i](self$1[i], that[i])) return false;
4181
4181
  return true;
@@ -4232,7 +4232,7 @@ function Tuple$1(elements) {
4232
4232
  * @since 4.0.0
4233
4233
  */
4234
4234
  function Array$3(item) {
4235
- return make$51((self$1, that) => {
4235
+ return make$52((self$1, that) => {
4236
4236
  if (self$1.length !== that.length) return false;
4237
4237
  for (let i = 0; i < self$1.length; i++) if (!item(self$1[i], that[i])) return false;
4238
4238
  return true;
@@ -4308,7 +4308,7 @@ function Array$3(item) {
4308
4308
  */
4309
4309
  function Struct$1(fields) {
4310
4310
  const keys$1 = Reflect.ownKeys(fields);
4311
- return make$51((self$1, that) => {
4311
+ return make$52((self$1, that) => {
4312
4312
  for (const key of keys$1) if (!fields[key](self$1[key], that[key])) return false;
4313
4313
  return true;
4314
4314
  });
@@ -4319,9 +4319,9 @@ function Struct$1(fields) {
4319
4319
  /**
4320
4320
  * @since 2.0.0
4321
4321
  */
4322
- const TypeId$55 = "~effect/data/Option";
4322
+ const TypeId$56 = "~effect/data/Option";
4323
4323
  const CommonProto$1 = {
4324
- [TypeId$55]: { _A: (_) => _ },
4324
+ [TypeId$56]: { _A: (_) => _ },
4325
4325
  ...PipeInspectableProto,
4326
4326
  ...YieldableProto
4327
4327
  };
@@ -4372,7 +4372,7 @@ const NoneProto = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(Co
4372
4372
  }
4373
4373
  });
4374
4374
  /** @internal */
4375
- const isOption$1 = (input) => hasProperty(input, TypeId$55);
4375
+ const isOption$1 = (input) => hasProperty(input, TypeId$56);
4376
4376
  /** @internal */
4377
4377
  const isNone$1 = (fa) => fa._tag === "None";
4378
4378
  /** @internal */
@@ -4388,9 +4388,9 @@ const some$1 = (value) => {
4388
4388
 
4389
4389
  //#endregion
4390
4390
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/internal/result.js
4391
- const TypeId$54 = "~effect/data/Result";
4391
+ const TypeId$55 = "~effect/data/Result";
4392
4392
  const CommonProto = {
4393
- [TypeId$54]: {
4393
+ [TypeId$55]: {
4394
4394
  _A: (_) => _,
4395
4395
  _E: (_) => _
4396
4396
  },
@@ -4444,7 +4444,7 @@ const FailureProto = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create
4444
4444
  }
4445
4445
  });
4446
4446
  /** @internal */
4447
- const isResult$1 = (input) => hasProperty(input, TypeId$54);
4447
+ const isResult$1 = (input) => hasProperty(input, TypeId$55);
4448
4448
  /** @internal */
4449
4449
  const isFailure$5 = (result$2) => result$2._tag === "Failure";
4450
4450
  /** @internal */
@@ -5025,7 +5025,7 @@ const filterMap$2 = flatMap$3;
5025
5025
  * @category Filtering
5026
5026
  * @since 2.0.0
5027
5027
  */
5028
- const filter$5 = /* @__PURE__ */ dual(2, (self$1, predicate) => filterMap$2(self$1, (b) => predicate(b) ? some$1(b) : none$4));
5028
+ const filter$6 = /* @__PURE__ */ dual(2, (self$1, predicate) => filterMap$2(self$1, (b) => predicate(b) ? some$1(b) : none$4));
5029
5029
  /**
5030
5030
  * Creates an `Equivalence` instance for comparing `Option` values, using a
5031
5031
  * provided `Equivalence` for the inner type.
@@ -5066,7 +5066,7 @@ const filter$5 = /* @__PURE__ */ dual(2, (self$1, predicate) => filterMap$2(self
5066
5066
  * @category Equivalence
5067
5067
  * @since 2.0.0
5068
5068
  */
5069
- const makeEquivalence$4 = (isEquivalent) => make$51((x, y) => isNone(x) ? isNone(y) : isNone(y) ? false : isEquivalent(x.value, y.value));
5069
+ const makeEquivalence$4 = (isEquivalent) => make$52((x, y) => isNone(x) ? isNone(y) : isNone(y) ? false : isEquivalent(x.value, y.value));
5070
5070
 
5071
5071
  //#endregion
5072
5072
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Result.js
@@ -5475,7 +5475,7 @@ const has$2 = (key) => (input) => input.has(key) ? input : fail$8(input);
5475
5475
  * @since 4.0.0
5476
5476
  * @category Constructors
5477
5477
  */
5478
- const number$1 = /* @__PURE__ */ fromPredicate(isNumber);
5478
+ const number$1 = /* @__PURE__ */ fromPredicate(isNumber$1);
5479
5479
  /**
5480
5480
  * A predefined filter that only passes through boolean values.
5481
5481
  *
@@ -5912,7 +5912,7 @@ const map$11 = /* @__PURE__ */ dual(2, (self$1, f) => {
5912
5912
  * @category filtering
5913
5913
  * @since 2.0.0
5914
5914
  */
5915
- const filter$4 = /* @__PURE__ */ dual(2, (self$1, predicate) => {
5915
+ const filter$5 = /* @__PURE__ */ dual(2, (self$1, predicate) => {
5916
5916
  const out = empty$13();
5917
5917
  for (const key of keys(self$1)) if (predicate(self$1[key], key)) out[key] = self$1[key];
5918
5918
  return out;
@@ -6420,7 +6420,7 @@ const map$10 = /* @__PURE__ */ dual(2, (self$1, f) => self$1.map(f));
6420
6420
  * @category filtering
6421
6421
  * @since 2.0.0
6422
6422
  */
6423
- const filter$3 = /* @__PURE__ */ dual(2, (self$1, predicate) => {
6423
+ const filter$4 = /* @__PURE__ */ dual(2, (self$1, predicate) => {
6424
6424
  const as$3 = fromIterable$2(self$1);
6425
6425
  const out = [];
6426
6426
  for (let i = 0; i < as$3.length; i++) if (predicate(as$3[i], i)) out.push(as$3[i]);
@@ -6571,23 +6571,23 @@ const ServiceProto = {
6571
6571
  };
6572
6572
  },
6573
6573
  asEffect() {
6574
- return (this.asEffect = constant(withFiber$1((fiber$2) => exitSucceed(get$7(fiber$2.services, this)))))();
6574
+ return (this.asEffect = constant(withFiber$1((fiber$2) => exitSucceed(get$8(fiber$2.services, this)))))();
6575
6575
  },
6576
6576
  of(self$1) {
6577
6577
  return self$1;
6578
6578
  },
6579
6579
  serviceMap(self$1) {
6580
- return make$50(this, self$1);
6580
+ return make$51(this, self$1);
6581
6581
  },
6582
6582
  use(f) {
6583
- return withFiber$1((fiber$2) => f(get$7(fiber$2.services, this)));
6583
+ return withFiber$1((fiber$2) => f(get$8(fiber$2.services, this)));
6584
6584
  },
6585
6585
  useSync(f) {
6586
- return withFiber$1((fiber$2) => exitSucceed(f(get$7(fiber$2.services, this))));
6586
+ return withFiber$1((fiber$2) => exitSucceed(f(get$8(fiber$2.services, this))));
6587
6587
  }
6588
6588
  };
6589
6589
  const ReferenceTypeId = "~effect/ServiceMap/Reference";
6590
- const TypeId$53 = "~effect/ServiceMap";
6590
+ const TypeId$54 = "~effect/ServiceMap";
6591
6591
  /**
6592
6592
  * @example
6593
6593
  * ```ts
@@ -6611,7 +6611,7 @@ const makeUnsafe$8 = (mapUnsafe) => {
6611
6611
  };
6612
6612
  const Proto$19 = {
6613
6613
  ...PipeInspectableProto,
6614
- [TypeId$53]: { _Services: (_) => _ },
6614
+ [TypeId$54]: { _Services: (_) => _ },
6615
6615
  toJSON() {
6616
6616
  return {
6617
6617
  _id: "ServiceMap",
@@ -6644,7 +6644,7 @@ const Proto$19 = {
6644
6644
  * @since 4.0.0
6645
6645
  * @category Guards
6646
6646
  */
6647
- const isServiceMap = (u) => hasProperty(u, TypeId$53);
6647
+ const isServiceMap = (u) => hasProperty(u, TypeId$54);
6648
6648
  /**
6649
6649
  * Checks if the provided argument is a `Reference`.
6650
6650
  *
@@ -6699,7 +6699,7 @@ const emptyServiceMap = /* @__PURE__ */ makeUnsafe$8(/* @__PURE__ */ new Map());
6699
6699
  * @since 4.0.0
6700
6700
  * @category Constructors
6701
6701
  */
6702
- const make$50 = (key, service$2) => makeUnsafe$8(new Map([[key.key, service$2]]));
6702
+ const make$51 = (key, service$2) => makeUnsafe$8(new Map([[key.key, service$2]]));
6703
6703
  /**
6704
6704
  * Adds a service to a given `ServiceMap`.
6705
6705
  *
@@ -6800,7 +6800,7 @@ const getUnsafe = /* @__PURE__ */ dual(2, (self$1, service$2) => {
6800
6800
  * @since 4.0.0
6801
6801
  * @category Getters
6802
6802
  */
6803
- const get$7 = getUnsafe;
6803
+ const get$8 = getUnsafe;
6804
6804
  /**
6805
6805
  * @example
6806
6806
  * ```ts
@@ -7243,7 +7243,7 @@ var ParentSpan = class extends Service()(ParentSpanKey) {};
7243
7243
  * })
7244
7244
  * ```
7245
7245
  */
7246
- const make$49 = (options) => options;
7246
+ const make$50 = (options) => options;
7247
7247
  /**
7248
7248
  * @since 2.0.0
7249
7249
  * @category constructors
@@ -7312,7 +7312,7 @@ const TracerKey = "effect/Tracer";
7312
7312
  * })
7313
7313
  * ```
7314
7314
  */
7315
- const Tracer = /* @__PURE__ */ Reference(TracerKey, { defaultValue: () => make$49({ span: (name, parent, annotations$1, links, startTime, kind) => new NativeSpan(name, parent, annotations$1, links.slice(), startTime, kind) }) });
7315
+ const Tracer = /* @__PURE__ */ Reference(TracerKey, { defaultValue: () => make$50({ span: (name, parent, annotations$1, links, startTime, kind) => new NativeSpan(name, parent, annotations$1, links.slice(), startTime, kind) }) });
7316
7316
  /**
7317
7317
  * @since 4.0.0
7318
7318
  * @category native tracer
@@ -8212,10 +8212,10 @@ var FiberImpl = class {
8212
8212
  interruptUnsafe(fiberId$2, annotations$1) {
8213
8213
  if (this._exit) return;
8214
8214
  let cause = causeInterrupt(fiberId$2);
8215
- if (this.currentStackFrame) cause = causeAnnotate(cause, make$50(StackTraceKey, this.currentStackFrame));
8215
+ if (this.currentStackFrame) cause = causeAnnotate(cause, make$51(StackTraceKey, this.currentStackFrame));
8216
8216
  if (annotations$1) cause = causeAnnotate(cause, annotations$1);
8217
8217
  this._interruptedCause = this._interruptedCause ? causeMerge(this._interruptedCause, cause) : cause;
8218
- if (this.interruptible) this.evaluate(failCause$4(this._interruptedCause));
8218
+ if (this.interruptible) this.evaluate(failCause$5(this._interruptedCause));
8219
8219
  }
8220
8220
  pollUnsafe() {
8221
8221
  return this._exit;
@@ -8399,7 +8399,7 @@ const fiberInterruptAllAs = /* @__PURE__ */ dual(2, (fibers, fiberId$2) => withF
8399
8399
  /** @internal */
8400
8400
  const succeed$5 = exitSucceed;
8401
8401
  /** @internal */
8402
- const failCause$4 = exitFailCause;
8402
+ const failCause$5 = exitFailCause;
8403
8403
  /** @internal */
8404
8404
  const fail$7 = exitFail;
8405
8405
  /** @internal */
@@ -8447,7 +8447,7 @@ const succeedSome$1 = (a) => succeed$5(some(a));
8447
8447
  /** @internal */
8448
8448
  const succeedNone$1 = /* @__PURE__ */ succeed$5(/* @__PURE__ */ none$3());
8449
8449
  /** @internal */
8450
- const failCauseSync$1 = (evaluate$1) => suspend$4(() => failCause$4(internalCall(evaluate$1)));
8450
+ const failCauseSync$1 = (evaluate$1) => suspend$4(() => failCause$5(internalCall(evaluate$1)));
8451
8451
  /** @internal */
8452
8452
  const die$4 = (defect) => exitDie(defect);
8453
8453
  /** @internal */
@@ -8523,7 +8523,7 @@ const asyncFinalizer = /* @__PURE__ */ makePrimitive$1({
8523
8523
  }
8524
8524
  },
8525
8525
  [contE](cause, _fiber) {
8526
- return causeHasInterrupt(cause) ? flatMap$2(this[args](), () => failCause$4(cause)) : failCause$4(cause);
8526
+ return causeHasInterrupt(cause) ? flatMap$2(this[args](), () => failCause$5(cause)) : failCause$5(cause);
8527
8527
  }
8528
8528
  });
8529
8529
  /** @internal */
@@ -8670,7 +8670,7 @@ const raceAll$1 = (all$2, options) => withFiber$1((parent) => callback$2((resume
8670
8670
  doneCount++;
8671
8671
  if (exit$2._tag === "Failure") {
8672
8672
  failures.push(...exit$2.cause.failures);
8673
- if (doneCount >= len) resume(failCause$4(causeFromFailures(failures)));
8673
+ if (doneCount >= len) resume(failCause$5(causeFromFailures(failures)));
8674
8674
  return;
8675
8675
  }
8676
8676
  const isWinner = !done$3;
@@ -8872,7 +8872,7 @@ const provideServices$1 = /* @__PURE__ */ dual(2, (self$1, services$2) => {
8872
8872
  return updateServices$1(self$1, merge$5(services$2));
8873
8873
  });
8874
8874
  /** @internal */
8875
- const provideService$1 = function() {
8875
+ const provideService$2 = function() {
8876
8876
  if (arguments.length === 1) return dual(2, (self$1, impl) => provideServiceImpl(self$1, arguments[0], impl));
8877
8877
  return dual(3, (self$1, service$2, impl) => provideServiceImpl(self$1, service$2, impl)).apply(this, arguments);
8878
8878
  };
@@ -8882,9 +8882,9 @@ const provideServiceImpl = (self$1, service$2, implementation) => withFiber$1((f
8882
8882
  return onExit$3(self$1, () => fiber$2.setServices(addOrOmit(fiber$2.services, service$2, prev)));
8883
8883
  });
8884
8884
  /** @internal */
8885
- const provideServiceEffect$1 = /* @__PURE__ */ dual(3, (self$1, service$2, acquire) => flatMap$2(acquire, (implementation) => provideService$1(self$1, service$2, implementation)));
8885
+ const provideServiceEffect$2 = /* @__PURE__ */ dual(3, (self$1, service$2, acquire) => flatMap$2(acquire, (implementation) => provideService$2(self$1, service$2, implementation)));
8886
8886
  /** @internal */
8887
- const withConcurrency$1 = /* @__PURE__ */ provideService$1(CurrentConcurrency);
8887
+ const withConcurrency$1 = /* @__PURE__ */ provideService$2(CurrentConcurrency);
8888
8888
  /** @internal */
8889
8889
  const zip$1 = /* @__PURE__ */ dual((args$1) => isEffect$1(args$1[1]), (self$1, that, options) => zipWith$1(self$1, that, (a, a2) => [a, a2], options));
8890
8890
  /** @internal */
@@ -8917,21 +8917,21 @@ const OnFailureProto = /* @__PURE__ */ makePrimitiveProto({
8917
8917
  }
8918
8918
  });
8919
8919
  /** @internal */
8920
- const catchCauseFilter$2 = /* @__PURE__ */ dual(3, (self$1, filter$6, f) => catchCause$2(self$1, (cause) => {
8921
- const eb = filter$6(cause);
8922
- return !isFail(eb) ? internalCall(() => f(eb, cause)) : failCause$4(eb.fail);
8920
+ const catchCauseFilter$2 = /* @__PURE__ */ dual(3, (self$1, filter$7, f) => catchCause$2(self$1, (cause) => {
8921
+ const eb = filter$7(cause);
8922
+ return !isFail(eb) ? internalCall(() => f(eb, cause)) : failCause$5(eb.fail);
8923
8923
  }));
8924
8924
  /** @internal */
8925
8925
  const catch_$2 = /* @__PURE__ */ dual(2, (self$1, f) => catchCauseFilter$2(self$1, causeFilterError, (e) => f(e)));
8926
8926
  /** @internal */
8927
8927
  const catchDefect$1 = /* @__PURE__ */ dual(2, (self$1, f) => catchCauseFilter$2(self$1, causeFilterDefect, f));
8928
8928
  /** @internal */
8929
- const tapCause$1 = /* @__PURE__ */ dual(2, (self$1, f) => catchCause$2(self$1, (cause) => andThen$1(internalCall(() => f(cause)), failCause$4(cause))));
8929
+ const tapCause$1 = /* @__PURE__ */ dual(2, (self$1, f) => catchCause$2(self$1, (cause) => andThen$1(internalCall(() => f(cause)), failCause$5(cause))));
8930
8930
  /** @internal */
8931
- const tapCauseFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$6, f) => catchCauseFilter$2(self$1, (cause) => {
8932
- const result$2 = filter$6(cause);
8931
+ const tapCauseFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$7, f) => catchCauseFilter$2(self$1, (cause) => {
8932
+ const result$2 = filter$7(cause);
8933
8933
  return isFail(result$2) ? fail$8(cause) : result$2;
8934
- }, (failure, cause) => andThen$1(internalCall(() => f(failure, cause)), failCause$4(cause))));
8934
+ }, (failure, cause) => andThen$1(internalCall(() => f(failure, cause)), failCause$5(cause))));
8935
8935
  /** @internal */
8936
8936
  const tapError$1 = /* @__PURE__ */ dual(2, (self$1, f) => tapCauseFilter$1(self$1, causeFilterError, (e) => f(e)));
8937
8937
  /** @internal */
@@ -8944,11 +8944,11 @@ const tapDefect$1 = /* @__PURE__ */ dual(2, (self$1, f) => tapCauseFilter$1(self
8944
8944
  /** @internal */
8945
8945
  const catchIf$1 = /* @__PURE__ */ dual(3, (self$1, predicate, f) => catchCause$2(self$1, (cause) => {
8946
8946
  const error$1 = causeFilterError(cause);
8947
- if (isFail(error$1)) return failCause$4(error$1.fail);
8948
- return predicate(error$1) ? internalCall(() => f(error$1)) : failCause$4(cause);
8947
+ if (isFail(error$1)) return failCause$5(error$1.fail);
8948
+ return predicate(error$1) ? internalCall(() => f(error$1)) : failCause$5(cause);
8949
8949
  }));
8950
8950
  /** @internal */
8951
- const catchFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$6, f) => catchCauseFilter$2(self$1, compose(causeFilterError, mapFail(filter$6, causeFail)), (e) => f(e)));
8951
+ const catchFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$7, f) => catchCauseFilter$2(self$1, compose(causeFilterError, mapFail(filter$7, causeFail)), (e) => f(e)));
8952
8952
  /** @internal */
8953
8953
  const catchTag$1 = /* @__PURE__ */ dual(3, (self$1, k, f) => {
8954
8954
  const pred = Array.isArray(k) ? (e) => hasProperty(e, "_tag") && k.includes(e._tag) : isTagged(k);
@@ -9037,7 +9037,7 @@ const matchCause$1 = /* @__PURE__ */ dual(2, (self$1, options) => matchCauseEffe
9037
9037
  const matchEffect$2 = /* @__PURE__ */ dual(2, (self$1, options) => matchCauseEffect$1(self$1, {
9038
9038
  onFailure: (cause) => {
9039
9039
  const fail$11 = cause.failures.find(failureIsFail$1);
9040
- return fail$11 ? internalCall(() => options.onFailure(fail$11.error)) : failCause$4(cause);
9040
+ return fail$11 ? internalCall(() => options.onFailure(fail$11.error)) : failCause$5(cause);
9041
9041
  },
9042
9042
  onSuccess: options.onSuccess
9043
9043
  }));
@@ -9192,7 +9192,7 @@ const scopeMake = (finalizerStrategy) => sync$1(() => scopeMakeUnsafe(finalizerS
9192
9192
  /** @internal */
9193
9193
  const scope$1 = /* @__PURE__ */ scopeTag.asEffect();
9194
9194
  /** @internal */
9195
- const provideScope = /* @__PURE__ */ provideService$1(scopeTag);
9195
+ const provideScope = /* @__PURE__ */ provideService$2(scopeTag);
9196
9196
  /** @internal */
9197
9197
  const scoped$2 = (self$1) => withFiber$1((fiber$2) => {
9198
9198
  const prev = getOption(fiber$2.services, scopeTag);
@@ -9245,14 +9245,14 @@ const onExitInterruptible$1 = /* @__PURE__ */ dual(2, (self$1, f) => onExitPrimi
9245
9245
  /** @internal */
9246
9246
  const ensuring$1 = /* @__PURE__ */ dual(2, (self$1, finalizer) => onExit$3(self$1, (_) => finalizer));
9247
9247
  /** @internal */
9248
- const onExitFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$6, f) => onExit$3(self$1, (exit$2) => {
9249
- const b = filter$6(exit$2);
9248
+ const onExitFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$7, f) => onExit$3(self$1, (exit$2) => {
9249
+ const b = filter$7(exit$2);
9250
9250
  return isFail(b) ? void 0 : f(b, exit$2);
9251
9251
  }));
9252
9252
  /** @internal */
9253
9253
  const onError$1 = /* @__PURE__ */ dual(2, (self$1, f) => onExitFilter$1(self$1, exitFilterCause, f));
9254
9254
  /** @internal */
9255
- const onErrorFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$6, f) => onExitFilter$1(self$1, compose(exitFilterCause, filter$6), (eb, exit$2) => f(eb, exit$2.cause)));
9255
+ const onErrorFilter$1 = /* @__PURE__ */ dual(3, (self$1, filter$7, f) => onExitFilter$1(self$1, compose(exitFilterCause, filter$7), (eb, exit$2) => f(eb, exit$2.cause)));
9256
9256
  /** @internal */
9257
9257
  const onInterrupt$1 = /* @__PURE__ */ dual(2, (self$1, finalizer) => onErrorFilter$1(self$1, causeFilterInterruptors, isEffect$1(finalizer) ? constant(finalizer) : finalizer));
9258
9258
  /** @internal */
@@ -9289,7 +9289,7 @@ const cachedWithTTL$1 = /* @__PURE__ */ dual(2, (self$1, timeToLive) => map$9(ca
9289
9289
  /** @internal */
9290
9290
  const cached$1 = (self$1) => cachedWithTTL$1(self$1, infinity);
9291
9291
  /** @internal */
9292
- const interrupt$4 = /* @__PURE__ */ withFiber$1((fiber$2) => failCause$4(causeInterrupt(fiber$2.id)));
9292
+ const interrupt$4 = /* @__PURE__ */ withFiber$1((fiber$2) => failCause$5(causeInterrupt(fiber$2.id)));
9293
9293
  /** @internal */
9294
9294
  const uninterruptible$1 = (self$1) => withFiber$1((fiber$2) => {
9295
9295
  if (!fiber$2.interruptible) return self$1;
@@ -9301,7 +9301,7 @@ const setInterruptible = /* @__PURE__ */ makePrimitive$1({
9301
9301
  op: "SetInterruptible",
9302
9302
  [contAll](fiber$2) {
9303
9303
  fiber$2.interruptible = this[args];
9304
- if (fiber$2._interruptedCause && fiber$2.interruptible) return () => failCause$4(fiber$2._interruptedCause);
9304
+ if (fiber$2._interruptedCause && fiber$2.interruptible) return () => failCause$5(fiber$2._interruptedCause);
9305
9305
  }
9306
9306
  });
9307
9307
  const setInterruptibleTrue = /* @__PURE__ */ setInterruptible(true);
@@ -9311,7 +9311,7 @@ const interruptible$1 = (self$1) => withFiber$1((fiber$2) => {
9311
9311
  if (fiber$2.interruptible) return self$1;
9312
9312
  fiber$2.interruptible = true;
9313
9313
  fiber$2._stack.push(setInterruptibleFalse);
9314
- if (fiber$2._interruptedCause) return failCause$4(fiber$2._interruptedCause);
9314
+ if (fiber$2._interruptedCause) return failCause$5(fiber$2._interruptedCause);
9315
9315
  return self$1;
9316
9316
  });
9317
9317
  /** @internal */
@@ -9441,7 +9441,7 @@ const forEachSequential = (iterable, f, options) => suspend$4(() => {
9441
9441
  });
9442
9442
  const filterOrElse$1 = /* @__PURE__ */ dual(3, (self$1, predicate, orElse$1) => flatMap$2(self$1, (a) => predicate(a) ? succeed$5(a) : orElse$1(a)));
9443
9443
  /** @internal */
9444
- const filter$2 = /* @__PURE__ */ dual((args$1) => isIterable(args$1[0]) && !isEffect$1(args$1[0]), (elements, predicate, options) => suspend$4(() => {
9444
+ const filter$3 = /* @__PURE__ */ dual((args$1) => isIterable(args$1[0]) && !isEffect$1(args$1[0]), (elements, predicate, options) => suspend$4(() => {
9445
9445
  const out = [];
9446
9446
  return as$1(forEach$2(elements, (a, i) => map$9(predicate(a, i), (keep) => {
9447
9447
  if (keep) out.push(a);
@@ -9451,9 +9451,9 @@ const filter$2 = /* @__PURE__ */ dual((args$1) => isIterable(args$1[0]) && !isEf
9451
9451
  }), out);
9452
9452
  }));
9453
9453
  /** @internal */
9454
- const filterMap$1 = /* @__PURE__ */ dual((args$1) => isIterable(args$1[0]) && !isEffect$1(args$1[0]), (elements, filter$6, options) => suspend$4(() => {
9454
+ const filterMap$1 = /* @__PURE__ */ dual((args$1) => isIterable(args$1[0]) && !isEffect$1(args$1[0]), (elements, filter$7, options) => suspend$4(() => {
9455
9455
  const out = [];
9456
- return as$1(forEach$2(elements, (a) => map$9(filter$6(a), (result$2) => {
9456
+ return as$1(forEach$2(elements, (a) => map$9(filter$7(a), (result$2) => {
9457
9457
  if (!isFail(result$2)) out.push(result$2);
9458
9458
  }), {
9459
9459
  discard: true,
@@ -9696,11 +9696,11 @@ const makeLatch$1 = (open$1) => sync$1(() => makeLatchUnsafe$1(open$1));
9696
9696
  /** @internal */
9697
9697
  const tracer$2 = /* @__PURE__ */ withFiber$1((fiber$2) => succeed$5(fiber$2.getRef(Tracer)));
9698
9698
  /** @internal */
9699
- const withTracer$1 = /* @__PURE__ */ dual(2, (effect$1, tracer$3) => provideService$1(effect$1, Tracer, tracer$3));
9699
+ const withTracer$1 = /* @__PURE__ */ dual(2, (effect$1, tracer$3) => provideService$2(effect$1, Tracer, tracer$3));
9700
9700
  /** @internal */
9701
- const withTracerEnabled$1 = /* @__PURE__ */ provideService$1(TracerEnabled);
9701
+ const withTracerEnabled$1 = /* @__PURE__ */ provideService$2(TracerEnabled);
9702
9702
  /** @internal */
9703
- const withTracerTiming$1 = /* @__PURE__ */ provideService$1(TracerTimingEnabled);
9703
+ const withTracerTiming$1 = /* @__PURE__ */ provideService$2(TracerTimingEnabled);
9704
9704
  const bigint0 = /* @__PURE__ */ BigInt(0);
9705
9705
  const NoopSpanProto = {
9706
9706
  _tag: "Span",
@@ -9724,11 +9724,11 @@ const NoopSpanProto = {
9724
9724
  /** @internal */
9725
9725
  const noopSpan = (options) => Object.assign(Object.create(NoopSpanProto), options);
9726
9726
  const filterDisablePropagation = (span) => {
9727
- if (span) return get$7(span.annotations, DisablePropagation) ? span._tag === "Span" ? filterDisablePropagation(span.parent) : void 0 : span;
9727
+ if (span) return get$8(span.annotations, DisablePropagation) ? span._tag === "Span" ? filterDisablePropagation(span.parent) : void 0 : span;
9728
9728
  };
9729
9729
  /** @internal */
9730
9730
  const makeSpanUnsafe = (fiber$2, name, options) => {
9731
- const disablePropagation = !fiber$2.getRef(TracerEnabled) || options?.annotations && get$7(options.annotations, DisablePropagation);
9731
+ const disablePropagation = !fiber$2.getRef(TracerEnabled) || options?.annotations && get$8(options.annotations, DisablePropagation);
9732
9732
  const parent = options?.parent ?? (options?.root ? void 0 : filterDisablePropagation(fiber$2.currentSpan));
9733
9733
  let span;
9734
9734
  if (disablePropagation) span = noopSpan({
@@ -9808,7 +9808,7 @@ const useSpan$1 = (name, ...args$1) => {
9808
9808
  });
9809
9809
  });
9810
9810
  };
9811
- const provideParentSpan = /* @__PURE__ */ provideService$1(ParentSpan);
9811
+ const provideParentSpan = /* @__PURE__ */ provideService$2(ParentSpan);
9812
9812
  /** @internal */
9813
9813
  const withParentSpan$1 = function() {
9814
9814
  const dataFirst = isEffect$1(arguments[0]);
@@ -9962,7 +9962,7 @@ const logLevelToOrder = (level) => {
9962
9962
  }
9963
9963
  };
9964
9964
  /** @internal */
9965
- const LogLevelOrder = /* @__PURE__ */ mapInput(Number$4, logLevelToOrder);
9965
+ const LogLevelOrder = /* @__PURE__ */ mapInput(Number$5, logLevelToOrder);
9966
9966
  /** @internal */
9967
9967
  const isLogLevelGreaterThan = /* @__PURE__ */ isGreaterThan$4(LogLevelOrder);
9968
9968
  /** @internal */
@@ -10247,7 +10247,7 @@ const succeed$4 = exitSucceed;
10247
10247
  * @category constructors
10248
10248
  * @since 2.0.0
10249
10249
  */
10250
- const failCause$3 = exitFailCause;
10250
+ const failCause$4 = exitFailCause;
10251
10251
  /**
10252
10252
  * Creates a failed `Exit` from an error value.
10253
10253
  *
@@ -10617,7 +10617,7 @@ const makeUnsafe$7 = () => {
10617
10617
  * @since 2.0.0
10618
10618
  * @category constructors
10619
10619
  */
10620
- const make$48 = () => sync$1(() => makeUnsafe$7());
10620
+ const make$49 = () => sync$1(() => makeUnsafe$7());
10621
10621
  const _await = (self$1) => callback$2((resume) => {
10622
10622
  if (self$1.effect) return resume(self$1.effect);
10623
10623
  self$1.resumes ??= [];
@@ -10671,6 +10671,47 @@ const completeWith = /* @__PURE__ */ dual(2, (self$1, effect$1) => sync$1(() =>
10671
10671
  */
10672
10672
  const done$1 = completeWith;
10673
10673
  /**
10674
+ * Fails the `Deferred` with the specified `Cause`, which will be propagated to
10675
+ * all fibers waiting on the value of the `Deferred`.
10676
+ *
10677
+ * @example
10678
+ * ```ts
10679
+ * import { Cause, Deferred, Effect } from "effect"
10680
+ *
10681
+ * const program = Effect.gen(function*() {
10682
+ * const deferred = yield* Deferred.make<number, string>()
10683
+ * const success = yield* Deferred.failCause(
10684
+ * deferred,
10685
+ * Cause.fail("Operation failed")
10686
+ * )
10687
+ * console.log(success) // true
10688
+ * })
10689
+ * ```
10690
+ *
10691
+ * @since 2.0.0
10692
+ * @category utils
10693
+ */
10694
+ const failCause$3 = /* @__PURE__ */ dual(2, (self$1, cause) => done$1(self$1, exitFailCause(cause)));
10695
+ /**
10696
+ * Completes the `Deferred` with interruption. This will interrupt all fibers
10697
+ * waiting on the value of the `Deferred` with the specified `FiberId`.
10698
+ *
10699
+ * @example
10700
+ * ```ts
10701
+ * import { Deferred, Effect } from "effect"
10702
+ *
10703
+ * const program = Effect.gen(function*() {
10704
+ * const deferred = yield* Deferred.make<number>()
10705
+ * const success = yield* Deferred.interruptWith(deferred, 42)
10706
+ * console.log(success) // true
10707
+ * })
10708
+ * ```
10709
+ *
10710
+ * @since 2.0.0
10711
+ * @category utils
10712
+ */
10713
+ const interruptWith = /* @__PURE__ */ dual(2, (self$1, fiberId$2) => failCause$3(self$1, causeInterrupt(fiberId$2)));
10714
+ /**
10674
10715
  * Returns `true` if this `Deferred` has already been completed with a value or
10675
10716
  * an error, `false` otherwise.
10676
10717
  *
@@ -10854,7 +10895,7 @@ const Scope = scopeTag;
10854
10895
  * @category constructors
10855
10896
  * @since 2.0.0
10856
10897
  */
10857
- const make$47 = scopeMake;
10898
+ const make$48 = scopeMake;
10858
10899
  /**
10859
10900
  * Creates a new `Scope` synchronously without wrapping it in an `Effect`.
10860
10901
  * This is useful when you need a scope immediately but should be used with caution
@@ -11064,7 +11105,7 @@ const use$1 = scopeUse;
11064
11105
 
11065
11106
  //#endregion
11066
11107
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Layer.js
11067
- const TypeId$52 = "~effect/Layer";
11108
+ const TypeId$53 = "~effect/Layer";
11068
11109
  const MemoMapTypeId = "~effect/Layer/MemoMap";
11069
11110
  /**
11070
11111
  * Returns `true` if the specified value is a `Layer`, `false` otherwise.
@@ -11089,9 +11130,9 @@ const MemoMapTypeId = "~effect/Layer/MemoMap";
11089
11130
  * @since 2.0.0
11090
11131
  * @category getters
11091
11132
  */
11092
- const isLayer = (u) => hasProperty(u, TypeId$52);
11133
+ const isLayer = (u) => hasProperty(u, TypeId$53);
11093
11134
  const LayerProto = {
11094
- [TypeId$52]: {
11135
+ [TypeId$53]: {
11095
11136
  _ROut: identity,
11096
11137
  _E: identity,
11097
11138
  _RIn: identity
@@ -11291,7 +11332,7 @@ const CurrentMemoMap = /* @__PURE__ */ Reference("effect/Layer/CurrentMemoMap",
11291
11332
  * @since 2.0.0
11292
11333
  * @category memo map
11293
11334
  */
11294
- const buildWithMemoMap = /* @__PURE__ */ dual(3, (self$1, memoMap, scope$2) => provideService$1(self$1.build(memoMap, scope$2), CurrentMemoMap, memoMap));
11335
+ const buildWithMemoMap = /* @__PURE__ */ dual(3, (self$1, memoMap, scope$2) => provideService$2(self$1.build(memoMap, scope$2), CurrentMemoMap, memoMap));
11295
11336
  /**
11296
11337
  * Builds a layer into a scoped value.
11297
11338
  *
@@ -11407,8 +11448,8 @@ const buildWithScope = /* @__PURE__ */ dual(2, (self$1, scope$2) => suspend$4(()
11407
11448
  * @category constructors
11408
11449
  */
11409
11450
  const succeed$2 = function() {
11410
- if (arguments.length === 1) return (resource) => succeedServices(make$50(arguments[0], resource));
11411
- return succeedServices(make$50(arguments[0], arguments[1]));
11451
+ if (arguments.length === 1) return (resource) => succeedServices(make$51(arguments[0], resource));
11452
+ return succeedServices(make$51(arguments[0], arguments[1]));
11412
11453
  };
11413
11454
  /**
11414
11455
  * Constructs a layer from the specified value, which must return one or more
@@ -11498,7 +11539,7 @@ const effect = function() {
11498
11539
  const effectOrFn = arguments[1];
11499
11540
  return typeof effectOrFn === "function" ? (...args$1) => effectImpl(arguments[0], suspend$4(() => effectOrFn(...args$1))) : effectImpl(arguments[0], effectOrFn);
11500
11541
  };
11501
- const effectImpl = (service$2, effect$1) => effectServices(map$9(effect$1, (value) => make$50(service$2, value)));
11542
+ const effectImpl = (service$2, effect$1) => effectServices(map$9(effect$1, (value) => make$51(service$2, value)));
11502
11543
  /**
11503
11544
  * Constructs a layer from the specified scoped effect, which must return one
11504
11545
  * or more services.
@@ -11580,7 +11621,7 @@ const effectDiscard = (effect$1) => effectServices(as$1(effect$1, empty$11()));
11580
11621
  */
11581
11622
  const unwrap$3 = (self$1) => {
11582
11623
  const service$2 = Service("effect/Layer/unwrap");
11583
- return flatMap$1(effect(service$2)(self$1), get$7(service$2));
11624
+ return flatMap$1(effect(service$2)(self$1), get$8(service$2));
11584
11625
  };
11585
11626
  const mergeAllEffect = (layers, memoMap, scope$2) => {
11586
11627
  const parentScope = forkUnsafe(scope$2, "parallel");
@@ -11889,9 +11930,9 @@ const fresh = (self$1) => fromBuildUnsafe((_, scope$2) => self$1.build(makeMemoM
11889
11930
  * @since 3.16.0
11890
11931
  * @category Type IDs
11891
11932
  */
11892
- const TypeId$51 = "~effect/ExecutionPlan";
11933
+ const TypeId$52 = "~effect/ExecutionPlan";
11893
11934
  const Proto$18 = {
11894
- [TypeId$51]: TypeId$51,
11935
+ [TypeId$52]: TypeId$52,
11895
11936
  get withRequirements() {
11896
11937
  const self$1 = this;
11897
11938
  return servicesWith$1((services$2) => succeed$5(makeProto$1(self$1.steps.map((step) => ({
@@ -11922,7 +11963,7 @@ const CurrentMetadata$1 = /* @__PURE__ */ Reference("effect/ExecutionPlan/Curren
11922
11963
  /**
11923
11964
  * @since 2.0.0
11924
11965
  */
11925
- const TypeId$50 = CauseTypeId;
11966
+ const TypeId$51 = CauseTypeId;
11926
11967
  /**
11927
11968
  * @since 2.0.0
11928
11969
  */
@@ -12563,11 +12604,11 @@ const currentTimeNanos = currentTimeNanos$1;
12563
12604
  //#endregion
12564
12605
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/internal/dateTime.js
12565
12606
  /** @internal */
12566
- const TypeId$49 = "~effect/time/DateTime";
12607
+ const TypeId$50 = "~effect/time/DateTime";
12567
12608
  /** @internal */
12568
12609
  const TimeZoneTypeId = "~effect/time/DateTime/TimeZone";
12569
12610
  const Proto$17 = {
12570
- [TypeId$49]: TypeId$49,
12611
+ [TypeId$50]: TypeId$50,
12571
12612
  pipe() {
12572
12613
  return pipeArguments(this, arguments);
12573
12614
  },
@@ -12673,7 +12714,7 @@ const makeZonedProto = (epochMillis, zone, partsUtc) => {
12673
12714
  return self$1;
12674
12715
  };
12675
12716
  /** @internal */
12676
- const isDateTime$1 = (u) => hasProperty(u, TypeId$49);
12717
+ const isDateTime$1 = (u) => hasProperty(u, TypeId$50);
12677
12718
  const isDateTimeArgs = (args$1) => isDateTime$1(args$1[0]);
12678
12719
  /** @internal */
12679
12720
  const isTimeZone$1 = (u) => hasProperty(u, TimeZoneTypeId);
@@ -12686,11 +12727,11 @@ const isUtc$1 = (self$1) => self$1._tag === "Utc";
12686
12727
  /** @internal */
12687
12728
  const isZoned$1 = (self$1) => self$1._tag === "Zoned";
12688
12729
  /** @internal */
12689
- const Equivalence$3 = /* @__PURE__ */ make$51((a, b) => a.epochMillis === b.epochMillis);
12730
+ const Equivalence$3 = /* @__PURE__ */ make$52((a, b) => a.epochMillis === b.epochMillis);
12690
12731
  /** @internal */
12691
- const Order$3 = /* @__PURE__ */ make$53((self$1, that) => self$1.epochMillis < that.epochMillis ? -1 : self$1.epochMillis > that.epochMillis ? 1 : 0);
12732
+ const Order$4 = /* @__PURE__ */ make$54((self$1, that) => self$1.epochMillis < that.epochMillis ? -1 : self$1.epochMillis > that.epochMillis ? 1 : 0);
12692
12733
  /** @internal */
12693
- const clamp$1 = /* @__PURE__ */ clamp$2(Order$3);
12734
+ const clamp$1 = /* @__PURE__ */ clamp$2(Order$4);
12694
12735
  const makeUtc = (epochMillis) => {
12695
12736
  const self$1 = Object.create(ProtoUtc);
12696
12737
  self$1.epochMillis = epochMillis;
@@ -12741,7 +12782,7 @@ const makeZonedUnsafe$1 = (input, options) => {
12741
12782
  /** @internal */
12742
12783
  const makeZoned$1 = /* @__PURE__ */ liftThrowable(makeZonedUnsafe$1);
12743
12784
  /** @internal */
12744
- const make$46 = /* @__PURE__ */ liftThrowable(makeUnsafe$5);
12785
+ const make$47 = /* @__PURE__ */ liftThrowable(makeUnsafe$5);
12745
12786
  const zonedStringRegExp = /^(.{17,35})\[(.+)\]$/;
12746
12787
  /** @internal */
12747
12788
  const makeZonedFromString$1 = (input) => {
@@ -12841,19 +12882,19 @@ const distanceDurationResult$1 = /* @__PURE__ */ dual(2, (self$1, other) => {
12841
12882
  /** @internal */
12842
12883
  const distanceDuration$1 = /* @__PURE__ */ dual(2, (self$1, other) => millis(Math.abs(distance$1(self$1, other))));
12843
12884
  /** @internal */
12844
- const min$1 = /* @__PURE__ */ min$2(Order$3);
12885
+ const min$1 = /* @__PURE__ */ min$2(Order$4);
12845
12886
  /** @internal */
12846
- const max$1 = /* @__PURE__ */ max$2(Order$3);
12887
+ const max$1 = /* @__PURE__ */ max$2(Order$4);
12847
12888
  /** @internal */
12848
- const isGreaterThan$3 = /* @__PURE__ */ isGreaterThan$4(Order$3);
12889
+ const isGreaterThan$3 = /* @__PURE__ */ isGreaterThan$4(Order$4);
12849
12890
  /** @internal */
12850
- const isGreaterThanOrEqualTo$2 = /* @__PURE__ */ isGreaterThanOrEqualTo$3(Order$3);
12891
+ const isGreaterThanOrEqualTo$2 = /* @__PURE__ */ isGreaterThanOrEqualTo$3(Order$4);
12851
12892
  /** @internal */
12852
- const isLessThan$3 = /* @__PURE__ */ isLessThan$4(Order$3);
12893
+ const isLessThan$3 = /* @__PURE__ */ isLessThan$4(Order$4);
12853
12894
  /** @internal */
12854
- const isLessThanOrEqualTo$2 = /* @__PURE__ */ isLessThanOrEqualTo$3(Order$3);
12895
+ const isLessThanOrEqualTo$2 = /* @__PURE__ */ isLessThanOrEqualTo$3(Order$4);
12855
12896
  /** @internal */
12856
- const between$1 = /* @__PURE__ */ isBetween$1(Order$3);
12897
+ const between$1 = /* @__PURE__ */ isBetween$1(Order$4);
12857
12898
  /** @internal */
12858
12899
  const isFuture$1 = (self$1) => map$9(now$1, isLessThan$3(self$1));
12859
12900
  /** @internal */
@@ -13171,6 +13212,78 @@ const formatIsoOffset$1 = (self$1) => {
13171
13212
  /** @internal */
13172
13213
  const formatIsoZoned$1 = (self$1) => self$1.zone._tag === "Offset" ? formatIsoOffset$1(self$1) : `${formatIsoOffset$1(self$1)}[${self$1.zone.id}]`;
13173
13214
 
13215
+ //#endregion
13216
+ //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Number.js
13217
+ /**
13218
+ * The global `Number` constructor.
13219
+ *
13220
+ * @example
13221
+ * ```ts
13222
+ * import * as N from "effect/Number"
13223
+ *
13224
+ * const num = N.Number("42")
13225
+ * console.log(num) // 42
13226
+ *
13227
+ * const float = N.Number("3.14")
13228
+ * console.log(float) // 3.14
13229
+ * ```
13230
+ *
13231
+ * @category constructors
13232
+ * @since 4.0.0
13233
+ */
13234
+ const Number$4 = globalThis.Number;
13235
+ /**
13236
+ * Tests if a value is a `number`.
13237
+ *
13238
+ * @example
13239
+ * ```ts
13240
+ * import { isNumber } from "effect/Number"
13241
+ * import * as assert from "node:assert"
13242
+ *
13243
+ * assert.deepStrictEqual(isNumber(2), true)
13244
+ * assert.deepStrictEqual(isNumber("2"), false)
13245
+ * ```
13246
+ *
13247
+ * @category guards
13248
+ * @since 2.0.0
13249
+ */
13250
+ const isNumber = isNumber$1;
13251
+ /**
13252
+ * An `Order` instance for `number` values.
13253
+ *
13254
+ * @example
13255
+ * ```ts
13256
+ * import * as Number from "effect/Number"
13257
+ *
13258
+ * console.log(Number.Order(1, 2)) // -1
13259
+ * console.log(Number.Order(2, 1)) // 1
13260
+ * console.log(Number.Order(1, 1)) // 0
13261
+ * ```
13262
+ *
13263
+ * @category instances
13264
+ * @since 2.0.0
13265
+ */
13266
+ const Order$3 = Number$5;
13267
+ /**
13268
+ * Returns the next power of 2 from the given number.
13269
+ *
13270
+ * @example
13271
+ * ```ts
13272
+ * import { nextPow2 } from "effect/Number"
13273
+ * import * as assert from "node:assert"
13274
+ *
13275
+ * assert.deepStrictEqual(nextPow2(5), 8)
13276
+ * assert.deepStrictEqual(nextPow2(17), 32)
13277
+ * ```
13278
+ *
13279
+ * @category math
13280
+ * @since 2.0.0
13281
+ */
13282
+ const nextPow2 = (n) => {
13283
+ const nextPow = Math.ceil(Math.log(n) / Math.log(2));
13284
+ return Math.max(Math.pow(2, nextPow), 2);
13285
+ };
13286
+
13174
13287
  //#endregion
13175
13288
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/String.js
13176
13289
  /**
@@ -13298,7 +13411,7 @@ const filterDoneLeftover = /* @__PURE__ */ composePassthrough(filterError, (e) =
13298
13411
  */
13299
13412
  const doneExitFromCause = (cause) => {
13300
13413
  const halt = filterDone(cause);
13301
- return !isFail(halt) ? succeed$4(halt.value) : failCause$3(halt.fail);
13414
+ return !isFail(halt) ? succeed$4(halt.value) : failCause$4(halt.fail);
13302
13415
  };
13303
13416
  /**
13304
13417
  * Pattern matches on a Pull, handling success, failure, and done cases.
@@ -13360,7 +13473,7 @@ const matchEffect$1 = /* @__PURE__ */ dual(2, (self$1, options) => matchCauseEff
13360
13473
  *
13361
13474
  * @since 2.0.0
13362
13475
  */
13363
- const TypeId$48 = "~effect/Schedule";
13476
+ const TypeId$49 = "~effect/Schedule";
13364
13477
  /**
13365
13478
  * @since 4.0.0
13366
13479
  * @category Metadata
@@ -13376,7 +13489,7 @@ const CurrentMetadata = /* @__PURE__ */ Reference("effect/Schedule/CurrentMetada
13376
13489
  elapsedSincePrevious: 0
13377
13490
  }) });
13378
13491
  const ScheduleProto = {
13379
- [TypeId$48]: {
13492
+ [TypeId$49]: {
13380
13493
  _Out: identity,
13381
13494
  _In: identity,
13382
13495
  _Env: identity
@@ -13404,7 +13517,7 @@ const ScheduleProto = {
13404
13517
  * @since 2.0.0
13405
13518
  * @category guards
13406
13519
  */
13407
- const isSchedule = (u) => hasProperty(u, TypeId$48);
13520
+ const isSchedule = (u) => hasProperty(u, TypeId$49);
13408
13521
  /**
13409
13522
  * Creates a Schedule from a step function that returns a Pull.
13410
13523
  *
@@ -13505,7 +13618,7 @@ const fromStepWithMetadata = (step) => fromStep(map$9(step, (f) => {
13505
13618
  * @since 4.0.0
13506
13619
  * @category destructors
13507
13620
  */
13508
- const toStep = (schedule) => catchCause$2(schedule.step, (cause) => succeed$5(() => failCause$4(cause)));
13621
+ const toStep = (schedule) => catchCause$2(schedule.step, (cause) => succeed$5(() => failCause$5(cause)));
13509
13622
  /**
13510
13623
  * Extracts a step function from a Schedule that provides metadata about each
13511
13624
  * execution. It will also handle sleeping for the computed delay.
@@ -13555,7 +13668,7 @@ const toStepWithMetadata = (schedule) => clockWith$2((clock) => map$9(toStep(sch
13555
13668
  */
13556
13669
  const passthrough$2 = (self$1) => fromStep(map$9(toStep(self$1), (step) => (now$2, input) => matchEffect$1(step(now$2, input), {
13557
13670
  onSuccess: (result$2) => succeed$5([input, result$2[1]]),
13558
- onFailure: failCause$4,
13671
+ onFailure: failCause$5,
13559
13672
  onDone: () => done(input)
13560
13673
  })));
13561
13674
  /**
@@ -13718,7 +13831,7 @@ const provide$2 = /* @__PURE__ */ dual(2, (self$1, source) => isServiceMap(sourc
13718
13831
  /** @internal */
13719
13832
  const repeatOrElse$1 = /* @__PURE__ */ dual(3, (self$1, schedule, orElse$1) => flatMap$2(toStepWithMetadata(schedule), (step) => {
13720
13833
  let meta = CurrentMetadata.defaultValue();
13721
- return catch_$2(forever$2(tap$1(flatMap$2(suspend$4(() => provideService$1(self$1, CurrentMetadata, meta)), step), (meta_) => {
13834
+ return catch_$2(forever$2(tap$1(flatMap$2(suspend$4(() => provideService$2(self$1, CurrentMetadata, meta)), step), (meta_) => {
13722
13835
  meta = meta_;
13723
13836
  }), { autoYield: false }), (error$1) => isDone$2(error$1) ? succeed$5(error$1.value) : orElse$1(error$1, meta.attempt === 0 ? none$3() : some(meta)));
13724
13837
  }));
@@ -13726,7 +13839,7 @@ const repeatOrElse$1 = /* @__PURE__ */ dual(3, (self$1, schedule, orElse$1) => f
13726
13839
  const retryOrElse$1 = /* @__PURE__ */ dual(3, (self$1, policy, orElse$1) => flatMap$2(toStepWithMetadata(policy), (step) => {
13727
13840
  let meta = CurrentMetadata.defaultValue();
13728
13841
  let lastError;
13729
- const loop = catch_$2(suspend$4(() => provideService$1(self$1, CurrentMetadata, meta)), (error$1) => {
13842
+ const loop = catch_$2(suspend$4(() => provideService$2(self$1, CurrentMetadata, meta)), (error$1) => {
13730
13843
  lastError = error$1;
13731
13844
  return flatMap$2(step(error$1), (meta_) => {
13732
13845
  meta = meta_;
@@ -13740,13 +13853,13 @@ const repeat$1 = /* @__PURE__ */ dual(2, (self$1, options) => {
13740
13853
  return repeatOrElse$1(self$1, typeof options === "function" ? options(identity) : isSchedule(options) ? options : buildFromOptions(options), fail$7);
13741
13854
  });
13742
13855
  /** @internal */
13743
- const retry$2 = /* @__PURE__ */ dual(2, (self$1, options) => {
13856
+ const retry$4 = /* @__PURE__ */ dual(2, (self$1, options) => {
13744
13857
  return retryOrElse$1(self$1, typeof options === "function" ? options(identity) : isSchedule(options) ? options : buildFromOptions(options), fail$7);
13745
13858
  });
13746
13859
  /** @internal */
13747
13860
  const scheduleFrom$1 = /* @__PURE__ */ dual(3, (self$1, initial, schedule) => flatMap$2(toStepWithMetadata(schedule), (step) => {
13748
13861
  let meta = CurrentMetadata.defaultValue();
13749
- const selfWithMeta = suspend$4(() => provideService$1(self$1, CurrentMetadata, meta));
13862
+ const selfWithMeta = suspend$4(() => provideService$2(self$1, CurrentMetadata, meta));
13750
13863
  return catch_$2(flatMap$2(step(initial), (meta_) => {
13751
13864
  meta = meta_;
13752
13865
  const body = constant(flatMap$2(selfWithMeta, step));
@@ -13781,7 +13894,7 @@ const withExecutionPlan$1 = /* @__PURE__ */ dual(2, (self$1, plan$1) => suspend$
13781
13894
  attempt: 0,
13782
13895
  stepIndex: 0
13783
13896
  };
13784
- const provideMeta = provideServiceEffect$1(CurrentMetadata$1, sync$1(() => {
13897
+ const provideMeta = provideServiceEffect$2(CurrentMetadata$1, sync$1(() => {
13785
13898
  meta = {
13786
13899
  attempt: meta.attempt + 1,
13787
13900
  stepIndex: i
@@ -13802,10 +13915,10 @@ const withExecutionPlan$1 = /* @__PURE__ */ dual(2, (self$1, plan$1) => suspend$
13802
13915
  attempted = true;
13803
13916
  return result$2.asEffect();
13804
13917
  });
13805
- nextEffect = retry$2(nextEffect, scheduleFromStep(step, false));
13918
+ nextEffect = retry$4(nextEffect, scheduleFromStep(step, false));
13806
13919
  } else {
13807
13920
  const schedule = scheduleFromStep(step, true);
13808
- nextEffect = schedule ? retry$2(nextEffect, schedule) : nextEffect;
13921
+ nextEffect = schedule ? retry$4(nextEffect, schedule) : nextEffect;
13809
13922
  }
13810
13923
  return result$1(nextEffect);
13811
13924
  },
@@ -13833,7 +13946,7 @@ const scheduleOnce = /* @__PURE__ */ recurs(1);
13833
13946
 
13834
13947
  //#endregion
13835
13948
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Request.js
13836
- const TypeId$47 = "~effect/Request";
13949
+ const TypeId$48 = "~effect/Request";
13837
13950
  const requestVariance = /* @__PURE__ */ byReferenceUnsafe({
13838
13951
  _E: (_) => _,
13839
13952
  _A: (_) => _,
@@ -13844,7 +13957,7 @@ const requestVariance = /* @__PURE__ */ byReferenceUnsafe({
13844
13957
  */
13845
13958
  const RequestPrototype = {
13846
13959
  ...StructuralProto,
13847
- [TypeId$47]: requestVariance
13960
+ [TypeId$48]: requestVariance
13848
13961
  };
13849
13962
  /**
13850
13963
  * @since 2.0.0
@@ -13865,7 +13978,7 @@ const request$2 = /* @__PURE__ */ dual(2, (self$1, resolver) => {
13865
13978
  const requestUnsafe$1 = (self$1, options) => {
13866
13979
  const entry = addEntry(options.resolver, self$1, options.onExit, {
13867
13980
  services: options.services,
13868
- currentScheduler: get$7(options.services, Scheduler)
13981
+ currentScheduler: get$8(options.services, Scheduler)
13869
13982
  });
13870
13983
  return () => removeEntryUnsafe(options.resolver, entry);
13871
13984
  };
@@ -13954,7 +14067,7 @@ function runBatch(batch) {
13954
14067
 
13955
14068
  //#endregion
13956
14069
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Effect.js
13957
- const TypeId$46 = EffectTypeId;
14070
+ const TypeId$47 = EffectTypeId;
13958
14071
  /**
13959
14072
  * Tests if a value is an `Effect`.
13960
14073
  *
@@ -13969,7 +14082,7 @@ const TypeId$46 = EffectTypeId;
13969
14082
  * @since 2.0.0
13970
14083
  * @category guards
13971
14084
  */
13972
- const isEffect = (u) => typeof u === "object" && u !== null && TypeId$46 in u;
14085
+ const isEffect = (u) => typeof u === "object" && u !== null && TypeId$47 in u;
13973
14086
  /**
13974
14087
  * Combines multiple effects into one, returning results based on the input
13975
14088
  * structure.
@@ -14702,7 +14815,7 @@ const failSync = failSync$1;
14702
14815
  * @since 2.0.0
14703
14816
  * @category Creating Effects
14704
14817
  */
14705
- const failCause$2 = failCause$4;
14818
+ const failCause$2 = failCause$5;
14706
14819
  /**
14707
14820
  * Creates an `Effect` that represents a failure with a `Cause` computed lazily.
14708
14821
  *
@@ -16245,7 +16358,7 @@ const eventually = eventually$1;
16245
16358
  * @since 2.0.0
16246
16359
  * @category Error handling
16247
16360
  */
16248
- const retry$1 = retry$2;
16361
+ const retry$3 = retry$4;
16249
16362
  /**
16250
16363
  * Retries a failing effect and runs a fallback effect if retries are exhausted.
16251
16364
  *
@@ -16721,7 +16834,7 @@ const raceFirst = raceFirst$1;
16721
16834
  * @since 2.0.0
16722
16835
  * @category Filtering
16723
16836
  */
16724
- const filter$1 = filter$2;
16837
+ const filter$2 = filter$3;
16725
16838
  /**
16726
16839
  * @since 2.0.0
16727
16840
  * @category Filtering
@@ -17477,7 +17590,7 @@ const updateService = updateService$1;
17477
17590
  * @since 2.0.0
17478
17591
  * @category ServiceMap
17479
17592
  */
17480
- const provideService = provideService$1;
17593
+ const provideService$1 = provideService$2;
17481
17594
  /**
17482
17595
  * Provides the effect with the single service it requires. If the effect
17483
17596
  * requires more than one service use `provide` instead.
@@ -17530,7 +17643,7 @@ const provideService = provideService$1;
17530
17643
  * @since 2.0.0
17531
17644
  * @category ServiceMap
17532
17645
  */
17533
- const provideServiceEffect = provideServiceEffect$1;
17646
+ const provideServiceEffect$1 = provideServiceEffect$2;
17534
17647
  /**
17535
17648
  * Sets the concurrency level for parallel operations within an effect.
17536
17649
  *
@@ -20095,7 +20208,7 @@ const fnUntracedEager = fnUntracedEager$1;
20095
20208
  * @since 4.0.0
20096
20209
  */
20097
20210
  /** @internal */
20098
- function set$5(self$1, key, value) {
20211
+ function set$6(self$1, key, value) {
20099
20212
  if (key === "__proto__") Object.defineProperty(self$1, key, {
20100
20213
  value,
20101
20214
  writable: true,
@@ -20184,7 +20297,7 @@ const escape = (string$8) => string$8.replace(/[/\\^$*+?.()|[\]{}]/g, "\\$&");
20184
20297
 
20185
20298
  //#endregion
20186
20299
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/DateTime.js
20187
- TypeId$49;
20300
+ TypeId$50;
20188
20301
  TimeZoneTypeId;
20189
20302
  /**
20190
20303
  * @since 3.6.0
@@ -20271,7 +20384,7 @@ const Equivalence$2 = Equivalence$3;
20271
20384
  * @category instances
20272
20385
  * @since 3.6.0
20273
20386
  */
20274
- const Order$1 = Order$3;
20387
+ const Order$1 = Order$4;
20275
20388
  /**
20276
20389
  * Clamp a `DateTime` between a minimum and maximum value.
20277
20390
  *
@@ -20417,7 +20530,7 @@ const makeZoned = makeZoned$1;
20417
20530
  * DateTime.make("2024-01-01")
20418
20531
  * ```
20419
20532
  */
20420
- const make$45 = make$46;
20533
+ const make$46 = make$47;
20421
20534
  /**
20422
20535
  * Create a `DateTime.Zoned` from a string.
20423
20536
  *
@@ -22156,7 +22269,7 @@ const redactedRegistry = /* @__PURE__ */ new WeakMap();
22156
22269
  *
22157
22270
  * @since 3.3.0
22158
22271
  */
22159
- const TypeId$45 = "~effect/data/Redacted";
22272
+ const TypeId$46 = "~effect/data/Redacted";
22160
22273
  /**
22161
22274
  * @example
22162
22275
  * ```ts
@@ -22172,7 +22285,7 @@ const TypeId$45 = "~effect/data/Redacted";
22172
22285
  * @since 3.3.0
22173
22286
  * @category refinements
22174
22287
  */
22175
- const isRedacted = (u) => hasProperty(u, TypeId$45);
22288
+ const isRedacted = (u) => hasProperty(u, TypeId$46);
22176
22289
  /**
22177
22290
  * This function creates a `Redacted<A>` instance from a given value `A`,
22178
22291
  * securely hiding its content.
@@ -22187,14 +22300,14 @@ const isRedacted = (u) => hasProperty(u, TypeId$45);
22187
22300
  * @since 3.3.0
22188
22301
  * @category constructors
22189
22302
  */
22190
- const make$44 = (value, options) => {
22303
+ const make$45 = (value, options) => {
22191
22304
  const redacted = Object.create(Proto$16);
22192
22305
  if (options?.label) redacted.label = options.label;
22193
22306
  redactedRegistry.set(redacted, value);
22194
22307
  return redacted;
22195
22308
  };
22196
22309
  const Proto$16 = {
22197
- [TypeId$45]: { _A: (_) => _ },
22310
+ [TypeId$46]: { _A: (_) => _ },
22198
22311
  label: void 0,
22199
22312
  ...PipeInspectableProto,
22200
22313
  toJSON() {
@@ -22213,15 +22326,15 @@ const Proto$16 = {
22213
22326
 
22214
22327
  //#endregion
22215
22328
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/SchemaIssue.js
22216
- const TypeId$44 = "~effect/SchemaIssue/Issue";
22329
+ const TypeId$45 = "~effect/SchemaIssue/Issue";
22217
22330
  /**
22218
22331
  * @since 4.0.0
22219
22332
  */
22220
22333
  function isIssue(u) {
22221
- return hasProperty(u, TypeId$44);
22334
+ return hasProperty(u, TypeId$45);
22222
22335
  }
22223
22336
  var Base$1 = class {
22224
- [TypeId$44] = TypeId$44;
22337
+ [TypeId$45] = TypeId$45;
22225
22338
  toString() {
22226
22339
  return defaultFormatter$1(this);
22227
22340
  }
@@ -22246,10 +22359,10 @@ var Filter$1 = class extends Base$1 {
22246
22359
  * The issue that occurred.
22247
22360
  */
22248
22361
  issue;
22249
- constructor(actual, filter$6, issue) {
22362
+ constructor(actual, filter$7, issue) {
22250
22363
  super();
22251
22364
  this.actual = actual;
22252
- this.filter = filter$6;
22365
+ this.filter = filter$7;
22253
22366
  this.issue = issue;
22254
22367
  }
22255
22368
  };
@@ -22494,7 +22607,7 @@ var OneOf = class extends Base$1 {
22494
22607
  }
22495
22608
  };
22496
22609
  /** @internal */
22497
- function make$43(input, out) {
22610
+ function make$44(input, out) {
22498
22611
  if (isIssue(out)) return out;
22499
22612
  if (out === void 0) return;
22500
22613
  if (typeof out === "boolean") return out ? void 0 : new InvalidValue$1(some(input));
@@ -22763,7 +22876,7 @@ function decodeBase64() {
22763
22876
  */
22764
22877
  function dateTimeUtcFromInput() {
22765
22878
  return transformOrFail$1((input) => {
22766
- const dt = make$45(input);
22879
+ const dt = make$46(input);
22767
22880
  return dt ? succeed$1(toUtc(dt)) : fail$4(new InvalidValue$1(some(input), { message: "Invalid DateTime input" }));
22768
22881
  });
22769
22882
  }
@@ -22798,13 +22911,13 @@ function collectBracketPathEntries(isLeaf) {
22798
22911
  /**
22799
22912
  * @since 4.0.0
22800
22913
  */
22801
- const TypeId$43 = "~effect/SchemaTransformation/Transformation";
22914
+ const TypeId$44 = "~effect/SchemaTransformation/Transformation";
22802
22915
  /**
22803
22916
  * @category model
22804
22917
  * @since 4.0.0
22805
22918
  */
22806
22919
  var Transformation = class Transformation {
22807
- [TypeId$43] = TypeId$43;
22920
+ [TypeId$44] = TypeId$44;
22808
22921
  _tag = "Transformation";
22809
22922
  decode;
22810
22923
  encode;
@@ -22823,12 +22936,12 @@ var Transformation = class Transformation {
22823
22936
  * @since 4.0.0
22824
22937
  */
22825
22938
  function isTransformation(u) {
22826
- return hasProperty(u, TypeId$43);
22939
+ return hasProperty(u, TypeId$44);
22827
22940
  }
22828
22941
  /**
22829
22942
  * @since 4.0.0
22830
22943
  */
22831
- const make$42 = (options) => {
22944
+ const make$43 = (options) => {
22832
22945
  if (isTransformation(options)) return options;
22833
22946
  return new Transformation(options.decode, options.encode);
22834
22947
  };
@@ -22918,7 +23031,7 @@ function makeGuard(tag$1) {
22918
23031
  * @since 4.0.0
22919
23032
  */
22920
23033
  function isAST(u) {
22921
- return hasProperty(u, TypeId$42) && u[TypeId$42] === TypeId$42;
23034
+ return hasProperty(u, TypeId$43) && u[TypeId$43] === TypeId$43;
22922
23035
  }
22923
23036
  /**
22924
23037
  * @category Guard
@@ -22981,13 +23094,13 @@ var Context = class {
22981
23094
  this.annotations = annotations$1;
22982
23095
  }
22983
23096
  };
22984
- const TypeId$42 = "~effect/Schema";
23097
+ const TypeId$43 = "~effect/Schema";
22985
23098
  /**
22986
23099
  * @category model
22987
23100
  * @since 4.0.0
22988
23101
  */
22989
23102
  var Base = class {
22990
- [TypeId$42] = TypeId$42;
23103
+ [TypeId$43] = TypeId$43;
22991
23104
  annotations;
22992
23105
  checks;
22993
23106
  encoding;
@@ -23233,7 +23346,7 @@ var Number$2 = class extends Base {
23233
23346
  _tag = "Number";
23234
23347
  /** @internal */
23235
23348
  getParser() {
23236
- return fromRefinement(this, isNumber);
23349
+ return fromRefinement(this, isNumber$1);
23237
23350
  }
23238
23351
  /** @internal */
23239
23352
  toCodecJson() {
@@ -23575,7 +23688,7 @@ var Objects = class Objects extends Base {
23575
23688
  else issues = [issue];
23576
23689
  continue;
23577
23690
  } else return yield* fail$4(new Composite(ast, oinput, [issue]));
23578
- } else set$5(out, key, input[key]);
23691
+ } else set$6(out, key, input[key]);
23579
23692
  }
23580
23693
  }
23581
23694
  for (let i = 0; i < propertyCount; i++) {
@@ -23592,7 +23705,7 @@ var Objects = class Objects extends Base {
23592
23705
  else issues = [issue];
23593
23706
  continue;
23594
23707
  } else return yield* fail$4(new Composite(ast, oinput, [issue]));
23595
- } else if (exit$2.value._tag === "Some") set$5(out, p.name, exit$2.value.value);
23708
+ } else if (exit$2.value._tag === "Some") set$6(out, p.name, exit$2.value.value);
23596
23709
  else if (!isOptional(p.type)) {
23597
23710
  const issue = new Pointer([p.name], new MissingKey(p.type.context?.annotations));
23598
23711
  if (errorsAllOption) {
@@ -23637,8 +23750,8 @@ var Objects = class Objects extends Base {
23637
23750
  const v2 = exitValue.value.value;
23638
23751
  if (is$2.merge && is$2.merge.decode && Object.hasOwn(out, k2)) {
23639
23752
  const [k, v] = is$2.merge.decode.combine([k2, out[k2]], [k2, v2]);
23640
- set$5(out, k, v);
23641
- } else set$5(out, k2, v2);
23753
+ set$6(out, k, v);
23754
+ } else set$6(out, k2, v2);
23642
23755
  }
23643
23756
  }
23644
23757
  }
@@ -23646,7 +23759,7 @@ var Objects = class Objects extends Base {
23646
23759
  if (options.propertyOrder === "original") {
23647
23760
  const keys$1 = (inputKeys ?? Reflect.ownKeys(input)).concat(expectedKeys);
23648
23761
  const preserved = {};
23649
- for (const key of keys$1) if (Object.hasOwn(out, key)) set$5(preserved, key, out[key]);
23762
+ for (const key of keys$1) if (Object.hasOwn(out, key)) set$6(preserved, key, out[key]);
23650
23763
  return some(preserved);
23651
23764
  }
23652
23765
  return some(out);
@@ -23994,8 +24107,8 @@ var FilterGroup = class FilterGroup extends Class$3 {
23994
24107
  }
23995
24108
  };
23996
24109
  /** @internal */
23997
- function makeFilter$1(filter$6, annotations$1, aborted = false) {
23998
- return new Filter((input, ast, options) => make$43(input, filter$6(input, ast, options)), annotations$1, aborted);
24110
+ function makeFilter$1(filter$7, annotations$1, aborted = false) {
24111
+ return new Filter((input, ast, options) => make$44(input, filter$7(input, ast, options)), annotations$1, aborted);
23999
24112
  }
24000
24113
  /** @internal */
24001
24114
  function isPattern$1(regExp, annotations$1) {
@@ -24095,7 +24208,7 @@ function optionalKey$1(ast) {
24095
24208
  /** @internal */
24096
24209
  function withConstructorDefault$1(ast, defaultValue) {
24097
24210
  const encoding = [new Link(unknown, new Transformation(new Getter((o) => {
24098
- if (isNone(filter$5(o, isNotUndefined))) {
24211
+ if (isNone(filter$6(o, isNotUndefined))) {
24099
24212
  const oe = defaultValue(o);
24100
24213
  return isEffect(oe) ? oe : succeed$1(oe);
24101
24214
  } else return succeed$1(o);
@@ -24378,7 +24491,7 @@ function nominal() {
24378
24491
  /**
24379
24492
  * @since 4.0.0
24380
24493
  */
24381
- const TypeId$41 = "~effect/platform/PlatformError";
24494
+ const TypeId$42 = "~effect/platform/PlatformError";
24382
24495
  /**
24383
24496
  * @since 4.0.0
24384
24497
  * @category Models
@@ -24418,7 +24531,7 @@ var PlatformError = class extends TaggedError("PlatformError") {
24418
24531
  /**
24419
24532
  * @since 4.0.0
24420
24533
  */
24421
- [TypeId$41] = TypeId$41;
24534
+ [TypeId$42] = TypeId$42;
24422
24535
  get message() {
24423
24536
  return this.reason.message;
24424
24537
  }
@@ -24742,7 +24855,7 @@ const Empty$2 = /* @__PURE__ */ Symbol.for("effect/MutableList/Empty");
24742
24855
  * @since 4.0.0
24743
24856
  * @category constructors
24744
24857
  */
24745
- const make$41 = () => ({
24858
+ const make$42 = () => ({
24746
24859
  head: void 0,
24747
24860
  tail: void 0,
24748
24861
  length: 0
@@ -24794,6 +24907,46 @@ const append = (self$1, message) => {
24794
24907
  self$1.length++;
24795
24908
  };
24796
24909
  /**
24910
+ * Prepends an element to the beginning of the MutableList.
24911
+ * This operation is optimized for high-frequency usage.
24912
+ *
24913
+ * @example
24914
+ * ```ts
24915
+ * import * as MutableList from "effect/MutableList"
24916
+ *
24917
+ * const list = MutableList.make<string>()
24918
+ *
24919
+ * // Prepend elements (they'll be at the front)
24920
+ * MutableList.prepend(list, "third")
24921
+ * MutableList.prepend(list, "second")
24922
+ * MutableList.prepend(list, "first")
24923
+ *
24924
+ * console.log(list.length) // 3
24925
+ *
24926
+ * // Elements taken from head (most recently prepended first)
24927
+ * console.log(MutableList.take(list)) // "first"
24928
+ * console.log(MutableList.take(list)) // "second"
24929
+ * console.log(MutableList.take(list)) // "third"
24930
+ *
24931
+ * // Use case: priority items or stack-like behavior
24932
+ * MutableList.append(list, "normal")
24933
+ * MutableList.prepend(list, "priority") // This will be taken first
24934
+ * console.log(MutableList.take(list)) // "priority"
24935
+ * ```
24936
+ *
24937
+ * @since 4.0.0
24938
+ * @category mutations
24939
+ */
24940
+ const prepend = (self$1, message) => {
24941
+ self$1.head = {
24942
+ array: [message],
24943
+ mutable: true,
24944
+ offset: 0,
24945
+ next: self$1.head
24946
+ };
24947
+ self$1.length++;
24948
+ };
24949
+ /**
24797
24950
  * Appends all elements from an iterable to the end of the MutableList.
24798
24951
  * Returns the number of elements added.
24799
24952
  *
@@ -24986,6 +25139,48 @@ const takeN = (self$1, n) => {
24986
25139
  return array$1;
24987
25140
  };
24988
25141
  /**
25142
+ * Takes all elements from the MutableList and returns them as an array.
25143
+ * The list becomes empty after this operation. This is equivalent to takeN(list, list.length).
25144
+ *
25145
+ * @example
25146
+ * ```ts
25147
+ * import * as MutableList from "effect/MutableList"
25148
+ *
25149
+ * const list = MutableList.make<string>()
25150
+ * MutableList.appendAll(list, ["apple", "banana", "cherry"])
25151
+ *
25152
+ * console.log(list.length) // 3
25153
+ *
25154
+ * // Take all elements
25155
+ * const allItems = MutableList.takeAll(list)
25156
+ * console.log(allItems) // ["apple", "banana", "cherry"]
25157
+ * console.log(list.length) // 0
25158
+ *
25159
+ * // Useful for converting to array and clearing
25160
+ * const queue = MutableList.make<number>()
25161
+ * MutableList.appendAll(queue, [1, 2, 3, 4, 5])
25162
+ *
25163
+ * const snapshot = MutableList.takeAll(queue)
25164
+ * console.log("Queue contents:", snapshot)
25165
+ * console.log("Queue is now empty:", queue.length === 0)
25166
+ *
25167
+ * // Drain pattern for processing
25168
+ * function drainAndProcess<T>(
25169
+ * list: MutableList.MutableList<T>,
25170
+ * processor: (items: Array<T>) => void
25171
+ * ) {
25172
+ * if (list.length > 0) {
25173
+ * const items = MutableList.takeAll(list)
25174
+ * processor(items)
25175
+ * }
25176
+ * }
25177
+ * ```
25178
+ *
25179
+ * @since 4.0.0
25180
+ * @category elements
25181
+ */
25182
+ const takeAll$1 = (self$1) => takeN(self$1, self$1.length);
25183
+ /**
24989
25184
  * Takes a single element from the beginning of the MutableList.
24990
25185
  * Returns the element if available, or the Empty symbol if the list is empty.
24991
25186
  * The taken element is removed from the list.
@@ -25033,7 +25228,7 @@ const takeN = (self$1, n) => {
25033
25228
  * @since 4.0.0
25034
25229
  * @category elements
25035
25230
  */
25036
- const take$1 = (self$1) => {
25231
+ const take$2 = (self$1) => {
25037
25232
  if (!self$1.head) return Empty$2;
25038
25233
  const message = self$1.head.array[self$1.head.offset];
25039
25234
  if (self$1.head.mutable) self$1.head.array[self$1.head.offset] = void 0;
@@ -25043,12 +25238,111 @@ const take$1 = (self$1) => {
25043
25238
  else clear$2(self$1);
25044
25239
  return message;
25045
25240
  };
25241
+ /**
25242
+ * Filters the MutableList in place, keeping only elements that satisfy the predicate.
25243
+ * This operation modifies the list and rebuilds its internal structure for efficiency.
25244
+ *
25245
+ * @example
25246
+ * ```ts
25247
+ * import * as MutableList from "effect/MutableList"
25248
+ *
25249
+ * const list = MutableList.make<number>()
25250
+ * MutableList.appendAll(list, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
25251
+ *
25252
+ * console.log(list.length) // 10
25253
+ *
25254
+ * // Keep only even numbers
25255
+ * MutableList.filter(list, (n) => n % 2 === 0)
25256
+ *
25257
+ * console.log(list.length) // 5
25258
+ * console.log(MutableList.takeAll(list)) // [2, 4, 6, 8, 10]
25259
+ *
25260
+ * // Filter with index
25261
+ * const indexed = MutableList.make<string>()
25262
+ * MutableList.appendAll(indexed, ["a", "b", "c", "d", "e"])
25263
+ *
25264
+ * // Keep elements at even indices
25265
+ * MutableList.filter(indexed, (value, index) => index % 2 === 0)
25266
+ * console.log(MutableList.takeAll(indexed)) // ["a", "c", "e"]
25267
+ *
25268
+ * // Real-world example: filtering a log queue
25269
+ * const logs = MutableList.make<{ level: string; message: string }>()
25270
+ * MutableList.appendAll(logs, [
25271
+ * { level: "INFO", message: "App started" },
25272
+ * { level: "ERROR", message: "Connection failed" },
25273
+ * { level: "DEBUG", message: "Cache hit" },
25274
+ * { level: "ERROR", message: "Timeout" }
25275
+ * ])
25276
+ *
25277
+ * // Keep only errors
25278
+ * MutableList.filter(logs, (log) => log.level === "ERROR")
25279
+ * console.log(MutableList.takeAll(logs)) // Only error logs
25280
+ * ```
25281
+ *
25282
+ * @since 4.0.0
25283
+ * @category mutations
25284
+ */
25285
+ const filter$1 = (self$1, f) => {
25286
+ const array$1 = [];
25287
+ let chunk = self$1.head;
25288
+ while (chunk) {
25289
+ for (let i = chunk.offset; i < chunk.array.length; i++) if (f(chunk.array[i], i)) array$1.push(chunk.array[i]);
25290
+ chunk = chunk.next;
25291
+ }
25292
+ self$1.head = self$1.tail = {
25293
+ array: array$1,
25294
+ mutable: true,
25295
+ offset: 0,
25296
+ next: void 0
25297
+ };
25298
+ };
25299
+ /**
25300
+ * Removes all occurrences of a specific value from the MutableList.
25301
+ * This operation modifies the list in place.
25302
+ *
25303
+ * @example
25304
+ * ```ts
25305
+ * import * as MutableList from "effect/MutableList"
25306
+ *
25307
+ * const list = MutableList.make<string>()
25308
+ * MutableList.appendAll(list, ["apple", "banana", "apple", "cherry", "apple"])
25309
+ *
25310
+ * console.log(list.length) // 5
25311
+ *
25312
+ * // Remove all occurrences of "apple"
25313
+ * MutableList.remove(list, "apple")
25314
+ *
25315
+ * console.log(list.length) // 2
25316
+ * console.log(MutableList.takeAll(list)) // ["banana", "cherry"]
25317
+ *
25318
+ * // Remove non-existent value (no effect)
25319
+ * MutableList.remove(list, "grape")
25320
+ * console.log(list.length) // 2
25321
+ *
25322
+ * // Real-world example: removing completed tasks
25323
+ * const tasks = MutableList.make<{ id: number; status: string }>()
25324
+ * MutableList.appendAll(tasks, [
25325
+ * { id: 1, status: "pending" },
25326
+ * { id: 2, status: "completed" },
25327
+ * { id: 3, status: "pending" },
25328
+ * { id: 4, status: "completed" }
25329
+ * ])
25330
+ *
25331
+ * // Remove completed tasks by filtering status
25332
+ * MutableList.filter(tasks, (task) => task.status !== "completed")
25333
+ * console.log(MutableList.takeAll(tasks)) // Only pending tasks
25334
+ * ```
25335
+ *
25336
+ * @since 4.0.0
25337
+ * @category mutations
25338
+ */
25339
+ const remove$3 = (self$1, value) => filter$1(self$1, (v) => v !== value);
25046
25340
 
25047
25341
  //#endregion
25048
25342
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/MutableRef.js
25049
- const TypeId$40 = "~effect/MutableRef";
25343
+ const TypeId$41 = "~effect/MutableRef";
25050
25344
  const MutableRefProto = {
25051
- [TypeId$40]: TypeId$40,
25345
+ [TypeId$41]: TypeId$41,
25052
25346
  ...PipeInspectableProto,
25053
25347
  toJSON() {
25054
25348
  return {
@@ -25081,11 +25375,1402 @@ const MutableRefProto = {
25081
25375
  * @since 2.0.0
25082
25376
  * @category constructors
25083
25377
  */
25084
- const make$40 = (value) => {
25378
+ const make$41 = (value) => {
25085
25379
  const ref = Object.create(MutableRefProto);
25086
25380
  ref.current = value;
25087
25381
  return ref;
25088
25382
  };
25383
+ /**
25384
+ * Gets the current value of the MutableRef.
25385
+ *
25386
+ * @example
25387
+ * ```ts
25388
+ * import { MutableRef } from "effect"
25389
+ *
25390
+ * const ref = MutableRef.make("hello")
25391
+ * console.log(MutableRef.get(ref)) // "hello"
25392
+ *
25393
+ * MutableRef.set(ref, "world")
25394
+ * console.log(MutableRef.get(ref)) // "world"
25395
+ *
25396
+ * // Reading complex objects
25397
+ * const config = MutableRef.make({ port: 3000, host: "localhost" })
25398
+ * const currentConfig = MutableRef.get(config)
25399
+ * console.log(currentConfig.port) // 3000
25400
+ *
25401
+ * // Multiple reads return the same value
25402
+ * const value1 = MutableRef.get(ref)
25403
+ * const value2 = MutableRef.get(ref)
25404
+ * console.log(value1 === value2) // true
25405
+ * ```
25406
+ *
25407
+ * @since 2.0.0
25408
+ * @category general
25409
+ */
25410
+ const get$7 = (self$1) => self$1.current;
25411
+ /**
25412
+ * Sets the MutableRef to a new value and returns the reference.
25413
+ *
25414
+ * @example
25415
+ * ```ts
25416
+ * import { MutableRef } from "effect"
25417
+ *
25418
+ * const ref = MutableRef.make("initial")
25419
+ *
25420
+ * // Set a new value
25421
+ * MutableRef.set(ref, "updated")
25422
+ * console.log(MutableRef.get(ref)) // "updated"
25423
+ *
25424
+ * // Chain set operations (since it returns the ref)
25425
+ * const result = MutableRef.set(ref, "final")
25426
+ * console.log(result === ref) // true (same reference)
25427
+ * console.log(MutableRef.get(ref)) // "final"
25428
+ *
25429
+ * // Set complex objects
25430
+ * const config = MutableRef.make({ debug: false, verbose: false })
25431
+ * MutableRef.set(config, { debug: true, verbose: true })
25432
+ * console.log(MutableRef.get(config)) // { debug: true, verbose: true }
25433
+ *
25434
+ * // Pipe-able version
25435
+ * const setValue = MutableRef.set("new value")
25436
+ * setValue(ref)
25437
+ * console.log(MutableRef.get(ref)) // "new value"
25438
+ *
25439
+ * // Useful for state management
25440
+ * const state = MutableRef.make<"idle" | "loading" | "success" | "error">("idle")
25441
+ * MutableRef.set(state, "loading")
25442
+ * // ... perform async operation
25443
+ * MutableRef.set(state, "success")
25444
+ * ```
25445
+ *
25446
+ * @since 2.0.0
25447
+ * @category general
25448
+ */
25449
+ const set$5 = /* @__PURE__ */ dual(2, (self$1, value) => {
25450
+ self$1.current = value;
25451
+ return self$1;
25452
+ });
25453
+
25454
+ //#endregion
25455
+ //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/PubSub.js
25456
+ /**
25457
+ * This module provides utilities for working with publish-subscribe (PubSub) systems.
25458
+ *
25459
+ * A PubSub is an asynchronous message hub where publishers can publish messages and subscribers
25460
+ * can subscribe to receive those messages. PubSub supports various backpressure strategies,
25461
+ * message replay, and concurrent access from multiple producers and consumers.
25462
+ *
25463
+ * @example
25464
+ * ```ts
25465
+ * import { Effect, PubSub } from "effect"
25466
+ *
25467
+ * const program = Effect.gen(function*() {
25468
+ * const pubsub = yield* PubSub.bounded<string>(10)
25469
+ *
25470
+ * // Publisher
25471
+ * yield* PubSub.publish(pubsub, "Hello")
25472
+ * yield* PubSub.publish(pubsub, "World")
25473
+ *
25474
+ * // Subscriber
25475
+ * yield* Effect.scoped(Effect.gen(function*() {
25476
+ * const subscription = yield* PubSub.subscribe(pubsub)
25477
+ * const message1 = yield* PubSub.take(subscription)
25478
+ * const message2 = yield* PubSub.take(subscription)
25479
+ * console.log(message1, message2) // "Hello", "World"
25480
+ * }))
25481
+ * })
25482
+ * ```
25483
+ *
25484
+ * @since 2.0.0
25485
+ */
25486
+ const TypeId$40 = "~effect/PubSub";
25487
+ const SubscriptionTypeId = "~effect/PubSub/Subscription";
25488
+ /**
25489
+ * Creates a PubSub with a custom atomic implementation and strategy.
25490
+ *
25491
+ * @example
25492
+ * ```ts
25493
+ * import { Effect } from "effect"
25494
+ * import * as PubSub from "effect/PubSub"
25495
+ *
25496
+ * const program = Effect.gen(function*() {
25497
+ * // Create custom PubSub with specific atomic implementation and strategy
25498
+ * const pubsub = yield* PubSub.make<string>({
25499
+ * atomicPubSub: () => PubSub.makeAtomicBounded(100),
25500
+ * strategy: () => new PubSub.BackPressureStrategy()
25501
+ * })
25502
+ *
25503
+ * // Use the created PubSub
25504
+ * yield* PubSub.publish(pubsub, "Hello")
25505
+ * })
25506
+ * ```
25507
+ *
25508
+ * @since 4.0.0
25509
+ * @category constructors
25510
+ */
25511
+ const make$40 = (options) => sync(() => makePubSubUnsafe(options.atomicPubSub(), /* @__PURE__ */ new Map(), makeUnsafe$6(), makeLatchUnsafe(false), make$41(false), options.strategy()));
25512
+ /**
25513
+ * Creates a bounded PubSub with backpressure strategy.
25514
+ *
25515
+ * The PubSub will retain messages until they have been taken by all subscribers.
25516
+ * When the PubSub reaches capacity, publishers will be suspended until space becomes available.
25517
+ * This ensures message delivery guarantees but may slow down fast publishers.
25518
+ *
25519
+ * @param capacity - The maximum number of messages the PubSub can hold, or an options object
25520
+ * with capacity and optional replay buffer size
25521
+ * @returns An Effect that creates a bounded PubSub
25522
+ *
25523
+ * @example
25524
+ * ```ts
25525
+ * import { Effect } from "effect"
25526
+ * import * as PubSub from "effect/PubSub"
25527
+ *
25528
+ * const program = Effect.gen(function*() {
25529
+ * // Create bounded PubSub with capacity 100
25530
+ * const pubsub = yield* PubSub.bounded<string>(100)
25531
+ *
25532
+ * // Create with replay buffer for late subscribers
25533
+ * const pubsubWithReplay = yield* PubSub.bounded<string>({
25534
+ * capacity: 100,
25535
+ * replay: 10 // Last 10 messages replayed to new subscribers
25536
+ * })
25537
+ * })
25538
+ * ```
25539
+ *
25540
+ * @since 2.0.0
25541
+ * @category constructors
25542
+ */
25543
+ const bounded$1 = (capacity) => make$40({
25544
+ atomicPubSub: () => makeAtomicBounded(capacity),
25545
+ strategy: () => new BackPressureStrategy()
25546
+ });
25547
+ /**
25548
+ * Creates a bounded `PubSub` with the dropping strategy. The `PubSub` will drop new
25549
+ * messages if the `PubSub` is at capacity.
25550
+ *
25551
+ * For best performance use capacities that are powers of two.
25552
+ *
25553
+ * @example
25554
+ * ```ts
25555
+ * import { Effect } from "effect"
25556
+ * import * as PubSub from "effect/PubSub"
25557
+ *
25558
+ * const program = Effect.gen(function*() {
25559
+ * // Create dropping PubSub that drops new messages when full
25560
+ * const pubsub = yield* PubSub.dropping<string>(3)
25561
+ *
25562
+ * // With replay buffer for late subscribers
25563
+ * const pubsubWithReplay = yield* PubSub.dropping<string>({
25564
+ * capacity: 3,
25565
+ * replay: 5
25566
+ * })
25567
+ *
25568
+ * // Fill the PubSub and see dropping behavior
25569
+ * yield* PubSub.publish(pubsub, "msg1") // succeeds
25570
+ * yield* PubSub.publish(pubsub, "msg2") // succeeds
25571
+ * yield* PubSub.publish(pubsub, "msg3") // succeeds
25572
+ * const dropped = yield* PubSub.publish(pubsub, "msg4") // returns false (dropped)
25573
+ * console.log("Message dropped:", !dropped)
25574
+ * })
25575
+ * ```
25576
+ *
25577
+ * @since 2.0.0
25578
+ * @category constructors
25579
+ */
25580
+ const dropping = (capacity) => make$40({
25581
+ atomicPubSub: () => makeAtomicBounded(capacity),
25582
+ strategy: () => new DroppingStrategy()
25583
+ });
25584
+ /**
25585
+ * Creates a bounded `PubSub` with the sliding strategy. The `PubSub` will add new
25586
+ * messages and drop old messages if the `PubSub` is at capacity.
25587
+ *
25588
+ * For best performance use capacities that are powers of two.
25589
+ *
25590
+ * @example
25591
+ * ```ts
25592
+ * import { Effect } from "effect"
25593
+ * import * as PubSub from "effect/PubSub"
25594
+ *
25595
+ * const program = Effect.gen(function*() {
25596
+ * // Create sliding PubSub that evicts old messages when full
25597
+ * const pubsub = yield* PubSub.sliding<string>(3)
25598
+ *
25599
+ * // With replay buffer
25600
+ * const pubsubWithReplay = yield* PubSub.sliding<string>({
25601
+ * capacity: 3,
25602
+ * replay: 2
25603
+ * })
25604
+ *
25605
+ * // Fill and overflow the PubSub
25606
+ * yield* PubSub.publish(pubsub, "msg1")
25607
+ * yield* PubSub.publish(pubsub, "msg2")
25608
+ * yield* PubSub.publish(pubsub, "msg3")
25609
+ * yield* PubSub.publish(pubsub, "msg4") // "msg1" is evicted
25610
+ *
25611
+ * yield* Effect.scoped(Effect.gen(function*() {
25612
+ * const subscription = yield* PubSub.subscribe(pubsub)
25613
+ * const messages = yield* PubSub.takeAll(subscription)
25614
+ * console.log(messages) // ["msg2", "msg3", "msg4"]
25615
+ * }))
25616
+ * })
25617
+ * ```
25618
+ *
25619
+ * @since 2.0.0
25620
+ * @category constructors
25621
+ */
25622
+ const sliding = (capacity) => make$40({
25623
+ atomicPubSub: () => makeAtomicBounded(capacity),
25624
+ strategy: () => new SlidingStrategy()
25625
+ });
25626
+ /**
25627
+ * Creates an unbounded `PubSub`.
25628
+ *
25629
+ * @example
25630
+ * ```ts
25631
+ * import { Effect } from "effect"
25632
+ * import * as PubSub from "effect/PubSub"
25633
+ *
25634
+ * const program = Effect.gen(function*() {
25635
+ * // Create unbounded PubSub
25636
+ * const pubsub = yield* PubSub.unbounded<string>()
25637
+ *
25638
+ * // With replay buffer for late subscribers
25639
+ * const pubsubWithReplay = yield* PubSub.unbounded<string>({
25640
+ * replay: 10
25641
+ * })
25642
+ *
25643
+ * // Can publish unlimited messages
25644
+ * for (let i = 0; i < 1000; i++) {
25645
+ * yield* PubSub.publish(pubsub, `message-${i}`)
25646
+ * }
25647
+ *
25648
+ * yield* Effect.scoped(Effect.gen(function*() {
25649
+ * const subscription = yield* PubSub.subscribe(pubsub)
25650
+ * const message = yield* PubSub.take(subscription)
25651
+ * console.log("First message:", message)
25652
+ * }))
25653
+ * })
25654
+ * ```
25655
+ *
25656
+ * @since 2.0.0
25657
+ * @category constructors
25658
+ */
25659
+ const unbounded = (options) => make$40({
25660
+ atomicPubSub: () => makeAtomicUnbounded(options),
25661
+ strategy: () => new DroppingStrategy()
25662
+ });
25663
+ /**
25664
+ * Creates a bounded atomic PubSub implementation with optional replay buffer.
25665
+ *
25666
+ * @since 4.0.0
25667
+ * @category constructors
25668
+ */
25669
+ const makeAtomicBounded = (capacity) => {
25670
+ const options = typeof capacity === "number" ? { capacity } : capacity;
25671
+ ensureCapacity(options.capacity);
25672
+ const replayBuffer = options.replay && options.replay > 0 ? new ReplayBuffer(Math.ceil(options.replay)) : void 0;
25673
+ if (options.capacity === 1) return new BoundedPubSubSingle(replayBuffer);
25674
+ else if (nextPow2(options.capacity) === options.capacity) return new BoundedPubSubPow2(options.capacity, replayBuffer);
25675
+ else return new BoundedPubSubArb(options.capacity, replayBuffer);
25676
+ };
25677
+ /**
25678
+ * Creates an unbounded atomic PubSub implementation with optional replay buffer.
25679
+ *
25680
+ * @since 4.0.0
25681
+ * @category constructors
25682
+ */
25683
+ const makeAtomicUnbounded = (options) => new UnboundedPubSub(options?.replay ? new ReplayBuffer(options.replay) : void 0);
25684
+ /**
25685
+ * Interrupts any fibers that are suspended on `offer` or `take`. Future calls
25686
+ * to `offer*` and `take*` will be interrupted immediately.
25687
+ *
25688
+ * @example
25689
+ * ```ts
25690
+ * import { Effect, Fiber, PubSub } from "effect"
25691
+ *
25692
+ * const program = Effect.gen(function*() {
25693
+ * const pubsub = yield* PubSub.bounded<string>(1)
25694
+ *
25695
+ * // Start a fiber that will be suspended waiting to publish
25696
+ * const publisherFiber = yield* Effect.forkChild(
25697
+ * Effect.gen(function*() {
25698
+ * yield* PubSub.publish(pubsub, "msg1") // fills the buffer
25699
+ * yield* PubSub.publish(pubsub, "msg2") // will suspend here
25700
+ * })
25701
+ * )
25702
+ *
25703
+ * // Shutdown the PubSub
25704
+ * yield* PubSub.shutdown(pubsub)
25705
+ *
25706
+ * // The suspended publisher will be interrupted
25707
+ * const result = yield* Fiber.await(publisherFiber)
25708
+ * console.log("Publisher interrupted:", result._tag === "Failure")
25709
+ * })
25710
+ * ```
25711
+ *
25712
+ * @since 2.0.0
25713
+ * @category lifecycle
25714
+ */
25715
+ const shutdown$1 = (self$1) => uninterruptible(withFiber((fiber$2) => {
25716
+ set$5(self$1.shutdownFlag, true);
25717
+ return close(self$1.scope, interrupt$3(fiber$2.id)).pipe(andThen(self$1.strategy.shutdown), when(self$1.shutdownHook.open), asVoid);
25718
+ }));
25719
+ /**
25720
+ * Publishes a message to the `PubSub`, returning whether the message was published
25721
+ * to the `PubSub`.
25722
+ *
25723
+ * @example
25724
+ * ```ts
25725
+ * import { Effect } from "effect"
25726
+ * import * as PubSub from "effect/PubSub"
25727
+ *
25728
+ * const program = Effect.gen(function*() {
25729
+ * const pubsub = yield* PubSub.bounded<string>(10)
25730
+ *
25731
+ * // Publish a message
25732
+ * const published = yield* PubSub.publish(pubsub, "Hello World")
25733
+ * console.log("Message published:", published) // true
25734
+ *
25735
+ * // With a full bounded PubSub using backpressure strategy
25736
+ * const smallPubsub = yield* PubSub.bounded<string>(1)
25737
+ * yield* PubSub.publish(smallPubsub, "msg1") // succeeds
25738
+ *
25739
+ * // This will suspend until space becomes available
25740
+ * const publishEffect = PubSub.publish(smallPubsub, "msg2")
25741
+ *
25742
+ * // Create a subscriber to free up space
25743
+ * yield* Effect.scoped(Effect.gen(function*() {
25744
+ * const subscription = yield* PubSub.subscribe(smallPubsub)
25745
+ * yield* PubSub.take(subscription) // frees space
25746
+ * const result = yield* publishEffect
25747
+ * console.log("Second message published:", result) // true
25748
+ * }))
25749
+ * })
25750
+ * ```
25751
+ *
25752
+ * @since 2.0.0
25753
+ * @category publishing
25754
+ */
25755
+ const publish = /* @__PURE__ */ dual(2, (self$1, value) => suspend$3(() => {
25756
+ if (self$1.shutdownFlag.current) return interrupt$1;
25757
+ if (self$1.pubsub.publish(value)) {
25758
+ self$1.strategy.completeSubscribersUnsafe(self$1.pubsub, self$1.subscribers);
25759
+ return succeed$1(true);
25760
+ }
25761
+ return self$1.strategy.handleSurplus(self$1.pubsub, self$1.subscribers, [value], self$1.shutdownFlag);
25762
+ }));
25763
+ /**
25764
+ * Subscribes to receive messages from the `PubSub`. The resulting subscription can
25765
+ * be evaluated multiple times within the scope to take a message from the `PubSub`
25766
+ * each time.
25767
+ *
25768
+ * @example
25769
+ * ```ts
25770
+ * import { Effect, PubSub } from "effect"
25771
+ *
25772
+ * const program = Effect.gen(function*() {
25773
+ * const pubsub = yield* PubSub.bounded<string>(10)
25774
+ *
25775
+ * // Publish some messages
25776
+ * yield* PubSub.publish(pubsub, "Hello")
25777
+ * yield* PubSub.publish(pubsub, "World")
25778
+ *
25779
+ * // Subscribe within a scope for automatic cleanup
25780
+ * yield* Effect.scoped(Effect.gen(function*() {
25781
+ * const subscription = yield* PubSub.subscribe(pubsub)
25782
+ *
25783
+ * // Take messages one by one
25784
+ * const msg1 = yield* PubSub.take(subscription)
25785
+ * const msg2 = yield* PubSub.take(subscription)
25786
+ * console.log(msg1, msg2) // "Hello", "World"
25787
+ *
25788
+ * // Subscription is automatically cleaned up when scope exits
25789
+ * }))
25790
+ *
25791
+ * // Multiple subscribers can receive the same messages
25792
+ * yield* PubSub.publish(pubsub, "Broadcast")
25793
+ *
25794
+ * yield* Effect.scoped(Effect.gen(function*() {
25795
+ * const sub1 = yield* PubSub.subscribe(pubsub)
25796
+ * const sub2 = yield* PubSub.subscribe(pubsub)
25797
+ *
25798
+ * const [msg1, msg2] = yield* Effect.all([
25799
+ * PubSub.take(sub1),
25800
+ * PubSub.take(sub2)
25801
+ * ])
25802
+ * console.log("Both received:", msg1, msg2) // "Broadcast", "Broadcast"
25803
+ * }))
25804
+ * })
25805
+ * ```
25806
+ *
25807
+ * @since 2.0.0
25808
+ * @category subscription
25809
+ */
25810
+ const subscribe = (self$1) => acquireRelease(sync(() => makeSubscriptionUnsafe(self$1.pubsub, self$1.subscribers, self$1.strategy)), unsubscribe);
25811
+ const unsubscribe = (self$1) => uninterruptible(withFiber((state) => {
25812
+ set$5(self$1.shutdownFlag, true);
25813
+ return forEach$1(takeAll$1(self$1.pollers), (d) => interruptWith(d, state.id), {
25814
+ discard: true,
25815
+ concurrency: "unbounded"
25816
+ }).pipe(tap(() => {
25817
+ self$1.subscribers.delete(self$1.subscription);
25818
+ self$1.subscription.unsubscribe();
25819
+ self$1.strategy.onPubSubEmptySpaceUnsafe(self$1.pubsub, self$1.subscribers);
25820
+ }), when(self$1.shutdownHook.open), asVoid);
25821
+ }));
25822
+ /**
25823
+ * Takes a single message from the subscription. If no messages are available,
25824
+ * this will suspend until a message becomes available.
25825
+ *
25826
+ * @example
25827
+ * ```ts
25828
+ * import { Effect, Fiber, PubSub } from "effect"
25829
+ *
25830
+ * const program = Effect.gen(function*() {
25831
+ * const pubsub = yield* PubSub.bounded<string>(10)
25832
+ *
25833
+ * yield* Effect.scoped(Effect.gen(function*() {
25834
+ * const subscription = yield* PubSub.subscribe(pubsub)
25835
+ *
25836
+ * // Start a fiber to take a message (will suspend)
25837
+ * const takeFiber = yield* Effect.forkChild(
25838
+ * PubSub.take(subscription)
25839
+ * )
25840
+ *
25841
+ * // Publish a message
25842
+ * yield* PubSub.publish(pubsub, "Hello")
25843
+ *
25844
+ * // The take will now complete
25845
+ * const message = yield* Fiber.join(takeFiber)
25846
+ * console.log("Received:", message) // "Hello"
25847
+ * }))
25848
+ * })
25849
+ * ```
25850
+ *
25851
+ * @since 4.0.0
25852
+ * @category subscription
25853
+ */
25854
+ const take$1 = (self$1) => suspend$3(() => {
25855
+ if (self$1.shutdownFlag.current) return interrupt$1;
25856
+ if (self$1.replayWindow.remaining > 0) {
25857
+ const message$1 = self$1.replayWindow.take();
25858
+ return succeed$1(message$1);
25859
+ }
25860
+ const message = self$1.pollers.length === 0 ? self$1.subscription.poll() : Empty$2;
25861
+ if (message === Empty$2) return pollForItem(self$1);
25862
+ else {
25863
+ self$1.strategy.onPubSubEmptySpaceUnsafe(self$1.pubsub, self$1.subscribers);
25864
+ return succeed$1(message);
25865
+ }
25866
+ });
25867
+ const pollForItem = (self$1) => {
25868
+ const deferred = makeUnsafe$7();
25869
+ let set$7 = self$1.subscribers.get(self$1.subscription);
25870
+ if (!set$7) {
25871
+ set$7 = /* @__PURE__ */ new Set();
25872
+ self$1.subscribers.set(self$1.subscription, set$7);
25873
+ }
25874
+ set$7.add(self$1.pollers);
25875
+ append(self$1.pollers, deferred);
25876
+ self$1.strategy.completePollersUnsafe(self$1.pubsub, self$1.subscribers, self$1.subscription, self$1.pollers);
25877
+ return onInterrupt(_await(deferred), () => {
25878
+ remove$3(self$1.pollers, deferred);
25879
+ return void_$1;
25880
+ });
25881
+ };
25882
+ const AbsentValue = /* @__PURE__ */ Symbol.for("effect/PubSub/AbsentValue");
25883
+ const addSubscribers = (subscribers, subscription, pollers) => {
25884
+ if (!subscribers.has(subscription)) subscribers.set(subscription, /* @__PURE__ */ new Set());
25885
+ subscribers.get(subscription).add(pollers);
25886
+ };
25887
+ const removeSubscribers = (subscribers, subscription, pollers) => {
25888
+ if (!subscribers.has(subscription)) return;
25889
+ const set$7 = subscribers.get(subscription);
25890
+ set$7.delete(pollers);
25891
+ if (set$7.size === 0) subscribers.delete(subscription);
25892
+ };
25893
+ const makeSubscriptionUnsafe = (pubsub, subscribers, strategy) => new SubscriptionImpl(pubsub, subscribers, pubsub.subscribe(), make$42(), makeLatchUnsafe(false), make$41(false), strategy, pubsub.replayWindow());
25894
+ var BoundedPubSubArb = class {
25895
+ array;
25896
+ publisherIndex = 0;
25897
+ subscribers;
25898
+ subscriberCount = 0;
25899
+ subscribersIndex = 0;
25900
+ capacity;
25901
+ replayBuffer;
25902
+ constructor(capacity, replayBuffer) {
25903
+ this.capacity = capacity;
25904
+ this.replayBuffer = replayBuffer;
25905
+ this.array = Array.from({ length: capacity });
25906
+ this.subscribers = Array.from({ length: capacity });
25907
+ }
25908
+ replayWindow() {
25909
+ return this.replayBuffer ? new ReplayWindowImpl(this.replayBuffer) : emptyReplayWindow;
25910
+ }
25911
+ isEmpty() {
25912
+ return this.publisherIndex === this.subscribersIndex;
25913
+ }
25914
+ isFull() {
25915
+ return this.publisherIndex === this.subscribersIndex + this.capacity;
25916
+ }
25917
+ size() {
25918
+ return this.publisherIndex - this.subscribersIndex;
25919
+ }
25920
+ publish(value) {
25921
+ if (this.isFull()) return false;
25922
+ if (this.subscriberCount !== 0) {
25923
+ const index = this.publisherIndex % this.capacity;
25924
+ this.array[index] = value;
25925
+ this.subscribers[index] = this.subscriberCount;
25926
+ this.publisherIndex += 1;
25927
+ }
25928
+ if (this.replayBuffer) this.replayBuffer.offer(value);
25929
+ return true;
25930
+ }
25931
+ publishAll(elements) {
25932
+ if (this.subscriberCount === 0) {
25933
+ if (this.replayBuffer) this.replayBuffer.offerAll(elements);
25934
+ return [];
25935
+ }
25936
+ const chunk = fromIterable$2(elements);
25937
+ const n = chunk.length;
25938
+ const size$2 = this.publisherIndex - this.subscribersIndex;
25939
+ const available = this.capacity - size$2;
25940
+ const forPubSub = Math.min(n, available);
25941
+ if (forPubSub === 0) return chunk;
25942
+ let iteratorIndex = 0;
25943
+ const publishAllIndex = this.publisherIndex + forPubSub;
25944
+ while (this.publisherIndex !== publishAllIndex) {
25945
+ const a = chunk[iteratorIndex++];
25946
+ const index = this.publisherIndex % this.capacity;
25947
+ this.array[index] = a;
25948
+ this.subscribers[index] = this.subscriberCount;
25949
+ this.publisherIndex += 1;
25950
+ if (this.replayBuffer) this.replayBuffer.offer(a);
25951
+ }
25952
+ return chunk.slice(iteratorIndex);
25953
+ }
25954
+ slide() {
25955
+ if (this.subscribersIndex !== this.publisherIndex) {
25956
+ const index = this.subscribersIndex % this.capacity;
25957
+ this.array[index] = AbsentValue;
25958
+ this.subscribers[index] = 0;
25959
+ this.subscribersIndex += 1;
25960
+ }
25961
+ if (this.replayBuffer) this.replayBuffer.slide();
25962
+ }
25963
+ subscribe() {
25964
+ this.subscriberCount += 1;
25965
+ return new BoundedPubSubArbSubscription(this, this.publisherIndex, false);
25966
+ }
25967
+ };
25968
+ var BoundedPubSubArbSubscription = class {
25969
+ self;
25970
+ subscriberIndex;
25971
+ unsubscribed;
25972
+ constructor(self$1, subscriberIndex, unsubscribed) {
25973
+ this.self = self$1;
25974
+ this.subscriberIndex = subscriberIndex;
25975
+ this.unsubscribed = unsubscribed;
25976
+ }
25977
+ isEmpty() {
25978
+ return this.unsubscribed || this.self.publisherIndex === this.subscriberIndex || this.self.publisherIndex === this.self.subscribersIndex;
25979
+ }
25980
+ size() {
25981
+ if (this.unsubscribed) return 0;
25982
+ return this.self.publisherIndex - Math.max(this.subscriberIndex, this.self.subscribersIndex);
25983
+ }
25984
+ poll() {
25985
+ if (this.unsubscribed) return Empty$2;
25986
+ this.subscriberIndex = Math.max(this.subscriberIndex, this.self.subscribersIndex);
25987
+ if (this.subscriberIndex !== this.self.publisherIndex) {
25988
+ const index = this.subscriberIndex % this.self.capacity;
25989
+ const elem = this.self.array[index];
25990
+ this.self.subscribers[index] -= 1;
25991
+ if (this.self.subscribers[index] === 0) {
25992
+ this.self.array[index] = AbsentValue;
25993
+ this.self.subscribersIndex += 1;
25994
+ }
25995
+ this.subscriberIndex += 1;
25996
+ return elem;
25997
+ }
25998
+ return Empty$2;
25999
+ }
26000
+ pollUpTo(n) {
26001
+ if (this.unsubscribed) return [];
26002
+ this.subscriberIndex = Math.max(this.subscriberIndex, this.self.subscribersIndex);
26003
+ const size$2 = this.self.publisherIndex - this.subscriberIndex;
26004
+ const toPoll = Math.min(n, size$2);
26005
+ if (toPoll <= 0) return [];
26006
+ const builder = [];
26007
+ const pollUpToIndex = this.subscriberIndex + toPoll;
26008
+ while (this.subscriberIndex !== pollUpToIndex) {
26009
+ const index = this.subscriberIndex % this.self.capacity;
26010
+ const a = this.self.array[index];
26011
+ this.self.subscribers[index] -= 1;
26012
+ if (this.self.subscribers[index] === 0) {
26013
+ this.self.array[index] = AbsentValue;
26014
+ this.self.subscribersIndex += 1;
26015
+ }
26016
+ builder.push(a);
26017
+ this.subscriberIndex += 1;
26018
+ }
26019
+ return builder;
26020
+ }
26021
+ unsubscribe() {
26022
+ if (!this.unsubscribed) {
26023
+ this.unsubscribed = true;
26024
+ this.self.subscriberCount -= 1;
26025
+ this.subscriberIndex = Math.max(this.subscriberIndex, this.self.subscribersIndex);
26026
+ while (this.subscriberIndex !== this.self.publisherIndex) {
26027
+ const index = this.subscriberIndex % this.self.capacity;
26028
+ this.self.subscribers[index] -= 1;
26029
+ if (this.self.subscribers[index] === 0) {
26030
+ this.self.array[index] = AbsentValue;
26031
+ this.self.subscribersIndex += 1;
26032
+ }
26033
+ this.subscriberIndex += 1;
26034
+ }
26035
+ }
26036
+ }
26037
+ };
26038
+ var BoundedPubSubPow2 = class {
26039
+ array;
26040
+ mask;
26041
+ publisherIndex = 0;
26042
+ subscribers;
26043
+ subscriberCount = 0;
26044
+ subscribersIndex = 0;
26045
+ capacity;
26046
+ replayBuffer;
26047
+ constructor(capacity, replayBuffer) {
26048
+ this.capacity = capacity;
26049
+ this.replayBuffer = replayBuffer;
26050
+ this.array = Array.from({ length: capacity });
26051
+ this.mask = capacity - 1;
26052
+ this.subscribers = Array.from({ length: capacity });
26053
+ }
26054
+ replayWindow() {
26055
+ return this.replayBuffer ? new ReplayWindowImpl(this.replayBuffer) : emptyReplayWindow;
26056
+ }
26057
+ isEmpty() {
26058
+ return this.publisherIndex === this.subscribersIndex;
26059
+ }
26060
+ isFull() {
26061
+ return this.publisherIndex === this.subscribersIndex + this.capacity;
26062
+ }
26063
+ size() {
26064
+ return this.publisherIndex - this.subscribersIndex;
26065
+ }
26066
+ publish(value) {
26067
+ if (this.isFull()) return false;
26068
+ if (this.subscriberCount !== 0) {
26069
+ const index = this.publisherIndex & this.mask;
26070
+ this.array[index] = value;
26071
+ this.subscribers[index] = this.subscriberCount;
26072
+ this.publisherIndex += 1;
26073
+ }
26074
+ if (this.replayBuffer) this.replayBuffer.offer(value);
26075
+ return true;
26076
+ }
26077
+ publishAll(elements) {
26078
+ if (this.subscriberCount === 0) {
26079
+ if (this.replayBuffer) this.replayBuffer.offerAll(elements);
26080
+ return [];
26081
+ }
26082
+ const chunk = fromIterable$2(elements);
26083
+ const n = chunk.length;
26084
+ const size$2 = this.publisherIndex - this.subscribersIndex;
26085
+ const available = this.capacity - size$2;
26086
+ const forPubSub = Math.min(n, available);
26087
+ if (forPubSub === 0) return chunk;
26088
+ let iteratorIndex = 0;
26089
+ const publishAllIndex = this.publisherIndex + forPubSub;
26090
+ while (this.publisherIndex !== publishAllIndex) {
26091
+ const elem = chunk[iteratorIndex++];
26092
+ const index = this.publisherIndex & this.mask;
26093
+ this.array[index] = elem;
26094
+ this.subscribers[index] = this.subscriberCount;
26095
+ this.publisherIndex += 1;
26096
+ if (this.replayBuffer) this.replayBuffer.offer(elem);
26097
+ }
26098
+ return chunk.slice(iteratorIndex);
26099
+ }
26100
+ slide() {
26101
+ if (this.subscribersIndex !== this.publisherIndex) {
26102
+ const index = this.subscribersIndex & this.mask;
26103
+ this.array[index] = AbsentValue;
26104
+ this.subscribers[index] = 0;
26105
+ this.subscribersIndex += 1;
26106
+ }
26107
+ if (this.replayBuffer) this.replayBuffer.slide();
26108
+ }
26109
+ subscribe() {
26110
+ this.subscriberCount += 1;
26111
+ return new BoundedPubSubPow2Subscription(this, this.publisherIndex, false);
26112
+ }
26113
+ };
26114
+ var BoundedPubSubPow2Subscription = class {
26115
+ self;
26116
+ subscriberIndex;
26117
+ unsubscribed;
26118
+ constructor(self$1, subscriberIndex, unsubscribed) {
26119
+ this.self = self$1;
26120
+ this.subscriberIndex = subscriberIndex;
26121
+ this.unsubscribed = unsubscribed;
26122
+ }
26123
+ isEmpty() {
26124
+ return this.unsubscribed || this.self.publisherIndex === this.subscriberIndex || this.self.publisherIndex === this.self.subscribersIndex;
26125
+ }
26126
+ size() {
26127
+ if (this.unsubscribed) return 0;
26128
+ return this.self.publisherIndex - Math.max(this.subscriberIndex, this.self.subscribersIndex);
26129
+ }
26130
+ poll() {
26131
+ if (this.unsubscribed) return Empty$2;
26132
+ this.subscriberIndex = Math.max(this.subscriberIndex, this.self.subscribersIndex);
26133
+ if (this.subscriberIndex !== this.self.publisherIndex) {
26134
+ const index = this.subscriberIndex & this.self.mask;
26135
+ const elem = this.self.array[index];
26136
+ this.self.subscribers[index] -= 1;
26137
+ if (this.self.subscribers[index] === 0) {
26138
+ this.self.array[index] = AbsentValue;
26139
+ this.self.subscribersIndex += 1;
26140
+ }
26141
+ this.subscriberIndex += 1;
26142
+ return elem;
26143
+ }
26144
+ return Empty$2;
26145
+ }
26146
+ pollUpTo(n) {
26147
+ if (this.unsubscribed) return [];
26148
+ this.subscriberIndex = Math.max(this.subscriberIndex, this.self.subscribersIndex);
26149
+ const size$2 = this.self.publisherIndex - this.subscriberIndex;
26150
+ const toPoll = Math.min(n, size$2);
26151
+ if (toPoll <= 0) return [];
26152
+ const builder = [];
26153
+ const pollUpToIndex = this.subscriberIndex + toPoll;
26154
+ while (this.subscriberIndex !== pollUpToIndex) {
26155
+ const index = this.subscriberIndex & this.self.mask;
26156
+ const elem = this.self.array[index];
26157
+ this.self.subscribers[index] -= 1;
26158
+ if (this.self.subscribers[index] === 0) {
26159
+ this.self.array[index] = AbsentValue;
26160
+ this.self.subscribersIndex += 1;
26161
+ }
26162
+ builder.push(elem);
26163
+ this.subscriberIndex += 1;
26164
+ }
26165
+ return builder;
26166
+ }
26167
+ unsubscribe() {
26168
+ if (!this.unsubscribed) {
26169
+ this.unsubscribed = true;
26170
+ this.self.subscriberCount -= 1;
26171
+ this.subscriberIndex = Math.max(this.subscriberIndex, this.self.subscribersIndex);
26172
+ while (this.subscriberIndex !== this.self.publisherIndex) {
26173
+ const index = this.subscriberIndex & this.self.mask;
26174
+ this.self.subscribers[index] -= 1;
26175
+ if (this.self.subscribers[index] === 0) {
26176
+ this.self.array[index] = AbsentValue;
26177
+ this.self.subscribersIndex += 1;
26178
+ }
26179
+ this.subscriberIndex += 1;
26180
+ }
26181
+ }
26182
+ }
26183
+ };
26184
+ var BoundedPubSubSingle = class {
26185
+ publisherIndex = 0;
26186
+ subscriberCount = 0;
26187
+ subscribers = 0;
26188
+ value = AbsentValue;
26189
+ capacity = 1;
26190
+ replayBuffer;
26191
+ constructor(replayBuffer) {
26192
+ this.replayBuffer = replayBuffer;
26193
+ }
26194
+ replayWindow() {
26195
+ return this.replayBuffer ? new ReplayWindowImpl(this.replayBuffer) : emptyReplayWindow;
26196
+ }
26197
+ pipe() {
26198
+ return pipeArguments(this, arguments);
26199
+ }
26200
+ isEmpty() {
26201
+ return this.subscribers === 0;
26202
+ }
26203
+ isFull() {
26204
+ return !this.isEmpty();
26205
+ }
26206
+ size() {
26207
+ return this.isEmpty() ? 0 : 1;
26208
+ }
26209
+ publish(value) {
26210
+ if (this.isFull()) return false;
26211
+ if (this.subscriberCount !== 0) {
26212
+ this.value = value;
26213
+ this.subscribers = this.subscriberCount;
26214
+ this.publisherIndex += 1;
26215
+ }
26216
+ if (this.replayBuffer) this.replayBuffer.offer(value);
26217
+ return true;
26218
+ }
26219
+ publishAll(elements) {
26220
+ if (this.subscriberCount === 0) {
26221
+ if (this.replayBuffer) this.replayBuffer.offerAll(elements);
26222
+ return [];
26223
+ }
26224
+ const chunk = fromIterable$2(elements);
26225
+ if (chunk.length === 0) return chunk;
26226
+ if (this.publish(chunk[0])) return chunk.slice(1);
26227
+ else return chunk;
26228
+ }
26229
+ slide() {
26230
+ if (this.isFull()) {
26231
+ this.subscribers = 0;
26232
+ this.value = AbsentValue;
26233
+ }
26234
+ if (this.replayBuffer) this.replayBuffer.slide();
26235
+ }
26236
+ subscribe() {
26237
+ this.subscriberCount += 1;
26238
+ return new BoundedPubSubSingleSubscription(this, this.publisherIndex, false);
26239
+ }
26240
+ };
26241
+ var BoundedPubSubSingleSubscription = class {
26242
+ self;
26243
+ subscriberIndex;
26244
+ unsubscribed;
26245
+ constructor(self$1, subscriberIndex, unsubscribed) {
26246
+ this.self = self$1;
26247
+ this.subscriberIndex = subscriberIndex;
26248
+ this.unsubscribed = unsubscribed;
26249
+ }
26250
+ isEmpty() {
26251
+ return this.unsubscribed || this.self.subscribers === 0 || this.subscriberIndex === this.self.publisherIndex;
26252
+ }
26253
+ size() {
26254
+ return this.isEmpty() ? 0 : 1;
26255
+ }
26256
+ poll() {
26257
+ if (this.isEmpty()) return Empty$2;
26258
+ const elem = this.self.value;
26259
+ this.self.subscribers -= 1;
26260
+ if (this.self.subscribers === 0) this.self.value = AbsentValue;
26261
+ this.subscriberIndex += 1;
26262
+ return elem;
26263
+ }
26264
+ pollUpTo(n) {
26265
+ if (this.isEmpty() || n < 1) return [];
26266
+ const a = this.self.value;
26267
+ this.self.subscribers -= 1;
26268
+ if (this.self.subscribers === 0) this.self.value = AbsentValue;
26269
+ this.subscriberIndex += 1;
26270
+ return [a];
26271
+ }
26272
+ unsubscribe() {
26273
+ if (!this.unsubscribed) {
26274
+ this.unsubscribed = true;
26275
+ this.self.subscriberCount -= 1;
26276
+ if (this.subscriberIndex !== this.self.publisherIndex) {
26277
+ this.self.subscribers -= 1;
26278
+ if (this.self.subscribers === 0) this.self.value = AbsentValue;
26279
+ }
26280
+ }
26281
+ }
26282
+ };
26283
+ var UnboundedPubSub = class {
26284
+ publisherHead = {
26285
+ value: AbsentValue,
26286
+ subscribers: 0,
26287
+ next: null
26288
+ };
26289
+ publisherTail = this.publisherHead;
26290
+ publisherIndex = 0;
26291
+ subscribersIndex = 0;
26292
+ capacity = Number.MAX_SAFE_INTEGER;
26293
+ replayBuffer;
26294
+ constructor(replayBuffer) {
26295
+ this.replayBuffer = replayBuffer;
26296
+ }
26297
+ replayWindow() {
26298
+ return this.replayBuffer ? new ReplayWindowImpl(this.replayBuffer) : emptyReplayWindow;
26299
+ }
26300
+ isEmpty() {
26301
+ return this.publisherHead === this.publisherTail;
26302
+ }
26303
+ isFull() {
26304
+ return false;
26305
+ }
26306
+ size() {
26307
+ return this.publisherIndex - this.subscribersIndex;
26308
+ }
26309
+ publish(value) {
26310
+ const subscribers = this.publisherTail.subscribers;
26311
+ if (subscribers !== 0) {
26312
+ this.publisherTail.next = {
26313
+ value,
26314
+ subscribers,
26315
+ next: null
26316
+ };
26317
+ this.publisherTail = this.publisherTail.next;
26318
+ this.publisherIndex += 1;
26319
+ }
26320
+ if (this.replayBuffer) this.replayBuffer.offer(value);
26321
+ return true;
26322
+ }
26323
+ publishAll(elements) {
26324
+ if (this.publisherTail.subscribers !== 0) for (const a of elements) this.publish(a);
26325
+ else if (this.replayBuffer) this.replayBuffer.offerAll(elements);
26326
+ return [];
26327
+ }
26328
+ slide() {
26329
+ if (this.publisherHead !== this.publisherTail) {
26330
+ this.publisherHead = this.publisherHead.next;
26331
+ this.publisherHead.value = AbsentValue;
26332
+ this.subscribersIndex += 1;
26333
+ }
26334
+ if (this.replayBuffer) this.replayBuffer.slide();
26335
+ }
26336
+ subscribe() {
26337
+ this.publisherTail.subscribers += 1;
26338
+ return new UnboundedPubSubSubscription(this, this.publisherTail, this.publisherIndex, false);
26339
+ }
26340
+ };
26341
+ var UnboundedPubSubSubscription = class {
26342
+ self;
26343
+ subscriberHead;
26344
+ subscriberIndex;
26345
+ unsubscribed;
26346
+ constructor(self$1, subscriberHead, subscriberIndex, unsubscribed) {
26347
+ this.self = self$1;
26348
+ this.subscriberHead = subscriberHead;
26349
+ this.subscriberIndex = subscriberIndex;
26350
+ this.unsubscribed = unsubscribed;
26351
+ }
26352
+ isEmpty() {
26353
+ if (this.unsubscribed) return true;
26354
+ let empty$15 = true;
26355
+ let loop = true;
26356
+ while (loop) if (this.subscriberHead === this.self.publisherTail) loop = false;
26357
+ else if (this.subscriberHead.next.value !== AbsentValue) {
26358
+ empty$15 = false;
26359
+ loop = false;
26360
+ } else {
26361
+ this.subscriberHead = this.subscriberHead.next;
26362
+ this.subscriberIndex += 1;
26363
+ }
26364
+ return empty$15;
26365
+ }
26366
+ size() {
26367
+ if (this.unsubscribed) return 0;
26368
+ return this.self.publisherIndex - Math.max(this.subscriberIndex, this.self.subscribersIndex);
26369
+ }
26370
+ poll() {
26371
+ if (this.unsubscribed) return Empty$2;
26372
+ let loop = true;
26373
+ let polled = Empty$2;
26374
+ while (loop) if (this.subscriberHead === this.self.publisherTail) loop = false;
26375
+ else {
26376
+ const elem = this.subscriberHead.next.value;
26377
+ if (elem !== AbsentValue) {
26378
+ polled = elem;
26379
+ this.subscriberHead.subscribers -= 1;
26380
+ if (this.subscriberHead.subscribers === 0) {
26381
+ this.self.publisherHead = this.self.publisherHead.next;
26382
+ this.self.publisherHead.value = AbsentValue;
26383
+ this.self.subscribersIndex += 1;
26384
+ }
26385
+ loop = false;
26386
+ }
26387
+ this.subscriberHead = this.subscriberHead.next;
26388
+ this.subscriberIndex += 1;
26389
+ }
26390
+ return polled;
26391
+ }
26392
+ pollUpTo(n) {
26393
+ const builder = [];
26394
+ let i = 0;
26395
+ while (i !== n) {
26396
+ const a = this.poll();
26397
+ if (a === Empty$2) i = n;
26398
+ else {
26399
+ builder.push(a);
26400
+ i += 1;
26401
+ }
26402
+ }
26403
+ return builder;
26404
+ }
26405
+ unsubscribe() {
26406
+ if (!this.unsubscribed) {
26407
+ this.unsubscribed = true;
26408
+ this.self.publisherTail.subscribers -= 1;
26409
+ while (this.subscriberHead !== this.self.publisherTail) {
26410
+ if (this.subscriberHead.next.value !== AbsentValue) {
26411
+ this.subscriberHead.subscribers -= 1;
26412
+ if (this.subscriberHead.subscribers === 0) {
26413
+ this.self.publisherHead = this.self.publisherHead.next;
26414
+ this.self.publisherHead.value = AbsentValue;
26415
+ this.self.subscribersIndex += 1;
26416
+ }
26417
+ }
26418
+ this.subscriberHead = this.subscriberHead.next;
26419
+ }
26420
+ }
26421
+ }
26422
+ };
26423
+ var SubscriptionImpl = class {
26424
+ [SubscriptionTypeId] = { _A: identity };
26425
+ pubsub;
26426
+ subscribers;
26427
+ subscription;
26428
+ pollers;
26429
+ shutdownHook;
26430
+ shutdownFlag;
26431
+ strategy;
26432
+ replayWindow;
26433
+ constructor(pubsub, subscribers, subscription, pollers, shutdownHook, shutdownFlag, strategy, replayWindow) {
26434
+ this.pubsub = pubsub;
26435
+ this.subscribers = subscribers;
26436
+ this.subscription = subscription;
26437
+ this.pollers = pollers;
26438
+ this.shutdownHook = shutdownHook;
26439
+ this.shutdownFlag = shutdownFlag;
26440
+ this.strategy = strategy;
26441
+ this.replayWindow = replayWindow;
26442
+ }
26443
+ pipe() {
26444
+ return pipeArguments(this, arguments);
26445
+ }
26446
+ };
26447
+ var PubSubImpl = class {
26448
+ [TypeId$40] = { _A: identity };
26449
+ pubsub;
26450
+ subscribers;
26451
+ scope;
26452
+ shutdownHook;
26453
+ shutdownFlag;
26454
+ strategy;
26455
+ constructor(pubsub, subscribers, scope$2, shutdownHook, shutdownFlag, strategy) {
26456
+ this.pubsub = pubsub;
26457
+ this.subscribers = subscribers;
26458
+ this.scope = scope$2;
26459
+ this.shutdownHook = shutdownHook;
26460
+ this.shutdownFlag = shutdownFlag;
26461
+ this.strategy = strategy;
26462
+ }
26463
+ pipe() {
26464
+ return pipeArguments(this, arguments);
26465
+ }
26466
+ };
26467
+ const makePubSubUnsafe = (pubsub, subscribers, scope$2, shutdownHook, shutdownFlag, strategy) => new PubSubImpl(pubsub, subscribers, scope$2, shutdownHook, shutdownFlag, strategy);
26468
+ const ensureCapacity = (capacity) => {
26469
+ if (capacity <= 0) throw new Error(`Cannot construct PubSub with capacity of ${capacity}`);
26470
+ };
26471
+ /**
26472
+ * A strategy that applies back pressure to publishers when the `PubSub` is at
26473
+ * capacity. This guarantees that all subscribers will receive all messages
26474
+ * published to the `PubSub` while they are subscribed. However, it creates the
26475
+ * risk that a slow subscriber will slow down the rate at which messages
26476
+ * are published and received by other subscribers.
26477
+ *
26478
+ * @since 4.0.0
26479
+ * @category models
26480
+ */
26481
+ var BackPressureStrategy = class {
26482
+ publishers = /* @__PURE__ */ make$42();
26483
+ get shutdown() {
26484
+ return withFiber((fiber$2) => forEach$1(takeAll$1(this.publishers), ([_, deferred, last$1]) => last$1 ? interruptWith(deferred, fiber$2.id) : void_$1, {
26485
+ concurrency: "unbounded",
26486
+ discard: true
26487
+ }));
26488
+ }
26489
+ handleSurplus(pubsub, subscribers, elements, isShutdown) {
26490
+ return suspend$3(() => {
26491
+ const deferred = makeUnsafe$7();
26492
+ this.offerUnsafe(elements, deferred);
26493
+ this.onPubSubEmptySpaceUnsafe(pubsub, subscribers);
26494
+ this.completeSubscribersUnsafe(pubsub, subscribers);
26495
+ return (get$7(isShutdown) ? interrupt$1 : _await(deferred)).pipe(onInterrupt(() => {
26496
+ this.removeUnsafe(deferred);
26497
+ return void_$1;
26498
+ }));
26499
+ });
26500
+ }
26501
+ onPubSubEmptySpaceUnsafe(pubsub, subscribers) {
26502
+ let keepPolling = true;
26503
+ while (keepPolling && !pubsub.isFull()) {
26504
+ const publisher = take$2(this.publishers);
26505
+ if (publisher === Empty$2) keepPolling = false;
26506
+ else {
26507
+ const [value, deferred] = publisher;
26508
+ const published = pubsub.publish(value);
26509
+ if (published && publisher[2]) doneUnsafe(deferred, succeed$4(true));
26510
+ else if (!published) prepend(this.publishers, publisher);
26511
+ this.completeSubscribersUnsafe(pubsub, subscribers);
26512
+ }
26513
+ }
26514
+ }
26515
+ completePollersUnsafe(pubsub, subscribers, subscription, pollers) {
26516
+ return strategyCompletePollersUnsafe(this, pubsub, subscribers, subscription, pollers);
26517
+ }
26518
+ completeSubscribersUnsafe(pubsub, subscribers) {
26519
+ return strategyCompleteSubscribersUnsafe(this, pubsub, subscribers);
26520
+ }
26521
+ offerUnsafe(elements, deferred) {
26522
+ const iterator$1 = elements[Symbol.iterator]();
26523
+ let next = iterator$1.next();
26524
+ if (!next.done) while (1) {
26525
+ const value = next.value;
26526
+ next = iterator$1.next();
26527
+ if (next.done) {
26528
+ append(this.publishers, [
26529
+ value,
26530
+ deferred,
26531
+ true
26532
+ ]);
26533
+ break;
26534
+ }
26535
+ append(this.publishers, [
26536
+ value,
26537
+ deferred,
26538
+ false
26539
+ ]);
26540
+ }
26541
+ }
26542
+ removeUnsafe(deferred) {
26543
+ filter$1(this.publishers, ([_, d]) => d !== deferred);
26544
+ }
26545
+ };
26546
+ /**
26547
+ * A strategy that drops new messages when the `PubSub` is at capacity. This
26548
+ * guarantees that a slow subscriber will not slow down the rate at which
26549
+ * messages are published. However, it creates the risk that a slow
26550
+ * subscriber will slow down the rate at which messages are received by
26551
+ * other subscribers and that subscribers may not receive all messages
26552
+ * published to the `PubSub` while they are subscribed.
26553
+ *
26554
+ * @example
26555
+ * ```ts
26556
+ * import { Effect } from "effect"
26557
+ * import * as PubSub from "effect/PubSub"
26558
+ *
26559
+ * const program = Effect.gen(function*() {
26560
+ * // Create PubSub with dropping strategy
26561
+ * const pubsub = yield* PubSub.dropping<string>(2)
26562
+ *
26563
+ * // Or explicitly create with dropping strategy
26564
+ * const customPubsub = yield* PubSub.make<string>({
26565
+ * atomicPubSub: () => PubSub.makeAtomicBounded(2),
26566
+ * strategy: () => new PubSub.DroppingStrategy()
26567
+ * })
26568
+ *
26569
+ * // Fill the PubSub
26570
+ * const pub1 = yield* PubSub.publish(pubsub, "msg1") // true
26571
+ * const pub2 = yield* PubSub.publish(pubsub, "msg2") // true
26572
+ * const pub3 = yield* PubSub.publish(pubsub, "msg3") // false (dropped)
26573
+ *
26574
+ * console.log("Publication results:", [pub1, pub2, pub3]) // [true, true, false]
26575
+ *
26576
+ * // Subscribers will only see the first two messages
26577
+ * yield* Effect.scoped(Effect.gen(function*() {
26578
+ * const subscription = yield* PubSub.subscribe(pubsub)
26579
+ * const messages = yield* PubSub.takeAll(subscription)
26580
+ * console.log("Received messages:", messages) // ["msg1", "msg2"]
26581
+ * }))
26582
+ * })
26583
+ * ```
26584
+ *
26585
+ * @since 4.0.0
26586
+ * @category models
26587
+ */
26588
+ var DroppingStrategy = class {
26589
+ get shutdown() {
26590
+ return void_$1;
26591
+ }
26592
+ handleSurplus(_pubsub, _subscribers, _elements, _isShutdown) {
26593
+ return succeed$1(false);
26594
+ }
26595
+ onPubSubEmptySpaceUnsafe(_pubsub, _subscribers) {}
26596
+ completePollersUnsafe(pubsub, subscribers, subscription, pollers) {
26597
+ return strategyCompletePollersUnsafe(this, pubsub, subscribers, subscription, pollers);
26598
+ }
26599
+ completeSubscribersUnsafe(pubsub, subscribers) {
26600
+ return strategyCompleteSubscribersUnsafe(this, pubsub, subscribers);
26601
+ }
26602
+ };
26603
+ /**
26604
+ * A strategy that adds new messages and drops old messages when the `PubSub` is
26605
+ * at capacity. This guarantees that a slow subscriber will not slow down
26606
+ * the rate at which messages are published and received by other
26607
+ * subscribers. However, it creates the risk that a slow subscriber will
26608
+ * not receive some messages published to the `PubSub` while it is subscribed.
26609
+ *
26610
+ * @example
26611
+ * ```ts
26612
+ * import { Effect } from "effect"
26613
+ * import * as PubSub from "effect/PubSub"
26614
+ *
26615
+ * const program = Effect.gen(function*() {
26616
+ * // Create PubSub with sliding strategy
26617
+ * const pubsub = yield* PubSub.sliding<string>(2)
26618
+ *
26619
+ * // Or explicitly create with sliding strategy
26620
+ * const customPubsub = yield* PubSub.make<string>({
26621
+ * atomicPubSub: () => PubSub.makeAtomicBounded(2),
26622
+ * strategy: () => new PubSub.SlidingStrategy()
26623
+ * })
26624
+ *
26625
+ * // Publish messages that exceed capacity
26626
+ * yield* PubSub.publish(pubsub, "msg1") // stored
26627
+ * yield* PubSub.publish(pubsub, "msg2") // stored
26628
+ * yield* PubSub.publish(pubsub, "msg3") // "msg1" evicted, "msg3" stored
26629
+ * yield* PubSub.publish(pubsub, "msg4") // "msg2" evicted, "msg4" stored
26630
+ *
26631
+ * // Subscribers will see the most recent messages
26632
+ * yield* Effect.scoped(Effect.gen(function*() {
26633
+ * const subscription = yield* PubSub.subscribe(pubsub)
26634
+ * const messages = yield* PubSub.takeAll(subscription)
26635
+ * console.log("Recent messages:", messages) // ["msg3", "msg4"]
26636
+ * }))
26637
+ * })
26638
+ * ```
26639
+ *
26640
+ * @since 4.0.0
26641
+ * @category models
26642
+ */
26643
+ var SlidingStrategy = class {
26644
+ get shutdown() {
26645
+ return void_$1;
26646
+ }
26647
+ handleSurplus(pubsub, subscribers, elements, _isShutdown) {
26648
+ return sync(() => {
26649
+ this.slidingPublishUnsafe(pubsub, elements);
26650
+ this.completeSubscribersUnsafe(pubsub, subscribers);
26651
+ return true;
26652
+ });
26653
+ }
26654
+ onPubSubEmptySpaceUnsafe(_pubsub, _subscribers) {}
26655
+ completePollersUnsafe(pubsub, subscribers, subscription, pollers) {
26656
+ return strategyCompletePollersUnsafe(this, pubsub, subscribers, subscription, pollers);
26657
+ }
26658
+ completeSubscribersUnsafe(pubsub, subscribers) {
26659
+ return strategyCompleteSubscribersUnsafe(this, pubsub, subscribers);
26660
+ }
26661
+ slidingPublishUnsafe(pubsub, elements) {
26662
+ const it = elements[Symbol.iterator]();
26663
+ let next = it.next();
26664
+ if (!next.done && pubsub.capacity > 0) {
26665
+ let a = next.value;
26666
+ let loop = true;
26667
+ while (loop) {
26668
+ pubsub.slide();
26669
+ const pub = pubsub.publish(a);
26670
+ if (pub && (next = it.next()) && !next.done) a = next.value;
26671
+ else if (pub) loop = false;
26672
+ }
26673
+ }
26674
+ }
26675
+ };
26676
+ const strategyCompletePollersUnsafe = (strategy, pubsub, subscribers, subscription, pollers) => {
26677
+ let keepPolling = true;
26678
+ while (keepPolling && !subscription.isEmpty()) {
26679
+ const poller = take$2(pollers);
26680
+ if (poller === Empty$2) {
26681
+ removeSubscribers(subscribers, subscription, pollers);
26682
+ if (pollers.length === 0) keepPolling = false;
26683
+ else addSubscribers(subscribers, subscription, pollers);
26684
+ } else {
26685
+ const pollResult = subscription.poll();
26686
+ if (pollResult === Empty$2) prepend(pollers, poller);
26687
+ else {
26688
+ doneUnsafe(poller, succeed$4(pollResult));
26689
+ strategy.onPubSubEmptySpaceUnsafe(pubsub, subscribers);
26690
+ }
26691
+ }
26692
+ }
26693
+ };
26694
+ const strategyCompleteSubscribersUnsafe = (strategy, pubsub, subscribers) => {
26695
+ for (const [subscription, pollersSet] of subscribers) for (const pollers of pollersSet) strategy.completePollersUnsafe(pubsub, subscribers, subscription, pollers);
26696
+ };
26697
+ var ReplayBuffer = class {
26698
+ capacity;
26699
+ head = {
26700
+ value: AbsentValue,
26701
+ next: null
26702
+ };
26703
+ tail = this.head;
26704
+ size = 0;
26705
+ index = 0;
26706
+ constructor(capacity) {
26707
+ this.capacity = capacity;
26708
+ }
26709
+ slide() {
26710
+ this.index++;
26711
+ }
26712
+ offer(a) {
26713
+ this.tail.value = a;
26714
+ this.tail.next = {
26715
+ value: AbsentValue,
26716
+ next: null
26717
+ };
26718
+ this.tail = this.tail.next;
26719
+ if (this.size === this.capacity) this.head = this.head.next;
26720
+ else this.size += 1;
26721
+ }
26722
+ offerAll(as$3) {
26723
+ for (const a of as$3) this.offer(a);
26724
+ }
26725
+ };
26726
+ var ReplayWindowImpl = class {
26727
+ head;
26728
+ index;
26729
+ remaining;
26730
+ buffer;
26731
+ constructor(buffer$1) {
26732
+ this.buffer = buffer$1;
26733
+ this.index = buffer$1.index;
26734
+ this.remaining = buffer$1.size;
26735
+ this.head = buffer$1.head;
26736
+ }
26737
+ fastForward() {
26738
+ while (this.index < this.buffer.index) {
26739
+ this.head = this.head.next;
26740
+ this.index++;
26741
+ }
26742
+ }
26743
+ take() {
26744
+ if (this.remaining === 0) return;
26745
+ else if (this.index < this.buffer.index) this.fastForward();
26746
+ this.remaining--;
26747
+ const value = this.head.value;
26748
+ this.head = this.head.next;
26749
+ return value;
26750
+ }
26751
+ takeN(n) {
26752
+ if (this.remaining === 0) return [];
26753
+ else if (this.index < this.buffer.index) this.fastForward();
26754
+ const len = Math.min(n, this.remaining);
26755
+ const items = new Array(len);
26756
+ for (let i = 0; i < len; i++) {
26757
+ const value = this.head.value;
26758
+ this.head = this.head.next;
26759
+ items[i] = value;
26760
+ }
26761
+ this.remaining -= len;
26762
+ return items;
26763
+ }
26764
+ takeAll() {
26765
+ return this.takeN(this.remaining);
26766
+ }
26767
+ };
26768
+ const emptyReplayWindow = {
26769
+ remaining: 0,
26770
+ take: () => void 0,
26771
+ takeN: () => [],
26772
+ takeAll: () => []
26773
+ };
25089
26774
 
25090
26775
  //#endregion
25091
26776
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Queue.js
@@ -25188,7 +26873,7 @@ const make$39 = (options) => withFiber$1((fiber$2) => {
25188
26873
  self$1.scheduler = fiber$2.currentScheduler;
25189
26874
  self$1.capacity = options?.capacity ?? Number.POSITIVE_INFINITY;
25190
26875
  self$1.strategy = options?.strategy ?? "suspend";
25191
- self$1.messages = make$41();
26876
+ self$1.messages = make$42();
25192
26877
  self$1.scheduleRunning = false;
25193
26878
  self$1.state = {
25194
26879
  _tag: "Open",
@@ -25267,7 +26952,7 @@ const offer = (self$1, message) => suspend$4(() => {
25267
26952
  }
25268
26953
  return offerRemainingSingle(self$1, message);
25269
26954
  case "sliding":
25270
- take$1(self$1.messages);
26955
+ take$2(self$1.messages);
25271
26956
  append(self$1.messages, message);
25272
26957
  return exitTrue;
25273
26958
  }
@@ -25307,7 +26992,7 @@ const offerUnsafe = (self$1, message) => {
25307
26992
  if (self$1.state._tag !== "Open") return false;
25308
26993
  else if (self$1.messages.length >= self$1.capacity) {
25309
26994
  if (self$1.strategy === "sliding") {
25310
- take$1(self$1.messages);
26995
+ take$2(self$1.messages);
25311
26996
  append(self$1.messages, message);
25312
26997
  return true;
25313
26998
  } else if (self$1.capacity <= 0 && self$1.state.takers.size > 0) {
@@ -25704,14 +27389,14 @@ const take = (self$1) => suspend$4(() => takeUnsafe(self$1) ?? andThen$1(awaitTa
25704
27389
  const takeUnsafe = (self$1) => {
25705
27390
  if (self$1.state._tag === "Done") return self$1.state.exit;
25706
27391
  if (self$1.messages.length > 0) {
25707
- const message = take$1(self$1.messages);
27392
+ const message = take$2(self$1.messages);
25708
27393
  releaseCapacity(self$1);
25709
27394
  return exitSucceed(message);
25710
27395
  } else if (self$1.capacity <= 0 && self$1.state.offers.size > 0) {
25711
27396
  self$1.capacity = 1;
25712
27397
  releaseCapacity(self$1);
25713
27398
  self$1.capacity = 0;
25714
- const message = take$1(self$1.messages);
27399
+ const message = take$2(self$1.messages);
25715
27400
  releaseCapacity(self$1);
25716
27401
  return exitSucceed(message);
25717
27402
  }
@@ -25781,7 +27466,7 @@ const takeBetweenUnsafe = (self$1, min$3, max$3) => {
25781
27466
  self$1.capacity = 1;
25782
27467
  releaseCapacity(self$1);
25783
27468
  self$1.capacity = 0;
25784
- const messages = [take$1(self$1.messages)];
27469
+ const messages = [take$2(self$1.messages)];
25785
27470
  releaseCapacity(self$1);
25786
27471
  return exitSucceed(messages);
25787
27472
  }
@@ -25868,6 +27553,14 @@ const finalize = (self$1, exit$2) => {
25868
27553
  openState.awaiters.clear();
25869
27554
  };
25870
27555
 
27556
+ //#endregion
27557
+ //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Take.js
27558
+ /**
27559
+ * @since 4.0.0
27560
+ * @categor Conversions
27561
+ */
27562
+ const toPull = (take$3) => isExit(take$3) ? isSuccess$2(take$3) ? done(take$3.value) : take$3 : succeed$1(take$3);
27563
+
25871
27564
  //#endregion
25872
27565
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/Channel.js
25873
27566
  /**
@@ -26228,6 +27921,16 @@ const failCause = (cause) => fromPull$1(failCause$2(cause));
26228
27921
  */
26229
27922
  const die = (defect) => failCause(die$2(defect));
26230
27923
  /**
27924
+ * @since 4.0.0
27925
+ * @category constructors
27926
+ */
27927
+ const fromEffectTake = (effect$1) => fromPull$1(succeed$1(flatMap(effect$1, toPull)));
27928
+ /**
27929
+ * @since 4.0.0
27930
+ * @category constructors
27931
+ */
27932
+ const fromPubSubTake$1 = (pubsub) => unwrap$2(map$6(subscribe(pubsub), (sub) => fromEffectTake(take$1(sub))));
27933
+ /**
26231
27934
  * Maps the output of this channel using the specified function.
26232
27935
  *
26233
27936
  * @example
@@ -26371,7 +28074,7 @@ const mapEffectConcurrent = (self$1, f, options) => fromTransformBracket(fnUntra
26371
28074
  trackFiber(fiber$2);
26372
28075
  fiber$2.addObserver(onExit$4);
26373
28076
  return offer(effects, join$1(fiber$2));
26374
- }), forever({ autoYield: false }), catchCause$1((cause) => offer(effects, failCause$3(cause)).pipe(andThen(failCause$1(effects, cause)))), forkIn(forkedScope));
28077
+ }), forever({ autoYield: false }), catchCause$1((cause) => offer(effects, failCause$4(cause)).pipe(andThen(failCause$1(effects, cause)))), forkIn(forkedScope));
26375
28078
  }
26376
28079
  return take(queue);
26377
28080
  }));
@@ -26428,8 +28131,8 @@ const flattenArray = (self$1) => transformPull$1(self$1, (pull) => {
26428
28131
  * @since 4.0.0
26429
28132
  * @category Filtering
26430
28133
  */
26431
- const filterMapEffect$1 = /* @__PURE__ */ dual(2, (self$1, filter$6) => fromTransform$1((upstream, scope$2) => map$6(toTransform(self$1)(upstream, scope$2), (pull) => flatMap(pull, function loop(elem) {
26432
- return flatMap(filter$6(elem), (result$2) => isFail(result$2) ? flatMap(pull, loop) : succeed$1(result$2));
28134
+ const filterMapEffect$1 = /* @__PURE__ */ dual(2, (self$1, filter$7) => fromTransform$1((upstream, scope$2) => map$6(toTransform(self$1)(upstream, scope$2), (pull) => flatMap(pull, function loop(elem) {
28135
+ return flatMap(filter$7(elem), (result$2) => isFail(result$2) ? flatMap(pull, loop) : succeed$1(result$2));
26433
28136
  }))));
26434
28137
  /**
26435
28138
  * Filters arrays of elements emitted by a channel, applying the filter
@@ -26467,14 +28170,14 @@ const filterMapEffect$1 = /* @__PURE__ */ dual(2, (self$1, filter$6) => fromTran
26467
28170
  * @category Filtering
26468
28171
  */
26469
28172
  const filterArray = /* @__PURE__ */ dual(2, (self$1, predicate) => transformPull$1(self$1, (pull) => succeed$1(flatMap(pull, function loop(arr) {
26470
- const filtered = filter$3(arr, predicate);
28173
+ const filtered = filter$4(arr, predicate);
26471
28174
  return isReadonlyArrayNonEmpty(filtered) ? succeed$1(filtered) : flatMap(pull, loop);
26472
28175
  }))));
26473
28176
  /**
26474
28177
  * @since 4.0.0
26475
28178
  * @category Filtering
26476
28179
  */
26477
- const filterMapArrayEffect = /* @__PURE__ */ dual(2, (self$1, filter$6) => filterMapEffect$1(self$1, (arr) => map$6(filterMap(arr, filter$6), (passes) => isReadonlyArrayNonEmpty(passes) ? passes : failVoid)));
28180
+ const filterMapArrayEffect = /* @__PURE__ */ dual(2, (self$1, filter$7) => filterMapEffect$1(self$1, (arr) => map$6(filterMap(arr, filter$7), (passes) => isReadonlyArrayNonEmpty(passes) ? passes : failVoid)));
26478
28181
  /**
26479
28182
  * Catches any cause of failure from the channel and allows recovery by
26480
28183
  * creating a new channel based on the caught cause.
@@ -26517,7 +28220,7 @@ const catchCause = /* @__PURE__ */ dual(2, (self$1, f) => fromTransform$1((upstr
26517
28220
  if (isDoneCause(cause)) return failCause$2(cause);
26518
28221
  const toClose = forkedScope;
26519
28222
  forkedScope = forkUnsafe(scope$2);
26520
- return close(toClose, failCause$3(cause)).pipe(andThen(toTransform(f(cause))(upstream, forkedScope)), flatMap((childPull) => {
28223
+ return close(toClose, failCause$4(cause)).pipe(andThen(toTransform(f(cause))(upstream, forkedScope)), flatMap((childPull) => {
26521
28224
  currentPull = childPull;
26522
28225
  return childPull;
26523
28226
  }));
@@ -26532,8 +28235,8 @@ const catchCause = /* @__PURE__ */ dual(2, (self$1, f) => fromTransform$1((upstr
26532
28235
  * @since 4.0.0
26533
28236
  * @category Error handling
26534
28237
  */
26535
- const catchCauseFilter = /* @__PURE__ */ dual(3, (self$1, filter$6, f) => catchCause(self$1, (cause) => {
26536
- const eb = filter$6(cause);
28238
+ const catchCauseFilter = /* @__PURE__ */ dual(3, (self$1, filter$7, f) => catchCause(self$1, (cause) => {
28239
+ const eb = filter$7(cause);
26537
28240
  return !isFail(eb) ? f(eb, cause) : failCause(eb.fail);
26538
28241
  }));
26539
28242
  const catch_ = /* @__PURE__ */ dual(2, (self$1, f) => catchCauseFilter(self$1, filterError, f));
@@ -26572,6 +28275,28 @@ const mapError$1 = /* @__PURE__ */ dual(2, (self$1, f) => catch_(self$1, (err) =
26572
28275
  */
26573
28276
  const orDie$1 = (self$1) => catch_(self$1, die);
26574
28277
  /**
28278
+ * Returns a new channel that retries this channel according to the specified
28279
+ * schedule whenever it fails.
28280
+ *
28281
+ * @since 4.0.0
28282
+ * @category utils
28283
+ */
28284
+ const retry$2 = /* @__PURE__ */ dual(2, (self$1, schedule) => suspend$2(() => {
28285
+ let step = void 0;
28286
+ let meta = CurrentMetadata.defaultValue();
28287
+ const withReset = onFirst(provideServiceEffect(self$1, CurrentMetadata, sync(() => meta)), () => {
28288
+ step = void 0;
28289
+ return void_$1;
28290
+ });
28291
+ const resolvedSchedule = typeof schedule === "function" ? schedule(identity) : schedule;
28292
+ const loop = catch_(withReset, fnUntraced(function* (error$1) {
28293
+ if (!step) step = yield* toStepWithMetadata(resolvedSchedule);
28294
+ meta = yield* step(error$1);
28295
+ return loop;
28296
+ }, (effect$1, error$1) => catchDone(effect$1, () => succeed$1(fail$2(error$1))), unwrap$2));
28297
+ return loop;
28298
+ }));
28299
+ /**
26575
28300
  * Returns a new channel, which is the merge of this channel and the specified
26576
28301
  * channel.
26577
28302
  *
@@ -26784,12 +28509,34 @@ const bufferArray = /* @__PURE__ */ dual(2, (self$1, options) => fromTransform$1
26784
28509
  * @category utils
26785
28510
  */
26786
28511
  const onExit$1 = /* @__PURE__ */ dual(2, (self$1, finalizer) => fromTransformBracket((upstream, scope$2, forkedScope) => addFinalizerExit(forkedScope, finalizer).pipe(andThen(toTransform(self$1)(upstream, scope$2)))));
28512
+ /**
28513
+ * @since 4.0.0
28514
+ * @category utils
28515
+ */
28516
+ const onFirst = /* @__PURE__ */ dual(2, (self$1, onFirst$1) => transformPull$1(self$1, (pull) => sync(() => {
28517
+ let isFirst = true;
28518
+ const pullFirst = tap(pull, (element) => {
28519
+ isFirst = false;
28520
+ return onFirst$1(element);
28521
+ });
28522
+ return suspend$3(() => isFirst ? pullFirst : pull);
28523
+ })));
26787
28524
  const runWith$1 = (self$1, f, onHalt) => suspend$3(() => {
26788
28525
  const scope$2 = makeUnsafe$6();
26789
28526
  const makePull = toTransform(self$1)(done(), scope$2);
26790
28527
  return catchDone(flatMap(makePull, f), onHalt ? onHalt : succeed$1).pipe(onExit$2((exit$2) => close(scope$2, exit$2)));
26791
28528
  });
26792
28529
  /**
28530
+ * @since 4.0.0
28531
+ * @category Services
28532
+ */
28533
+ const provideService = /* @__PURE__ */ dual(3, (self$1, key, service$2) => fromTransform$1((upstream, scope$2) => map$6(provideService$1(toTransform(self$1)(upstream, scope$2), key, service$2), provideService$1(key, service$2))));
28534
+ /**
28535
+ * @since 4.0.0
28536
+ * @category Services
28537
+ */
28538
+ const provideServiceEffect = /* @__PURE__ */ dual(3, (self$1, key, service$2) => fromTransform$1((upstream, scope$2) => flatMap(service$2, (s) => toTransform(provideService(self$1, key, s))(upstream, scope$2))));
28539
+ /**
26793
28540
  * Runs a channel and applies an effect to each output element.
26794
28541
  *
26795
28542
  * @example
@@ -26875,6 +28622,18 @@ const runFold = /* @__PURE__ */ dual(3, (self$1, initial, f) => suspend$3(() =>
26875
28622
  * @category Destructors
26876
28623
  */
26877
28624
  const toPullScoped = (self$1, scope$2) => toTransform(self$1)(done(), scope$2);
28625
+ const makePubSub = (options) => acquireRelease(options.capacity === "unbounded" ? unbounded(options) : options.strategy === "dropping" ? dropping(options) : options.strategy === "sliding" ? sliding(options) : bounded$1(options), shutdown$1);
28626
+ /**
28627
+ * Converts a channel to a PubSub for concurrent consumption.
28628
+ *
28629
+ * @since 4.0.0
28630
+ * @category Destructors
28631
+ */
28632
+ const toPubSubTake$1 = /* @__PURE__ */ dual(2, /* @__PURE__ */ fnUntraced(function* (self$1, options) {
28633
+ const pubsub = yield* makePubSub(options);
28634
+ yield* runForEach$1(self$1, (value) => publish(pubsub, value)).pipe(onExit$2((exit$2) => publish(pubsub, exit$2)), forkScoped);
28635
+ return pubsub;
28636
+ }));
26878
28637
 
26879
28638
  //#endregion
26880
28639
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/internal/stream.js
@@ -27500,7 +29259,7 @@ const makeUnsafe$3 = (options) => ({
27500
29259
  */
27501
29260
  const make$37 = (options) => withFiber((fiber$2) => {
27502
29261
  const services$2 = fiber$2.services;
27503
- const scope$2 = get$7(services$2, Scope);
29262
+ const scope$2 = get$8(services$2, Scope);
27504
29263
  const self$1 = makeUnsafe$3({
27505
29264
  lookup: options.lookup,
27506
29265
  services: services$2,
@@ -27668,7 +29427,7 @@ var RcRefImpl = class {
27668
29427
  /** @internal */
27669
29428
  const make$36 = (options) => withFiber((fiber$2) => {
27670
29429
  const services$2 = fiber$2.services;
27671
- const scope$2 = get$7(services$2, Scope);
29430
+ const scope$2 = get$8(services$2, Scope);
27672
29431
  const ref = new RcRefImpl(options.acquire, services$2, scope$2, options.idleTimeToLive ? fromDurationInputUnsafe(options.idleTimeToLive) : void 0);
27673
29432
  return as(addFinalizerExit(scope$2, () => {
27674
29433
  const close$1 = ref.state._tag === "Acquired" ? close(ref.state.scope, void_$2) : void_$1;
@@ -27873,6 +29632,35 @@ const DefaultChunkSize = DefaultChunkSize$1;
27873
29632
  */
27874
29633
  const fromChannel = fromChannel$2;
27875
29634
  /**
29635
+ * Creates a stream from an effect producing a value of type `A`, which is
29636
+ * repeated using the specified schedule.
29637
+ *
29638
+ * **Previously Known As**
29639
+ *
29640
+ * This API replaces the following from Effect 3.x:
29641
+ *
29642
+ * - `Stream.repeatEffectWithSchedule`
29643
+ *
29644
+ * @since 2.0.0
29645
+ * @category constructors
29646
+ */
29647
+ const fromEffectSchedule = (effect$1, schedule) => fromPull(gen(function* () {
29648
+ const step = yield* toStepWithMetadata(schedule);
29649
+ let s = yield* provideService$1(effect$1, CurrentMetadata, CurrentMetadata.defaultValue());
29650
+ let initial = true;
29651
+ const pull = suspend$3(() => step(s)).pipe(flatMap((meta) => provideService$1(effect$1, CurrentMetadata, meta)), map$6((next) => {
29652
+ s = next;
29653
+ return of(next);
29654
+ }));
29655
+ return suspend$3(() => {
29656
+ if (initial) {
29657
+ initial = false;
29658
+ return succeed$1(of(s));
29659
+ }
29660
+ return pull;
29661
+ });
29662
+ }));
29663
+ /**
27876
29664
  * Creates a stream from a pull effect.
27877
29665
  *
27878
29666
  * A pull effect is a low-level representation of a stream that can be used
@@ -28032,6 +29820,11 @@ const suspend$1 = (stream$3) => fromChannel(suspend$2(() => stream$3().channel))
28032
29820
  */
28033
29821
  const fail$1 = (error$1) => fromChannel(fail$2(error$1));
28034
29822
  /**
29823
+ * @since 4.0.0
29824
+ * @category constructors
29825
+ */
29826
+ const fromPubSubTake = (pubsub) => fromChannel(fromPubSubTake$1(pubsub));
29827
+ /**
28035
29828
  * Creates a stream from a ReadableStream.
28036
29829
  *
28037
29830
  * @example
@@ -28201,7 +29994,7 @@ const filter = /* @__PURE__ */ dual(2, (self$1, predicate) => fromChannel(filter
28201
29994
  * @since 2.0.0
28202
29995
  * @category Filtering
28203
29996
  */
28204
- const filterMapEffect = /* @__PURE__ */ dual(2, (self$1, filter$6) => fromChannel(filterMapArrayEffect(toChannel(self$1), filter$6)));
29997
+ const filterMapEffect = /* @__PURE__ */ dual(2, (self$1, filter$7) => fromChannel(filterMapArrayEffect(toChannel(self$1), filter$7)));
28205
29998
  /**
28206
29999
  * Allows a faster producer to progress independently of a slower consumer by
28207
30000
  * buffering up to `capacity` elements in a queue.
@@ -28239,6 +30032,19 @@ const mapError = /* @__PURE__ */ dual(2, (self$1, f) => fromChannel(mapError$1(s
28239
30032
  */
28240
30033
  const orDie = (self$1) => fromChannel(orDie$1(self$1.channel));
28241
30034
  /**
30035
+ * When the stream fails, retry it according to the given schedule
30036
+ *
30037
+ * This retries the entire stream, so will re-execute all of the stream's
30038
+ * acquire operations.
30039
+ *
30040
+ * The schedule is reset as soon as the first element passes through the
30041
+ * stream again.
30042
+ *
30043
+ * @since 2.0.0
30044
+ * @category Error handling
30045
+ */
30046
+ const retry$1 = /* @__PURE__ */ dual(2, (self$1, policy) => fromChannel(retry$2(self$1.channel, policy)));
30047
+ /**
28242
30048
  * Applies the Sink transducer to the stream and emits its outputs.
28243
30049
  *
28244
30050
  * @since 2.0.0
@@ -28265,6 +30071,19 @@ const transduce = /* @__PURE__ */ dual(2, (self$1, sink) => transformPull(self$1
28265
30071
  return suspend$3(() => done$3 ? done$3 : pull);
28266
30072
  })));
28267
30073
  /**
30074
+ * @since 2.0.0
30075
+ * @category Broadcast
30076
+ */
30077
+ const broadcast = /* @__PURE__ */ dual(2, (self$1, options) => map$6(toPubSubTake(self$1, options), fromPubSubTake));
30078
+ /**
30079
+ * @since 2.0.0
30080
+ * @category Broadcast
30081
+ */
30082
+ const share = /* @__PURE__ */ dual(2, (self$1, options) => map$6(make$35({
30083
+ acquire: broadcast(self$1, options),
30084
+ idleTimeToLive: options.idleTimeToLive
30085
+ }), (ref) => unwrap(get$3(ref))));
30086
+ /**
28268
30087
  * Pipes all the values from this stream through the provided channel.
28269
30088
  *
28270
30089
  * The channel processes chunks of values (NonEmptyReadonlyArray) and can transform both
@@ -28574,6 +30393,11 @@ const toReadableStreamWith = /* @__PURE__ */ dual((args$1) => isStream(args$1[0]
28574
30393
  * @category destructors
28575
30394
  */
28576
30395
  const toReadableStreamEffect = /* @__PURE__ */ dual((args$1) => isStream(args$1[0]), (self$1, options) => map$6(services(), (context) => toReadableStreamWith(self$1, context, options)));
30396
+ /**
30397
+ * @since 4.0.0
30398
+ * @category destructors
30399
+ */
30400
+ const toPubSubTake = /* @__PURE__ */ dual(2, (self$1, options) => toPubSubTake$1(self$1.channel, options));
28577
30401
 
28578
30402
  //#endregion
28579
30403
  //#region node_modules/.pnpm/effect@https+++pkg.pr.new+Effect-TS+effect-smol+effect@53d2c5b_bb57938f6a2db8d6e7529a5713147df2/node_modules/effect/dist/FileSystem.js
@@ -29272,15 +31096,15 @@ const Proto$15 = {
29272
31096
  * @category Constructors
29273
31097
  * @since 4.0.0
29274
31098
  */
29275
- function make$33(get$8, mapInput$1, prefix$2) {
31099
+ function make$33(get$9, mapInput$1, prefix$2) {
29276
31100
  const self$1 = Object.create(Proto$15);
29277
- self$1.get = get$8;
31101
+ self$1.get = get$9;
29278
31102
  self$1.mapInput = mapInput$1;
29279
31103
  self$1.prefix = prefix$2;
29280
31104
  self$1.load = (path$2) => {
29281
31105
  if (mapInput$1) path$2 = mapInput$1(path$2);
29282
31106
  if (prefix$2) path$2 = [...prefix$2, ...path$2];
29283
- return get$8(path$2);
31107
+ return get$9(path$2);
29284
31108
  };
29285
31109
  return self$1;
29286
31110
  }
@@ -30060,7 +31884,7 @@ function fromASTs(asts) {
30060
31884
  const schemas = map$10(asts, (ast) => recur$2(ast));
30061
31885
  return {
30062
31886
  representations: map$10(schemas, compact),
30063
- references: map$11(filter$4(references, (_, k) => !isCompactable(k)), compact)
31887
+ references: map$11(filter$5(references, (_, k) => !isCompactable(k)), compact)
30064
31888
  };
30065
31889
  function isCompactable($ref) {
30066
31890
  return !usedReferences.has($ref);
@@ -30327,7 +32151,7 @@ const fromASTBlacklist = /* @__PURE__ */ new Set([
30327
32151
  ]);
30328
32152
  function fromASTAnnotations(annotations$1) {
30329
32153
  if (annotations$1 !== void 0) {
30330
- const filtered = filter$4(annotations$1, (_, k) => !fromASTBlacklist.has(k));
32154
+ const filtered = filter$5(annotations$1, (_, k) => !fromASTBlacklist.has(k));
30331
32155
  if (!isEmptyRecord(filtered)) return { annotations: filtered };
30332
32156
  }
30333
32157
  }
@@ -30539,11 +32363,11 @@ function toJsonSchemaMultiDocument(multiDocument, options) {
30539
32363
  }
30540
32364
  }
30541
32365
  }
30542
- function filterToJsonSchema(filter$6, type) {
30543
- const meta = filter$6.meta;
32366
+ function filterToJsonSchema(filter$7, type) {
32367
+ const meta = filter$7.meta;
30544
32368
  if (!meta) return void 0;
30545
32369
  let out = on$1(meta);
30546
- const a = collectJsonSchemaAnnotations(filter$6.annotations);
32370
+ const a = collectJsonSchemaAnnotations(filter$7.annotations);
30547
32371
  if (a) out = {
30548
32372
  ...out,
30549
32373
  ...a
@@ -31159,7 +32983,7 @@ function suspend(f) {
31159
32983
  }
31160
32984
  function decodeTo(to, transformation) {
31161
32985
  return (from) => {
31162
- return make$31(decodeTo$1(from.ast, to.ast, transformation ? make$42(transformation) : passthrough()), {
32986
+ return make$31(decodeTo$1(from.ast, to.ast, transformation ? make$43(transformation) : passthrough()), {
31163
32987
  from,
31164
32988
  to
31165
32989
  });
@@ -31202,7 +33026,7 @@ function instanceOf(constructor, annotations$1) {
31202
33026
  */
31203
33027
  function link$1() {
31204
33028
  return (encodeTo, transformation) => {
31205
- return new Link(encodeTo.ast, make$42(transformation));
33029
+ return new Link(encodeTo.ast, make$43(transformation));
31206
33030
  };
31207
33031
  }
31208
33032
  /**
@@ -31428,7 +33252,7 @@ function makeIsBetween(deriveOptions) {
31428
33252
  * @since 4.0.0
31429
33253
  */
31430
33254
  const isGreaterThan = /* @__PURE__ */ makeIsGreaterThan({
31431
- order: Number$4,
33255
+ order: Number$5,
31432
33256
  annotate: (exclusiveMinimum) => ({
31433
33257
  meta: {
31434
33258
  _tag: "isGreaterThan",
@@ -31457,7 +33281,7 @@ const isGreaterThan = /* @__PURE__ */ makeIsGreaterThan({
31457
33281
  * @since 4.0.0
31458
33282
  */
31459
33283
  const isGreaterThanOrEqualTo = /* @__PURE__ */ makeIsGreaterThanOrEqualTo({
31460
- order: Number$4,
33284
+ order: Number$5,
31461
33285
  annotate: (minimum) => ({
31462
33286
  meta: {
31463
33287
  _tag: "isGreaterThanOrEqualTo",
@@ -31483,7 +33307,7 @@ const isGreaterThanOrEqualTo = /* @__PURE__ */ makeIsGreaterThanOrEqualTo({
31483
33307
  * @since 4.0.0
31484
33308
  */
31485
33309
  const isLessThan = /* @__PURE__ */ makeIsLessThan({
31486
- order: Number$4,
33310
+ order: Number$5,
31487
33311
  annotate: (exclusiveMaximum) => ({
31488
33312
  meta: {
31489
33313
  _tag: "isLessThan",
@@ -31512,7 +33336,7 @@ const isLessThan = /* @__PURE__ */ makeIsLessThan({
31512
33336
  * @since 4.0.0
31513
33337
  */
31514
33338
  const isLessThanOrEqualTo = /* @__PURE__ */ makeIsLessThanOrEqualTo({
31515
- order: Number$4,
33339
+ order: Number$5,
31516
33340
  annotate: (maximum) => ({
31517
33341
  meta: {
31518
33342
  _tag: "isLessThanOrEqualTo",
@@ -31540,7 +33364,7 @@ const isLessThanOrEqualTo = /* @__PURE__ */ makeIsLessThanOrEqualTo({
31540
33364
  * @since 4.0.0
31541
33365
  */
31542
33366
  const isBetween = /* @__PURE__ */ makeIsBetween({
31543
- order: Number$4,
33367
+ order: Number$5,
31544
33368
  annotate: (options) => {
31545
33369
  return {
31546
33370
  meta: {
@@ -33470,7 +35294,7 @@ var require_ini = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
33470
35294
  if (Array.isArray(p[key])) p[key].push(value);
33471
35295
  else p[key] = value;
33472
35296
  }
33473
- const remove$3 = [];
35297
+ const remove$4 = [];
33474
35298
  for (const k of Object.keys(out)) {
33475
35299
  if (!hasOwnProperty.call(out, k) || typeof out[k] !== "object" || Array.isArray(out[k])) continue;
33476
35300
  const parts$1 = splitSections(k, ".");
@@ -33484,9 +35308,9 @@ var require_ini = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
33484
35308
  }
33485
35309
  if (p === out && nl === l) continue;
33486
35310
  p[nl] = out[k];
33487
- remove$3.push(k);
35311
+ remove$4.push(k);
33488
35312
  }
33489
- for (const del of remove$3) delete out[del];
35313
+ for (const del of remove$4) delete out[del];
33490
35314
  return out;
33491
35315
  };
33492
35316
  const isQuoted = (val) => {
@@ -39900,12 +41724,12 @@ var require_set = /* @__PURE__ */ __commonJSMin$1(((exports) => {
39900
41724
  }
39901
41725
  static from(schema$1, iterable, ctx) {
39902
41726
  const { replacer } = ctx;
39903
- const set$6 = new this(schema$1);
41727
+ const set$7 = new this(schema$1);
39904
41728
  if (iterable && Symbol.iterator in Object(iterable)) for (let value of iterable) {
39905
41729
  if (typeof replacer === "function") value = replacer.call(iterable, value, value);
39906
- set$6.items.push(Pair.createPair(value, null, ctx));
41730
+ set$7.items.push(Pair.createPair(value, null, ctx));
39907
41731
  }
39908
- return set$6;
41732
+ return set$7;
39909
41733
  }
39910
41734
  };
39911
41735
  YAMLSet.tag = "tag:yaml.org,2002:set";
@@ -44641,11 +46465,11 @@ const renderAutoCompleteFilter = (state, options) => {
44641
46465
  };
44642
46466
  const renderAutoCompleteOutput = (state, leadingSymbol, trailingSymbol, options) => {
44643
46467
  const prefix$2 = leadingSymbol + " ";
44644
- const filter$6 = renderAutoCompleteFilter(state, options);
46468
+ const filter$7 = renderAutoCompleteFilter(state, options);
44645
46469
  return match$5(options.message.split(NEWLINE_REGEXP), {
44646
- onEmpty: () => prefix$2 + " " + trailingSymbol + " " + filter$6,
46470
+ onEmpty: () => prefix$2 + " " + trailingSymbol + " " + filter$7,
44647
46471
  onNonEmpty: (promptLines) => {
44648
- return prefix$2 + map$10(promptLines, (line) => annotateLine(line)).join("\n") + " " + trailingSymbol + " " + filter$6;
46472
+ return prefix$2 + map$10(promptLines, (line) => annotateLine(line)).join("\n") + " " + trailingSymbol + " " + filter$7;
44649
46473
  }
44650
46474
  });
44651
46475
  };
@@ -47533,7 +49357,7 @@ const withSubcommands = /* @__PURE__ */ dual(2, (self$1, subcommands) => {
47533
49357
  if (internal._subcommand) {
47534
49358
  const child = byName.get(internal._subcommand.name);
47535
49359
  if (!child) return yield* new ShowHelp({ commandPath: path$2 });
47536
- return yield* child.handle(internal._subcommand.result, [...path$2, child.name]).pipe(provideService(impl.service, input));
49360
+ return yield* child.handle(internal._subcommand.result, [...path$2, child.name]).pipe(provideService$1(impl.service, input));
47537
49361
  }
47538
49362
  return yield* impl.handle(input, path$2);
47539
49363
  });
@@ -47732,7 +49556,7 @@ const runWith = (command, config) => {
47732
49556
  if (parseResult._tag === "Failure") return yield* showHelp(command, commandPath, [parseResult.failure]);
47733
49557
  const parsed = parseResult.success;
47734
49558
  const program = commandImpl.handle(parsed, [command.name]);
47735
- yield* logLevel !== void 0 ? provideService(program, MinimumLogLevel, logLevel) : program;
49559
+ yield* logLevel !== void 0 ? provideService$1(program, MinimumLogLevel, logLevel) : program;
47736
49560
  }, catch_$1((error$1) => isCliError(error$1) && error$1._tag === "ShowHelp" ? showHelp(command, error$1.commandPath) : fail$4(error$1)));
47737
49561
  };
47738
49562
 
@@ -48377,12 +50201,12 @@ const makeUnsafe = (backing, deferred) => {
48377
50201
  * @since 2.0.0
48378
50202
  * @category constructors
48379
50203
  */
48380
- const make$25 = () => acquireRelease(sync(() => makeUnsafe(/* @__PURE__ */ new Set(), makeUnsafe$7())), (set$6) => suspend$3(() => {
48381
- const state = set$6.state;
50204
+ const make$25 = () => acquireRelease(sync(() => makeUnsafe(/* @__PURE__ */ new Set(), makeUnsafe$7())), (set$7) => suspend$3(() => {
50205
+ const state = set$7.state;
48382
50206
  if (state._tag === "Closed") return void_$1;
48383
- set$6.state = { _tag: "Closed" };
50207
+ set$7.state = { _tag: "Closed" };
48384
50208
  const fibers = state.backing;
48385
- return interruptAll(fibers).pipe(into(set$6.deferred));
50209
+ return interruptAll(fibers).pipe(into(set$7.deferred));
48386
50210
  }));
48387
50211
  const internalFiberId = -1;
48388
50212
  const isInternalInterruption = /* @__PURE__ */ toPredicate(/* @__PURE__ */ compose(filterInterruptors, /* @__PURE__ */ has$2(internalFiberId)));
@@ -49125,20 +50949,20 @@ const toSchemaStore = (self$1, schema$1) => {
49125
50949
  const jsonSchema = fromJsonString(serializer);
49126
50950
  const decode$2 = decodeEffect(jsonSchema);
49127
50951
  const encode$2 = encodeEffect(jsonSchema);
49128
- const get$8 = (key) => flatMap(self$1.get(key), match$9({
50952
+ const get$9 = (key) => flatMap(self$1.get(key), match$9({
49129
50953
  onUndefined: () => succeedNone,
49130
50954
  onDefined: (value) => asSome(decode$2(value))
49131
50955
  }));
49132
- const set$6 = (key, value) => flatMap(encode$2(value), (json) => self$1.set(key, json));
49133
- const modify$1 = (key, f) => flatMap(get$8(key), (o) => {
50956
+ const set$7 = (key, value) => flatMap(encode$2(value), (json) => self$1.set(key, json));
50957
+ const modify$1 = (key, f) => flatMap(get$9(key), (o) => {
49134
50958
  if (isNone(o)) return succeedNone;
49135
50959
  const newValue = f(o.value);
49136
- return as(set$6(key, newValue), some(newValue));
50960
+ return as(set$7(key, newValue), some(newValue));
49137
50961
  });
49138
50962
  return {
49139
50963
  [SchemaStoreTypeId]: SchemaStoreTypeId,
49140
- get: get$8,
49141
- set: set$6,
50964
+ get: get$9,
50965
+ set: set$7,
49142
50966
  modify: modify$1,
49143
50967
  remove: self$1.remove,
49144
50968
  clear: self$1.clear,
@@ -50810,7 +52634,7 @@ const makePipedCommand = (left, right, options = {}) => Object.assign(Object.cre
50810
52634
  * @since 4.0.0
50811
52635
  * @category Constructors
50812
52636
  */
50813
- const make$21 = function make$54(...args$1) {
52637
+ const make$21 = function make$55(...args$1) {
50814
52638
  if (isTemplateString(args$1[0])) {
50815
52639
  const [templates, ...expressions] = args$1;
50816
52640
  const tokens = parseTemplates(templates, expressions);
@@ -51257,7 +53081,7 @@ const toUint8Array = (readable, options) => map$6(toArrayBuffer(readable, option
51257
53081
  const readableToPullUnsafe = (options) => {
51258
53082
  const readable = options.readable;
51259
53083
  const closeOnDone = options.closeOnDone ?? true;
51260
- const exit$2 = options.exit ?? make$40(void 0);
53084
+ const exit$2 = options.exit ?? make$41(void 0);
51261
53085
  const latch = makeLatchUnsafe(false);
51262
53086
  function onReadable() {
51263
53087
  latch.openUnsafe();
@@ -52105,7 +53929,7 @@ const TypeId$14 = /* @__PURE__ */ Symbol.for("~effect/http/Headers");
52105
53929
  const Proto$5 = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(null), BaseProto, {
52106
53930
  [TypeId$14]: TypeId$14,
52107
53931
  [symbolRedactable](context) {
52108
- return redact(this, get$7(context, CurrentRedactedNames));
53932
+ return redact(this, get$8(context, CurrentRedactedNames));
52109
53933
  },
52110
53934
  toJSON() {
52111
53935
  return redact$1(this);
@@ -52193,8 +54017,8 @@ const redact = /* @__PURE__ */ dual(2, (self$1, key) => {
52193
54017
  const modify$1 = (key$1) => {
52194
54018
  if (typeof key$1 === "string") {
52195
54019
  const k = key$1.toLowerCase();
52196
- if (k in self$1) out[k] = make$44(self$1[k]);
52197
- } else for (const name in self$1) if (key$1.test(name)) out[name] = make$44(self$1[name]);
54020
+ if (k in self$1) out[k] = make$45(self$1[k]);
54021
+ } else for (const name in self$1) if (key$1.test(name)) out[name] = make$45(self$1[name]);
52198
54022
  };
52199
54023
  if (Array.isArray(key)) for (let i = 0; i < key.length; i++) modify$1(key[i]);
52200
54024
  else modify$1(key);
@@ -52417,7 +54241,7 @@ const fromInputNested = (input) => {
52417
54241
  * @since 4.0.0
52418
54242
  * @category Equivalence
52419
54243
  */
52420
- const Equivalence = /* @__PURE__ */ make$51((a, b) => arrayEquivalence(a.params, b.params));
54244
+ const Equivalence = /* @__PURE__ */ make$52((a, b) => arrayEquivalence(a.params, b.params));
52421
54245
  const arrayEquivalence = /* @__PURE__ */ makeEquivalence$1(/* @__PURE__ */ makeEquivalence$3([/* @__PURE__ */ strictEqual(), /* @__PURE__ */ strictEqual()]));
52422
54246
  /**
52423
54247
  * @since 4.0.0
@@ -53239,7 +55063,7 @@ const retryTransient = /* @__PURE__ */ dual(2, (self$1, options) => {
53239
55063
  schedule: passthroughSchedule,
53240
55064
  times,
53241
55065
  while: isTransientResponse
53242
- }), mode === "response-only" ? identity : retry$1({
55066
+ }), mode === "response-only" ? identity : retry$3({
53243
55067
  while: isOnlySchedule || options.while === void 0 ? isTransientError : or(isTransientError, options.while),
53244
55068
  schedule,
53245
55069
  times
@@ -54523,7 +56347,7 @@ const fromWebSocket = (acquire, options) => withFiber((fiber$2) => {
54523
56347
  const runRaw = (handler$1, opts) => scopedWith(fnUntraced(function* (scope$2) {
54524
56348
  const fiberSet = yield* make$25().pipe(provide$4(scope$2));
54525
56349
  const ws = yield* provide$4(acquire, scope$2);
54526
- const run$8 = yield* provideService(runtime(fiberSet)(), WebSocket$1, ws);
56350
+ const run$8 = yield* provideService$1(runtime(fiberSet)(), WebSocket$1, ws);
54527
56351
  let open$1 = false;
54528
56352
  function onMessage(event) {
54529
56353
  if (event.data instanceof Blob) return promise(() => event.data.arrayBuffer()).pipe(andThen((buffer$1) => handler$1(new Uint8Array(buffer$1))), run$8);
@@ -55529,7 +57353,7 @@ var MultipartError = class MultipartError extends TaggedError("MultipartError")
55529
57353
  * @category Config
55530
57354
  */
55531
57355
  const makeConfig = (headers) => withFiber((fiber$2) => {
55532
- const mimeTypes = get$7(fiber$2.services, FieldMimeTypes);
57356
+ const mimeTypes = get$8(fiber$2.services, FieldMimeTypes);
55533
57357
  return succeed$1({
55534
57358
  headers,
55535
57359
  maxParts: fiber$2.getRef(MaxParts),
@@ -55578,7 +57402,7 @@ const makeChannel = (headers) => fromTransform$1((upstream) => map$6(makeConfig(
55578
57402
  return void_$1;
55579
57403
  }), catchCause$1((cause) => {
55580
57404
  if (isDoneCause(cause)) parser.end();
55581
- else exit$2 = some(failCause$3(cause));
57405
+ else exit$2 = some(failCause$4(cause));
55582
57406
  return void_$1;
55583
57407
  }));
55584
57408
  return pump.pipe(flatMap(function loop() {
@@ -56537,7 +58361,7 @@ var MiddlewareImpl = class MiddlewareImpl {
56537
58361
  const stack = [context.mapUnsafe.get(fnContextKey)];
56538
58362
  if (this.dependencies) {
56539
58363
  const memoMap = yield* CurrentMemoMap;
56540
- const scope$2 = get$7(context, Scope);
58364
+ const scope$2 = get$8(context, Scope);
56541
58365
  const depsContext = yield* buildWithMemoMap(this.dependencies, memoMap, scope$2);
56542
58366
  stack.push(...getMiddleware(depsContext));
56543
58367
  }
@@ -61573,8 +63397,8 @@ var Settings = class extends Service()("lalph/Settings", { make: gen(function* (
61573
63397
  },
61574
63398
  capacity: Number.MAX_SAFE_INTEGER
61575
63399
  });
61576
- const get$8 = (setting) => get$2(cache, setting);
61577
- const set$6 = (setting, value) => {
63400
+ const get$9 = (setting) => get$2(cache, setting);
63401
+ const set$7 = (setting, value) => {
61578
63402
  const s = toSchemaStore(store, setting.schema);
61579
63403
  const setCache = set$3(cache, setting, value);
61580
63404
  const update = match$7(value, {
@@ -61584,8 +63408,8 @@ var Settings = class extends Service()("lalph/Settings", { make: gen(function* (
61584
63408
  return andThen(update, setCache);
61585
63409
  };
61586
63410
  return {
61587
- get: get$8,
61588
- set: set$6
63411
+ get: get$9,
63412
+ set: set$7
61589
63413
  };
61590
63414
  }) }) {
61591
63415
  static layer = effect(this, this.make).pipe(provide$3(layerKvs));
@@ -61620,8 +63444,7 @@ var PrdIssue = class PrdIssue extends Class("PrdIssue")({
61620
63444
  "done"
61621
63445
  ]).annotate({ description: "The state of the issue." }),
61622
63446
  blockedBy: Array$1(String$1).annotate({ description: "An array of issue IDs that block this issue. These issues must be completed before this issue can be worked on." }),
61623
- autoMerge: Boolean$2.annotate({ description: "Whether the issue should be auto-merged when complete. Read-only field" }),
61624
- githubPrNumber: NullOr(Finite).annotate({ description: "The created or updated Github pull request number for this task." })
63447
+ autoMerge: Boolean$2.annotate({ description: "Whether the issue should be auto-merged when complete. Read-only field" })
61625
63448
  }) {
61626
63449
  static Array = Array$1(this);
61627
63450
  static ArrayFromJson = toCodecJson(this.Array);
@@ -61641,12 +63464,6 @@ var PrdIssue = class PrdIssue extends Class("PrdIssue")({
61641
63464
  isChangedComparedTo(issue) {
61642
63465
  return this.title !== issue.title || this.description !== issue.description || this.state !== issue.state || !makeEquivalence$1(asEquivalence())(this.blockedBy, issue.blockedBy);
61643
63466
  }
61644
- withGithubPrNumber(prNumber) {
61645
- return new PrdIssue({
61646
- ...this,
61647
- githubPrNumber: prNumber
61648
- });
61649
- }
61650
63467
  };
61651
63468
 
61652
63469
  //#endregion
@@ -127133,11 +128950,11 @@ var UpdateNotificationCategoryChannelSubscriptionMutation = class extends Reques
127133
128950
  * @param subscribe - required subscribe to pass to updateNotificationCategoryChannelSubscription
127134
128951
  * @returns parsed response from UpdateNotificationCategoryChannelSubscriptionMutation
127135
128952
  */
127136
- async fetch(category, channel, subscribe) {
128953
+ async fetch(category, channel, subscribe$1) {
127137
128954
  const data = (await this._request(UpdateNotificationCategoryChannelSubscriptionDocument.toString(), {
127138
128955
  category,
127139
128956
  channel,
127140
- subscribe
128957
+ subscribe: subscribe$1
127141
128958
  })).notificationCategoryChannelSubscriptionUpdate;
127142
128959
  return new UserSettingsPayload(this._request, data);
127143
128960
  }
@@ -134692,8 +136509,8 @@ var LinearSdk = class extends Request$1 {
134692
136509
  * @param subscribe - required subscribe to pass to updateNotificationCategoryChannelSubscription
134693
136510
  * @returns UserSettingsPayload
134694
136511
  */
134695
- updateNotificationCategoryChannelSubscription(category, channel, subscribe) {
134696
- return new UpdateNotificationCategoryChannelSubscriptionMutation(this._request).fetch(category, channel, subscribe);
136512
+ updateNotificationCategoryChannelSubscription(category, channel, subscribe$1) {
136513
+ return new UpdateNotificationCategoryChannelSubscriptionMutation(this._request).fetch(category, channel, subscribe$1);
134697
136514
  }
134698
136515
  /**
134699
136516
  * Marks notification and all related notifications as read.
@@ -135730,7 +137547,7 @@ var TokenManager$1 = class extends Service()("lalph/Linear/TokenManager", { make
135730
137547
  const tokenStore = toSchemaStore(kvs, AccessToken$1);
135731
137548
  const httpClient = (yield* HttpClient).pipe(filterStatusOk, retryTransient({ schedule: spaced(1e3) }));
135732
137549
  let currentToken = yield* orDie$2(tokenStore.get(""));
135733
- const set$6 = (token) => match$7(token, {
137550
+ const set$7 = (token) => match$7(token, {
135734
137551
  onNone: () => orDie$2(tokenStore.remove("")).pipe(map$6(() => {
135735
137552
  currentToken = none$3();
135736
137553
  })),
@@ -135741,19 +137558,19 @@ var TokenManager$1 = class extends Service()("lalph/Linear/TokenManager", { make
135741
137558
  const getNoLock = uninterruptibleMask(fnUntraced(function* (restore) {
135742
137559
  if (isNone(currentToken)) {
135743
137560
  const newToken = yield* restore(pkce);
135744
- yield* set$6(some(newToken));
137561
+ yield* set$7(some(newToken));
135745
137562
  return newToken;
135746
137563
  } else if (currentToken.value.isExpired()) {
135747
137564
  const newToken = yield* refresh(currentToken.value);
135748
- yield* set$6(newToken);
137565
+ yield* set$7(newToken);
135749
137566
  if (isNone(newToken)) return yield* getNoLock;
135750
137567
  return newToken.value;
135751
137568
  }
135752
137569
  return currentToken.value;
135753
137570
  }));
135754
- const get$8 = makeSemaphoreUnsafe(1).withPermit(getNoLock);
137571
+ const get$9 = makeSemaphoreUnsafe(1).withPermit(getNoLock);
135755
137572
  const pkce = gen(function* () {
135756
- const deferred = yield* make$48();
137573
+ const deferred = yield* make$49();
135757
137574
  const CallbackRoute = add("GET", "/callback", gen(function* () {
135758
137575
  const params$1 = yield* callbackParams;
135759
137576
  yield* succeed$3(deferred, params$1);
@@ -135794,7 +137611,7 @@ var TokenManager$1 = class extends Service()("lalph/Linear/TokenManager", { make
135794
137611
  }), httpClient.execute, flatMap(schemaBodyJson(TokenResponse$1)));
135795
137612
  return AccessToken$1.fromResponse(res);
135796
137613
  }, option$1);
135797
- return { get: get$8 };
137614
+ return { get: get$9 };
135798
137615
  }) }) {
135799
137616
  static layer = effect(this, this.make).pipe(provide$3([layerKvs, layer$9]));
135800
137617
  };
@@ -135828,6 +137645,15 @@ const TokenResponse$1 = Struct({
135828
137645
  //#endregion
135829
137646
  //#region src/IssueSource.ts
135830
137647
  var IssueSource = class extends Service()("lalph/IssueSource") {};
137648
+ var IssueSourceUpdates = class extends Service()("lalph/IssueSourceUpdates", { make: gen(function* () {
137649
+ const source = yield* IssueSource;
137650
+ return yield* fromEffectSchedule(source.issues, spaced("1 minute")).pipe(retry$1(spaced("10 seconds")), orDie, share({
137651
+ capacity: 1,
137652
+ strategy: "dropping"
137653
+ }));
137654
+ }) }) {
137655
+ static layer = effect(this, this.make);
137656
+ };
135831
137657
  var IssueSourceError = class extends ErrorClass("lalph/IssueSourceError")({
135832
137658
  _tag: tag("IssueSourceError"),
135833
137659
  cause: Defect
@@ -135914,7 +137740,7 @@ var Linear = class extends Service()("lalph/Linear", { make: gen(function* () {
135914
137740
  try: () => prev.fetchNext(),
135915
137741
  catch: (cause) => new LinearError({ cause })
135916
137742
  }) : use$2(f);
135917
- return [connection.nodes, some(connection).pipe(filter$5((c) => c.pageInfo.hasNextPage))];
137743
+ return [connection.nodes, some(connection).pipe(filter$6((c) => c.pageInfo.hasNextPage))];
135918
137744
  }));
135919
137745
  const projects = stream$3((client) => client.projects({ filter: { status: { type: { nin: ["canceled", "completed"] } } } }));
135920
137746
  const labels = stream$3((client) => client.issueLabels());
@@ -135995,7 +137821,7 @@ const LinearIssueSource = effect(IssueSource, gen(function* () {
135995
137821
  projectId: project.id
135996
137822
  }).pipe(mapError$2((cause) => new IssueSourceError({ cause })), map$6((issues$1) => {
135997
137823
  const threeDaysAgo = nowUnsafe().pipe(subtract({ days: 3 }));
135998
- return pipe(filter$3(issues$1, (issue) => {
137824
+ return pipe(filter$4(issues$1, (issue) => {
135999
137825
  identifierMap.set(issue.identifier, issue.id);
136000
137826
  const completedAt = issue.completedAt;
136001
137827
  if (!completedAt) return true;
@@ -136010,8 +137836,7 @@ const LinearIssueSource = effect(IssueSource, gen(function* () {
136010
137836
  estimate: issue.estimate ?? null,
136011
137837
  state: linearStateToPrdState(issue.state),
136012
137838
  blockedBy: blocks.map((r) => r.issue.identifier),
136013
- autoMerge: autoMergeLabelId.pipe(map$12((labelId$1) => issue.labelIds.includes(labelId$1)), getOrElse(() => false)),
136014
- githubPrNumber: null
137839
+ autoMerge: autoMergeLabelId.pipe(map$12((labelId$1) => issue.labelIds.includes(labelId$1)), getOrElse(() => false))
136015
137840
  });
136016
137841
  }));
136017
137842
  }));
@@ -138969,11 +140794,11 @@ var require_light = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
138969
140794
  return this._onFailure(error$1, eventInfo, clearGlobalState, run$7, free);
138970
140795
  }
138971
140796
  async _onFailure(error$1, eventInfo, clearGlobalState, run$7, free) {
138972
- var retry$3, retryAfter;
140797
+ var retry$5, retryAfter;
138973
140798
  if (clearGlobalState()) {
138974
- retry$3 = await this.Events.trigger("failed", error$1, eventInfo);
138975
- if (retry$3 != null) {
138976
- retryAfter = ~~retry$3;
140799
+ retry$5 = await this.Events.trigger("failed", error$1, eventInfo);
140800
+ if (retry$5 != null) {
140801
+ retryAfter = ~~retry$5;
138977
140802
  this.Events.trigger("retry", `Retrying ${this.options.id} after ${retryAfter} ms`, eventInfo);
138978
140803
  this.retryCount++;
138979
140804
  return run$7(retryAfter);
@@ -142234,7 +144059,7 @@ var TokenManager = class extends Service()("lalph/Github/TokenManager", { make:
142234
144059
  const tokenStore = toSchemaStore(kvs, AccessToken);
142235
144060
  const httpClient = (yield* HttpClient).pipe(filterStatusOk, retryTransient({ schedule: spaced(1e3) }));
142236
144061
  let currentToken = yield* orDie$2(tokenStore.get(""));
142237
- const set$6 = (token) => match$7(token, {
144062
+ const set$7 = (token) => match$7(token, {
142238
144063
  onNone: () => orDie$2(tokenStore.remove("")).pipe(map$6(() => {
142239
144064
  currentToken = none$3();
142240
144065
  })),
@@ -142245,12 +144070,12 @@ var TokenManager = class extends Service()("lalph/Github/TokenManager", { make:
142245
144070
  const getNoLock = gen(function* () {
142246
144071
  if (isNone(currentToken)) {
142247
144072
  const newToken = yield* deviceCode;
142248
- yield* set$6(some(newToken));
144073
+ yield* set$7(some(newToken));
142249
144074
  return newToken;
142250
144075
  }
142251
144076
  return currentToken.value;
142252
144077
  });
142253
- const get$8 = makeSemaphoreUnsafe(1).withPermit(getNoLock);
144078
+ const get$9 = makeSemaphoreUnsafe(1).withPermit(getNoLock);
142254
144079
  const deviceCode = gen(function* () {
142255
144080
  const code = yield* post("https://github.com/login/device/code").pipe(bodyUrlParams({
142256
144081
  client_id: clientId,
@@ -142265,7 +144090,7 @@ var TokenManager = class extends Service()("lalph/Github/TokenManager", { make:
142265
144090
  }), httpClient.execute, flatMap(schemaBodyUrlParams(PollResponse)), delay(seconds(code.interval)), repeat({ until: (res) => "access_token" in res }));
142266
144091
  return AccessToken.fromResponse(tokenResponse);
142267
144092
  });
142268
- return { get: get$8 };
144093
+ return { get: get$9 };
142269
144094
  }) }) {
142270
144095
  static layer = effect(this, this.make).pipe(provide$3([layerKvs, layer$9]));
142271
144096
  };
@@ -142332,7 +144157,7 @@ var ReviewThreads = class extends Class("github/ReviewThreads")({ edges: Array$1
142332
144157
  //#region src/Github/Cli.ts
142333
144158
  var GithubCli = class extends Service()("lalph/Github/Cli", { make: gen(function* () {
142334
144159
  const spawner = yield* ChildProcessSpawner;
142335
- const [owner, repo] = (yield* make$21`gh repo view --json nameWithOwner -q ${".nameWithOwner"}`.pipe(string, option$1, flatMap(flow(map$12(trim), filter$5(isNonEmpty), match$7({
144160
+ const [owner, repo] = (yield* make$21`gh repo view --json nameWithOwner -q ${".nameWithOwner"}`.pipe(string, option$1, flatMap(flow(map$12(trim), filter$6(isNonEmpty), match$7({
142336
144161
  onNone: () => fail$4(new GithubCliRepoNotFound()),
142337
144162
  onSome: (value) => succeed$1(value)
142338
144163
  }))))).split("/");
@@ -142341,7 +144166,7 @@ var GithubCli = class extends Service()("lalph/Github/Cli", { make: gen(function
142341
144166
  comments: data.data.repository.pullRequest.comments.edges.map((edge) => edge.node),
142342
144167
  reviewThreads: data.data.repository.pullRequest.reviewThreads.edges.map((edge) => edge.node)
142343
144168
  };
142344
- }), provideService(ChildProcessSpawner, spawner));
144169
+ }), provideService$1(ChildProcessSpawner, spawner));
142345
144170
  const prFeedbackMd = (pr) => reviewComments(pr).pipe(map$6(({ comments, reviewThreads }) => {
142346
144171
  const eligibleReviewThreads = reviewThreads.filter((thread) => thread.shouldDisplayThread);
142347
144172
  if (comments.length === 0 && eligibleReviewThreads.length === 0) return `No review comments found.`;
@@ -142505,8 +144330,7 @@ const GithubIssueSource = effect(IssueSource, gen(function* () {
142505
144330
  estimate: null,
142506
144331
  state,
142507
144332
  blockedBy: dependencies.map((dep) => `#${dep.number}`),
142508
- autoMerge: autoMergeLabelName.pipe(map$12((labelName) => hasLabel(issue.labels, labelName)), getOrElse(() => false)),
142509
- githubPrNumber: null
144333
+ autoMerge: autoMergeLabelName.pipe(map$12((labelName) => hasLabel(issue.labels, labelName)), getOrElse(() => false))
142510
144334
  });
142511
144335
  }), { concurrency: 10 }), runCollect, mapError$2((cause) => new IssueSourceError({ cause })));
142512
144336
  const createIssue = github.wrap((rest) => rest.issues.create);
@@ -142627,7 +144451,7 @@ const GithubIssueSource = effect(IssueSource, gen(function* () {
142627
144451
  const labelFilter = new Setting("github.labelFilter", Option(String$1));
142628
144452
  const labelSelect = gen(function* () {
142629
144453
  const label = yield* text$2({ message: "What label do you want to filter issues by? (leave empty for none)" });
142630
- const labelOption = some(label.trim()).pipe(filter$5(isNonEmpty));
144454
+ const labelOption = some(label.trim()).pipe(filter$6(isNonEmpty));
142631
144455
  yield* labelFilter.set(some(labelOption));
142632
144456
  return labelOption;
142633
144457
  });
@@ -142639,7 +144463,7 @@ const getOrSelectLabel = gen(function* () {
142639
144463
  const autoMergeLabel = new Setting("github.autoMergeLabel", Option(String$1));
142640
144464
  const autoMergeLabelSelect = gen(function* () {
142641
144465
  const label = yield* text$2({ message: "What label do you want to use for auto-mergable issues? (leave empty for none)" });
142642
- const labelOption = some(label.trim()).pipe(filter$5(isNonEmpty));
144466
+ const labelOption = some(label.trim()).pipe(filter$6(isNonEmpty));
142643
144467
  yield* autoMergeLabel.set(some(labelOption));
142644
144468
  return labelOption;
142645
144469
  });
@@ -142649,7 +144473,7 @@ const getOrSelectAutoMergeLabel = gen(function* () {
142649
144473
  return yield* autoMergeLabelSelect;
142650
144474
  });
142651
144475
  const resetGithub = labelFilter.set(none$3()).pipe(andThen(autoMergeLabel.set(none$3())));
142652
- const maybeNextPage = (page, linkHeader) => pipe(fromNullishOr$2(linkHeader), filter$5((_) => _.includes(`rel="next"`)), as$2(page + 1));
144476
+ const maybeNextPage = (page, linkHeader) => pipe(fromNullishOr$2(linkHeader), filter$6((_) => _.includes(`rel="next"`)), as$2(page + 1));
142653
144477
 
142654
144478
  //#endregion
142655
144479
  //#region src/IssueSources.ts
@@ -142690,7 +144514,7 @@ const resetCurrentIssueSource = gen(function* () {
142690
144514
  var CurrentIssueSource = class CurrentIssueSource extends Service()("lalph/CurrentIssueSource") {
142691
144515
  static layer = effectServices(gen(function* () {
142692
144516
  const source = yield* getOrSelectIssueSource;
142693
- const services$2 = yield* buildWithMemoMap(source.layer, yield* CurrentMemoMap, yield* scope).pipe(withSpan("CurrentIssueSource.build"));
144517
+ const services$2 = yield* buildWithMemoMap(IssueSourceUpdates.layer.pipe(provideMerge(source.layer)), yield* CurrentMemoMap, yield* scope).pipe(withSpan("CurrentIssueSource.build"));
142694
144518
  return add$3(services$2, CurrentIssueSource, source);
142695
144519
  }));
142696
144520
  };
@@ -142909,31 +144733,85 @@ ${prdNotes(options)}`;
142909
144733
  static layer = effect(this, this.make);
142910
144734
  };
142911
144735
 
144736
+ //#endregion
144737
+ //#region src/Worktree.ts
144738
+ var Worktree = class extends Service()("lalph/Worktree", { make: gen(function* () {
144739
+ const fs = yield* FileSystem;
144740
+ const pathService = yield* Path$1;
144741
+ const inExisting = yield* fs.exists(pathService.join(".lalph", "prd.yml"));
144742
+ if (inExisting) return {
144743
+ directory: pathService.resolve("."),
144744
+ inExisting
144745
+ };
144746
+ const directory$2 = yield* fs.makeTempDirectory();
144747
+ yield* addFinalizer(fnUntraced(function* () {
144748
+ yield* execIgnore(make$21`git worktree remove --force ${directory$2}`);
144749
+ }));
144750
+ yield* make$21`git worktree add ${directory$2} -d HEAD`.pipe(exitCode);
144751
+ yield* fs.makeDirectory(pathService.join(directory$2, ".lalph"), { recursive: true });
144752
+ const setupPath = pathService.resolve("scripts", "worktree-setup.sh");
144753
+ yield* seedSetupScript(setupPath);
144754
+ if (yield* fs.exists(setupPath)) yield* make$21({
144755
+ cwd: directory$2,
144756
+ extendEnv: true,
144757
+ shell: process.env.SHELL ?? true
144758
+ })`${setupPath}`.pipe(exitCode);
144759
+ return {
144760
+ directory: directory$2,
144761
+ inExisting
144762
+ };
144763
+ }) }) {
144764
+ static layer = effect(this, this.make);
144765
+ static layerLocal = effect(this, gen(function* () {
144766
+ const pathService = yield* Path$1;
144767
+ const fs = yield* FileSystem;
144768
+ return {
144769
+ directory: pathService.resolve("."),
144770
+ inExisting: yield* fs.exists(pathService.join(".lalph", "prd.yml"))
144771
+ };
144772
+ }));
144773
+ };
144774
+ const execIgnore = (command) => command.pipe(exitCode, catchCause$1(logWarning));
144775
+ const seedSetupScript = fnUntraced(function* (setupPath) {
144776
+ const fs = yield* FileSystem;
144777
+ const pathService = yield* Path$1;
144778
+ if (yield* fs.exists(setupPath)) return;
144779
+ const baseBranch = yield* discoverBaseBranch;
144780
+ yield* fs.makeDirectory(pathService.dirname(setupPath), { recursive: true });
144781
+ yield* fs.writeFileString(setupPath, setupScriptTemplate(baseBranch));
144782
+ yield* fs.chmod(setupPath, 493);
144783
+ });
144784
+ const discoverBaseBranch = gen(function* () {
144785
+ const originHead = yield* make$21`git symbolic-ref --short refs/remotes/origin/HEAD`.pipe(string, catch_$1((_) => succeed$1("")), map$6((output) => output.trim()));
144786
+ if (originHead !== "") return originHead.startsWith("origin/") ? originHead.slice(7) : originHead;
144787
+ const currentBranch = yield* make$21`git branch --show-current`.pipe(string, catch_$1((_) => succeed$1("")), map$6((output) => output.trim()));
144788
+ return currentBranch === "" ? "main" : currentBranch;
144789
+ });
144790
+ const setupScriptTemplate = (baseBranch) => `#!/usr/bin/env bash
144791
+ set -euo pipefail
144792
+
144793
+ git fetch origin
144794
+ git checkout origin/${baseBranch}
144795
+
144796
+ # Seeded by lalph. Customize this to prepare new worktrees.
144797
+ `;
144798
+
142912
144799
  //#endregion
142913
144800
  //#region src/Prd.ts
142914
144801
  var Prd = class extends Service()("lalph/Prd", { make: gen(function* () {
144802
+ const worktree = yield* Worktree;
142915
144803
  const pathService = yield* Path$1;
142916
144804
  const fs = yield* FileSystem;
142917
144805
  const source = yield* IssueSource;
142918
- const tempDir = yield* fs.makeTempDirectoryScoped();
142919
- const prdFile = pathService.join(tempDir, `prd.yml`);
144806
+ const sourceUpdates = yield* IssueSourceUpdates;
144807
+ let chosenIssueId = null;
144808
+ const lalphDir = pathService.join(worktree.directory, `.lalph`);
144809
+ const prdFile = pathService.join(worktree.directory, `.lalph`, `prd.yml`);
142920
144810
  const readPrd = gen(function* () {
142921
144811
  const yaml = yield* fs.readFileString(prdFile);
142922
144812
  return PrdIssue.arrayFromYaml(yaml);
142923
144813
  });
142924
144814
  const syncSemaphore = makeSemaphoreUnsafe(1);
142925
- const mergableGithubPrs = gen(function* () {
142926
- const updated = yield* readPrd;
142927
- const prs = empty$12();
142928
- for (const issue of updated) {
142929
- if (!updatedIssues.get(issue.id ?? "") || !issue.githubPrNumber || issue.state !== "in-review") continue;
142930
- prs.push({
142931
- issueId: issue.id,
142932
- prNumber: issue.githubPrNumber
142933
- });
142934
- }
142935
- return prs;
142936
- });
142937
144815
  const maybeRevertIssue = fnUntraced(function* (options) {
142938
144816
  const issue = (yield* readPrd).find((i) => i.id === options.issueId);
142939
144817
  if (!issue || issue.state === "in-review") return;
@@ -142953,13 +144831,39 @@ var Prd = class extends Service()("lalph/Prd", { make: gen(function* () {
142953
144831
  state: "todo"
142954
144832
  });
142955
144833
  });
144834
+ if (worktree.inExisting) {
144835
+ const initialPrdIssues = yield* readPrd;
144836
+ return {
144837
+ path: prdFile,
144838
+ maybeRevertIssue,
144839
+ revertUpdatedIssues: gen(function* () {
144840
+ const updated = yield* readPrd;
144841
+ for (const issue of updated) {
144842
+ if (issue.state !== "in-progress") continue;
144843
+ const prevIssue = initialPrdIssues.find((i) => i.id === issue.id);
144844
+ if (!prevIssue || prevIssue.state === "in-progress") continue;
144845
+ yield* source.updateIssue({
144846
+ issueId: issue.id,
144847
+ state: prevIssue.state
144848
+ });
144849
+ }
144850
+ }),
144851
+ flagUnmergable,
144852
+ findById: fnUntraced(function* (issueId) {
144853
+ return (yield* readPrd).find((i) => i.id === issueId) ?? null;
144854
+ }),
144855
+ setChosenIssueId: (issueId) => sync(() => {
144856
+ chosenIssueId = issueId;
144857
+ })
144858
+ };
144859
+ }
144860
+ yield* addFinalizer(() => ignore(fs.remove(prdFile)));
142956
144861
  let current = yield* source.issues;
142957
144862
  yield* fs.writeFileString(prdFile, PrdIssue.arrayToYaml(current));
142958
144863
  const updatedIssues = /* @__PURE__ */ new Map();
142959
144864
  const sync$2 = gen(function* () {
142960
144865
  const updated = yield* readPrd;
142961
144866
  if (!(updated.length !== current.length || updated.some((u, i) => u.isChangedComparedTo(current[i])))) return;
142962
- const githubPrs = /* @__PURE__ */ new Map();
142963
144867
  const toRemove = new Set(current.filter((i) => i.id !== null).map((i) => i.id));
142964
144868
  for (const issue of updated) {
142965
144869
  toRemove.delete(issue.id);
@@ -142967,9 +144871,9 @@ var Prd = class extends Service()("lalph/Prd", { make: gen(function* () {
142967
144871
  yield* source.createIssue(issue);
142968
144872
  continue;
142969
144873
  }
142970
- if (issue.githubPrNumber) githubPrs.set(issue.id, issue.githubPrNumber);
142971
144874
  const existing = current.find((i) => i.id === issue.id);
142972
144875
  if (!existing || !existing.isChangedComparedTo(issue)) continue;
144876
+ if (chosenIssueId && existing.id !== chosenIssueId) continue;
142973
144877
  yield* source.updateIssue({
142974
144878
  issueId: issue.id,
142975
144879
  title: issue.title,
@@ -142981,36 +144885,27 @@ var Prd = class extends Service()("lalph/Prd", { make: gen(function* () {
142981
144885
  }
142982
144886
  yield* forEach$1(toRemove, (issueId) => source.cancelIssue(issueId), { concurrency: "unbounded" });
142983
144887
  current = yield* source.issues;
142984
- yield* fs.writeFileString(prdFile, PrdIssue.arrayToYaml(current.map((issue) => {
142985
- const prNumber = githubPrs.get(issue.id);
142986
- if (!prNumber) return issue;
142987
- return new PrdIssue({
142988
- ...issue,
142989
- githubPrNumber: prNumber
142990
- });
142991
- })));
144888
+ yield* fs.writeFileString(prdFile, PrdIssue.arrayToYaml(current));
142992
144889
  }).pipe(uninterruptible, syncSemaphore.withPermit, withSpan("Prd.sync"), catchTag("IssueSourceError", (e) => logWarning(fail$5(e))), annotateLogs({
142993
144890
  module: "Prd",
142994
144891
  method: "sync"
142995
144892
  }));
142996
144893
  const updateSyncHandle = yield* make$26();
142997
- const updateSync = gen(function* () {
144894
+ const updateSync = fnUntraced(function* (sourceIssues) {
142998
144895
  const tempFile = yield* fs.makeTempFileScoped();
142999
- const sourceIssues = yield* source.issues;
143000
144896
  if (!(sourceIssues.length !== current.length || sourceIssues.some((u, i) => u.isChangedComparedTo(current[i])))) return;
143001
144897
  yield* fs.writeFileString(tempFile, PrdIssue.arrayToYaml(sourceIssues));
143002
144898
  yield* fs.rename(tempFile, prdFile);
143003
144899
  current = sourceIssues;
143004
- }).pipe(scoped$1, run$2(updateSyncHandle, { onlyIfMissing: true }));
143005
- yield* fs.watch(tempDir).pipe(buffer({
144900
+ }, scoped$1, run$2(updateSyncHandle, { onlyIfMissing: true }));
144901
+ yield* fs.watch(lalphDir).pipe(buffer({
143006
144902
  capacity: 1,
143007
144903
  strategy: "dropping"
143008
- }), runForEach((_) => clear(updateSyncHandle).pipe(andThen(ignore(sync$2)))), retry$1(forever$1), forkScoped);
143009
- yield* updateSync.pipe(delay("1 minute"), forever, forkScoped);
144904
+ }), runForEach((_) => clear(updateSyncHandle).pipe(andThen(ignore(sync$2)))), retry$3(forever$1), forkScoped);
144905
+ yield* sourceUpdates.pipe(runForEach(updateSync), forkScoped);
143010
144906
  const findById = (issueId) => sync(() => current.find((i) => i.id === issueId) ?? null);
143011
144907
  return {
143012
144908
  path: prdFile,
143013
- mergableGithubPrs,
143014
144909
  maybeRevertIssue,
143015
144910
  revertUpdatedIssues: syncSemaphore.withPermit(gen(function* () {
143016
144911
  for (const issue of updatedIssues.values()) {
@@ -143022,77 +144917,16 @@ var Prd = class extends Service()("lalph/Prd", { make: gen(function* () {
143022
144917
  }
143023
144918
  })),
143024
144919
  flagUnmergable,
143025
- findById
144920
+ findById,
144921
+ setChosenIssueId: (issueId) => sync(() => {
144922
+ chosenIssueId = issueId;
144923
+ })
143026
144924
  };
143027
144925
  }).pipe(withSpan("Prd.build")) }) {
143028
- static layer = effect(this, this.make);
143029
- };
143030
-
143031
- //#endregion
143032
- //#region src/Worktree.ts
143033
- var Worktree = class extends Service()("lalph/Worktree", { make: gen(function* () {
143034
- const fs = yield* FileSystem;
143035
- const pathService = yield* Path$1;
143036
- const prd = yield* Prd;
143037
- const inExisting = yield* fs.exists(pathService.join(".lalph", "worktree"));
143038
- if (inExisting) return {
143039
- directory: pathService.resolve("."),
143040
- inExisting
143041
- };
143042
- const directory$2 = yield* fs.makeTempDirectory();
143043
- yield* addFinalizer(fnUntraced(function* () {
143044
- yield* execIgnore(make$21`git worktree remove --force ${directory$2}`);
143045
- }));
143046
- yield* make$21`git worktree add ${directory$2} -d HEAD`.pipe(exitCode);
143047
- yield* fs.makeDirectory(pathService.join(directory$2, ".lalph"), { recursive: true });
143048
- yield* scoped$1(fs.open(pathService.join(directory$2, ".lalph", "worktree"), { flag: "a+" }));
143049
- yield* fs.symlink(prd.path, pathService.join(directory$2, ".lalph", "prd.yml"));
143050
- const setupPath = pathService.resolve("scripts", "worktree-setup.sh");
143051
- yield* seedSetupScript(setupPath);
143052
- if (yield* fs.exists(setupPath)) yield* make$21({
143053
- cwd: directory$2,
143054
- extendEnv: true,
143055
- shell: process.env.SHELL ?? true
143056
- })`${setupPath}`.pipe(exitCode);
143057
- return {
143058
- directory: directory$2,
143059
- inExisting
143060
- };
143061
- }) }) {
143062
- static layer = effect(this, this.make);
143063
- static layerLocal = effect(this, gen(function* () {
143064
- const pathService = yield* Path$1;
143065
- const fs = yield* FileSystem;
143066
- return {
143067
- directory: pathService.resolve("."),
143068
- inExisting: yield* fs.exists(pathService.join(".lalph", "prd.yml"))
143069
- };
143070
- }));
144926
+ static layerNoWorktree = effect(this, this.make);
144927
+ static layer = this.layerNoWorktree.pipe(provideMerge(Worktree.layer));
144928
+ static layerLocal = this.layerNoWorktree.pipe(provideMerge(Worktree.layerLocal));
143071
144929
  };
143072
- const execIgnore = (command) => command.pipe(exitCode, catchCause$1(logWarning));
143073
- const seedSetupScript = fnUntraced(function* (setupPath) {
143074
- const fs = yield* FileSystem;
143075
- const pathService = yield* Path$1;
143076
- if (yield* fs.exists(setupPath)) return;
143077
- const baseBranch = yield* discoverBaseBranch;
143078
- yield* fs.makeDirectory(pathService.dirname(setupPath), { recursive: true });
143079
- yield* fs.writeFileString(setupPath, setupScriptTemplate(baseBranch));
143080
- yield* fs.chmod(setupPath, 493);
143081
- });
143082
- const discoverBaseBranch = gen(function* () {
143083
- const originHead = yield* make$21`git symbolic-ref --short refs/remotes/origin/HEAD`.pipe(string, catch_$1((_) => succeed$1("")), map$6((output) => output.trim()));
143084
- if (originHead !== "") return originHead.startsWith("origin/") ? originHead.slice(7) : originHead;
143085
- const currentBranch = yield* make$21`git branch --show-current`.pipe(string, catch_$1((_) => succeed$1("")), map$6((output) => output.trim()));
143086
- return currentBranch === "" ? "main" : currentBranch;
143087
- });
143088
- const setupScriptTemplate = (baseBranch) => `#!/usr/bin/env bash
143089
- set -euo pipefail
143090
-
143091
- git fetch origin
143092
- git checkout origin/${baseBranch}
143093
-
143094
- # Seeded by lalph. Customize this to prepare new worktrees.
143095
- `;
143096
144930
 
143097
144931
  //#endregion
143098
144932
  //#region src/shared/child-process.ts
@@ -143126,7 +144960,7 @@ const parseCommandPrefix = (value) => {
143126
144960
  const parts$1 = parseCommand(value);
143127
144961
  return isReadonlyArrayNonEmpty(parts$1) ? prefix(parts$1[0], parts$1.slice(1)) : identity;
143128
144962
  };
143129
- const normalizePrefix = (value) => some(value.trim()).pipe(filter$5(isNonEmpty));
144963
+ const normalizePrefix = (value) => some(value.trim()).pipe(filter$6(isNonEmpty));
143130
144964
  const promptForCommandPrefix = gen(function* () {
143131
144965
  const prefixOption = normalizePrefix(yield* text$2({ message: "Command prefix for agent commands? (leave empty for none)" }));
143132
144966
  yield* commandPrefixSetting.set(some(prefixOption));
@@ -143181,6 +145015,7 @@ const commandRoot = make$28("lalph", {
143181
145015
  specsDirectory,
143182
145016
  verbose
143183
145017
  }).pipe(withHandler(fnUntraced(function* ({ iterations: iterations$1, concurrency: concurrency$1, targetBranch: targetBranch$1, maxIterationMinutes: maxIterationMinutes$1, stallMinutes: stallMinutes$1, specsDirectory: specsDirectory$1 }) {
145018
+ const source = yield* build(CurrentIssueSource.layer);
143184
145019
  const commandPrefix = yield* getCommandPrefix;
143185
145020
  yield* getOrSelectCliAgent;
143186
145021
  const isFinite$3 = Number.isFinite(iterations$1);
@@ -143188,7 +145023,7 @@ const commandRoot = make$28("lalph", {
143188
145023
  const runConcurrency = Math.max(1, concurrency$1);
143189
145024
  const semaphore = makeSemaphoreUnsafe(runConcurrency);
143190
145025
  const fibers = yield* make$25();
143191
- yield* resetInProgress.pipe(withSpan("Main.resetInProgress"));
145026
+ yield* resetInProgress.pipe(provide$1(source), withSpan("Main.resetInProgress"));
143192
145027
  yield* log$1(`Executing ${iterationsDisplay} iteration(s) with concurrency ${runConcurrency}`);
143193
145028
  if (isSome(targetBranch$1)) yield* log$1(`Using target branch: ${targetBranch$1.value}`);
143194
145029
  let iteration = 0;
@@ -143197,7 +145032,7 @@ const commandRoot = make$28("lalph", {
143197
145032
  yield* semaphore.take(1);
143198
145033
  if (quit || isFinite$3 && iteration >= iterations$1) break;
143199
145034
  const currentIteration = iteration;
143200
- const startedDeferred = yield* make$48();
145035
+ const startedDeferred = yield* make$49();
143201
145036
  yield* checkForWork.pipe(andThen(run({
143202
145037
  startedDeferred,
143203
145038
  targetBranch: targetBranch$1,
@@ -143218,12 +145053,12 @@ const commandRoot = make$28("lalph", {
143218
145053
  quit = true;
143219
145054
  return void_$1;
143220
145055
  }
143221
- }), annotateLogs({ iteration: currentIteration }), ensuring(semaphore.release(1)), ensuring(completeWith(startedDeferred, void_$1)), run$1(fibers));
145056
+ }), annotateLogs({ iteration: currentIteration }), ensuring(semaphore.release(1)), ensuring(completeWith(startedDeferred, void_$1)), provide$1(source), run$1(fibers));
143222
145057
  yield* _await(startedDeferred);
143223
145058
  iteration++;
143224
145059
  }
143225
145060
  yield* awaitEmpty(fibers);
143226
- }, scoped$1, provide$1(Prd.layer.pipe(provideMerge(CurrentIssueSource.layer))))));
145061
+ }, scoped$1)));
143227
145062
  const run = fnUntraced(function* (options) {
143228
145063
  const fs = yield* FileSystem;
143229
145064
  const pathService = yield* Path$1;
@@ -143234,6 +145069,8 @@ const run = fnUntraced(function* (options) {
143234
145069
  const prd = yield* Prd;
143235
145070
  const source = yield* IssueSource;
143236
145071
  const exec = (template, ...args$1) => make$21({ cwd: worktree.directory })(template, ...args$1).pipe(exitCode);
145072
+ const execString = (template, ...args$1) => make$21({ cwd: worktree.directory })(template, ...args$1).pipe(string);
145073
+ const viewPrState = (prNumber) => execString`gh pr view ${prNumber ? prNumber : ""} --json number,state`.pipe(flatMap(decodeEffect(PrState)), option$1);
143237
145074
  const execWithStallTimeout = fnUntraced(function* (command) {
143238
145075
  let lastOutputAt = yield* now;
143239
145076
  const stallTimeout = suspend$3(function loop() {
@@ -143251,7 +145088,7 @@ const run = fnUntraced(function* (options) {
143251
145088
  }), raceFirst(stallTimeout));
143252
145089
  return yield* handle.exitCode;
143253
145090
  }, scoped$1);
143254
- const currentBranch = (dir) => make$21({ cwd: dir })`git branch --show-current`.pipe(string, flatMap((output) => some(output.trim()).pipe(filter$5((b) => b.length > 0), fromOption)));
145091
+ const currentBranch = (dir) => make$21({ cwd: dir })`git branch --show-current`.pipe(string, flatMap((output) => some(output.trim()).pipe(filter$6((b) => b.length > 0), fromOption)));
143255
145092
  if (isSome(options.targetBranch)) yield* exec`git checkout ${`origin/${options.targetBranch.value}`}`;
143256
145093
  yield* gen(function* () {
143257
145094
  let taskId = void 0;
@@ -143269,12 +145106,16 @@ const run = fnUntraced(function* (options) {
143269
145106
  onTimeout: () => fail$4(new RunnerStalled())
143270
145107
  }));
143271
145108
  const taskJson = yield* fs.readFileString(pathService.join(worktree.directory, ".lalph", "task.json"));
143272
- const chosenTask = yield* decodeEffect(ChosenTask)(taskJson).pipe(mapError$2(() => new ChosenTaskNotFound()), flatMap(fnUntraced(function* (task$1) {
143273
- const prdTask = yield* prd.findById(task$1.id);
143274
- if (prdTask?.state === "in-progress") return task$1.githubPrNumber ? prdTask.withGithubPrNumber(task$1.githubPrNumber) : prdTask;
145109
+ const chosenTask = yield* decodeEffect(ChosenTask)(taskJson).pipe(mapError$2(() => new ChosenTaskNotFound()), flatMap(fnUntraced(function* (task) {
145110
+ const prdTask = yield* prd.findById(task.id);
145111
+ if (prdTask?.state === "in-progress") return {
145112
+ ...task,
145113
+ prd: prdTask
145114
+ };
143275
145115
  return yield* new ChosenTaskNotFound();
143276
145116
  })));
143277
145117
  taskId = chosenTask.id;
145118
+ yield* prd.setChosenIssueId(taskId);
143278
145119
  yield* source.ensureInProgress(taskId).pipe(timeoutOrElse({
143279
145120
  duration: "1 minute",
143280
145121
  onTimeout: () => fail$4(new RunnerStalled())
@@ -143288,7 +145129,7 @@ const run = fnUntraced(function* (options) {
143288
145129
  yield* pipe(cliAgent.command({
143289
145130
  outputMode: "pipe",
143290
145131
  prompt: promptGen.promptInstructions({
143291
- task: chosenTask,
145132
+ task: chosenTask.prd,
143292
145133
  targetBranch: getOrUndefined(options.targetBranch),
143293
145134
  specsDirectory: options.specsDirectory,
143294
145135
  githubPrNumber: chosenTask.githubPrNumber ?? void 0
@@ -143315,20 +145156,28 @@ const run = fnUntraced(function* (options) {
143315
145156
  return yield* error$1;
143316
145157
  })));
143317
145158
  yield* log$1(`Agent exited with code: ${exitCode$1}`);
143318
- const prs = yield* prd.mergableGithubPrs;
143319
- const task = yield* prd.findById(taskId);
143320
- if (prs.length === 0) yield* prd.maybeRevertIssue({ issueId: taskId });
143321
- else if (task?.autoMerge) for (const pr of prs) {
143322
- if (isSome(options.targetBranch)) yield* exec`gh pr edit ${pr.prNumber} --base ${options.targetBranch.value}`;
143323
- if ((yield* exec`gh pr merge ${pr.prNumber} -sd`) !== 0) yield* prd.flagUnmergable({ issueId: pr.issueId });
143324
- }
145159
+ const autoMerge = gen(function* () {
145160
+ let prState = yield* viewPrState();
145161
+ yield* log$1("PR state", prState);
145162
+ if (isNone(prState)) return;
145163
+ if (isSome(options.targetBranch)) yield* exec`gh pr edit --base ${options.targetBranch.value}`;
145164
+ yield* exec`gh pr merge -sd`;
145165
+ yield* sleep(seconds(3));
145166
+ prState = yield* viewPrState(prState.value.number);
145167
+ yield* log$1("PR state after merge", prState);
145168
+ if (isSome(prState) && prState.value.state === "MERGED") return;
145169
+ yield* log$1("Flagging unmergable PR");
145170
+ yield* prd.flagUnmergable({ issueId: taskId });
145171
+ }).pipe(annotateLogs({ phase: "autoMerge" }));
145172
+ if ((yield* prd.findById(taskId))?.autoMerge) yield* autoMerge;
145173
+ else yield* prd.maybeRevertIssue({ issueId: taskId });
143325
145174
  }).pipe(ensuring(gen(function* () {
143326
145175
  const currentBranchName = yield* currentBranch(worktree.directory).pipe(option$1, map$6(getOrUndefined));
143327
145176
  if (!currentBranchName) return;
143328
145177
  yield* exec`git checkout --detach ${currentBranchName}`;
143329
145178
  yield* exec`git branch -D ${currentBranchName}`;
143330
145179
  }).pipe(ignore)));
143331
- }, scoped$1, provide$1([PromptGen.layer, Worktree.layer]));
145180
+ }, scoped$1, provide$1([PromptGen.layer, Prd.layer]));
143332
145181
  var RunnerStalled = class extends TaggedError("RunnerStalled") {
143333
145182
  message = "The runner has stalled due to inactivity.";
143334
145183
  };
@@ -143339,6 +145188,10 @@ const ChosenTask = fromJsonString(Struct({
143339
145188
  id: String$1,
143340
145189
  githubPrNumber: NullOr(Finite)
143341
145190
  }));
145191
+ const PrState = fromJsonString(Struct({
145192
+ number: Finite,
145193
+ state: String$1
145194
+ }));
143342
145195
 
143343
145196
  //#endregion
143344
145197
  //#region src/commands/plan.ts
@@ -143350,7 +145203,7 @@ const commandPlan = make$28("plan", { dangerous }).pipe(withDescription("Iterate
143350
145203
  targetBranch: targetBranch$1,
143351
145204
  commandPrefix: yield* getCommandPrefix,
143352
145205
  dangerous: dangerous$1
143353
- }).pipe(provide$1(Prd.layer.pipe(provideMerge(CurrentIssueSource.layer))));
145206
+ }).pipe(provide$1(CurrentIssueSource.layer));
143354
145207
  })));
143355
145208
  const plan = fnUntraced(function* (options) {
143356
145209
  const fs = yield* FileSystem;
@@ -143370,7 +145223,11 @@ const plan = fnUntraced(function* (options) {
143370
145223
  }), setCwd(worktree.directory), options.commandPrefix, exitCode);
143371
145224
  yield* log$1(`Agent exited with code: ${exitCode$1}`);
143372
145225
  if (!worktree.inExisting) yield* pipe(fs.copy(pathService.join(worktree.directory, options.specsDirectory), options.specsDirectory, { overwrite: true }), ignore);
143373
- }, scoped$1, provide$1([PromptGen.layer, Worktree.layer]));
145226
+ }, scoped$1, provide$1([
145227
+ PromptGen.layer,
145228
+ Prd.layer,
145229
+ Worktree.layer
145230
+ ]));
143374
145231
 
143375
145232
  //#endregion
143376
145233
  //#region src/shared/config.ts
@@ -143426,8 +145283,7 @@ const commandIssue = make$28("issue").pipe(withDescription("Create a new issue i
143426
145283
  id: null,
143427
145284
  ...frontMatter,
143428
145285
  description,
143429
- state: "todo",
143430
- githubPrNumber: null
145286
+ state: "todo"
143431
145287
  }));
143432
145288
  console.log(`Created issue with ID: ${created.id}`);
143433
145289
  console.log(`URL: ${created.url}`);
@@ -143444,7 +145300,7 @@ const commandEdit = make$28("edit").pipe(withDescription("Open the prd.yml file
143444
145300
  stdout: "inherit",
143445
145301
  stderr: "inherit"
143446
145302
  }).pipe(exitCode);
143447
- }, scoped$1, provide$1(Prd.layer.pipe(provide$3(CurrentIssueSource.layer))))));
145303
+ }, scoped$1, provide$1(Prd.layerLocal.pipe(provide$3(CurrentIssueSource.layer))))));
143448
145304
 
143449
145305
  //#endregion
143450
145306
  //#region src/commands/shell.ts
@@ -143459,7 +145315,7 @@ const commandShell = make$28("shell").pipe(withDescription("Enter an interactive
143459
145315
  stdout: "inherit",
143460
145316
  stderr: "inherit"
143461
145317
  }).pipe(exitCode);
143462
- }, scoped$1, provide$1(Worktree.layer.pipe(provide$3(Prd.layer), provide$3(CurrentIssueSource.layer))))));
145318
+ }, scoped$1, provide$1(Prd.layer.pipe(provide$3(CurrentIssueSource.layer))))));
143463
145319
 
143464
145320
  //#endregion
143465
145321
  //#region src/commands/source.ts
@@ -143467,7 +145323,7 @@ const commandSource = make$28("source").pipe(withDescription("Select the issue s
143467
145323
 
143468
145324
  //#endregion
143469
145325
  //#region package.json
143470
- var version = "0.1.87";
145326
+ var version = "0.1.91";
143471
145327
 
143472
145328
  //#endregion
143473
145329
  //#region src/Tracing.ts
@@ -143492,7 +145348,7 @@ const TracerLogger = gen(function* () {
143492
145348
  logger$1.log(options);
143493
145349
  });
143494
145350
  };
143495
- return make$49({ span(name, parent, annotations$1, links, startTime, kind, options) {
145351
+ return make$50({ span(name, parent, annotations$1, links, startTime, kind, options) {
143496
145352
  const span = tracer$3.span(name, parent, annotations$1, links, startTime, kind, options);
143497
145353
  log$2(`${name}: started`, startTime);
143498
145354
  const oldEnd = span.end;