effect 3.5.9 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DateTime/package.json +6 -0
- package/dist/cjs/DateTime.js +1514 -0
- package/dist/cjs/DateTime.js.map +1 -0
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/List.js.map +1 -1
- package/dist/cjs/Metric.js.map +1 -1
- package/dist/cjs/Predicate.js +8 -0
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Random.js +16 -1
- package/dist/cjs/Random.js.map +1 -1
- package/dist/cjs/Stream.js +82 -3
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Struct.js +23 -1
- package/dist/cjs/Struct.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/configProvider.js.map +1 -1
- package/dist/cjs/internal/core.js +1 -1
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/defaultServices.js +9 -2
- package/dist/cjs/internal/defaultServices.js.map +1 -1
- package/dist/cjs/internal/metric.js.map +1 -1
- package/dist/cjs/internal/stream/emit.js +73 -1
- package/dist/cjs/internal/stream/emit.js.map +1 -1
- package/dist/cjs/internal/stream.js +30 -22
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/ConfigProvider.d.ts +2 -2
- package/dist/dts/ConfigProvider.d.ts.map +1 -1
- package/dist/dts/DateTime.d.ts +1265 -0
- package/dist/dts/DateTime.d.ts.map +1 -0
- package/dist/dts/Effect.d.ts +12 -0
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/List.d.ts +2 -1
- package/dist/dts/List.d.ts.map +1 -1
- package/dist/dts/Metric.d.ts +1 -1
- package/dist/dts/Metric.d.ts.map +1 -1
- package/dist/dts/MetricRegistry.d.ts +1 -1
- package/dist/dts/MetricRegistry.d.ts.map +1 -1
- package/dist/dts/Predicate.d.ts +63 -2
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Random.d.ts +18 -0
- package/dist/dts/Random.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +91 -0
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/StreamEmit.d.ts +44 -0
- package/dist/dts/StreamEmit.d.ts.map +1 -1
- package/dist/dts/Struct.d.ts +21 -0
- package/dist/dts/Struct.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/defaultServices.d.ts.map +1 -1
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/DateTime.js +1465 -0
- package/dist/esm/DateTime.js.map +1 -0
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/List.js.map +1 -1
- package/dist/esm/Metric.js.map +1 -1
- package/dist/esm/Predicate.js +8 -0
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Random.js +15 -0
- package/dist/esm/Random.js.map +1 -1
- package/dist/esm/Stream.js +79 -0
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/Struct.js +21 -0
- package/dist/esm/Struct.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/configProvider.js.map +1 -1
- package/dist/esm/internal/core.js +1 -1
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/defaultServices.js +6 -0
- package/dist/esm/internal/defaultServices.js.map +1 -1
- package/dist/esm/internal/metric.js.map +1 -1
- package/dist/esm/internal/stream/emit.js +71 -0
- package/dist/esm/internal/stream/emit.js.map +1 -1
- package/dist/esm/internal/stream.js +24 -18
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +9 -1
- package/src/ConfigProvider.ts +2 -2
- package/src/DateTime.ts +2104 -0
- package/src/Effect.ts +22 -0
- package/src/List.ts +3 -2
- package/src/Metric.ts +1 -1
- package/src/MetricRegistry.ts +1 -1
- package/src/Predicate.ts +68 -8
- package/src/Random.ts +24 -0
- package/src/Stream.ts +105 -0
- package/src/StreamEmit.ts +53 -0
- package/src/Struct.ts +22 -0
- package/src/index.ts +5 -0
- package/src/internal/configProvider.ts +20 -20
- package/src/internal/core.ts +37 -12
- package/src/internal/defaultServices.ts +14 -0
- package/src/internal/metric/registry.ts +1 -1
- package/src/internal/metric.ts +2 -2
- package/src/internal/stream/emit.ts +77 -0
- package/src/internal/stream.ts +86 -18
- package/src/internal/version.ts +1 -1
package/src/internal/core.ts
CHANGED
|
@@ -1250,6 +1250,12 @@ export const tap = dual<
|
|
|
1250
1250
|
) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1251
1251
|
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1252
1252
|
: Effect.Effect<A, E, R>
|
|
1253
|
+
<A, X, E1, R1>(
|
|
1254
|
+
f: (a: NoInfer<A>) => Effect.Effect<X, E1, R1>,
|
|
1255
|
+
options: { onlyEffect: true }
|
|
1256
|
+
): <E, R>(
|
|
1257
|
+
self: Effect.Effect<A, E, R>
|
|
1258
|
+
) => Effect.Effect<A, E | E1, R | R1>
|
|
1253
1259
|
<X>(
|
|
1254
1260
|
f: NotFunction<X>
|
|
1255
1261
|
): <A, E, R>(
|
|
@@ -1257,6 +1263,12 @@ export const tap = dual<
|
|
|
1257
1263
|
) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1258
1264
|
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1259
1265
|
: Effect.Effect<A, E, R>
|
|
1266
|
+
<X, E1, R1>(
|
|
1267
|
+
f: Effect.Effect<X, E1, R1>,
|
|
1268
|
+
options: { onlyEffect: true }
|
|
1269
|
+
): <A, E, R>(
|
|
1270
|
+
self: Effect.Effect<A, E, R>
|
|
1271
|
+
) => Effect.Effect<A, E | E1, R | R1>
|
|
1260
1272
|
},
|
|
1261
1273
|
{
|
|
1262
1274
|
<A, E, R, X>(
|
|
@@ -1265,25 +1277,38 @@ export const tap = dual<
|
|
|
1265
1277
|
): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1266
1278
|
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1267
1279
|
: Effect.Effect<A, E, R>
|
|
1280
|
+
<A, E, R, X, E1, R1>(
|
|
1281
|
+
self: Effect.Effect<A, E, R>,
|
|
1282
|
+
f: (a: NoInfer<A>) => Effect.Effect<X, E1, R1>,
|
|
1283
|
+
options: { onlyEffect: true }
|
|
1284
|
+
): Effect.Effect<A, E | E1, R | R1>
|
|
1268
1285
|
<A, E, R, X>(
|
|
1269
1286
|
self: Effect.Effect<A, E, R>,
|
|
1270
1287
|
f: NotFunction<X>
|
|
1271
1288
|
): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1272
1289
|
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1273
1290
|
: Effect.Effect<A, E, R>
|
|
1291
|
+
<A, E, R, X, E1, R1>(
|
|
1292
|
+
self: Effect.Effect<A, E, R>,
|
|
1293
|
+
f: Effect.Effect<X, E1, R1>,
|
|
1294
|
+
options: { onlyEffect: true }
|
|
1295
|
+
): Effect.Effect<A, E | E1, R | R1>
|
|
1274
1296
|
}
|
|
1275
|
-
>(
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1297
|
+
>(
|
|
1298
|
+
(args) => args.length === 3 || args.length === 2 && !(isObject(args[1]) && "onlyEffect" in args[1]),
|
|
1299
|
+
<A, E, R, X>(self: Effect.Effect<A, E, R>, f: X) =>
|
|
1300
|
+
flatMap(self, (a) => {
|
|
1301
|
+
const b = typeof f === "function" ? (f as any)(a) : f
|
|
1302
|
+
if (isEffect(b)) {
|
|
1303
|
+
return as(b, a)
|
|
1304
|
+
} else if (isPromiseLike(b)) {
|
|
1305
|
+
return async<any, Cause.UnknownException>((resume) => {
|
|
1306
|
+
b.then((_) => resume(succeed(a)), (e) => resume(fail(new UnknownException(e))))
|
|
1307
|
+
})
|
|
1308
|
+
}
|
|
1309
|
+
return succeed(a)
|
|
1310
|
+
})
|
|
1311
|
+
)
|
|
1287
1312
|
|
|
1288
1313
|
/* @internal */
|
|
1289
1314
|
export const transplant = <A, E, R>(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Array from "../Array.js"
|
|
1
2
|
import type * as Chunk from "../Chunk.js"
|
|
2
3
|
import type * as Clock from "../Clock.js"
|
|
3
4
|
import type * as Config from "../Config.js"
|
|
@@ -133,6 +134,19 @@ export const nextIntBetween = (min: number, max: number): Effect.Effect<number>
|
|
|
133
134
|
export const shuffle = <A>(elements: Iterable<A>): Effect.Effect<Chunk.Chunk<A>> =>
|
|
134
135
|
randomWith((random) => random.shuffle(elements))
|
|
135
136
|
|
|
137
|
+
/** @internal */
|
|
138
|
+
export const choice = <Self extends Iterable<unknown>>(
|
|
139
|
+
elements: Self
|
|
140
|
+
) => {
|
|
141
|
+
const array = Array.fromIterable(elements)
|
|
142
|
+
return core.map(
|
|
143
|
+
array.length === 0
|
|
144
|
+
? core.fail(new core.NoSuchElementException("Cannot select a random element from an empty array"))
|
|
145
|
+
: randomWith((random) => random.nextIntBetween(0, array.length)),
|
|
146
|
+
(i) => array[i]
|
|
147
|
+
) as any
|
|
148
|
+
}
|
|
149
|
+
|
|
136
150
|
// circular with Tracer
|
|
137
151
|
|
|
138
152
|
/** @internal */
|
|
@@ -27,7 +27,7 @@ class MetricRegistryImpl implements MetricRegistry.MetricRegistry {
|
|
|
27
27
|
MetricHook.MetricHook.Root
|
|
28
28
|
>()
|
|
29
29
|
|
|
30
|
-
snapshot():
|
|
30
|
+
snapshot(): Array<MetricPair.MetricPair.Untyped> {
|
|
31
31
|
const result: Array<MetricPair.MetricPair.Untyped> = []
|
|
32
32
|
for (const [key, hook] of this.map) {
|
|
33
33
|
result.push(metricPair.unsafeMake(key, hook.get()))
|
package/src/internal/metric.ts
CHANGED
|
@@ -525,9 +525,9 @@ export const zip = dual<
|
|
|
525
525
|
)
|
|
526
526
|
|
|
527
527
|
/** @internal */
|
|
528
|
-
export const unsafeSnapshot = ():
|
|
528
|
+
export const unsafeSnapshot = (): Array<MetricPair.MetricPair.Untyped> => globalMetricRegistry.snapshot()
|
|
529
529
|
|
|
530
530
|
/** @internal */
|
|
531
|
-
export const snapshot: Effect.Effect<
|
|
531
|
+
export const snapshot: Effect.Effect<Array<MetricPair.MetricPair.Untyped>> = core.sync(
|
|
532
532
|
unsafeSnapshot
|
|
533
533
|
)
|
|
@@ -4,6 +4,8 @@ import * as Effect from "../../Effect.js"
|
|
|
4
4
|
import * as Exit from "../../Exit.js"
|
|
5
5
|
import { pipe } from "../../Function.js"
|
|
6
6
|
import * as Option from "../../Option.js"
|
|
7
|
+
import type * as Queue from "../../Queue.js"
|
|
8
|
+
import type * as Scheduler from "../../Scheduler.js"
|
|
7
9
|
import type * as Emit from "../../StreamEmit.js"
|
|
8
10
|
|
|
9
11
|
/** @internal */
|
|
@@ -44,3 +46,78 @@ export const make = <R, E, A, B>(
|
|
|
44
46
|
}
|
|
45
47
|
return Object.assign(emit, ops)
|
|
46
48
|
}
|
|
49
|
+
|
|
50
|
+
/** @internal */
|
|
51
|
+
export const makePush = <E, A>(
|
|
52
|
+
queue: Queue.Queue<Array<A> | Exit.Exit<void, E>>,
|
|
53
|
+
scheduler: Scheduler.Scheduler
|
|
54
|
+
): Emit.EmitOpsPush<E, A> => {
|
|
55
|
+
let finished = false
|
|
56
|
+
let buffer: Array<A> = []
|
|
57
|
+
let running = false
|
|
58
|
+
function array(items: ReadonlyArray<A>) {
|
|
59
|
+
if (finished) return false
|
|
60
|
+
if (items.length <= 50_000) {
|
|
61
|
+
buffer.push.apply(buffer, items as Array<A>)
|
|
62
|
+
} else {
|
|
63
|
+
for (let i = 0; i < items.length; i++) {
|
|
64
|
+
buffer.push(items[0])
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (!running) {
|
|
68
|
+
running = true
|
|
69
|
+
scheduler.scheduleTask(flush, 0)
|
|
70
|
+
}
|
|
71
|
+
return true
|
|
72
|
+
}
|
|
73
|
+
function flush() {
|
|
74
|
+
running = false
|
|
75
|
+
if (buffer.length > 0) {
|
|
76
|
+
queue.unsafeOffer(buffer)
|
|
77
|
+
buffer = []
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function done(exit: Exit.Exit<A, E>) {
|
|
81
|
+
if (finished) return
|
|
82
|
+
finished = true
|
|
83
|
+
if (exit._tag === "Success") {
|
|
84
|
+
buffer.push(exit.value)
|
|
85
|
+
}
|
|
86
|
+
flush()
|
|
87
|
+
queue.unsafeOffer(exit._tag === "Success" ? Exit.void : exit)
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
single(value: A) {
|
|
91
|
+
if (finished) return false
|
|
92
|
+
buffer.push(value)
|
|
93
|
+
if (!running) {
|
|
94
|
+
running = true
|
|
95
|
+
scheduler.scheduleTask(flush, 0)
|
|
96
|
+
}
|
|
97
|
+
return true
|
|
98
|
+
},
|
|
99
|
+
array,
|
|
100
|
+
chunk(chunk) {
|
|
101
|
+
return array(Chunk.toReadonlyArray(chunk))
|
|
102
|
+
},
|
|
103
|
+
done,
|
|
104
|
+
end() {
|
|
105
|
+
if (finished) return
|
|
106
|
+
finished = true
|
|
107
|
+
flush()
|
|
108
|
+
queue.unsafeOffer(Exit.void)
|
|
109
|
+
},
|
|
110
|
+
halt(cause: Cause.Cause<E>) {
|
|
111
|
+
return done(Exit.failCause(cause))
|
|
112
|
+
},
|
|
113
|
+
fail(error: E) {
|
|
114
|
+
return done(Exit.fail(error))
|
|
115
|
+
},
|
|
116
|
+
die<Err>(defect: Err): void {
|
|
117
|
+
return done(Exit.die(defect))
|
|
118
|
+
},
|
|
119
|
+
dieMessage(message: string): void {
|
|
120
|
+
return done(Exit.die(new Error(message)))
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
package/src/internal/stream.ts
CHANGED
|
@@ -10,6 +10,7 @@ import * as Either from "../Either.js"
|
|
|
10
10
|
import * as Equal from "../Equal.js"
|
|
11
11
|
import * as Exit from "../Exit.js"
|
|
12
12
|
import * as Fiber from "../Fiber.js"
|
|
13
|
+
import * as FiberRef from "../FiberRef.js"
|
|
13
14
|
import type { LazyArg } from "../Function.js"
|
|
14
15
|
import { constTrue, dual, identity, pipe } from "../Function.js"
|
|
15
16
|
import * as Layer from "../Layer.js"
|
|
@@ -597,6 +598,51 @@ export const asyncEffect = <A, E = never, R = never>(
|
|
|
597
598
|
fromChannel
|
|
598
599
|
)
|
|
599
600
|
|
|
601
|
+
const queueFromBufferOptionsPush = <A, E>(
|
|
602
|
+
options?: { readonly bufferSize: "unbounded" } | {
|
|
603
|
+
readonly bufferSize?: number | undefined
|
|
604
|
+
readonly strategy?: "dropping" | "sliding" | undefined
|
|
605
|
+
} | undefined
|
|
606
|
+
): Effect.Effect<Queue.Queue<Array<A> | Exit.Exit<void, E>>> => {
|
|
607
|
+
if (options?.bufferSize === "unbounded" || (options?.bufferSize === undefined && options?.strategy === undefined)) {
|
|
608
|
+
return Queue.unbounded()
|
|
609
|
+
}
|
|
610
|
+
switch (options?.strategy) {
|
|
611
|
+
case "sliding":
|
|
612
|
+
return Queue.sliding(options.bufferSize ?? 16)
|
|
613
|
+
default:
|
|
614
|
+
return Queue.dropping(options?.bufferSize ?? 16)
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
/** @internal */
|
|
619
|
+
export const asyncPush = <A, E = never, R = never>(
|
|
620
|
+
register: (emit: Emit.EmitOpsPush<E, A>) => Effect.Effect<unknown, never, R | Scope.Scope>,
|
|
621
|
+
options?: {
|
|
622
|
+
readonly bufferSize: "unbounded"
|
|
623
|
+
} | {
|
|
624
|
+
readonly bufferSize?: number | undefined
|
|
625
|
+
readonly strategy?: "dropping" | "sliding" | undefined
|
|
626
|
+
} | undefined
|
|
627
|
+
): Stream.Stream<A, E, Exclude<R, Scope.Scope>> =>
|
|
628
|
+
Effect.acquireRelease(
|
|
629
|
+
queueFromBufferOptionsPush<A, E>(options),
|
|
630
|
+
Queue.shutdown
|
|
631
|
+
).pipe(
|
|
632
|
+
Effect.tap((queue) =>
|
|
633
|
+
FiberRef.getWith(FiberRef.currentScheduler, (scheduler) => register(emit.makePush(queue, scheduler)))
|
|
634
|
+
),
|
|
635
|
+
Effect.map((queue) => {
|
|
636
|
+
const loop: Channel.Channel<Chunk.Chunk<A>, unknown, E> = core.flatMap(Queue.take(queue), (item) =>
|
|
637
|
+
Exit.isExit(item)
|
|
638
|
+
? Exit.isSuccess(item) ? core.void : core.failCause(item.cause)
|
|
639
|
+
: channel.zipRight(core.write(Chunk.unsafeFromArray(item)), loop))
|
|
640
|
+
return loop
|
|
641
|
+
}),
|
|
642
|
+
channel.unwrapScoped,
|
|
643
|
+
fromChannel
|
|
644
|
+
)
|
|
645
|
+
|
|
600
646
|
/** @internal */
|
|
601
647
|
export const asyncScoped = <A, E = never, R = never>(
|
|
602
648
|
register: (emit: Emit.Emit<R, E, A, void>) => Effect.Effect<unknown, E, R | Scope.Scope>,
|
|
@@ -4116,6 +4162,23 @@ export const mkString = <E, R>(self: Stream.Stream<string, E, R>): Effect.Effect
|
|
|
4116
4162
|
/** @internal */
|
|
4117
4163
|
export const never: Stream.Stream<never> = fromEffect(Effect.never)
|
|
4118
4164
|
|
|
4165
|
+
/** @internal */
|
|
4166
|
+
export const onEnd: {
|
|
4167
|
+
<_, E2, R2>(
|
|
4168
|
+
effect: Effect.Effect<_, E2, R2>
|
|
4169
|
+
): <A, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E2 | E, R2 | R>
|
|
4170
|
+
<A, E, R, _, E2, R2>(
|
|
4171
|
+
self: Stream.Stream<A, E, R>,
|
|
4172
|
+
effect: Effect.Effect<_, E2, R2>
|
|
4173
|
+
): Stream.Stream<A, E | E2, R | R2>
|
|
4174
|
+
} = dual(
|
|
4175
|
+
2,
|
|
4176
|
+
<A, E, R, _, E2, R2>(
|
|
4177
|
+
self: Stream.Stream<A, E, R>,
|
|
4178
|
+
effect: Effect.Effect<_, E2, R2>
|
|
4179
|
+
): Stream.Stream<A, E | E2, R | R2> => concat(self, drain(fromEffect(effect)))
|
|
4180
|
+
)
|
|
4181
|
+
|
|
4119
4182
|
/** @internal */
|
|
4120
4183
|
export const onError = dual<
|
|
4121
4184
|
<E, X, R2>(
|
|
@@ -4154,6 +4217,23 @@ export const onDone = dual<
|
|
|
4154
4217
|
)
|
|
4155
4218
|
)
|
|
4156
4219
|
|
|
4220
|
+
/** @internal */
|
|
4221
|
+
export const onStart: {
|
|
4222
|
+
<_, E2, R2>(
|
|
4223
|
+
effect: Effect.Effect<_, E2, R2>
|
|
4224
|
+
): <A, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E2 | E, R2 | R>
|
|
4225
|
+
<A, E, R, _, E2, R2>(
|
|
4226
|
+
self: Stream.Stream<A, E, R>,
|
|
4227
|
+
effect: Effect.Effect<_, E2, R2>
|
|
4228
|
+
): Stream.Stream<A, E | E2, R | R2>
|
|
4229
|
+
} = dual(
|
|
4230
|
+
2,
|
|
4231
|
+
<A, E, R, _, E2, R2>(
|
|
4232
|
+
self: Stream.Stream<A, E, R>,
|
|
4233
|
+
effect: Effect.Effect<_, E2, R2>
|
|
4234
|
+
): Stream.Stream<A, E | E2, R | R2> => unwrap(Effect.as(effect, self))
|
|
4235
|
+
)
|
|
4236
|
+
|
|
4157
4237
|
/** @internal */
|
|
4158
4238
|
export const orDie = <A, E, R>(self: Stream.Stream<A, E, R>): Stream.Stream<A, never, R> =>
|
|
4159
4239
|
pipe(self, orDieWith(identity))
|
|
@@ -8324,23 +8404,11 @@ export const fromEventListener = <A = unknown>(
|
|
|
8324
8404
|
readonly capture?: boolean
|
|
8325
8405
|
readonly passive?: boolean
|
|
8326
8406
|
readonly once?: boolean
|
|
8407
|
+
readonly bufferSize?: number | "unbounded" | undefined
|
|
8327
8408
|
} | undefined
|
|
8328
8409
|
): Stream.Stream<A> =>
|
|
8329
|
-
|
|
8330
|
-
|
|
8331
|
-
|
|
8332
|
-
|
|
8333
|
-
|
|
8334
|
-
if (!taskRunning) {
|
|
8335
|
-
taskRunning = true
|
|
8336
|
-
queueMicrotask(() => {
|
|
8337
|
-
const events = batch
|
|
8338
|
-
batch = []
|
|
8339
|
-
taskRunning = false
|
|
8340
|
-
emit.chunk(Chunk.unsafeFromArray(events))
|
|
8341
|
-
})
|
|
8342
|
-
}
|
|
8343
|
-
}
|
|
8344
|
-
target.addEventListener(type, cb as any, options)
|
|
8345
|
-
return Effect.sync(() => target.removeEventListener(type, cb, options))
|
|
8346
|
-
}, "unbounded")
|
|
8410
|
+
asyncPush<A>((emit) =>
|
|
8411
|
+
Effect.acquireRelease(
|
|
8412
|
+
Effect.sync(() => target.addEventListener(type, emit.single as any, options)),
|
|
8413
|
+
() => Effect.sync(() => target.removeEventListener(type, emit.single, options))
|
|
8414
|
+
), { bufferSize: typeof options === "object" ? options.bufferSize : undefined })
|
package/src/internal/version.ts
CHANGED