effect 3.2.8 → 3.3.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/Redacted/package.json +6 -0
- package/dist/cjs/Config.js +9 -1
- package/dist/cjs/Config.js.map +1 -1
- package/dist/cjs/Either.js +2 -1
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/Iterable.js +15 -2
- package/dist/cjs/Iterable.js.map +1 -1
- package/dist/cjs/Layer.js +11 -1
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/Option.js +7 -1
- package/dist/cjs/Option.js.map +1 -1
- package/dist/cjs/Pool.js +26 -0
- package/dist/cjs/Pool.js.map +1 -1
- package/dist/cjs/Predicate.js +51 -1
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Redacted.js +65 -0
- package/dist/cjs/Redacted.js.map +1 -0
- package/dist/cjs/STM.js.map +1 -1
- package/dist/cjs/Secret.js +7 -0
- package/dist/cjs/Secret.js.map +1 -1
- package/dist/cjs/Stream.js +32 -1
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Tuple.js +15 -1
- package/dist/cjs/Tuple.js.map +1 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/cause.js +14 -18
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/clock.js +1 -1
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/cjs/internal/config.js +8 -1
- package/dist/cjs/internal/config.js.map +1 -1
- package/dist/cjs/internal/layer.js +14 -2
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/pool.js +206 -235
- package/dist/cjs/internal/pool.js.map +1 -1
- package/dist/cjs/internal/redacted.js +87 -0
- package/dist/cjs/internal/redacted.js.map +1 -0
- package/dist/cjs/internal/secret.js +40 -23
- package/dist/cjs/internal/secret.js.map +1 -1
- package/dist/cjs/internal/stm/stm.js +2 -1
- package/dist/cjs/internal/stm/stm.js.map +1 -1
- package/dist/cjs/internal/stream.js +15 -7
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Config.d.ts +13 -6
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Context.d.ts +1 -1
- package/dist/dts/Context.d.ts.map +1 -1
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/Iterable.d.ts +7 -0
- package/dist/dts/Iterable.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +20 -0
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/Option.d.ts.map +1 -1
- package/dist/dts/Pool.d.ts +31 -0
- package/dist/dts/Pool.d.ts.map +1 -1
- package/dist/dts/Predicate.d.ts +57 -0
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Redacted.d.ts +68 -0
- package/dist/dts/Redacted.d.ts.map +1 -0
- package/dist/dts/STM.d.ts +4 -1
- package/dist/dts/STM.d.ts.map +1 -1
- package/dist/dts/Secret.d.ts +14 -1
- package/dist/dts/Secret.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +61 -4
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Tuple.d.ts +51 -0
- package/dist/dts/Tuple.d.ts.map +1 -1
- package/dist/dts/Types.d.ts +46 -0
- package/dist/dts/Types.d.ts.map +1 -1
- package/dist/dts/Utils.d.ts +6 -5
- package/dist/dts/Utils.d.ts.map +1 -1
- package/dist/dts/index.d.ts +5 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/layer.d.ts +15 -1
- package/dist/dts/internal/layer.d.ts.map +1 -1
- package/dist/dts/internal/redacted.d.ts +2 -0
- package/dist/dts/internal/redacted.d.ts.map +1 -0
- package/dist/dts/internal/stm/stm.d.ts.map +1 -1
- package/dist/dts/internal/stream.d.ts +1 -0
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Config.js +8 -0
- package/dist/esm/Config.js.map +1 -1
- package/dist/esm/Either.js +2 -1
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/Iterable.js +12 -0
- package/dist/esm/Iterable.js.map +1 -1
- package/dist/esm/Layer.js +10 -0
- package/dist/esm/Layer.js.map +1 -1
- package/dist/esm/Option.js +7 -1
- package/dist/esm/Option.js.map +1 -1
- package/dist/esm/Pool.js +26 -0
- package/dist/esm/Pool.js.map +1 -1
- package/dist/esm/Predicate.js +50 -0
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Redacted.js +33 -0
- package/dist/esm/Redacted.js.map +1 -0
- package/dist/esm/STM.js.map +1 -1
- package/dist/esm/Secret.js +7 -0
- package/dist/esm/Secret.js.map +1 -1
- package/dist/esm/Stream.js +31 -0
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/Tuple.js +51 -0
- package/dist/esm/Tuple.js.map +1 -1
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/cause.js +14 -18
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/clock.js +1 -1
- package/dist/esm/internal/clock.js.map +1 -1
- package/dist/esm/internal/config.js +6 -0
- package/dist/esm/internal/config.js.map +1 -1
- package/dist/esm/internal/layer.js +12 -0
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/pool.js +205 -235
- package/dist/esm/internal/pool.js.map +1 -1
- package/dist/esm/internal/redacted.js +52 -0
- package/dist/esm/internal/redacted.js.map +1 -0
- package/dist/esm/internal/secret.js +39 -22
- package/dist/esm/internal/secret.js.map +1 -1
- package/dist/esm/internal/stm/stm.js +2 -1
- package/dist/esm/internal/stm/stm.js.map +1 -1
- package/dist/esm/internal/stream.js +13 -4
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +9 -1
- package/src/Config.ts +15 -7
- package/src/Context.ts +1 -1
- package/src/Either.ts +4 -1
- package/src/Iterable.ts +13 -0
- package/src/Layer.ts +22 -0
- package/src/Option.ts +7 -1
- package/src/Pool.ts +39 -6
- package/src/Predicate.ts +59 -0
- package/src/Redacted.ts +79 -0
- package/src/STM.ts +7 -2
- package/src/Secret.ts +14 -1
- package/src/Stream.ts +67 -7
- package/src/Tuple.ts +53 -0
- package/src/Types.ts +48 -0
- package/src/Utils.ts +9 -6
- package/src/index.ts +6 -0
- package/src/internal/cause.ts +14 -17
- package/src/internal/clock.ts +1 -6
- package/src/internal/config.ts +11 -0
- package/src/internal/layer.ts +63 -0
- package/src/internal/pool.ts +320 -447
- package/src/internal/redacted.ts +69 -0
- package/src/internal/secret.ts +39 -28
- package/src/internal/stm/stm.ts +4 -1
- package/src/internal/stream.ts +111 -50
- package/src/internal/version.ts +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as Equal from "../Equal.js"
|
|
2
|
+
import { pipe } from "../Function.js"
|
|
3
|
+
import { globalValue } from "../GlobalValue.js"
|
|
4
|
+
import * as Hash from "../Hash.js"
|
|
5
|
+
import { pipeArguments } from "../Pipeable.js"
|
|
6
|
+
import { hasProperty } from "../Predicate.js"
|
|
7
|
+
import type * as Redacted from "../Redacted.js"
|
|
8
|
+
|
|
9
|
+
/** @internal */
|
|
10
|
+
const RedactedSymbolKey = "effect/Redacted"
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
export const redactedRegistry = globalValue(
|
|
14
|
+
"effect/Redacted/redactedRegistry",
|
|
15
|
+
() => new WeakMap<Redacted.Redacted<any>, any>()
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
/** @internal */
|
|
19
|
+
export const RedactedTypeId: Redacted.RedactedTypeId = Symbol.for(
|
|
20
|
+
RedactedSymbolKey
|
|
21
|
+
) as Redacted.RedactedTypeId
|
|
22
|
+
|
|
23
|
+
/** @internal */
|
|
24
|
+
export const proto = {
|
|
25
|
+
[RedactedTypeId]: {
|
|
26
|
+
_A: (_: never) => _
|
|
27
|
+
},
|
|
28
|
+
pipe() {
|
|
29
|
+
return pipeArguments(this, arguments)
|
|
30
|
+
},
|
|
31
|
+
toString() {
|
|
32
|
+
return "<redacted>"
|
|
33
|
+
},
|
|
34
|
+
toJSON() {
|
|
35
|
+
return "<redacted>"
|
|
36
|
+
},
|
|
37
|
+
[Hash.symbol]<T>(this: Redacted.Redacted<T>): number {
|
|
38
|
+
return pipe(
|
|
39
|
+
Hash.hash(RedactedSymbolKey),
|
|
40
|
+
Hash.combine(Hash.hash(redactedRegistry.get(this))),
|
|
41
|
+
Hash.cached(this)
|
|
42
|
+
)
|
|
43
|
+
},
|
|
44
|
+
[Equal.symbol]<T>(this: Redacted.Redacted<T>, that: unknown): boolean {
|
|
45
|
+
return isRedacted(that) && Equal.equals(redactedRegistry.get(this), redactedRegistry.get(that))
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** @internal */
|
|
50
|
+
export const isRedacted = (u: unknown): u is Redacted.Redacted<unknown> => hasProperty(u, RedactedTypeId)
|
|
51
|
+
|
|
52
|
+
/** @internal */
|
|
53
|
+
export const make = <T>(value: T): Redacted.Redacted<T> => {
|
|
54
|
+
const redacted = Object.create(proto)
|
|
55
|
+
redactedRegistry.set(redacted, value)
|
|
56
|
+
return redacted
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** @internal */
|
|
60
|
+
export const value = <T>(self: Redacted.Redacted<T>): T => {
|
|
61
|
+
if (redactedRegistry.has(self)) {
|
|
62
|
+
return redactedRegistry.get(self)
|
|
63
|
+
} else {
|
|
64
|
+
throw new Error("Unable to get redacted value")
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** @internal */
|
|
69
|
+
export const unsafeWipe = <T>(self: Redacted.Redacted<T>): boolean => redactedRegistry.delete(self)
|
package/src/internal/secret.ts
CHANGED
|
@@ -1,40 +1,37 @@
|
|
|
1
1
|
import * as Arr from "../Array.js"
|
|
2
|
-
import * as Equal from "../Equal.js"
|
|
3
|
-
import { pipe } from "../Function.js"
|
|
4
|
-
import * as Hash from "../Hash.js"
|
|
5
2
|
import { hasProperty } from "../Predicate.js"
|
|
6
3
|
import type * as Secret from "../Secret.js"
|
|
4
|
+
import * as redacted_ from "./redacted.js"
|
|
7
5
|
|
|
8
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
* @deprecated
|
|
9
|
+
*/
|
|
9
10
|
const SecretSymbolKey = "effect/Secret"
|
|
10
11
|
|
|
11
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
* @deprecated
|
|
15
|
+
*/
|
|
12
16
|
export const SecretTypeId: Secret.SecretTypeId = Symbol.for(
|
|
13
17
|
SecretSymbolKey
|
|
14
18
|
) as Secret.SecretTypeId
|
|
15
19
|
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return pipe(
|
|
21
|
-
Hash.hash(SecretSymbolKey),
|
|
22
|
-
Hash.combine(Hash.array(this.raw)),
|
|
23
|
-
Hash.cached(this)
|
|
24
|
-
)
|
|
25
|
-
},
|
|
26
|
-
[Equal.symbol](this: Secret.Secret, that: unknown): boolean {
|
|
27
|
-
return isSecret(that) && this.raw.length === that.raw.length &&
|
|
28
|
-
this.raw.every((v, i) => Equal.equals(v, that.raw[i]))
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** @internal */
|
|
20
|
+
/**
|
|
21
|
+
* @internal
|
|
22
|
+
* @deprecated
|
|
23
|
+
*/
|
|
33
24
|
export const isSecret = (u: unknown): u is Secret.Secret => hasProperty(u, SecretTypeId)
|
|
34
25
|
|
|
35
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
* @deprecated
|
|
29
|
+
*/
|
|
36
30
|
export const make = (bytes: Array<number>): Secret.Secret => {
|
|
37
|
-
const secret = Object.create(
|
|
31
|
+
const secret = Object.create({
|
|
32
|
+
...redacted_.proto,
|
|
33
|
+
[SecretTypeId]: SecretTypeId
|
|
34
|
+
})
|
|
38
35
|
Object.defineProperty(secret, "toString", {
|
|
39
36
|
enumerable: false,
|
|
40
37
|
value() {
|
|
@@ -51,26 +48,40 @@ export const make = (bytes: Array<number>): Secret.Secret => {
|
|
|
51
48
|
enumerable: false,
|
|
52
49
|
value: bytes
|
|
53
50
|
})
|
|
51
|
+
redacted_.redactedRegistry.set(secret, bytes.map((byte) => String.fromCharCode(byte)).join(""))
|
|
54
52
|
return secret
|
|
55
53
|
}
|
|
56
54
|
|
|
57
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
* @deprecated
|
|
58
|
+
*/
|
|
58
59
|
export const fromIterable = (iterable: Iterable<string>): Secret.Secret =>
|
|
59
60
|
make(Arr.fromIterable(iterable).map((char) => char.charCodeAt(0)))
|
|
60
61
|
|
|
61
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* @internal
|
|
64
|
+
* @deprecated
|
|
65
|
+
*/
|
|
62
66
|
export const fromString = (text: string): Secret.Secret => {
|
|
63
67
|
return make(text.split("").map((char) => char.charCodeAt(0)))
|
|
64
68
|
}
|
|
65
69
|
|
|
66
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* @internal
|
|
72
|
+
* @deprecated
|
|
73
|
+
*/
|
|
67
74
|
export const value = (self: Secret.Secret): string => {
|
|
68
75
|
return self.raw.map((byte) => String.fromCharCode(byte)).join("")
|
|
69
76
|
}
|
|
70
77
|
|
|
71
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* @internal
|
|
80
|
+
* @deprecated
|
|
81
|
+
*/
|
|
72
82
|
export const unsafeWipe = (self: Secret.Secret): void => {
|
|
73
83
|
for (let i = 0; i < self.raw.length; i++) {
|
|
74
84
|
self.raw[i] = 0
|
|
75
85
|
}
|
|
86
|
+
redacted_.redactedRegistry.delete(self)
|
|
76
87
|
}
|
package/src/internal/stm/stm.ts
CHANGED
|
@@ -618,8 +618,11 @@ export const fromOption = <A>(option: Option.Option<A>): STM.STM<A, Option.Optio
|
|
|
618
618
|
* Inspired by https://github.com/tusharmath/qio/pull/22 (revised)
|
|
619
619
|
* @internal
|
|
620
620
|
*/
|
|
621
|
-
export const gen: typeof STM.gen = (
|
|
621
|
+
export const gen: typeof STM.gen = (...args) =>
|
|
622
622
|
suspend(() => {
|
|
623
|
+
const f = (args.length === 1)
|
|
624
|
+
? args[0]
|
|
625
|
+
: args[1].bind(args[0])
|
|
623
626
|
const iterator = f(pipe)
|
|
624
627
|
const state = iterator.next()
|
|
625
628
|
const run = (
|
package/src/internal/stream.ts
CHANGED
|
@@ -6542,63 +6542,103 @@ export const toQueueOfElements = dual<
|
|
|
6542
6542
|
))
|
|
6543
6543
|
|
|
6544
6544
|
/** @internal */
|
|
6545
|
-
export const toReadableStream = <
|
|
6546
|
-
|
|
6545
|
+
export const toReadableStream = dual<
|
|
6546
|
+
<A>(
|
|
6547
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6548
|
+
) => <E>(self: Stream.Stream<A, E>) => ReadableStream<A>,
|
|
6549
|
+
<A, E>(
|
|
6550
|
+
self: Stream.Stream<A, E>,
|
|
6551
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6552
|
+
) => ReadableStream<A>
|
|
6553
|
+
>(
|
|
6554
|
+
(args) => isStream(args[0]),
|
|
6555
|
+
<A, E>(
|
|
6556
|
+
self: Stream.Stream<A, E>,
|
|
6557
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6558
|
+
) => toReadableStreamRuntime(self, Runtime.defaultRuntime, options)
|
|
6559
|
+
)
|
|
6547
6560
|
|
|
6548
6561
|
/** @internal */
|
|
6549
|
-
export const toReadableStreamEffect = <
|
|
6550
|
-
|
|
6562
|
+
export const toReadableStreamEffect = dual<
|
|
6563
|
+
<A>(
|
|
6564
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6565
|
+
) => <E, R>(self: Stream.Stream<A, E, R>) => Effect.Effect<ReadableStream<A>, never, R>,
|
|
6566
|
+
<A, E, R>(
|
|
6567
|
+
self: Stream.Stream<A, E, R>,
|
|
6568
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6569
|
+
) => Effect.Effect<ReadableStream<A>, never, R>
|
|
6570
|
+
>(
|
|
6571
|
+
(args) => isStream(args[0]),
|
|
6572
|
+
<A, E, R>(
|
|
6573
|
+
self: Stream.Stream<A, E, R>,
|
|
6574
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6575
|
+
) => Effect.map(Effect.runtime<R>(), (runtime) => toReadableStreamRuntime(self, runtime, options))
|
|
6576
|
+
)
|
|
6551
6577
|
|
|
6552
6578
|
/** @internal */
|
|
6553
6579
|
export const toReadableStreamRuntime = dual<
|
|
6554
|
-
<
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
6568
|
-
|
|
6569
|
-
|
|
6570
|
-
|
|
6571
|
-
|
|
6572
|
-
|
|
6573
|
-
|
|
6574
|
-
|
|
6575
|
-
|
|
6576
|
-
|
|
6577
|
-
|
|
6578
|
-
|
|
6579
|
-
|
|
6580
|
-
|
|
6581
|
-
|
|
6582
|
-
|
|
6580
|
+
<A, XR>(
|
|
6581
|
+
runtime: Runtime.Runtime<XR>,
|
|
6582
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6583
|
+
) => <E, R extends XR>(self: Stream.Stream<A, E, R>) => ReadableStream<A>,
|
|
6584
|
+
<A, E, XR, R extends XR>(
|
|
6585
|
+
self: Stream.Stream<A, E, R>,
|
|
6586
|
+
runtime: Runtime.Runtime<XR>,
|
|
6587
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6588
|
+
) => ReadableStream<A>
|
|
6589
|
+
>(
|
|
6590
|
+
(args) => isStream(args[0]),
|
|
6591
|
+
<A, E, XR, R extends XR>(
|
|
6592
|
+
self: Stream.Stream<A, E, R>,
|
|
6593
|
+
runtime: Runtime.Runtime<XR>,
|
|
6594
|
+
options?: { readonly strategy?: QueuingStrategy<A> | undefined }
|
|
6595
|
+
): ReadableStream<A> => {
|
|
6596
|
+
const runSync = Runtime.runSync(runtime)
|
|
6597
|
+
const runFork = Runtime.runFork(runtime)
|
|
6598
|
+
|
|
6599
|
+
let pull: Effect.Effect<void, never, R>
|
|
6600
|
+
let scope: Scope.CloseableScope
|
|
6601
|
+
return new ReadableStream<A>({
|
|
6602
|
+
start(controller) {
|
|
6603
|
+
scope = runSync(Scope.make())
|
|
6604
|
+
pull = pipe(
|
|
6605
|
+
toPull(self),
|
|
6606
|
+
Scope.extend(scope),
|
|
6607
|
+
runSync,
|
|
6608
|
+
Effect.tap((chunk) =>
|
|
6583
6609
|
Effect.sync(() => {
|
|
6584
|
-
|
|
6610
|
+
Chunk.map(chunk, (a) => {
|
|
6611
|
+
controller.enqueue(a)
|
|
6612
|
+
})
|
|
6585
6613
|
})
|
|
6586
|
-
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6590
|
-
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
|
|
6601
|
-
|
|
6614
|
+
),
|
|
6615
|
+
Effect.tapErrorCause(() => Scope.close(scope, Exit.void)),
|
|
6616
|
+
Effect.catchTags({
|
|
6617
|
+
"None": () =>
|
|
6618
|
+
Effect.sync(() => {
|
|
6619
|
+
controller.close()
|
|
6620
|
+
}),
|
|
6621
|
+
"Some": (error) =>
|
|
6622
|
+
Effect.sync(() => {
|
|
6623
|
+
controller.error(error.value)
|
|
6624
|
+
})
|
|
6625
|
+
}),
|
|
6626
|
+
Effect.asVoid
|
|
6627
|
+
)
|
|
6628
|
+
},
|
|
6629
|
+
pull() {
|
|
6630
|
+
return new Promise<void>((resolve) => {
|
|
6631
|
+
runFork(pull, { scope }).addObserver((_) => resolve())
|
|
6632
|
+
})
|
|
6633
|
+
},
|
|
6634
|
+
cancel() {
|
|
6635
|
+
return new Promise<void>((resolve) => {
|
|
6636
|
+
runFork(Scope.close(scope, Exit.void)).addObserver((_) => resolve())
|
|
6637
|
+
})
|
|
6638
|
+
}
|
|
6639
|
+
}, options?.strategy)
|
|
6640
|
+
}
|
|
6641
|
+
)
|
|
6602
6642
|
|
|
6603
6643
|
/** @internal */
|
|
6604
6644
|
export const transduce = dual<
|
|
@@ -7569,6 +7609,27 @@ export const zipLatest = dual<
|
|
|
7569
7609
|
): Stream.Stream<[A, A2], E2 | E, R2 | R> => pipe(self, zipLatestWith(that, (a, a2) => [a, a2]))
|
|
7570
7610
|
)
|
|
7571
7611
|
|
|
7612
|
+
export const zipLatestAll = <T extends ReadonlyArray<Stream.Stream<any, any, any>>>(
|
|
7613
|
+
...streams: T
|
|
7614
|
+
): Stream.Stream<
|
|
7615
|
+
[T[number]] extends [never] ? never
|
|
7616
|
+
: { [K in keyof T]: T[K] extends Stream.Stream<infer A, infer _E, infer _R> ? A : never },
|
|
7617
|
+
[T[number]] extends [never] ? never : T[number] extends Stream.Stream<infer _A, infer _E, infer _R> ? _E : never,
|
|
7618
|
+
[T[number]] extends [never] ? never : T[number] extends Stream.Stream<infer _A, infer _E, infer _R> ? _R : never
|
|
7619
|
+
> => {
|
|
7620
|
+
if (streams.length === 0) {
|
|
7621
|
+
return empty
|
|
7622
|
+
} else if (streams.length === 1) {
|
|
7623
|
+
return map(streams[0]!, (x) => [x]) as any
|
|
7624
|
+
}
|
|
7625
|
+
const [head, ...tail] = streams
|
|
7626
|
+
return zipLatestWith(
|
|
7627
|
+
head,
|
|
7628
|
+
zipLatestAll(...tail),
|
|
7629
|
+
(first, second) => [first, ...second]
|
|
7630
|
+
) as any
|
|
7631
|
+
}
|
|
7632
|
+
|
|
7572
7633
|
/** @internal */
|
|
7573
7634
|
export const zipLatestWith = dual<
|
|
7574
7635
|
<A2, E2, R2, A, A3>(
|
package/src/internal/version.ts
CHANGED