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.
- package/dist/cjs/Arbitrary.js +72 -14
- package/dist/cjs/Arbitrary.js.map +1 -1
- package/dist/cjs/Array.js +11 -9
- package/dist/cjs/Array.js.map +1 -1
- package/dist/cjs/Cause.js +26 -2
- package/dist/cjs/Cause.js.map +1 -1
- package/dist/cjs/Cron.js +55 -23
- package/dist/cjs/Cron.js.map +1 -1
- package/dist/cjs/Duration.js.map +1 -1
- package/dist/cjs/Effect.js +32 -23
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/FiberHandle.js +8 -8
- package/dist/cjs/FiberMap.js +8 -8
- package/dist/cjs/FiberSet.js +8 -8
- package/dist/cjs/Inspectable.js +0 -4
- package/dist/cjs/Inspectable.js.map +1 -1
- package/dist/cjs/LogLevel.js +30 -2
- package/dist/cjs/LogLevel.js.map +1 -1
- package/dist/cjs/ParseResult.js +38 -18
- package/dist/cjs/ParseResult.js.map +1 -1
- package/dist/cjs/Schema.js +192 -118
- package/dist/cjs/Schema.js.map +1 -1
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +6 -5
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +6 -5
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/dateTime.js +12 -3
- package/dist/cjs/internal/dateTime.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +15 -2
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/groupBy.js +7 -7
- package/dist/cjs/internal/groupBy.js.map +1 -1
- package/dist/cjs/internal/rateLimiter.js +8 -7
- package/dist/cjs/internal/rateLimiter.js.map +1 -1
- package/dist/cjs/internal/runtime.js +7 -11
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/stream.js +5 -5
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Arbitrary.d.ts.map +1 -1
- package/dist/dts/Array.d.ts +62 -16
- package/dist/dts/Array.d.ts.map +1 -1
- package/dist/dts/Cause.d.ts +27 -3
- package/dist/dts/Cause.d.ts.map +1 -1
- package/dist/dts/Cron.d.ts +10 -3
- package/dist/dts/Cron.d.ts.map +1 -1
- package/dist/dts/Duration.d.ts +5 -5
- package/dist/dts/Duration.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +31 -22
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/FiberHandle.d.ts +8 -8
- package/dist/dts/FiberMap.d.ts +8 -8
- package/dist/dts/FiberSet.d.ts +8 -8
- package/dist/dts/Inspectable.d.ts.map +1 -1
- package/dist/dts/LogLevel.d.ts +90 -6
- package/dist/dts/LogLevel.d.ts.map +1 -1
- package/dist/dts/ParseResult.d.ts +11 -0
- package/dist/dts/ParseResult.d.ts.map +1 -1
- package/dist/dts/Schema.d.ts +53 -33
- package/dist/dts/Schema.d.ts.map +1 -1
- package/dist/dts/internal/core-effect.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Arbitrary.js +72 -14
- package/dist/esm/Arbitrary.js.map +1 -1
- package/dist/esm/Array.js +11 -9
- package/dist/esm/Array.js.map +1 -1
- package/dist/esm/Cause.js +26 -2
- package/dist/esm/Cause.js.map +1 -1
- package/dist/esm/Cron.js +53 -22
- package/dist/esm/Cron.js.map +1 -1
- package/dist/esm/Duration.js.map +1 -1
- package/dist/esm/Effect.js +32 -23
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/FiberHandle.js +8 -8
- package/dist/esm/FiberMap.js +8 -8
- package/dist/esm/FiberSet.js +8 -8
- package/dist/esm/Inspectable.js +0 -3
- package/dist/esm/Inspectable.js.map +1 -1
- package/dist/esm/LogLevel.js +30 -2
- package/dist/esm/LogLevel.js.map +1 -1
- package/dist/esm/ParseResult.js +38 -18
- package/dist/esm/ParseResult.js.map +1 -1
- package/dist/esm/Schema.js +186 -110
- package/dist/esm/Schema.js.map +1 -1
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/core-effect.js +6 -5
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +6 -5
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/dateTime.js +11 -2
- package/dist/esm/internal/dateTime.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +15 -2
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/groupBy.js +7 -7
- package/dist/esm/internal/groupBy.js.map +1 -1
- package/dist/esm/internal/rateLimiter.js +8 -7
- package/dist/esm/internal/rateLimiter.js.map +1 -1
- package/dist/esm/internal/runtime.js +7 -11
- package/dist/esm/internal/runtime.js.map +1 -1
- package/dist/esm/internal/stream.js +5 -5
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/Arbitrary.ts +84 -14
- package/src/Array.ts +65 -19
- package/src/Cause.ts +27 -3
- package/src/Cron.ts +30 -27
- package/src/Duration.ts +11 -3
- package/src/Effect.ts +35 -23
- package/src/FiberHandle.ts +8 -8
- package/src/FiberMap.ts +8 -8
- package/src/FiberSet.ts +8 -8
- package/src/Inspectable.ts +0 -1
- package/src/LogLevel.ts +90 -6
- package/src/ParseResult.ts +52 -28
- package/src/Schema.ts +233 -124
- package/src/internal/cause.ts +1 -1
- package/src/internal/core-effect.ts +16 -9
- package/src/internal/core.ts +9 -4
- package/src/internal/dateTime.ts +12 -2
- package/src/internal/effect/circular.ts +19 -17
- package/src/internal/fiberRuntime.ts +2 -1
- package/src/internal/groupBy.ts +35 -39
- package/src/internal/rateLimiter.ts +8 -7
- package/src/internal/runtime.ts +6 -14
- package/src/internal/stream.ts +13 -15
- package/src/internal/version.ts +1 -1
package/src/internal/cause.ts
CHANGED
|
@@ -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<
|
|
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(
|
|
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
|
-
.
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
)
|
|
1659
|
+
evaluate(signal).then(
|
|
1660
|
+
(a) => resolve(core.exitSucceed(a)),
|
|
1661
|
+
(e) => resolve(fail(e))
|
|
1662
|
+
)
|
|
1656
1663
|
} catch (e) {
|
|
1657
|
-
resolve(
|
|
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(
|
|
1674
|
+
(e) => resolve(fail(e))
|
|
1668
1675
|
)
|
|
1669
1676
|
} catch (e) {
|
|
1670
|
-
resolve(
|
|
1677
|
+
resolve(fail(e))
|
|
1671
1678
|
}
|
|
1672
1679
|
})
|
|
1673
1680
|
}
|
package/src/internal/core.ts
CHANGED
|
@@ -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) =>
|
|
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) =>
|
|
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
|
-
|
|
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(
|
|
2353
|
+
constructor(cause: unknown, message?: string) {
|
|
2349
2354
|
super(message ?? "An unknown error occurred", { cause })
|
|
2350
2355
|
this.error = cause
|
|
2351
2356
|
}
|
package/src/internal/dateTime.ts
CHANGED
|
@@ -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
|
-
|
|
572
|
-
|
|
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.
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
core.
|
|
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
|
-
|
|
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>
|
package/src/internal/groupBy.ts
CHANGED
|
@@ -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
|
-
|
|
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*
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
Effect.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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*
|
|
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*
|
|
66
|
-
const latch = yield*
|
|
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),
|
package/src/internal/runtime.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
174
|
-
if (
|
|
175
|
-
|
|
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
|
|
188
|
+
return "(FiberFailure) " + InternalCause.pretty(this[FiberFailureCauseId], { renderErrorCause: true })
|
|
197
189
|
}
|
|
198
190
|
[Inspectable.NodeInspectSymbol](): unknown {
|
|
199
191
|
return this.toString()
|
package/src/internal/stream.ts
CHANGED
|
@@ -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*
|
|
2161
|
-
const newQueue = yield*
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
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({
|
package/src/internal/version.ts
CHANGED