@livestore/utils 0.0.55-dev.1 → 0.0.55-dev.3

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 (42) hide show
  1. package/dist/.tsbuildinfo.json +1 -1
  2. package/dist/effect/BrowserChannel.d.ts +25 -0
  3. package/dist/effect/BrowserChannel.d.ts.map +1 -0
  4. package/dist/effect/BrowserChannel.js +32 -0
  5. package/dist/effect/BrowserChannel.js.map +1 -0
  6. package/dist/effect/Effect.d.ts +3 -1
  7. package/dist/effect/Effect.d.ts.map +1 -1
  8. package/dist/effect/Effect.js +2 -0
  9. package/dist/effect/Effect.js.map +1 -1
  10. package/dist/effect/Stream.d.ts +1 -0
  11. package/dist/effect/Stream.d.ts.map +1 -1
  12. package/dist/effect/Stream.js +1 -0
  13. package/dist/effect/Stream.js.map +1 -1
  14. package/dist/effect/SubscriptionRef.d.ts +2 -2
  15. package/dist/effect/SubscriptionRef.d.ts.map +1 -1
  16. package/dist/effect/SubscriptionRef.js +2 -3
  17. package/dist/effect/SubscriptionRef.js.map +1 -1
  18. package/dist/effect/index.d.ts +3 -6
  19. package/dist/effect/index.d.ts.map +1 -1
  20. package/dist/effect/index.js +3 -8
  21. package/dist/effect/index.js.map +1 -1
  22. package/package.json +14 -14
  23. package/src/effect/BrowserChannel.ts +90 -0
  24. package/src/effect/Effect.ts +9 -1
  25. package/src/effect/Stream.ts +5 -0
  26. package/src/effect/SubscriptionRef.ts +3 -11
  27. package/src/effect/index.ts +4 -8
  28. package/dist/effect/Schema.d.ts +0 -4
  29. package/dist/effect/Schema.d.ts.map +0 -1
  30. package/dist/effect/Schema.js +0 -15
  31. package/dist/effect/Schema.js.map +0 -1
  32. package/src/effect/browser-worker-tmp/BrowserWorker.ts +0 -26
  33. package/src/effect/browser-worker-tmp/BrowserWorkerRunner.ts +0 -14
  34. package/src/effect/browser-worker-tmp/internal/worker.ts +0 -71
  35. package/src/effect/browser-worker-tmp/internal/workerRunner.ts +0 -119
  36. package/src/effect/browser-worker-tmp/port-platform-runner.ts +0 -74
  37. package/src/effect/worker-tmp/Worker.ts +0 -374
  38. package/src/effect/worker-tmp/WorkerError.ts +0 -79
  39. package/src/effect/worker-tmp/WorkerRunner.ts +0 -181
  40. package/src/effect/worker-tmp/internal/worker.ts +0 -417
  41. package/src/effect/worker-tmp/internal/workerError.ts +0 -6
  42. package/src/effect/worker-tmp/internal/workerRunner.ts +0 -237
@@ -1,71 +0,0 @@
1
- /* eslint-disable prefer-arrow/prefer-arrow-functions */
2
- import * as Deferred from 'effect/Deferred'
3
- import * as Effect from 'effect/Effect'
4
- import * as Layer from 'effect/Layer'
5
- import * as Queue from 'effect/Queue'
6
-
7
- import * as Worker from '../../worker-tmp/Worker.js'
8
- import { WorkerError } from '../../worker-tmp/WorkerError.js'
9
-
10
- const platformWorkerImpl = Worker.PlatformWorker.of({
11
- [Worker.PlatformWorkerTypeId]: Worker.PlatformWorkerTypeId,
12
- spawn<I, O>(worker_: unknown) {
13
- return Effect.gen(function* (_) {
14
- const worker = worker_ as globalThis.SharedWorker | globalThis.Worker | MessagePort
15
- let port: globalThis.Worker | MessagePort
16
- if ('port' in worker) {
17
- port = worker.port
18
- } else {
19
- port = worker
20
- }
21
-
22
- yield* _(Effect.addFinalizer(() => Effect.sync(() => port.postMessage([1]))))
23
-
24
- const queue = yield* _(Queue.unbounded<Worker.BackingWorker.Message<O>>())
25
- const latch = yield* Deferred.make<void>()
26
-
27
- const fiber = yield* _(
28
- Effect.async<never, WorkerError, never>((resume) => {
29
- function onMessage(event: MessageEvent) {
30
- queue.unsafeOffer((event as MessageEvent).data)
31
- }
32
- function onError(event: ErrorEvent) {
33
- resume(new WorkerError({ reason: 'unknown', error: event.error ?? event.message }))
34
- }
35
- port.addEventListener('message', onMessage as any)
36
- port.addEventListener('error', onError as any)
37
- Deferred.unsafeDone(latch, Effect.void)
38
- return Effect.sync(() => {
39
- port.removeEventListener('message', onMessage as any)
40
- port.removeEventListener('error', onError as any)
41
- })
42
- }),
43
- Effect.interruptible,
44
- Effect.forkScoped,
45
- )
46
- yield* Deferred.await(latch)
47
-
48
- if ('start' in port) {
49
- port.start()
50
- }
51
-
52
- const send = (message: I, transfers?: ReadonlyArray<unknown>) =>
53
- Effect.try({
54
- try: () => port.postMessage([0, message], transfers as any),
55
- catch: (error) => new WorkerError({ reason: 'send', error }),
56
- })
57
-
58
- return { fiber, queue, send }
59
- })
60
- },
61
- })
62
-
63
- /** @internal */
64
- export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl)
65
-
66
- /** @internal */
67
- export const layerManager = Layer.provide(Worker.layerManager, layerWorker)
68
-
69
- /** @internal */
70
- export const layer = (spawn: (id: number) => globalThis.Worker | globalThis.SharedWorker | MessagePort) =>
71
- Layer.merge(layerManager, Worker.layerSpawner(spawn))
@@ -1,119 +0,0 @@
1
- /// <reference lib="webworker" />
2
- /* eslint-disable prefer-arrow/prefer-arrow-functions */
3
- import * as Cause from 'effect/Cause'
4
- import * as Effect from 'effect/Effect'
5
- import * as FiberSet from 'effect/FiberSet'
6
- import { globalValue } from 'effect/GlobalValue'
7
- import * as Layer from 'effect/Layer'
8
- import * as Queue from 'effect/Queue'
9
- import * as Schedule from 'effect/Schedule'
10
-
11
- import { WorkerError } from '../../worker-tmp/WorkerError.js'
12
- import * as WorkerRunner from '../../worker-tmp/WorkerRunner.js'
13
-
14
- const cachedPorts = globalValue('@effect/platform-browser/Worker/cachedPorts', () => new Set<MessagePort>())
15
- function globalHandleConnect(event: MessageEvent) {
16
- cachedPorts.add((event as MessageEvent).ports[0]!)
17
- }
18
- if (typeof self !== 'undefined' && 'onconnect' in self) {
19
- // @ts-expect-error TODO
20
- self.addEventListener('connect', globalHandleConnect)
21
- }
22
-
23
- const platformRunnerImpl = WorkerRunner.PlatformRunner.of({
24
- [WorkerRunner.PlatformRunnerTypeId]: WorkerRunner.PlatformRunnerTypeId,
25
- start<I, O>(shutdown: Effect.Effect<void>) {
26
- return Effect.gen(function* () {
27
- let currentPortId = 0
28
-
29
- yield* Effect.addFinalizer(() => Effect.sync(() => self.close()))
30
-
31
- const queue = yield* Queue.unbounded<readonly [portId: number, message: I]>()
32
- const runFork = yield* FiberSet.makeRuntime<never>()
33
- const ports = new Map<number, MessagePort>()
34
- const send = (portId: number, message: O, transfer?: ReadonlyArray<unknown>) =>
35
- Effect.sync(() => {
36
- ports.get(portId)?.postMessage([1, message], {
37
- transfer: transfer as any,
38
- })
39
- })
40
-
41
- function handlePort(port: MessagePort, sharedWorker: boolean) {
42
- const portId = currentPortId++
43
- ports.set(portId, port)
44
-
45
- Effect.async<never, WorkerError, never>((resume) => {
46
- function onMessage(event: MessageEvent) {
47
- const message = (event as MessageEvent).data as WorkerRunner.BackingRunner.Message<I>
48
- if (message[0] === 0) {
49
- queue.unsafeOffer([portId, message[1]])
50
- } else if (sharedWorker && ports.size > 1) {
51
- resume(Effect.interrupt)
52
- } else {
53
- Effect.runFork(shutdown)
54
- }
55
- }
56
- function onMessageError(error: ErrorEvent) {
57
- resume(new WorkerError({ reason: 'decode', error: error.error ?? error.message }))
58
- }
59
- function onError(error: ErrorEvent) {
60
- resume(new WorkerError({ reason: 'unknown', error: error.error ?? error.message }))
61
- }
62
- port.addEventListener('message', onMessage as any)
63
- port.addEventListener('messageerror', onMessageError as any)
64
- port.addEventListener('error', onError as any)
65
-
66
- // ready
67
- if ('start' in port) {
68
- port.start()
69
- }
70
- port.postMessage([0])
71
-
72
- return Effect.sync(() => {
73
- port.removeEventListener('message', onMessage as any)
74
- port.removeEventListener('messageerror', onMessageError as any)
75
- port.removeEventListener('error', onError as any)
76
- })
77
- }).pipe(
78
- Effect.tapErrorCause((cause) => (Cause.isInterruptedOnly(cause) ? Effect.void : Effect.logDebug(cause))),
79
- Effect.retry(Schedule.forever),
80
- Effect.annotateLogs({
81
- package: '@effect/platform-browser',
82
- module: 'WorkerRunner',
83
- }),
84
- Effect.ensuring(
85
- Effect.sync(() => {
86
- ports.delete(portId)
87
- }),
88
- ),
89
- Effect.interruptible,
90
- runFork,
91
- )
92
- }
93
-
94
- if ('onconnect' in self) {
95
- // @ts-expect-error TODO
96
- self.addEventListener('connect', (event: MessageEvent) => {
97
- const port = (event as MessageEvent).ports[0]
98
- handlePort(port!, true)
99
- })
100
- yield* Effect.addFinalizer(() =>
101
- Effect.sync(() => {
102
- ;(self as any).addEventListener('connect', globalHandleConnect)
103
- }),
104
- )
105
- for (const port of cachedPorts) {
106
- handlePort(port, true)
107
- }
108
- cachedPorts.clear()
109
- } else {
110
- handlePort(self as any, false)
111
- }
112
-
113
- return { queue, send }
114
- })
115
- },
116
- })
117
-
118
- /** @internal */
119
- export const layer = Layer.succeed(WorkerRunner.PlatformRunner, platformRunnerImpl)
@@ -1,74 +0,0 @@
1
- import { Deferred } from 'effect'
2
- import * as Cause from 'effect/Cause'
3
- import * as Effect from 'effect/Effect'
4
- import * as Layer from 'effect/Layer'
5
- import * as Queue from 'effect/Queue'
6
- import * as Schedule from 'effect/Schedule'
7
-
8
- import { WorkerError } from '../worker-tmp/WorkerError.js'
9
- import * as Runner from '../worker-tmp/WorkerRunner.js'
10
-
11
- const platformRunnerImpl = (port: MessagePort) =>
12
- Runner.PlatformRunner.of({
13
- [Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
14
- start: <I, O>(shutdown: Effect.Effect<void>) => {
15
- return Effect.gen(function* () {
16
- const queue = yield* Queue.unbounded<readonly [portId: number, message: I]>()
17
-
18
- const latch = yield* Deferred.make<void>()
19
-
20
- yield* Effect.async<never, WorkerError>((resume) => {
21
- const onMessage = (msg: MessageEvent<Runner.BackingRunner.Message<I>>) => {
22
- const message = msg.data
23
- if (message[0] === 0) {
24
- queue.unsafeOffer([0, message[1]])
25
- } else {
26
- Effect.runFork(shutdown)
27
- }
28
- }
29
-
30
- const onError = (error: any) => {
31
- resume(new WorkerError({ reason: 'decode', error }))
32
- }
33
-
34
- port.addEventListener('message', onMessage)
35
- port.addEventListener('messageerror', onError)
36
- port.addEventListener('error', onError)
37
-
38
- Deferred.unsafeDone(latch, Effect.void)
39
-
40
- return Effect.sync(() => {
41
- port.removeEventListener('message', onMessage as any)
42
- port.removeEventListener('error', onError as any)
43
- })
44
- }).pipe(
45
- Effect.tapErrorCause((cause) => (Cause.isInterruptedOnly(cause) ? Effect.void : Effect.logDebug(cause))),
46
- Effect.retry(Schedule.forever),
47
- Effect.annotateLogs({
48
- package: '@livestore/utils/effect',
49
- module: 'PortPlatformRunner',
50
- }),
51
- Effect.interruptible,
52
- Effect.forkScoped,
53
- )
54
-
55
- yield* Deferred.await(latch)
56
-
57
- port.start()
58
-
59
- const send = (_portId: number, message: O, transfers?: ReadonlyArray<unknown>) =>
60
- Effect.try({
61
- try: () => port.postMessage([1, message], transfers as any),
62
- catch: (error) => new WorkerError({ reason: 'send', error }),
63
- }).pipe(Effect.catchTag('WorkerError', Effect.orDie))
64
-
65
- // ready
66
- port.postMessage([0])
67
-
68
- return { queue, send }
69
- })
70
- },
71
- })
72
-
73
- /** @internal */
74
- export const layerMessagePort = (port: MessagePort) => Layer.succeed(Runner.PlatformRunner, platformRunnerImpl(port))
@@ -1,374 +0,0 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
- import type * as ParseResult from '@effect/schema/ParseResult'
5
- import type * as Schema from '@effect/schema/Schema'
6
- import type * as Serializable from '@effect/schema/Serializable'
7
- import type * as Context from 'effect/Context'
8
- import type * as Duration from 'effect/Duration'
9
- import type * as Effect from 'effect/Effect'
10
- import type * as Fiber from 'effect/Fiber'
11
- import type { LazyArg } from 'effect/Function'
12
- import type * as Layer from 'effect/Layer'
13
- import type * as Option from 'effect/Option'
14
- import type * as Pool from 'effect/Pool'
15
- import type * as Queue from 'effect/Queue'
16
- import type * as Scope from 'effect/Scope'
17
- import type * as Stream from 'effect/Stream'
18
- import type * as Tracer from 'effect/Tracer'
19
-
20
- import * as internal from './internal/worker.js'
21
- import type { WorkerError, WorkerErrorFrom } from './WorkerError.js'
22
-
23
- /**
24
- * @since 1.0.0
25
- * @category models
26
- */
27
- export interface BackingWorker<I, O> {
28
- readonly fiber: Fiber.Fiber<never, WorkerError>
29
- readonly send: (message: I, transfers?: ReadonlyArray<unknown>) => Effect.Effect<void, WorkerError>
30
- readonly queue: Queue.Dequeue<BackingWorker.Message<O>>
31
- }
32
-
33
- /**
34
- * @since 1.0.0
35
- * @category models
36
- */
37
- export declare namespace BackingWorker {
38
- /**
39
- * @since 1.0.0
40
- * @category models
41
- */
42
- export type Message<O> = readonly [ready: 0] | readonly [data: 1, O]
43
- }
44
-
45
- /**
46
- * @since 1.0.0
47
- * @category type ids
48
- */
49
- export const PlatformWorkerTypeId: unique symbol = internal.PlatformWorkerTypeId
50
-
51
- /**
52
- * @since 1.0.0
53
- * @category type ids
54
- */
55
- export type PlatformWorkerTypeId = typeof PlatformWorkerTypeId
56
-
57
- /**
58
- * @since 1.0.0
59
- * @category models
60
- */
61
- export interface PlatformWorker {
62
- readonly [PlatformWorkerTypeId]: PlatformWorkerTypeId
63
- readonly spawn: <I, O>(worker: unknown) => Effect.Effect<BackingWorker<I, O>, WorkerError, Scope.Scope>
64
- }
65
-
66
- /**
67
- * @since 1.0.0
68
- * @category tags
69
- */
70
- export const PlatformWorker: Context.Tag<PlatformWorker, PlatformWorker> = internal.PlatformWorker
71
-
72
- /**
73
- * @since 1.0.0
74
- * @category models
75
- */
76
- export interface Worker<I, O, E = never> {
77
- readonly id: number
78
- readonly execute: (message: I) => Stream.Stream<O, E | WorkerError>
79
- readonly executeEffect: (message: I) => Effect.Effect<O, E | WorkerError>
80
- }
81
-
82
- /**
83
- * @since 1.0.0
84
- * @category models
85
- */
86
- export interface Spawner {
87
- readonly _: unique symbol
88
- }
89
-
90
- /**
91
- * @since 1.0.0
92
- * @category models
93
- */
94
- export interface SpawnerFn<W = unknown> {
95
- (id: number): W
96
- }
97
-
98
- /**
99
- * @since 1.0.0
100
- * @category models
101
- */
102
- export declare namespace Worker {
103
- /**
104
- * @since 1.0.0
105
- * @category models
106
- */
107
- export interface Options<I> {
108
- readonly encode?: ((message: I) => Effect.Effect<unknown, WorkerError>) | undefined
109
- readonly transfers?: ((message: I) => ReadonlyArray<unknown>) | undefined
110
- readonly queue?: WorkerQueue<I> | undefined
111
- readonly initialMessage?: LazyArg<I> | undefined
112
- }
113
-
114
- /**
115
- * @since 1.0.0
116
- * @category models
117
- */
118
- export type Request<I = unknown> =
119
- | readonly [id: number, data: 0, I, trace: Span | undefined]
120
- | readonly [id: number, interrupt: 1]
121
-
122
- /**
123
- * @since 1.0.0
124
- * @category models
125
- */
126
- export type Span = readonly [traceId: string, spanId: string, sampled: boolean]
127
-
128
- /**
129
- * @since 1.0.0
130
- * @category models
131
- */
132
- export type Response<E, O = unknown> =
133
- | readonly [id: number, data: 0, ReadonlyArray<O>]
134
- | readonly [id: number, end: 1]
135
- | readonly [id: number, end: 1, ReadonlyArray<O>]
136
- | readonly [id: number, error: 2, E]
137
- | readonly [id: number, defect: 3, Schema.CauseEncoded<WorkerErrorFrom, unknown>]
138
- }
139
-
140
- /**
141
- * @since 1.0.0
142
- * @category models
143
- */
144
- export interface WorkerPool<I, O, E = never> {
145
- readonly backing: Pool.Pool<Worker<I, O, E>, WorkerError>
146
- readonly broadcast: (message: I) => Effect.Effect<void, E | WorkerError>
147
- readonly execute: (message: I) => Stream.Stream<O, E | WorkerError>
148
- readonly executeEffect: (message: I) => Effect.Effect<O, E | WorkerError>
149
- }
150
-
151
- /**
152
- * @since 1.0.0
153
- * @category models
154
- */
155
- export declare namespace WorkerPool {
156
- /**
157
- * @since 1.0.0
158
- * @category models
159
- */
160
- export type Options<I> = Worker.Options<I> &
161
- (
162
- | {
163
- readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<void, WorkerError>
164
- readonly size: number
165
- readonly concurrency?: number | undefined
166
- readonly targetUtilization?: number | undefined
167
- }
168
- | {
169
- readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<void, WorkerError>
170
- readonly minSize: number
171
- readonly maxSize: number
172
- readonly concurrency?: number | undefined
173
- readonly targetUtilization?: number | undefined
174
- readonly timeToLive: Duration.DurationInput
175
- }
176
- )
177
- }
178
-
179
- /**
180
- * @category models
181
- * @since 1.0.0
182
- */
183
- export interface WorkerQueue<I> {
184
- readonly offer: (id: number, item: I, span: Option.Option<Tracer.Span>) => Effect.Effect<void>
185
- readonly take: Effect.Effect<readonly [id: number, item: I, span: Option.Option<Tracer.Span>]>
186
- readonly shutdown: Effect.Effect<void>
187
- }
188
-
189
- /**
190
- * @since 1.0.0
191
- * @category type ids
192
- */
193
- export const WorkerManagerTypeId: unique symbol = internal.WorkerManagerTypeId
194
-
195
- /**
196
- * @since 1.0.0
197
- * @category type ids
198
- */
199
- export type WorkerManagerTypeId = typeof WorkerManagerTypeId
200
-
201
- /**
202
- * @since 1.0.0
203
- * @category models
204
- */
205
- export interface WorkerManager {
206
- readonly [WorkerManagerTypeId]: WorkerManagerTypeId
207
- readonly spawn: <I, O, E>(
208
- options: Worker.Options<I>,
209
- ) => Effect.Effect<Worker<I, O, E>, WorkerError, Scope.Scope | Spawner>
210
- }
211
-
212
- /**
213
- * @since 1.0.0
214
- * @category tags
215
- */
216
- export const WorkerManager: Context.Tag<WorkerManager, WorkerManager> = internal.WorkerManager
217
-
218
- /**
219
- * @since 1.0.0
220
- * @category constructors
221
- */
222
- export const makeManager: Effect.Effect<WorkerManager, never, PlatformWorker> = internal.makeManager
223
-
224
- /**
225
- * @since 1.0.0
226
- * @category layers
227
- */
228
- export const layerManager: Layer.Layer<WorkerManager, never, PlatformWorker> = internal.layerManager
229
-
230
- /**
231
- * @since 1.0.0
232
- * @category constructors
233
- */
234
- export const makePool: <I, O, E>(
235
- options: WorkerPool.Options<I>,
236
- ) => Effect.Effect<WorkerPool<I, O, E>, WorkerError, WorkerManager | Spawner | Scope.Scope> = internal.makePool
237
-
238
- /**
239
- * @since 1.0.0
240
- * @category constructors
241
- */
242
- export const makePoolLayer: <Tag, I, O, E>(
243
- tag: Context.Tag<Tag, WorkerPool<I, O, E>>,
244
- options: WorkerPool.Options<I>,
245
- ) => Layer.Layer<Tag, WorkerError, WorkerManager | Spawner> = internal.makePoolLayer
246
-
247
- /**
248
- * @since 1.0.0
249
- * @category models
250
- */
251
- export interface SerializedWorker<I extends Schema.TaggedRequest.All> {
252
- readonly id: number
253
- readonly execute: <Req extends I>(
254
- message: Req,
255
- ) => Req extends Serializable.WithResult<infer A, infer _I, infer E, infer _EI, infer R>
256
- ? Stream.Stream<A, E | WorkerError | ParseResult.ParseError, R>
257
- : never
258
- readonly executeEffect: <Req extends I>(
259
- message: Req,
260
- ) => Req extends Serializable.WithResult<infer A, infer _I, infer E, infer _EI, infer R>
261
- ? Effect.Effect<A, E | WorkerError | ParseResult.ParseError, R>
262
- : never
263
- }
264
-
265
- /**
266
- * @since 1.0.0
267
- * @category models
268
- */
269
- export declare namespace SerializedWorker {
270
- /**
271
- * @since 1.0.0
272
- * @category models
273
- */
274
- export type Options<I> =
275
- Extract<I, { readonly _tag: 'InitialMessage' }> extends never
276
- ? BaseOptions<I> & {
277
- readonly initialMessage?: LazyArg<I>
278
- }
279
- : BaseOptions<I> & {
280
- readonly initialMessage: LazyArg<Extract<I, { readonly _tag: 'InitialMessage' }>>
281
- }
282
-
283
- /**
284
- * @since 1.0.0
285
- * @category models
286
- */
287
- export interface BaseOptions<I> {
288
- readonly queue?: WorkerQueue<I> | undefined
289
- }
290
- }
291
-
292
- /**
293
- * @since 1.0.0
294
- * @category models
295
- */
296
- export interface SerializedWorkerPool<I extends Schema.TaggedRequest.All> {
297
- readonly backing: Pool.Pool<SerializedWorker<I>, WorkerError>
298
- readonly broadcast: <Req extends I>(
299
- message: Req,
300
- ) => Req extends Serializable.WithResult<infer _A, infer _I, infer E, infer _EI, infer R>
301
- ? Effect.Effect<void, E | WorkerError | ParseResult.ParseError, R>
302
- : never
303
- readonly execute: <Req extends I>(
304
- message: Req,
305
- ) => Req extends Serializable.WithResult<infer A, infer _I, infer E, infer _EI, infer R>
306
- ? Stream.Stream<A, E | WorkerError | ParseResult.ParseError, R>
307
- : never
308
- readonly executeEffect: <Req extends I>(
309
- message: Req,
310
- ) => Req extends Serializable.WithResult<infer A, infer _I, infer E, infer _EI, infer R>
311
- ? Effect.Effect<A, E | WorkerError | ParseResult.ParseError, R>
312
- : never
313
- }
314
-
315
- /**
316
- * @since 1.0.0
317
- * @category models
318
- */
319
- export declare namespace SerializedWorkerPool {
320
- /**
321
- * @since 1.0.0
322
- * @category models
323
- */
324
- export type Options<I> = SerializedWorker.Options<I> &
325
- (
326
- | {
327
- readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<void, WorkerError>
328
- readonly size: number
329
- readonly concurrency?: number | undefined
330
- readonly targetUtilization?: number | undefined
331
- }
332
- | {
333
- readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<void, WorkerError>
334
- readonly minSize: number
335
- readonly maxSize: number
336
- readonly concurrency?: number | undefined
337
- readonly targetUtilization?: number | undefined
338
- readonly timeToLive: Duration.DurationInput
339
- }
340
- )
341
- }
342
-
343
- /**
344
- * @since 1.0.0
345
- * @category constructors
346
- */
347
- export const makeSerialized: <I extends Schema.TaggedRequest.All>(
348
- options: SerializedWorker.Options<I>,
349
- ) => Effect.Effect<SerializedWorker<I>, WorkerError, WorkerManager | Spawner | Scope.Scope> = internal.makeSerialized
350
-
351
- /**
352
- * @since 1.0.0
353
- * @category constructors
354
- */
355
- export const makePoolSerialized: <I extends Schema.TaggedRequest.All>(
356
- options: SerializedWorkerPool.Options<I>,
357
- ) => Effect.Effect<SerializedWorkerPool<I>, WorkerError, WorkerManager | Spawner | Scope.Scope> =
358
- internal.makePoolSerialized
359
-
360
- /**
361
- * @since 1.0.0
362
- * @category layers
363
- */
364
- export const makePoolSerializedLayer: <Tag, I extends Schema.TaggedRequest.All>(
365
- tag: Context.Tag<Tag, SerializedWorkerPool<I>>,
366
- options: SerializedWorkerPool.Options<I>,
367
- ) => Layer.Layer<Tag, WorkerError, WorkerManager | Spawner> = internal.makePoolSerializedLayer
368
-
369
- /**
370
- * @since 1.0.0
371
- * @category layers
372
- */
373
- export const layerSpawner: <W = unknown>(spawner: SpawnerFn<W>) => Layer.Layer<Spawner, never, never> =
374
- internal.layerSpawner