@effect/platform 0.50.2 → 0.50.4

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.
@@ -59,8 +59,8 @@ export const Spawner = Context.GenericTag<Worker.Spawner, Worker.SpawnerFn>(
59
59
  )
60
60
 
61
61
  /** @internal */
62
- export const makeManager = Effect.gen(function*(_) {
63
- const platform = yield* _(PlatformWorker)
62
+ export const makeManager = Effect.gen(function*() {
63
+ const platform = yield* PlatformWorker
64
64
  let idCounter = 0
65
65
  return WorkerManager.of({
66
66
  [WorkerManagerTypeId]: WorkerManagerTypeId,
@@ -71,19 +71,19 @@ export const makeManager = Effect.gen(function*(_) {
71
71
  queue,
72
72
  transfers = (_) => []
73
73
  }: Worker.Worker.Options<I>) {
74
- return Effect.gen(function*(_) {
75
- const spawn = yield* _(Spawner)
74
+ return Effect.gen(function*() {
75
+ const spawn = yield* Spawner
76
76
  const id = idCounter++
77
77
  let requestIdCounter = 0
78
- const semaphore = yield* _(Effect.makeSemaphore(permits))
78
+ const semaphore = yield* Effect.makeSemaphore(permits)
79
79
  const requestMap = new Map<
80
80
  number,
81
81
  readonly [Queue.Queue<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>, Deferred.Deferred<void>]
82
82
  >()
83
- const sendQueue = yield* _(Effect.acquireRelease(
83
+ const sendQueue = yield* Effect.acquireRelease(
84
84
  Queue.unbounded<readonly [message: Worker.Worker.Request, transfers?: ReadonlyArray<unknown>]>(),
85
85
  Queue.shutdown
86
- ))
86
+ )
87
87
 
88
88
  const collector = Transferable.unsafeMakeCollector()
89
89
  const wrappedEncode = encode ?
@@ -94,36 +94,33 @@ export const makeManager = Effect.gen(function*(_) {
94
94
  )) :
95
95
  Effect.succeed
96
96
 
97
- const outbound = queue ?? (yield* _(defaultQueue<I>()))
98
- yield* _(Effect.addFinalizer(() => outbound.shutdown))
97
+ const outbound = queue ?? (yield* defaultQueue<I>())
98
+ yield Effect.addFinalizer(() => outbound.shutdown)
99
99
 
100
- yield* _(
101
- Effect.gen(function*(_) {
102
- const readyLatch = yield* _(Deferred.make<void>())
103
- const backing = yield* _(
104
- platform.spawn<Worker.Worker.Request, Worker.Worker.Response<E, O>>(spawn(id))
105
- )
106
- const send = pipe(
107
- sendQueue.take,
108
- Effect.flatMap(([message, transfers]) => backing.send(message, transfers)),
109
- Effect.forever
110
- )
111
- const take = pipe(
112
- Queue.take(backing.queue),
113
- Effect.flatMap((msg) => {
114
- if (msg[0] === 0) {
115
- return Deferred.complete(readyLatch, Effect.void)
116
- }
117
- return handleMessage(msg[1])
118
- }),
119
- Effect.forever
120
- )
121
- return yield* _(Effect.all([
122
- Fiber.join(backing.fiber),
123
- Effect.zipRight(Deferred.await(readyLatch), send),
124
- take
125
- ], { concurrency: "unbounded" }))
126
- }),
100
+ yield Effect.gen(function*() {
101
+ const readyLatch = yield* Deferred.make<void>()
102
+ const backing = yield* platform.spawn<Worker.Worker.Request, Worker.Worker.Response<E, O>>(spawn(id))
103
+ const send = pipe(
104
+ sendQueue.take,
105
+ Effect.flatMap(([message, transfers]) => backing.send(message, transfers)),
106
+ Effect.forever
107
+ )
108
+ const take = pipe(
109
+ Queue.take(backing.queue),
110
+ Effect.flatMap((msg) => {
111
+ if (msg[0] === 0) {
112
+ return Deferred.complete(readyLatch, Effect.void)
113
+ }
114
+ return handleMessage(msg[1])
115
+ }),
116
+ Effect.forever
117
+ )
118
+ return yield* Effect.all([
119
+ Fiber.join(backing.fiber),
120
+ Effect.zipRight(Deferred.await(readyLatch), send),
121
+ take
122
+ ], { concurrency: "unbounded" })
123
+ }).pipe(
127
124
  Effect.scoped,
128
125
  Effect.onError((cause) =>
129
126
  Effect.forEach(requestMap.values(), ([queue]) => Queue.offer(queue, Exit.failCause(cause)))
@@ -141,14 +138,14 @@ export const makeManager = Effect.gen(function*(_) {
141
138
  Effect.forkScoped
142
139
  )
143
140
 
144
- yield* _(Effect.addFinalizer(() =>
141
+ yield Effect.addFinalizer(() =>
145
142
  Effect.zipRight(
146
143
  Effect.forEach(requestMap.values(), ([queue]) => Queue.offer(queue, Exit.failCause(Cause.empty)), {
147
144
  discard: true
148
145
  }),
149
146
  Effect.sync(() => requestMap.clear())
150
147
  )
151
- ))
148
+ )
152
149
 
153
150
  const handleMessage = (response: Worker.Worker.Response<E, O>) =>
154
151
  Effect.suspend(() => {
@@ -244,8 +241,7 @@ export const makeManager = Effect.gen(function*(_) {
244
241
  executeRelease
245
242
  )
246
243
 
247
- yield* _(
248
- semaphore.take(1),
244
+ yield semaphore.take(1).pipe(
249
245
  Effect.zipRight(outbound.take),
250
246
  Effect.flatMap(([id, request, span]) =>
251
247
  pipe(
@@ -279,8 +275,7 @@ export const makeManager = Effect.gen(function*(_) {
279
275
  )
280
276
 
281
277
  if (initialMessage) {
282
- yield* _(
283
- Effect.sync(initialMessage),
278
+ yield Effect.sync(initialMessage).pipe(
284
279
  Effect.flatMap(executeEffect),
285
280
  Effect.mapError((error) => new WorkerError({ reason: "spawn", error }))
286
281
  )
@@ -299,8 +294,8 @@ export const layerManager = Layer.effect(WorkerManager, makeManager)
299
294
  export const makePool = <I, O, E>(
300
295
  options: Worker.WorkerPool.Options<I>
301
296
  ) =>
302
- Effect.gen(function*(_) {
303
- const manager = yield* _(WorkerManager)
297
+ Effect.gen(function*() {
298
+ const manager = yield* WorkerManager
304
299
  const workers = new Set<Worker.Worker<I, O, E>>()
305
300
  const acquire = pipe(
306
301
  manager.spawn<I, O, E>(options),
@@ -308,19 +303,17 @@ export const makePool = <I, O, E>(
308
303
  Effect.tap((worker) => Effect.addFinalizer(() => Effect.sync(() => workers.delete(worker)))),
309
304
  options.onCreate ? Effect.tap(options.onCreate) : identity
310
305
  )
311
- const backing = yield* _(
312
- "timeToLive" in options ?
313
- Pool.makeWithTTL({
314
- acquire,
315
- min: options.minSize,
316
- max: options.maxSize,
317
- timeToLive: options.timeToLive
318
- }) :
319
- Pool.make({
320
- acquire,
321
- size: options.size
322
- })
323
- )
306
+ const backing = yield* "timeToLive" in options ?
307
+ Pool.makeWithTTL({
308
+ acquire,
309
+ min: options.minSize,
310
+ max: options.maxSize,
311
+ timeToLive: options.timeToLive
312
+ }) :
313
+ Pool.make({
314
+ acquire,
315
+ size: options.size
316
+ })
324
317
  const pool: Worker.WorkerPool<I, O, E> = {
325
318
  backing,
326
319
  broadcast: (message: I) =>
@@ -357,19 +350,17 @@ export const makeSerialized = <
357
350
  >(
358
351
  options: Worker.SerializedWorker.Options<I>
359
352
  ): Effect.Effect<Worker.SerializedWorker<I>, WorkerError, Worker.WorkerManager | Worker.Spawner | Scope.Scope> =>
360
- Effect.gen(function*(_) {
361
- const manager = yield* _(WorkerManager)
362
- const backing = yield* _(
363
- manager.spawn({
364
- ...options as any,
365
- encode(message) {
366
- return Effect.mapError(
367
- Serializable.serialize(message as any),
368
- (error) => new WorkerError({ reason: "encode", error })
369
- )
370
- }
371
- })
372
- )
353
+ Effect.gen(function*() {
354
+ const manager = yield* WorkerManager
355
+ const backing = yield* manager.spawn({
356
+ ...options as any,
357
+ encode(message) {
358
+ return Effect.mapError(
359
+ Serializable.serialize(message as any),
360
+ (error) => new WorkerError({ reason: "encode", error })
361
+ )
362
+ }
363
+ })
373
364
  const execute = <Req extends I>(message: Req) => {
374
365
  const parseSuccess = Schema.decode(Serializable.successSchema(message as any))
375
366
  const parseFailure = Schema.decode(Serializable.failureSchema(message as any))
@@ -398,8 +389,8 @@ export const makeSerialized = <
398
389
  export const makePoolSerialized = <I extends Schema.TaggedRequest.Any>(
399
390
  options: Worker.SerializedWorkerPool.Options<I>
400
391
  ) =>
401
- Effect.gen(function*(_) {
402
- const manager = yield* _(WorkerManager)
392
+ Effect.gen(function*() {
393
+ const manager = yield* WorkerManager
403
394
  const workers = new Set<Worker.SerializedWorker<I>>()
404
395
  const acquire = pipe(
405
396
  makeSerialized<I>(options),
@@ -412,19 +403,17 @@ export const makePoolSerialized = <I extends Schema.TaggedRequest.Any>(
412
403
  : identity,
413
404
  Effect.provideService(WorkerManager, manager)
414
405
  )
415
- const backing = yield* _(
416
- "timeToLive" in options ?
417
- Pool.makeWithTTL({
418
- acquire,
419
- min: options.minSize,
420
- max: options.maxSize,
421
- timeToLive: options.timeToLive
422
- }) :
423
- Pool.make({
424
- acquire,
425
- size: options.size
426
- })
427
- )
406
+ const backing = yield* "timeToLive" in options ?
407
+ Pool.makeWithTTL({
408
+ acquire,
409
+ min: options.minSize,
410
+ max: options.maxSize,
411
+ timeToLive: options.timeToLive
412
+ }) :
413
+ Pool.make({
414
+ acquire,
415
+ size: options.size
416
+ })
428
417
  const pool: Worker.SerializedWorkerPool<I> = {
429
418
  backing,
430
419
  broadcast: <Req extends I>(message: Req) =>