effect 3.12.4 → 3.12.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/cjs/Arbitrary.js +72 -14
  2. package/dist/cjs/Arbitrary.js.map +1 -1
  3. package/dist/cjs/Array.js +11 -9
  4. package/dist/cjs/Array.js.map +1 -1
  5. package/dist/cjs/Cause.js +26 -2
  6. package/dist/cjs/Cause.js.map +1 -1
  7. package/dist/cjs/Cron.js +55 -23
  8. package/dist/cjs/Cron.js.map +1 -1
  9. package/dist/cjs/Duration.js.map +1 -1
  10. package/dist/cjs/Effect.js +32 -23
  11. package/dist/cjs/Effect.js.map +1 -1
  12. package/dist/cjs/FiberHandle.js +8 -8
  13. package/dist/cjs/FiberMap.js +8 -8
  14. package/dist/cjs/FiberSet.js +8 -8
  15. package/dist/cjs/Inspectable.js +0 -4
  16. package/dist/cjs/Inspectable.js.map +1 -1
  17. package/dist/cjs/LogLevel.js +30 -2
  18. package/dist/cjs/LogLevel.js.map +1 -1
  19. package/dist/cjs/ParseResult.js +38 -18
  20. package/dist/cjs/ParseResult.js.map +1 -1
  21. package/dist/cjs/Schema.js +192 -118
  22. package/dist/cjs/Schema.js.map +1 -1
  23. package/dist/cjs/internal/cause.js.map +1 -1
  24. package/dist/cjs/internal/core-effect.js +6 -5
  25. package/dist/cjs/internal/core-effect.js.map +1 -1
  26. package/dist/cjs/internal/core.js +6 -5
  27. package/dist/cjs/internal/core.js.map +1 -1
  28. package/dist/cjs/internal/dateTime.js +12 -3
  29. package/dist/cjs/internal/dateTime.js.map +1 -1
  30. package/dist/cjs/internal/effect/circular.js +15 -2
  31. package/dist/cjs/internal/effect/circular.js.map +1 -1
  32. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  33. package/dist/cjs/internal/groupBy.js +7 -7
  34. package/dist/cjs/internal/groupBy.js.map +1 -1
  35. package/dist/cjs/internal/rateLimiter.js +8 -7
  36. package/dist/cjs/internal/rateLimiter.js.map +1 -1
  37. package/dist/cjs/internal/runtime.js +7 -11
  38. package/dist/cjs/internal/runtime.js.map +1 -1
  39. package/dist/cjs/internal/stream.js +5 -5
  40. package/dist/cjs/internal/stream.js.map +1 -1
  41. package/dist/cjs/internal/version.js +1 -1
  42. package/dist/dts/Arbitrary.d.ts.map +1 -1
  43. package/dist/dts/Array.d.ts +62 -16
  44. package/dist/dts/Array.d.ts.map +1 -1
  45. package/dist/dts/Cause.d.ts +27 -3
  46. package/dist/dts/Cause.d.ts.map +1 -1
  47. package/dist/dts/Cron.d.ts +10 -3
  48. package/dist/dts/Cron.d.ts.map +1 -1
  49. package/dist/dts/Duration.d.ts +5 -5
  50. package/dist/dts/Duration.d.ts.map +1 -1
  51. package/dist/dts/Effect.d.ts +31 -22
  52. package/dist/dts/Effect.d.ts.map +1 -1
  53. package/dist/dts/FiberHandle.d.ts +8 -8
  54. package/dist/dts/FiberMap.d.ts +8 -8
  55. package/dist/dts/FiberSet.d.ts +8 -8
  56. package/dist/dts/Inspectable.d.ts.map +1 -1
  57. package/dist/dts/LogLevel.d.ts +90 -6
  58. package/dist/dts/LogLevel.d.ts.map +1 -1
  59. package/dist/dts/ParseResult.d.ts +11 -0
  60. package/dist/dts/ParseResult.d.ts.map +1 -1
  61. package/dist/dts/Schema.d.ts +53 -33
  62. package/dist/dts/Schema.d.ts.map +1 -1
  63. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  64. package/dist/dts/internal/core.d.ts.map +1 -1
  65. package/dist/dts/internal/stream.d.ts.map +1 -1
  66. package/dist/esm/Arbitrary.js +72 -14
  67. package/dist/esm/Arbitrary.js.map +1 -1
  68. package/dist/esm/Array.js +11 -9
  69. package/dist/esm/Array.js.map +1 -1
  70. package/dist/esm/Cause.js +26 -2
  71. package/dist/esm/Cause.js.map +1 -1
  72. package/dist/esm/Cron.js +53 -22
  73. package/dist/esm/Cron.js.map +1 -1
  74. package/dist/esm/Duration.js.map +1 -1
  75. package/dist/esm/Effect.js +32 -23
  76. package/dist/esm/Effect.js.map +1 -1
  77. package/dist/esm/FiberHandle.js +8 -8
  78. package/dist/esm/FiberMap.js +8 -8
  79. package/dist/esm/FiberSet.js +8 -8
  80. package/dist/esm/Inspectable.js +0 -3
  81. package/dist/esm/Inspectable.js.map +1 -1
  82. package/dist/esm/LogLevel.js +30 -2
  83. package/dist/esm/LogLevel.js.map +1 -1
  84. package/dist/esm/ParseResult.js +38 -18
  85. package/dist/esm/ParseResult.js.map +1 -1
  86. package/dist/esm/Schema.js +186 -110
  87. package/dist/esm/Schema.js.map +1 -1
  88. package/dist/esm/internal/cause.js.map +1 -1
  89. package/dist/esm/internal/core-effect.js +6 -5
  90. package/dist/esm/internal/core-effect.js.map +1 -1
  91. package/dist/esm/internal/core.js +6 -5
  92. package/dist/esm/internal/core.js.map +1 -1
  93. package/dist/esm/internal/dateTime.js +11 -2
  94. package/dist/esm/internal/dateTime.js.map +1 -1
  95. package/dist/esm/internal/effect/circular.js +15 -2
  96. package/dist/esm/internal/effect/circular.js.map +1 -1
  97. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  98. package/dist/esm/internal/groupBy.js +7 -7
  99. package/dist/esm/internal/groupBy.js.map +1 -1
  100. package/dist/esm/internal/rateLimiter.js +8 -7
  101. package/dist/esm/internal/rateLimiter.js.map +1 -1
  102. package/dist/esm/internal/runtime.js +7 -11
  103. package/dist/esm/internal/runtime.js.map +1 -1
  104. package/dist/esm/internal/stream.js +5 -5
  105. package/dist/esm/internal/stream.js.map +1 -1
  106. package/dist/esm/internal/version.js +1 -1
  107. package/package.json +1 -1
  108. package/src/Arbitrary.ts +84 -14
  109. package/src/Array.ts +65 -19
  110. package/src/Cause.ts +27 -3
  111. package/src/Cron.ts +30 -27
  112. package/src/Duration.ts +11 -3
  113. package/src/Effect.ts +35 -23
  114. package/src/FiberHandle.ts +8 -8
  115. package/src/FiberMap.ts +8 -8
  116. package/src/FiberSet.ts +8 -8
  117. package/src/Inspectable.ts +0 -1
  118. package/src/LogLevel.ts +90 -6
  119. package/src/ParseResult.ts +52 -28
  120. package/src/Schema.ts +233 -124
  121. package/src/internal/cause.ts +1 -1
  122. package/src/internal/core-effect.ts +16 -9
  123. package/src/internal/core.ts +9 -4
  124. package/src/internal/dateTime.ts +12 -2
  125. package/src/internal/effect/circular.ts +19 -17
  126. package/src/internal/fiberRuntime.ts +2 -1
  127. package/src/internal/groupBy.ts +35 -39
  128. package/src/internal/rateLimiter.ts +8 -7
  129. package/src/internal/runtime.ts +6 -14
  130. package/src/internal/stream.ts +13 -15
  131. package/src/internal/version.ts +1 -1
@@ -132,7 +132,7 @@ export const sequential = <E, E2>(left: Cause.Cause<E>, right: Cause.Cause<E2>):
132
132
  // -----------------------------------------------------------------------------
133
133
 
134
134
  /** @internal */
135
- export const isCause = (u: unknown): u is Cause.Cause<never> => hasProperty(u, CauseTypeId)
135
+ export const isCause = (u: unknown): u is Cause.Cause<unknown> => hasProperty(u, CauseTypeId)
136
136
 
137
137
  /** @internal */
138
138
  export const isEmptyType = <E>(self: Cause.Cause<E>): self is Cause.Empty => self._tag === OpCodes.OP_EMPTY
@@ -103,7 +103,11 @@ export const try_: {
103
103
  try {
104
104
  return core.succeed(internalCall(evaluate))
105
105
  } catch (error) {
106
- return core.fail(onFailure ? internalCall(() => onFailure(error)) : new core.UnknownException(error))
106
+ return core.fail(
107
+ onFailure
108
+ ? internalCall(() => onFailure(error))
109
+ : new core.UnknownException(error, "An unknown error occurred in Effect.try")
110
+ )
107
111
  }
108
112
  })
109
113
  }
@@ -1644,17 +1648,20 @@ export const tryPromise: {
1644
1648
  evaluate = arg.try as (signal?: AbortSignal) => PromiseLike<A>
1645
1649
  catcher = arg.catch
1646
1650
  }
1651
+ const fail = (e: unknown) =>
1652
+ catcher
1653
+ ? core.failSync(() => catcher(e))
1654
+ : core.fail(new core.UnknownException(e, "An unknown error occurred in Effect.tryPromise"))
1647
1655
 
1648
1656
  if (evaluate.length >= 1) {
1649
1657
  return core.async((resolve, signal) => {
1650
1658
  try {
1651
- evaluate(signal)
1652
- .then(
1653
- (a) => resolve(core.exitSucceed(a)),
1654
- (e) => resolve(catcher ? core.failSync(() => catcher(e)) : core.fail(new core.UnknownException(e)))
1655
- )
1659
+ evaluate(signal).then(
1660
+ (a) => resolve(core.exitSucceed(a)),
1661
+ (e) => resolve(fail(e))
1662
+ )
1656
1663
  } catch (e) {
1657
- resolve(catcher ? core.failSync(() => catcher(e)) : core.fail(new core.UnknownException(e)))
1664
+ resolve(fail(e))
1658
1665
  }
1659
1666
  })
1660
1667
  }
@@ -1664,10 +1671,10 @@ export const tryPromise: {
1664
1671
  evaluate()
1665
1672
  .then(
1666
1673
  (a) => resolve(core.exitSucceed(a)),
1667
- (e) => resolve(catcher ? core.failSync(() => catcher(e)) : core.fail(new core.UnknownException(e)))
1674
+ (e) => resolve(fail(e))
1668
1675
  )
1669
1676
  } catch (e) {
1670
- resolve(catcher ? core.failSync(() => catcher(e)) : core.fail(new core.UnknownException(e)))
1677
+ resolve(fail(e))
1671
1678
  }
1672
1679
  })
1673
1680
  }
@@ -797,7 +797,8 @@ export const andThen: {
797
797
  return b
798
798
  } else if (isPromiseLike(b)) {
799
799
  return unsafeAsync<any, Cause.UnknownException>((resume) => {
800
- b.then((a) => resume(succeed(a)), (e) => resume(fail(new UnknownException(e))))
800
+ b.then((a) => resume(succeed(a)), (e) =>
801
+ resume(fail(new UnknownException(e, "An unknown error occurred in Effect.andThen"))))
801
802
  })
802
803
  }
803
804
  return succeed(b)
@@ -1281,7 +1282,8 @@ export const tap = dual<
1281
1282
  return as(b, a)
1282
1283
  } else if (isPromiseLike(b)) {
1283
1284
  return unsafeAsync<any, Cause.UnknownException>((resume) => {
1284
- b.then((_) => resume(succeed(a)), (e) => resume(fail(new UnknownException(e))))
1285
+ b.then((_) => resume(succeed(a)), (e) =>
1286
+ resume(fail(new UnknownException(e, "An unknown error occurred in Effect.tap"))))
1285
1287
  })
1286
1288
  }
1287
1289
  return succeed(a)
@@ -2208,7 +2210,10 @@ export const YieldableError: new(message?: string, options?: ErrorOptions) => Ca
2208
2210
  return fail(this)
2209
2211
  }
2210
2212
  toJSON() {
2211
- return { ...this }
2213
+ const obj = { ...this }
2214
+ if (this.message) obj.message = this.message
2215
+ if (this.cause) obj.cause = this.cause
2216
+ return obj
2212
2217
  }
2213
2218
  [NodeInspectSymbol]() {
2214
2219
  if (this.toString !== globalThis.Error.prototype.toString) {
@@ -2345,7 +2350,7 @@ export const UnknownException: new(cause: unknown, message?: string | undefined)
2345
2350
  class UnknownException extends YieldableError {
2346
2351
  readonly _tag = "UnknownException"
2347
2352
  readonly error: unknown
2348
- constructor(readonly cause: unknown, message?: string) {
2353
+ constructor(cause: unknown, message?: string) {
2349
2354
  super(message ?? "An unknown error occurred", { cause })
2350
2355
  this.error = cause
2351
2356
  }
@@ -234,6 +234,9 @@ export const unsafeMake = <A extends DateTime.DateTime.Input>(input: A): DateTim
234
234
  return unsafeFromDate(new Date(input)) as DateTime.DateTime.PreserveZone<A>
235
235
  }
236
236
 
237
+ const minEpochMillis = -8640000000000000 + (12 * 60 * 60 * 1000)
238
+ const maxEpochMillis = 8640000000000000 - (14 * 60 * 60 * 1000)
239
+
237
240
  /** @internal */
238
241
  export const unsafeMakeZoned = (input: DateTime.DateTime.Input, options?: {
239
242
  readonly timeZone?: number | string | DateTime.TimeZone | undefined
@@ -243,6 +246,9 @@ export const unsafeMakeZoned = (input: DateTime.DateTime.Input, options?: {
243
246
  return input
244
247
  }
245
248
  const self = unsafeMake(input)
249
+ if (self.epochMillis < minEpochMillis || self.epochMillis > maxEpochMillis) {
250
+ throw new IllegalArgumentException(`Epoch millis out of range: ${self.epochMillis}`)
251
+ }
246
252
  let zone: DateTime.TimeZone
247
253
  if (options?.timeZone === undefined) {
248
254
  const offset = new Date(self.epochMillis).getTimezoneOffset() * -60 * 1000
@@ -568,8 +574,12 @@ export const zonedOffset = (self: DateTime.Zoned): number => {
568
574
 
569
575
  const offsetToString = (offset: number): string => {
570
576
  const abs = Math.abs(offset)
571
- const hours = Math.floor(abs / (60 * 60 * 1000))
572
- const minutes = Math.round((abs % (60 * 60 * 1000)) / (60 * 1000))
577
+ let hours = Math.floor(abs / (60 * 60 * 1000))
578
+ let minutes = Math.round((abs % (60 * 60 * 1000)) / (60 * 1000))
579
+ if (minutes === 60) {
580
+ hours += 1
581
+ minutes = 0
582
+ }
573
583
  return `${offset < 0 ? "-" : "+"}${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`
574
584
  }
575
585
 
@@ -27,7 +27,6 @@ import type * as Types from "../../Types.js"
27
27
  import * as internalCause from "../cause.js"
28
28
  import * as effect from "../core-effect.js"
29
29
  import * as core from "../core.js"
30
- import * as executionStrategy from "../executionStrategy.js"
31
30
  import * as internalFiber from "../fiber.js"
32
31
  import * as fiberRuntime from "../fiberRuntime.js"
33
32
  import { globalScope } from "../fiberScope.js"
@@ -362,23 +361,26 @@ export const forkIn = dual<
362
361
  >(
363
362
  2,
364
363
  (self, scope) =>
365
- core.uninterruptibleMask((restore) =>
366
- core.flatMap(scope.fork(executionStrategy.sequential), (child) =>
367
- pipe(
368
- restore(self),
369
- core.onExit((exit) => child.close(exit)),
370
- fiberRuntime.forkDaemon,
371
- core.tap((fiber) =>
372
- child.addFinalizer(() =>
373
- core.fiberIdWith((fiberId) =>
374
- Equal.equals(fiberId, fiber.id()) ?
375
- core.void :
376
- core.asVoid(core.interruptFiber(fiber))
377
- )
378
- )
364
+ core.withFiberRuntime((parent, parentStatus) => {
365
+ const scopeImpl = scope as fiberRuntime.ScopeImpl
366
+ const fiber = fiberRuntime.unsafeFork(self, parent, parentStatus.runtimeFlags, globalScope)
367
+ if (scopeImpl.state._tag === "Open") {
368
+ const finalizer = () =>
369
+ core.fiberIdWith((fiberId) =>
370
+ Equal.equals(fiberId, fiber.id()) ?
371
+ core.void :
372
+ core.asVoid(core.interruptFiber(fiber))
379
373
  )
380
- ))
381
- )
374
+ scopeImpl.state.finalizers.add(finalizer)
375
+ fiber.addObserver(() => {
376
+ if (scopeImpl.state._tag === "Closed") return
377
+ scopeImpl.state.finalizers.delete(finalizer)
378
+ })
379
+ } else {
380
+ fiber.unsafeInterruptAsFork(parent.id())
381
+ }
382
+ return core.succeed(fiber)
383
+ })
382
384
  )
383
385
 
384
386
  /** @internal */
@@ -3207,7 +3207,8 @@ export const scopeTag = Context.GenericTag<Scope.Scope>("effect/Scope")
3207
3207
  /* @internal */
3208
3208
  export const scope: Effect.Effect<Scope.Scope, never, Scope.Scope> = scopeTag
3209
3209
 
3210
- interface ScopeImpl extends Scope.CloseableScope {
3210
+ /** @internal */
3211
+ export interface ScopeImpl extends Scope.CloseableScope {
3211
3212
  state: {
3212
3213
  readonly _tag: "Open"
3213
3214
  readonly finalizers: Set<Scope.Scope.Finalizer>
@@ -152,18 +152,16 @@ export const groupBy = dual<
152
152
  ): GroupBy.GroupBy<K, V, E | E2, R | R2> =>
153
153
  make(
154
154
  stream.unwrapScoped(
155
- Effect.gen(function*($) {
156
- const decider = yield* $(
157
- Deferred.make<(key: K, value: V) => Effect.Effect<Predicate<number>>>()
158
- )
159
- const output = yield* $(Effect.acquireRelease(
155
+ Effect.gen(function*() {
156
+ const decider = yield* Deferred.make<(key: K, value: V) => Effect.Effect<Predicate<number>>>()
157
+ const output = yield* Effect.acquireRelease(
160
158
  Queue.bounded<Exit.Exit<readonly [K, Queue.Dequeue<Take.Take<V, E | E2>>], Option.Option<E | E2>>>(
161
159
  options?.bufferSize ?? 16
162
160
  ),
163
161
  (queue) => Queue.shutdown(queue)
164
- ))
165
- const ref = yield* $(Ref.make<Map<K, number>>(new Map()))
166
- const add = yield* $(
162
+ )
163
+ const ref = yield* Ref.make<Map<K, number>>(new Map())
164
+ const add = yield* pipe(
167
165
  stream.mapEffectSequential(self, f),
168
166
  stream.distributedWithDynamicCallback(
169
167
  options?.bufferSize ?? 16,
@@ -171,37 +169,35 @@ export const groupBy = dual<
171
169
  (exit) => Queue.offer(output, exit)
172
170
  )
173
171
  )
174
- yield* $(
175
- Deferred.succeed(decider, (key, _) =>
176
- pipe(
177
- Ref.get(ref),
178
- Effect.map((map) => Option.fromNullable(map.get(key))),
179
- Effect.flatMap(Option.match({
180
- onNone: () =>
181
- Effect.flatMap(add, ([index, queue]) =>
182
- Effect.zipRight(
183
- Ref.update(ref, (map) => map.set(key, index)),
184
- pipe(
185
- Queue.offer(
186
- output,
187
- Exit.succeed(
188
- [
189
- key,
190
- mapDequeue(queue, (exit) =>
191
- new take.TakeImpl(pipe(
192
- exit,
193
- Exit.map((tuple) => Chunk.of(tuple[1]))
194
- )))
195
- ] as const
196
- )
197
- ),
198
- Effect.as<Predicate<number>>((n: number) => n === index)
199
- )
200
- )),
201
- onSome: (index) => Effect.succeed<Predicate<number>>((n: number) => n === index)
202
- }))
203
- ))
204
- )
172
+ yield* Deferred.succeed(decider, (key, _) =>
173
+ pipe(
174
+ Ref.get(ref),
175
+ Effect.map((map) => Option.fromNullable(map.get(key))),
176
+ Effect.flatMap(Option.match({
177
+ onNone: () =>
178
+ Effect.flatMap(add, ([index, queue]) =>
179
+ Effect.zipRight(
180
+ Ref.update(ref, (map) => map.set(key, index)),
181
+ pipe(
182
+ Queue.offer(
183
+ output,
184
+ Exit.succeed(
185
+ [
186
+ key,
187
+ mapDequeue(queue, (exit) =>
188
+ new take.TakeImpl(pipe(
189
+ exit,
190
+ Exit.map((tuple) => Chunk.of(tuple[1]))
191
+ )))
192
+ ] as const
193
+ )
194
+ ),
195
+ Effect.as<Predicate<number>>((n: number) => n === index)
196
+ )
197
+ )),
198
+ onSome: (index) => Effect.succeed<Predicate<number>>((n: number) => n === index)
199
+ }))
200
+ ))
205
201
  return stream.flattenExitOption(stream.fromQueue(output, { shutdown: true }))
206
202
  })
207
203
  )
@@ -2,6 +2,7 @@ import type { DurationInput } from "../Duration.js"
2
2
  import * as Duration from "../Duration.js"
3
3
  import * as Effect from "../Effect.js"
4
4
  import * as FiberRef from "../FiberRef.js"
5
+ import { pipe } from "../Function.js"
5
6
  import { globalValue } from "../GlobalValue.js"
6
7
  import type * as RateLimiter from "../RateLimiter.js"
7
8
  import type * as Scope from "../Scope.js"
@@ -31,16 +32,16 @@ const tokenBucket = (limit: number, window: DurationInput): Effect.Effect<
31
32
  never,
32
33
  Scope.Scope
33
34
  > =>
34
- Effect.gen(function*(_) {
35
+ Effect.gen(function*() {
35
36
  const millisPerToken = Math.ceil(Duration.toMillis(window) / limit)
36
- const semaphore = yield* _(Effect.makeSemaphore(limit))
37
+ const semaphore = yield* Effect.makeSemaphore(limit)
37
38
  const latch = yield* Effect.makeSemaphore(0)
38
39
  const refill: Effect.Effect<void> = Effect.sleep(millisPerToken).pipe(
39
40
  Effect.zipRight(latch.releaseAll),
40
41
  Effect.zipRight(semaphore.release(1)),
41
42
  Effect.flatMap((free) => free === limit ? Effect.void : refill)
42
43
  )
43
- yield* _(
44
+ yield* pipe(
44
45
  latch.take(1),
45
46
  Effect.zipRight(refill),
46
47
  Effect.forever,
@@ -61,10 +62,10 @@ const fixedWindow = (limit: number, window: DurationInput): Effect.Effect<
61
62
  never,
62
63
  Scope.Scope
63
64
  > =>
64
- Effect.gen(function*(_) {
65
- const semaphore = yield* _(Effect.makeSemaphore(limit))
66
- const latch = yield* _(Effect.makeSemaphore(0))
67
- yield* _(
65
+ Effect.gen(function*() {
66
+ const semaphore = yield* Effect.makeSemaphore(limit)
67
+ const latch = yield* Effect.makeSemaphore(0)
68
+ yield* pipe(
68
69
  latch.take(1),
69
70
  Effect.zipRight(Effect.sleep(window)),
70
71
  Effect.zipRight(latch.releaseAll),
@@ -165,23 +165,15 @@ class FiberFailureImpl extends Error implements Runtime.FiberFailure {
165
165
  readonly [FiberFailureId]: Runtime.FiberFailureId
166
166
  readonly [FiberFailureCauseId]: Cause.Cause<unknown>
167
167
  constructor(cause: Cause.Cause<unknown>) {
168
- super()
168
+ const head = InternalCause.prettyErrors(cause)[0]
169
169
 
170
+ super(head?.message || "An error has occurred")
170
171
  this[FiberFailureId] = FiberFailureId
171
172
  this[FiberFailureCauseId] = cause
172
173
 
173
- const prettyErrors = InternalCause.prettyErrors(cause)
174
- if (prettyErrors.length > 0) {
175
- const head = prettyErrors[0]
176
- this.name = head.name
177
- this.message = head.message
178
- this.stack = head.stack!
179
- }
180
-
181
- this.name = `(FiberFailure) ${this.name}`
182
-
183
- if (this.message === undefined || this.message.length === 0) {
184
- this.message = "An error has occurred"
174
+ this.name = head ? `(FiberFailure) ${head.name}` : "FiberFailure"
175
+ if (head?.stack) {
176
+ this.stack = head.stack
185
177
  }
186
178
  }
187
179
 
@@ -193,7 +185,7 @@ class FiberFailureImpl extends Error implements Runtime.FiberFailure {
193
185
  }
194
186
 
195
187
  toString(): string {
196
- return "(FiberFailure) " + (this.stack ?? this.message)
188
+ return "(FiberFailure) " + InternalCause.pretty(this[FiberFailureCauseId], { renderErrorCause: true })
197
189
  }
198
190
  [Inspectable.NodeInspectSymbol](): unknown {
199
191
  return this.toString()
@@ -2111,7 +2111,7 @@ export const distributedWithDynamicCallback = dual<
2111
2111
  (ref, _) => pipe(Ref.get(ref), Effect.flatMap((queues) => pipe(queues.values(), Effect.forEach(Queue.shutdown))))
2112
2112
  ),
2113
2113
  Effect.flatMap((queuesRef) =>
2114
- Effect.gen(function*($) {
2114
+ Effect.gen(function*() {
2115
2115
  const offer = (a: A): Effect.Effect<void> =>
2116
2116
  pipe(
2117
2117
  decide(a),
@@ -2157,19 +2157,17 @@ export const distributedWithDynamicCallback = dual<
2157
2157
  ),
2158
2158
  Effect.asVoid
2159
2159
  )
2160
- const queuesLock = yield* $(Effect.makeSemaphore(1))
2161
- const newQueue = yield* $(
2162
- Ref.make<Effect.Effect<[number, Queue.Queue<Exit.Exit<A, Option.Option<E>>>]>>(
2163
- pipe(
2164
- Queue.bounded<Exit.Exit<A, Option.Option<E>>>(maximumLag),
2165
- Effect.flatMap((queue) => {
2166
- const id = newDistributedWithDynamicId()
2167
- return pipe(
2168
- Ref.update(queuesRef, (map) => map.set(id, queue)),
2169
- Effect.as([id, queue])
2170
- )
2171
- })
2172
- )
2160
+ const queuesLock = yield* Effect.makeSemaphore(1)
2161
+ const newQueue = yield* Ref.make<Effect.Effect<[number, Queue.Queue<Exit.Exit<A, Option.Option<E>>>]>>(
2162
+ pipe(
2163
+ Queue.bounded<Exit.Exit<A, Option.Option<E>>>(maximumLag),
2164
+ Effect.flatMap((queue) => {
2165
+ const id = newDistributedWithDynamicId()
2166
+ return pipe(
2167
+ Ref.update(queuesRef, (map) => map.set(id, queue)),
2168
+ Effect.as([id, queue])
2169
+ )
2170
+ })
2173
2171
  )
2174
2172
  )
2175
2173
  const finalize = (endTake: Exit.Exit<never, Option.Option<E>>): Effect.Effect<void> =>
@@ -2213,7 +2211,7 @@ export const distributedWithDynamicCallback = dual<
2213
2211
  Effect.asVoid
2214
2212
  )
2215
2213
  )
2216
- yield* $(
2214
+ yield* pipe(
2217
2215
  self,
2218
2216
  runForEachScoped(offer),
2219
2217
  Effect.matchCauseEffect({
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.12.4"
1
+ let moduleVersion = "3.12.6"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4