effect 3.9.2 → 3.10.1
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/Arbitrary/package.json +6 -0
- package/FastCheck/package.json +6 -0
- package/JSONSchema/package.json +6 -0
- package/ParseResult/package.json +6 -0
- package/Pretty/package.json +6 -0
- package/Schema/package.json +6 -0
- package/SchemaAST/package.json +6 -0
- package/TSubscriptionRef/package.json +6 -0
- package/dist/cjs/Arbitrary.js +490 -0
- package/dist/cjs/Arbitrary.js.map +1 -0
- package/dist/cjs/Effect.js +247 -16
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/FastCheck.js +17 -0
- package/dist/cjs/FastCheck.js.map +1 -0
- package/dist/cjs/Inspectable.js +43 -3
- package/dist/cjs/Inspectable.js.map +1 -1
- package/dist/cjs/JSONSchema.js +418 -0
- package/dist/cjs/JSONSchema.js.map +1 -0
- package/dist/cjs/ParseResult.js +1539 -0
- package/dist/cjs/ParseResult.js.map +1 -0
- package/dist/cjs/Predicate.js +3 -1
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Pretty.js +183 -0
- package/dist/cjs/Pretty.js.map +1 -0
- package/dist/cjs/Schema.js +5529 -0
- package/dist/cjs/Schema.js.map +1 -0
- package/dist/cjs/SchemaAST.js +2365 -0
- package/dist/cjs/SchemaAST.js.map +1 -0
- package/dist/cjs/Stream.js +17 -3
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/TPubSub.js +9 -1
- package/dist/cjs/TPubSub.js.map +1 -1
- package/dist/cjs/TQueue.js.map +1 -1
- package/dist/cjs/TRef.js.map +1 -1
- package/dist/cjs/TSubscriptionRef.js +96 -0
- package/dist/cjs/TSubscriptionRef.js.map +1 -0
- package/dist/cjs/index.js +18 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/cause.js +2 -2
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/channel/channelExecutor.js +160 -161
- package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
- package/dist/cjs/internal/core.js +4 -4
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +14 -12
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/logger.js +7 -6
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/redacted.js +4 -0
- package/dist/cjs/internal/redacted.js.map +1 -1
- package/dist/cjs/internal/schema/errors.js +116 -0
- package/dist/cjs/internal/schema/errors.js.map +1 -0
- package/dist/cjs/internal/schema/filters.js +41 -0
- package/dist/cjs/internal/schema/filters.js.map +1 -0
- package/dist/cjs/internal/schema/util.js +96 -0
- package/dist/cjs/internal/schema/util.js.map +1 -0
- package/dist/cjs/internal/stm/core.js +2 -3
- package/dist/cjs/internal/stm/core.js.map +1 -1
- package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
- package/dist/cjs/internal/stm/tQueue.js +1 -2
- package/dist/cjs/internal/stm/tQueue.js.map +1 -1
- package/dist/cjs/internal/stm/tRef.js +6 -2
- package/dist/cjs/internal/stm/tRef.js.map +1 -1
- package/dist/cjs/internal/stm/tSubscriptionRef.js +178 -0
- package/dist/cjs/internal/stm/tSubscriptionRef.js.map +1 -0
- package/dist/cjs/internal/stream.js +36 -16
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/cjs/internal/version.js.map +1 -1
- package/dist/dts/Arbitrary.d.ts +45 -0
- package/dist/dts/Arbitrary.d.ts.map +1 -0
- package/dist/dts/Effect.d.ts +298 -30
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/FastCheck.d.ts +9 -0
- package/dist/dts/FastCheck.d.ts.map +1 -0
- package/dist/dts/Inspectable.d.ts +28 -0
- package/dist/dts/Inspectable.d.ts.map +1 -1
- package/dist/dts/JSONSchema.d.ts +181 -0
- package/dist/dts/JSONSchema.d.ts.map +1 -0
- package/dist/dts/ParseResult.d.ts +551 -0
- package/dist/dts/ParseResult.d.ts.map +1 -0
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Pretty.d.ts +26 -0
- package/dist/dts/Pretty.d.ts.map +1 -0
- package/dist/dts/Schema.d.ts +4562 -0
- package/dist/dts/Schema.d.ts.map +1 -0
- package/dist/dts/SchemaAST.d.ts +1321 -0
- package/dist/dts/SchemaAST.d.ts.map +1 -0
- package/dist/dts/Stream.d.ts +67 -2
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/TPubSub.d.ts +8 -0
- package/dist/dts/TPubSub.d.ts.map +1 -1
- package/dist/dts/TQueue.d.ts +7 -7
- package/dist/dts/TQueue.d.ts.map +1 -1
- package/dist/dts/TRef.d.ts +2 -1
- package/dist/dts/TRef.d.ts.map +1 -1
- package/dist/dts/TSubscriptionRef.d.ts +251 -0
- package/dist/dts/TSubscriptionRef.d.ts.map +1 -0
- package/dist/dts/index.d.ts +32 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
- package/dist/dts/internal/schema/errors.d.ts +2 -0
- package/dist/dts/internal/schema/errors.d.ts.map +1 -0
- package/dist/dts/internal/schema/filters.d.ts +2 -0
- package/dist/dts/internal/schema/filters.d.ts.map +1 -0
- package/dist/dts/internal/schema/util.d.ts +2 -0
- package/dist/dts/internal/schema/util.d.ts.map +1 -0
- package/dist/dts/internal/stm/tRef.d.ts +3 -1
- package/dist/dts/internal/stm/tRef.d.ts.map +1 -1
- package/dist/dts/internal/stm/tSubscriptionRef.d.ts +2 -0
- package/dist/dts/internal/stm/tSubscriptionRef.d.ts.map +1 -0
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Arbitrary.js +472 -0
- package/dist/esm/Arbitrary.js.map +1 -0
- package/dist/esm/Effect.js +256 -18
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/FastCheck.js +9 -0
- package/dist/esm/FastCheck.js.map +1 -0
- package/dist/esm/Inspectable.js +39 -2
- package/dist/esm/Inspectable.js.map +1 -1
- package/dist/esm/JSONSchema.js +408 -0
- package/dist/esm/JSONSchema.js.map +1 -0
- package/dist/esm/ParseResult.js +1503 -0
- package/dist/esm/ParseResult.js.map +1 -0
- package/dist/esm/Predicate.js +2 -1
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Pretty.js +173 -0
- package/dist/esm/Pretty.js.map +1 -0
- package/dist/esm/Schema.js +5328 -0
- package/dist/esm/Schema.js.map +1 -0
- package/dist/esm/SchemaAST.js +2300 -0
- package/dist/esm/SchemaAST.js.map +1 -0
- package/dist/esm/Stream.js +14 -0
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/TPubSub.js +8 -0
- package/dist/esm/TPubSub.js.map +1 -1
- package/dist/esm/TQueue.js.map +1 -1
- package/dist/esm/TRef.js.map +1 -1
- package/dist/esm/TSubscriptionRef.js +87 -0
- package/dist/esm/TSubscriptionRef.js.map +1 -0
- package/dist/esm/index.js +32 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/cause.js +3 -3
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/channel/channelExecutor.js +160 -161
- package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
- package/dist/esm/internal/core.js +4 -4
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +14 -12
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/logger.js +7 -6
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/redacted.js +4 -0
- package/dist/esm/internal/redacted.js.map +1 -1
- package/dist/esm/internal/schema/errors.js +87 -0
- package/dist/esm/internal/schema/errors.js.map +1 -0
- package/dist/esm/internal/schema/filters.js +35 -0
- package/dist/esm/internal/schema/filters.js.map +1 -0
- package/dist/esm/internal/schema/util.js +78 -0
- package/dist/esm/internal/schema/util.js.map +1 -0
- package/dist/esm/internal/stm/core.js +1 -2
- package/dist/esm/internal/stm/core.js.map +1 -1
- package/dist/esm/internal/stm/tPubSub.js.map +1 -1
- package/dist/esm/internal/stm/tQueue.js +1 -2
- package/dist/esm/internal/stm/tQueue.js.map +1 -1
- package/dist/esm/internal/stm/tRef.js +5 -1
- package/dist/esm/internal/stm/tRef.js.map +1 -1
- package/dist/esm/internal/stm/tSubscriptionRef.js +166 -0
- package/dist/esm/internal/stm/tSubscriptionRef.js.map +1 -0
- package/dist/esm/internal/stream.js +33 -15
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/dist/esm/internal/version.js.map +1 -1
- package/package.json +68 -1
- package/src/Arbitrary.ts +563 -0
- package/src/Effect.ts +302 -31
- package/src/FastCheck.ts +9 -0
- package/src/Inspectable.ts +56 -2
- package/src/JSONSchema.ts +601 -0
- package/src/ParseResult.ts +2027 -0
- package/src/Predicate.ts +3 -1
- package/src/Pretty.ts +204 -0
- package/src/Schema.ts +10388 -0
- package/src/SchemaAST.ts +2827 -0
- package/src/Stream.ts +77 -9
- package/src/TPubSub.ts +9 -0
- package/src/TQueue.ts +7 -7
- package/src/TRef.ts +2 -1
- package/src/TSubscriptionRef.ts +284 -0
- package/src/index.ts +40 -0
- package/src/internal/cause.ts +3 -3
- package/src/internal/channel/channelExecutor.ts +213 -214
- package/src/internal/core-effect.ts +2 -2
- package/src/internal/core.ts +4 -4
- package/src/internal/fiberRuntime.ts +14 -12
- package/src/internal/logger.ts +7 -6
- package/src/internal/redacted.ts +4 -0
- package/src/internal/schema/errors.ts +189 -0
- package/src/internal/schema/filters.ts +86 -0
- package/src/internal/schema/util.ts +113 -0
- package/src/internal/stm/core.ts +1 -2
- package/src/internal/stm/tPubSub.ts +1 -0
- package/src/internal/stm/tQueue.ts +2 -2
- package/src/internal/stm/tRef.ts +7 -2
- package/src/internal/stm/tSubscriptionRef.ts +286 -0
- package/src/internal/stream.ts +97 -20
- package/src/internal/version.ts +1 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import * as Effect from "../../Effect.js"
|
|
2
|
+
import { dual, pipe } from "../../Function.js"
|
|
3
|
+
import * as Option from "../../Option.js"
|
|
4
|
+
import { pipeArguments } from "../../Pipeable.js"
|
|
5
|
+
import * as STM from "../../STM.js"
|
|
6
|
+
import * as TPubSub from "../../TPubSub.js"
|
|
7
|
+
import * as TQueue from "../../TQueue.js"
|
|
8
|
+
import * as TRef from "../../TRef.js"
|
|
9
|
+
import type * as TSubscriptionRef from "../../TSubscriptionRef.js"
|
|
10
|
+
import * as stream from "../stream.js"
|
|
11
|
+
import { tDequeueVariance } from "./tQueue.js"
|
|
12
|
+
import { tRefVariance } from "./tRef.js"
|
|
13
|
+
|
|
14
|
+
/** @internal */
|
|
15
|
+
const TSubscriptionRefSymbolKey = "effect/TSubscriptionRef"
|
|
16
|
+
|
|
17
|
+
/** @internal */
|
|
18
|
+
export const TSubscriptionRefTypeId: TSubscriptionRef.TSubscriptionRefTypeId = Symbol.for(
|
|
19
|
+
TSubscriptionRefSymbolKey
|
|
20
|
+
) as TSubscriptionRef.TSubscriptionRefTypeId
|
|
21
|
+
|
|
22
|
+
const TSubscriptionRefVariance = {
|
|
23
|
+
/* c8 ignore next */
|
|
24
|
+
_A: (_: any) => _
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class TDequeueMerge<A> implements TQueue.TDequeue<A> {
|
|
28
|
+
[TQueue.TDequeueTypeId] = tDequeueVariance
|
|
29
|
+
|
|
30
|
+
constructor(
|
|
31
|
+
readonly first: TQueue.TDequeue<A>,
|
|
32
|
+
readonly second: TQueue.TDequeue<A>
|
|
33
|
+
) {}
|
|
34
|
+
|
|
35
|
+
peek: STM.STM<A> = STM.gen(this, function*() {
|
|
36
|
+
const first = yield* this.peekOption
|
|
37
|
+
if (first._tag === "Some") {
|
|
38
|
+
return first.value
|
|
39
|
+
}
|
|
40
|
+
return yield* STM.retry
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
peekOption: STM.STM<Option.Option<A>> = STM.gen(this, function*() {
|
|
44
|
+
const first = yield* this.first.peekOption
|
|
45
|
+
if (first._tag === "Some") {
|
|
46
|
+
return first
|
|
47
|
+
}
|
|
48
|
+
const second = yield* this.second.peekOption
|
|
49
|
+
if (second._tag === "Some") {
|
|
50
|
+
return second
|
|
51
|
+
}
|
|
52
|
+
return Option.none()
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
take: STM.STM<A> = STM.gen(this, function*() {
|
|
56
|
+
if (!(yield* this.first.isEmpty)) {
|
|
57
|
+
return yield* this.first.take
|
|
58
|
+
}
|
|
59
|
+
if (!(yield* this.second.isEmpty)) {
|
|
60
|
+
return yield* this.second.take
|
|
61
|
+
}
|
|
62
|
+
return yield* STM.retry
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
takeAll: STM.STM<Array<A>> = STM.gen(this, function*() {
|
|
66
|
+
return [...yield* this.first.takeAll, ...yield* this.second.takeAll]
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
takeUpTo(max: number): STM.STM<Array<A>> {
|
|
70
|
+
return STM.gen(this, function*() {
|
|
71
|
+
const first = yield* this.first.takeUpTo(max)
|
|
72
|
+
if (first.length >= max) {
|
|
73
|
+
return first
|
|
74
|
+
}
|
|
75
|
+
return [...first, ...yield* this.second.takeUpTo(max - first.length)]
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
capacity(): number {
|
|
80
|
+
return this.first.capacity() + this.second.capacity()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
size: STM.STM<number> = STM.gen(this, function*() {
|
|
84
|
+
return (yield* this.first.size) + (yield* this.second.size)
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
isFull: STM.STM<boolean> = STM.gen(this, function*() {
|
|
88
|
+
return (yield* this.first.isFull) && (yield* this.second.isFull)
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
isEmpty: STM.STM<boolean> = STM.gen(this, function*() {
|
|
92
|
+
return (yield* this.first.isEmpty) && (yield* this.second.isEmpty)
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
shutdown: STM.STM<void> = STM.gen(this, function*() {
|
|
96
|
+
yield* this.first.shutdown
|
|
97
|
+
yield* this.second.shutdown
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
isShutdown: STM.STM<boolean> = STM.gen(this, function*() {
|
|
101
|
+
return (yield* this.first.isShutdown) && (yield* this.second.isShutdown)
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
awaitShutdown: STM.STM<void> = STM.gen(this, function*() {
|
|
105
|
+
yield* this.first.awaitShutdown
|
|
106
|
+
yield* this.second.awaitShutdown
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** @internal */
|
|
111
|
+
class TSubscriptionRefImpl<in out A> implements TSubscriptionRef.TSubscriptionRef<A> {
|
|
112
|
+
readonly [TSubscriptionRefTypeId] = TSubscriptionRefVariance
|
|
113
|
+
readonly [TRef.TRefTypeId] = tRefVariance
|
|
114
|
+
|
|
115
|
+
constructor(
|
|
116
|
+
readonly ref: TRef.TRef<A>,
|
|
117
|
+
readonly pubsub: TPubSub.TPubSub<A>
|
|
118
|
+
) {}
|
|
119
|
+
|
|
120
|
+
get todos() {
|
|
121
|
+
return this.ref.todos
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
get versioned() {
|
|
125
|
+
return this.ref.versioned
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
pipe() {
|
|
129
|
+
return pipeArguments(this, arguments)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
get changes(): STM.STM<TQueue.TDequeue<A>> {
|
|
133
|
+
return STM.gen(this, function*() {
|
|
134
|
+
const first = yield* TQueue.unbounded<A>()
|
|
135
|
+
yield* TQueue.offer(first, yield* TRef.get(this.ref))
|
|
136
|
+
return new TDequeueMerge(first, yield* TPubSub.subscribe(this.pubsub))
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
modify<B>(f: (a: A) => readonly [B, A]): STM.STM<B> {
|
|
141
|
+
return pipe(
|
|
142
|
+
TRef.get(this.ref),
|
|
143
|
+
STM.map(f),
|
|
144
|
+
STM.flatMap(([b, a]) =>
|
|
145
|
+
pipe(
|
|
146
|
+
TRef.set(this.ref, a),
|
|
147
|
+
STM.as(b),
|
|
148
|
+
STM.zipLeft(TPubSub.publish(this.pubsub, a))
|
|
149
|
+
)
|
|
150
|
+
)
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** @internal */
|
|
156
|
+
export const make = <A>(value: A): STM.STM<TSubscriptionRef.TSubscriptionRef<A>> =>
|
|
157
|
+
pipe(
|
|
158
|
+
STM.all([
|
|
159
|
+
TPubSub.unbounded<A>(),
|
|
160
|
+
TRef.make(value)
|
|
161
|
+
]),
|
|
162
|
+
STM.map(([pubsub, ref]) => new TSubscriptionRefImpl(ref, pubsub))
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
/** @internal */
|
|
166
|
+
export const get = <A>(self: TSubscriptionRef.TSubscriptionRef<A>) => TRef.get(self.ref)
|
|
167
|
+
|
|
168
|
+
/** @internal */
|
|
169
|
+
export const set = dual<
|
|
170
|
+
<A>(value: A) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<void>,
|
|
171
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, value: A) => STM.STM<void>
|
|
172
|
+
>(
|
|
173
|
+
2,
|
|
174
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, value: A): STM.STM<void> =>
|
|
175
|
+
self.modify((): [void, A] => [void 0, value])
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
/** @internal */
|
|
179
|
+
export const getAndSet = dual<
|
|
180
|
+
<A>(value: A) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<A>,
|
|
181
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, value: A) => STM.STM<A>
|
|
182
|
+
>(2, (self, value) => self.modify((a) => [a, value]))
|
|
183
|
+
|
|
184
|
+
/** @internal */
|
|
185
|
+
export const getAndUpdate = dual<
|
|
186
|
+
<A>(f: (a: A) => A) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<A>,
|
|
187
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => A) => STM.STM<A>
|
|
188
|
+
>(2, (self, f) => self.modify((a) => [a, f(a)]))
|
|
189
|
+
|
|
190
|
+
/** @internal */
|
|
191
|
+
export const getAndUpdateSome = dual<
|
|
192
|
+
<A>(f: (a: A) => Option.Option<A>) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<A>,
|
|
193
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => Option.Option<A>) => STM.STM<A>
|
|
194
|
+
>(2, (self, f) =>
|
|
195
|
+
self.modify((a) =>
|
|
196
|
+
Option.match(f(a), {
|
|
197
|
+
onNone: () => [a, a],
|
|
198
|
+
onSome: (b) => [a, b]
|
|
199
|
+
})
|
|
200
|
+
))
|
|
201
|
+
|
|
202
|
+
/** @internal */
|
|
203
|
+
export const setAndGet = dual<
|
|
204
|
+
<A>(value: A) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<A>,
|
|
205
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, value: A) => STM.STM<A>
|
|
206
|
+
>(2, (self, value) => self.modify(() => [value, value]))
|
|
207
|
+
|
|
208
|
+
/** @internal */
|
|
209
|
+
export const modify = dual<
|
|
210
|
+
<A, B>(f: (a: A) => readonly [B, A]) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<B>,
|
|
211
|
+
<A, B>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => readonly [B, A]) => STM.STM<B>
|
|
212
|
+
>(2, (self, f) => self.modify(f))
|
|
213
|
+
|
|
214
|
+
/** @internal */
|
|
215
|
+
export const modifySome = dual<
|
|
216
|
+
<A, B>(
|
|
217
|
+
fallback: B,
|
|
218
|
+
f: (a: A) => Option.Option<readonly [B, A]>
|
|
219
|
+
) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<B>,
|
|
220
|
+
<A, B>(
|
|
221
|
+
self: TSubscriptionRef.TSubscriptionRef<A>,
|
|
222
|
+
fallback: B,
|
|
223
|
+
f: (a: A) => Option.Option<readonly [B, A]>
|
|
224
|
+
) => STM.STM<B>
|
|
225
|
+
>(3, (self, fallback, f) =>
|
|
226
|
+
self.modify((a) =>
|
|
227
|
+
Option.match(f(a), {
|
|
228
|
+
onNone: () => [fallback, a],
|
|
229
|
+
onSome: (b) => b
|
|
230
|
+
})
|
|
231
|
+
))
|
|
232
|
+
|
|
233
|
+
/** @internal */
|
|
234
|
+
export const update = dual<
|
|
235
|
+
<A>(f: (a: A) => A) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<void>,
|
|
236
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => A) => STM.STM<void>
|
|
237
|
+
>(2, (self, f) => self.modify((a) => [void 0, f(a)]))
|
|
238
|
+
|
|
239
|
+
/** @internal */
|
|
240
|
+
export const updateAndGet = dual<
|
|
241
|
+
<A>(f: (a: A) => A) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<A>,
|
|
242
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => A) => STM.STM<A>
|
|
243
|
+
>(2, (self, f) =>
|
|
244
|
+
self.modify((a) => {
|
|
245
|
+
const b = f(a)
|
|
246
|
+
return [b, b]
|
|
247
|
+
}))
|
|
248
|
+
|
|
249
|
+
/** @internal */
|
|
250
|
+
export const updateSome = dual<
|
|
251
|
+
<A>(f: (a: A) => Option.Option<A>) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<void>,
|
|
252
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => Option.Option<A>) => STM.STM<void>
|
|
253
|
+
>(
|
|
254
|
+
2,
|
|
255
|
+
(self, f) =>
|
|
256
|
+
self.modify((a) => [
|
|
257
|
+
void 0,
|
|
258
|
+
Option.match(f(a), {
|
|
259
|
+
onNone: () => a,
|
|
260
|
+
onSome: (b) => b
|
|
261
|
+
})
|
|
262
|
+
])
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
/** @internal */
|
|
266
|
+
export const updateSomeAndGet = dual<
|
|
267
|
+
<A>(f: (a: A) => Option.Option<A>) => (self: TSubscriptionRef.TSubscriptionRef<A>) => STM.STM<A>,
|
|
268
|
+
<A>(self: TSubscriptionRef.TSubscriptionRef<A>, f: (a: A) => Option.Option<A>) => STM.STM<A>
|
|
269
|
+
>(
|
|
270
|
+
2,
|
|
271
|
+
(self, f) =>
|
|
272
|
+
self.modify((a) =>
|
|
273
|
+
Option.match(f(a), {
|
|
274
|
+
onNone: () => [a, a],
|
|
275
|
+
onSome: (b) => [b, b]
|
|
276
|
+
})
|
|
277
|
+
)
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
/** @internal */
|
|
281
|
+
export const changesScoped = <A>(self: TSubscriptionRef.TSubscriptionRef<A>) =>
|
|
282
|
+
Effect.acquireRelease(self.changes, TQueue.shutdown)
|
|
283
|
+
|
|
284
|
+
/** @internal */
|
|
285
|
+
export const changesStream = <A>(self: TSubscriptionRef.TSubscriptionRef<A>) =>
|
|
286
|
+
stream.unwrap(Effect.map(self.changes, stream.fromTQueue))
|
package/src/internal/stream.ts
CHANGED
|
@@ -18,7 +18,7 @@ import * as MergeDecision from "../MergeDecision.js"
|
|
|
18
18
|
import * as Option from "../Option.js"
|
|
19
19
|
import type * as Order from "../Order.js"
|
|
20
20
|
import { pipeArguments } from "../Pipeable.js"
|
|
21
|
-
import { hasProperty,
|
|
21
|
+
import { hasProperty, type Predicate, type Refinement } from "../Predicate.js"
|
|
22
22
|
import * as PubSub from "../PubSub.js"
|
|
23
23
|
import * as Queue from "../Queue.js"
|
|
24
24
|
import * as RcRef from "../RcRef.js"
|
|
@@ -31,6 +31,8 @@ import type * as Stream from "../Stream.js"
|
|
|
31
31
|
import type * as Emit from "../StreamEmit.js"
|
|
32
32
|
import * as HaltStrategy from "../StreamHaltStrategy.js"
|
|
33
33
|
import type * as Take from "../Take.js"
|
|
34
|
+
import * as TPubSub from "../TPubSub.js"
|
|
35
|
+
import * as TQueue from "../TQueue.js"
|
|
34
36
|
import type * as Tracer from "../Tracer.js"
|
|
35
37
|
import * as Tuple from "../Tuple.js"
|
|
36
38
|
import type { NoInfer, TupleOf } from "../Types.js"
|
|
@@ -3133,6 +3135,14 @@ export const fromPubSub: {
|
|
|
3133
3135
|
return options?.shutdown ? ensuring(stream, PubSub.shutdown(pubsub)) : stream
|
|
3134
3136
|
}
|
|
3135
3137
|
|
|
3138
|
+
/** @internal */
|
|
3139
|
+
export const fromTPubSub = <A>(pubsub: TPubSub.TPubSub<A>): Stream.Stream<A> => {
|
|
3140
|
+
return unwrapScoped(Effect.map(
|
|
3141
|
+
TPubSub.subscribeScoped(pubsub),
|
|
3142
|
+
(queue) => fromTQueue(queue)
|
|
3143
|
+
))
|
|
3144
|
+
}
|
|
3145
|
+
|
|
3136
3146
|
/** @internal */
|
|
3137
3147
|
export const fromIterable = <A>(iterable: Iterable<A>): Stream.Stream<A> =>
|
|
3138
3148
|
suspend(() =>
|
|
@@ -3224,6 +3234,24 @@ export const fromQueue = <A>(
|
|
|
3224
3234
|
options?.shutdown ? ensuring(Queue.shutdown(queue)) : identity
|
|
3225
3235
|
)
|
|
3226
3236
|
|
|
3237
|
+
/** @internal */
|
|
3238
|
+
export const fromTQueue = <A>(queue: TQueue.TDequeue<A>): Stream.Stream<A> =>
|
|
3239
|
+
pipe(
|
|
3240
|
+
TQueue.take(queue),
|
|
3241
|
+
Effect.map(Chunk.of),
|
|
3242
|
+
Effect.catchAllCause((cause) =>
|
|
3243
|
+
pipe(
|
|
3244
|
+
TQueue.isShutdown(queue),
|
|
3245
|
+
Effect.flatMap((isShutdown) =>
|
|
3246
|
+
isShutdown && Cause.isInterrupted(cause) ?
|
|
3247
|
+
pull.end() :
|
|
3248
|
+
pull.failCause(cause)
|
|
3249
|
+
)
|
|
3250
|
+
)
|
|
3251
|
+
),
|
|
3252
|
+
repeatEffectChunkOption
|
|
3253
|
+
)
|
|
3254
|
+
|
|
3227
3255
|
/** @internal */
|
|
3228
3256
|
export const fromSchedule = <A, R>(schedule: Schedule.Schedule<A, unknown, R>): Stream.Stream<A, never, R> =>
|
|
3229
3257
|
pipe(
|
|
@@ -3233,14 +3261,38 @@ export const fromSchedule = <A, R>(schedule: Schedule.Schedule<A, unknown, R>):
|
|
|
3233
3261
|
)
|
|
3234
3262
|
|
|
3235
3263
|
/** @internal */
|
|
3236
|
-
export const fromReadableStream
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3264
|
+
export const fromReadableStream: {
|
|
3265
|
+
<A, E>(
|
|
3266
|
+
options: {
|
|
3267
|
+
readonly evaluate: LazyArg<ReadableStream<A>>
|
|
3268
|
+
readonly onError: (error: unknown) => E
|
|
3269
|
+
readonly releaseLockOnEnd?: boolean | undefined
|
|
3270
|
+
}
|
|
3271
|
+
): Stream.Stream<A, E>
|
|
3272
|
+
<A, E>(
|
|
3273
|
+
evaluate: LazyArg<ReadableStream<A>>,
|
|
3274
|
+
onError: (error: unknown) => E
|
|
3275
|
+
): Stream.Stream<A, E>
|
|
3276
|
+
} = <A, E>(
|
|
3277
|
+
...args: [options: {
|
|
3278
|
+
readonly evaluate: LazyArg<ReadableStream<A>>
|
|
3279
|
+
readonly onError: (error: unknown) => E
|
|
3280
|
+
readonly releaseLockOnEnd?: boolean | undefined
|
|
3281
|
+
}] | [
|
|
3282
|
+
evaluate: LazyArg<ReadableStream<A>>,
|
|
3283
|
+
onError: (error: unknown) => E
|
|
3284
|
+
]
|
|
3285
|
+
): Stream.Stream<A, E> => {
|
|
3286
|
+
const evaluate = args.length === 1 ? args[0].evaluate : args[0]
|
|
3287
|
+
const onError = args.length === 1 ? args[0].onError : args[1]
|
|
3288
|
+
const releaseLockOnEnd = args.length === 1 ? args[0].releaseLockOnEnd === true : false
|
|
3289
|
+
return unwrapScoped(Effect.map(
|
|
3241
3290
|
Effect.acquireRelease(
|
|
3242
3291
|
Effect.sync(() => evaluate().getReader()),
|
|
3243
|
-
(reader) =>
|
|
3292
|
+
(reader) =>
|
|
3293
|
+
releaseLockOnEnd
|
|
3294
|
+
? Effect.sync(() => reader.releaseLock())
|
|
3295
|
+
: Effect.promise(() => reader.cancel())
|
|
3244
3296
|
),
|
|
3245
3297
|
(reader) =>
|
|
3246
3298
|
repeatEffectOption(
|
|
@@ -3253,34 +3305,59 @@ export const fromReadableStream = <A, E>(
|
|
|
3253
3305
|
)
|
|
3254
3306
|
)
|
|
3255
3307
|
))
|
|
3308
|
+
}
|
|
3256
3309
|
|
|
3257
3310
|
/** @internal */
|
|
3258
|
-
export const fromReadableStreamByob
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3311
|
+
export const fromReadableStreamByob: {
|
|
3312
|
+
<E>(
|
|
3313
|
+
options: {
|
|
3314
|
+
readonly evaluate: LazyArg<ReadableStream<Uint8Array>>
|
|
3315
|
+
readonly onError: (error: unknown) => E
|
|
3316
|
+
readonly bufferSize?: number | undefined
|
|
3317
|
+
readonly releaseLockOnEnd?: boolean | undefined
|
|
3318
|
+
}
|
|
3319
|
+
): Stream.Stream<Uint8Array, E>
|
|
3320
|
+
<E>(
|
|
3321
|
+
evaluate: LazyArg<ReadableStream<Uint8Array>>,
|
|
3322
|
+
onError: (error: unknown) => E,
|
|
3323
|
+
allocSize?: number
|
|
3324
|
+
): Stream.Stream<Uint8Array, E>
|
|
3325
|
+
} = <E>(
|
|
3326
|
+
...args: [options: {
|
|
3327
|
+
readonly evaluate: LazyArg<ReadableStream<Uint8Array>>
|
|
3328
|
+
readonly onError: (error: unknown) => E
|
|
3329
|
+
readonly bufferSize?: number | undefined
|
|
3330
|
+
readonly releaseLockOnEnd?: boolean | undefined
|
|
3331
|
+
}] | [
|
|
3332
|
+
evaluate: LazyArg<ReadableStream<Uint8Array>>,
|
|
3333
|
+
onError: (error: unknown) => E,
|
|
3334
|
+
allocSize?: number | undefined
|
|
3335
|
+
]
|
|
3336
|
+
): Stream.Stream<Uint8Array, E> => {
|
|
3337
|
+
const evaluate = args.length === 1 ? args[0].evaluate : args[0]
|
|
3338
|
+
const onError = args.length === 1 ? args[0].onError : args[1]
|
|
3339
|
+
const allocSize = (args.length === 1 ? args[0].bufferSize : args[2]) ?? 4096
|
|
3340
|
+
const releaseLockOnEnd = args.length === 1 ? args[0].releaseLockOnEnd === true : false
|
|
3341
|
+
return unwrapScoped(Effect.map(
|
|
3264
3342
|
Effect.acquireRelease(
|
|
3265
3343
|
Effect.sync(() => evaluate().getReader({ mode: "byob" })),
|
|
3266
|
-
(reader) => Effect.promise(() => reader.cancel())
|
|
3344
|
+
(reader) => releaseLockOnEnd ? Effect.sync(() => reader.releaseLock()) : Effect.promise(() => reader.cancel())
|
|
3267
3345
|
),
|
|
3268
3346
|
(reader) =>
|
|
3269
3347
|
catchAll(
|
|
3270
3348
|
forever(readChunkStreamByobReader(reader, onError, allocSize)),
|
|
3271
|
-
(error) =>
|
|
3349
|
+
(error) => error === EOF ? empty : fail(error)
|
|
3272
3350
|
)
|
|
3273
3351
|
))
|
|
3274
|
-
|
|
3275
|
-
interface EOF {
|
|
3276
|
-
readonly _tag: "EOF"
|
|
3277
3352
|
}
|
|
3278
3353
|
|
|
3354
|
+
const EOF = Symbol.for("effect/Stream/EOF")
|
|
3355
|
+
|
|
3279
3356
|
const readChunkStreamByobReader = <E>(
|
|
3280
3357
|
reader: ReadableStreamBYOBReader,
|
|
3281
3358
|
onError: (error: unknown) => E,
|
|
3282
3359
|
size: number
|
|
3283
|
-
): Stream.Stream<Uint8Array, E | EOF> => {
|
|
3360
|
+
): Stream.Stream<Uint8Array, E | typeof EOF> => {
|
|
3284
3361
|
const buffer = new ArrayBuffer(size)
|
|
3285
3362
|
return paginateEffect(0, (offset) =>
|
|
3286
3363
|
Effect.flatMap(
|
|
@@ -3290,7 +3367,7 @@ const readChunkStreamByobReader = <E>(
|
|
|
3290
3367
|
}),
|
|
3291
3368
|
({ done, value }) => {
|
|
3292
3369
|
if (done) {
|
|
3293
|
-
return Effect.fail(
|
|
3370
|
+
return Effect.fail(EOF)
|
|
3294
3371
|
}
|
|
3295
3372
|
const newOffset = offset + value.byteLength
|
|
3296
3373
|
return Effect.succeed([
|
package/src/internal/version.ts
CHANGED