@effect/platform 0.48.29 → 0.49.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.
Files changed (157) hide show
  1. package/README.md +12 -12
  2. package/dist/cjs/Http/App.js +9 -7
  3. package/dist/cjs/Http/App.js.map +1 -1
  4. package/dist/cjs/Http/Client.js +13 -3
  5. package/dist/cjs/Http/Client.js.map +1 -1
  6. package/dist/cjs/Http/ClientResponse.js +9 -9
  7. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  8. package/dist/cjs/Http/Cookies.js +7 -7
  9. package/dist/cjs/Http/Cookies.js.map +1 -1
  10. package/dist/cjs/Http/Headers.js +7 -7
  11. package/dist/cjs/Http/Headers.js.map +1 -1
  12. package/dist/cjs/Http/IncomingMessage.js +7 -7
  13. package/dist/cjs/Http/IncomingMessage.js.map +1 -1
  14. package/dist/cjs/Http/Middleware.js +11 -1
  15. package/dist/cjs/Http/Middleware.js.map +1 -1
  16. package/dist/cjs/Http/Multiplex.js.map +1 -1
  17. package/dist/cjs/Http/Router.js.map +1 -1
  18. package/dist/cjs/Http/UrlParams.js +13 -13
  19. package/dist/cjs/Http/UrlParams.js.map +1 -1
  20. package/dist/cjs/PlatformConfigProvider.js +2 -2
  21. package/dist/cjs/PlatformConfigProvider.js.map +1 -1
  22. package/dist/cjs/Socket.js +6 -6
  23. package/dist/cjs/Socket.js.map +1 -1
  24. package/dist/cjs/Transferable.js +1 -1
  25. package/dist/cjs/Transferable.js.map +1 -1
  26. package/dist/cjs/WorkerRunner.js.map +1 -1
  27. package/dist/cjs/internal/command.js +1 -1
  28. package/dist/cjs/internal/command.js.map +1 -1
  29. package/dist/cjs/internal/fileSystem.js +2 -2
  30. package/dist/cjs/internal/fileSystem.js.map +1 -1
  31. package/dist/cjs/internal/http/client.js +19 -16
  32. package/dist/cjs/internal/http/client.js.map +1 -1
  33. package/dist/cjs/internal/http/clientResponse.js +5 -5
  34. package/dist/cjs/internal/http/clientResponse.js.map +1 -1
  35. package/dist/cjs/internal/http/middleware.js +8 -3
  36. package/dist/cjs/internal/http/middleware.js.map +1 -1
  37. package/dist/cjs/internal/http/multipart.js +4 -4
  38. package/dist/cjs/internal/http/multipart.js.map +1 -1
  39. package/dist/cjs/internal/http/multiplex.js +2 -2
  40. package/dist/cjs/internal/http/multiplex.js.map +1 -1
  41. package/dist/cjs/internal/http/router.js +2 -1
  42. package/dist/cjs/internal/http/router.js.map +1 -1
  43. package/dist/cjs/internal/worker.js +7 -7
  44. package/dist/cjs/internal/worker.js.map +1 -1
  45. package/dist/cjs/internal/workerRunner.js +14 -13
  46. package/dist/cjs/internal/workerRunner.js.map +1 -1
  47. package/dist/dts/Command.d.ts +3 -3
  48. package/dist/dts/Command.d.ts.map +1 -1
  49. package/dist/dts/Http/App.d.ts +7 -7
  50. package/dist/dts/Http/App.d.ts.map +1 -1
  51. package/dist/dts/Http/Client.d.ts +78 -65
  52. package/dist/dts/Http/Client.d.ts.map +1 -1
  53. package/dist/dts/Http/ClientResponse.d.ts +5 -5
  54. package/dist/dts/Http/Cookies.d.ts +3 -3
  55. package/dist/dts/Http/Cookies.d.ts.map +1 -1
  56. package/dist/dts/Http/Headers.d.ts +4 -4
  57. package/dist/dts/Http/Headers.d.ts.map +1 -1
  58. package/dist/dts/Http/IncomingMessage.d.ts +4 -3
  59. package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
  60. package/dist/dts/Http/Middleware.d.ts +22 -5
  61. package/dist/dts/Http/Middleware.d.ts.map +1 -1
  62. package/dist/dts/Http/Multiplex.d.ts +22 -22
  63. package/dist/dts/Http/Multiplex.d.ts.map +1 -1
  64. package/dist/dts/Http/Router.d.ts +80 -80
  65. package/dist/dts/Http/Router.d.ts.map +1 -1
  66. package/dist/dts/Http/Server.d.ts +11 -11
  67. package/dist/dts/Http/Server.d.ts.map +1 -1
  68. package/dist/dts/Http/ServerRequest.d.ts +1 -1
  69. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  70. package/dist/dts/Http/TraceContext.d.ts.map +1 -1
  71. package/dist/dts/Http/UrlParams.d.ts.map +1 -1
  72. package/dist/dts/PlatformConfigProvider.d.ts.map +1 -1
  73. package/dist/dts/Socket.d.ts +10 -10
  74. package/dist/dts/Socket.d.ts.map +1 -1
  75. package/dist/dts/Transferable.d.ts.map +1 -1
  76. package/dist/dts/Worker.d.ts +6 -6
  77. package/dist/dts/Worker.d.ts.map +1 -1
  78. package/dist/dts/WorkerRunner.d.ts +5 -5
  79. package/dist/dts/WorkerRunner.d.ts.map +1 -1
  80. package/dist/dts/internal/http/router.d.ts +1 -1
  81. package/dist/dts/internal/http/router.d.ts.map +1 -1
  82. package/dist/esm/Http/App.js +9 -7
  83. package/dist/esm/Http/App.js.map +1 -1
  84. package/dist/esm/Http/Client.js +12 -2
  85. package/dist/esm/Http/Client.js.map +1 -1
  86. package/dist/esm/Http/ClientResponse.js +5 -5
  87. package/dist/esm/Http/ClientResponse.js.map +1 -1
  88. package/dist/esm/Http/Cookies.js +7 -7
  89. package/dist/esm/Http/Cookies.js.map +1 -1
  90. package/dist/esm/Http/Headers.js +7 -7
  91. package/dist/esm/Http/Headers.js.map +1 -1
  92. package/dist/esm/Http/IncomingMessage.js +3 -3
  93. package/dist/esm/Http/IncomingMessage.js.map +1 -1
  94. package/dist/esm/Http/Middleware.js +10 -0
  95. package/dist/esm/Http/Middleware.js.map +1 -1
  96. package/dist/esm/Http/Multiplex.js.map +1 -1
  97. package/dist/esm/Http/Router.js.map +1 -1
  98. package/dist/esm/Http/UrlParams.js +13 -13
  99. package/dist/esm/Http/UrlParams.js.map +1 -1
  100. package/dist/esm/PlatformConfigProvider.js +2 -2
  101. package/dist/esm/PlatformConfigProvider.js.map +1 -1
  102. package/dist/esm/Socket.js +6 -6
  103. package/dist/esm/Socket.js.map +1 -1
  104. package/dist/esm/Transferable.js +1 -1
  105. package/dist/esm/Transferable.js.map +1 -1
  106. package/dist/esm/WorkerRunner.js.map +1 -1
  107. package/dist/esm/internal/command.js +1 -1
  108. package/dist/esm/internal/command.js.map +1 -1
  109. package/dist/esm/internal/fileSystem.js +2 -2
  110. package/dist/esm/internal/fileSystem.js.map +1 -1
  111. package/dist/esm/internal/http/client.js +18 -13
  112. package/dist/esm/internal/http/client.js.map +1 -1
  113. package/dist/esm/internal/http/clientResponse.js +2 -2
  114. package/dist/esm/internal/http/clientResponse.js.map +1 -1
  115. package/dist/esm/internal/http/middleware.js +7 -2
  116. package/dist/esm/internal/http/middleware.js.map +1 -1
  117. package/dist/esm/internal/http/multipart.js +4 -4
  118. package/dist/esm/internal/http/multipart.js.map +1 -1
  119. package/dist/esm/internal/http/multiplex.js +2 -2
  120. package/dist/esm/internal/http/multiplex.js.map +1 -1
  121. package/dist/esm/internal/http/router.js +2 -1
  122. package/dist/esm/internal/http/router.js.map +1 -1
  123. package/dist/esm/internal/worker.js +7 -7
  124. package/dist/esm/internal/worker.js.map +1 -1
  125. package/dist/esm/internal/workerRunner.js +14 -13
  126. package/dist/esm/internal/workerRunner.js.map +1 -1
  127. package/package.json +3 -3
  128. package/src/Command.ts +3 -3
  129. package/src/Http/App.ts +21 -17
  130. package/src/Http/Client.ts +105 -90
  131. package/src/Http/ClientResponse.ts +7 -7
  132. package/src/Http/Cookies.ts +9 -9
  133. package/src/Http/Headers.ts +12 -12
  134. package/src/Http/IncomingMessage.ts +16 -6
  135. package/src/Http/Middleware.ts +30 -6
  136. package/src/Http/Multiplex.ts +38 -38
  137. package/src/Http/Router.ts +136 -134
  138. package/src/Http/Server.ts +16 -16
  139. package/src/Http/ServerRequest.ts +1 -1
  140. package/src/Http/UrlParams.ts +15 -15
  141. package/src/PlatformConfigProvider.ts +2 -2
  142. package/src/Socket.ts +6 -6
  143. package/src/Transferable.ts +1 -1
  144. package/src/Worker.ts +9 -9
  145. package/src/WorkerRunner.ts +5 -4
  146. package/src/internal/command.ts +12 -6
  147. package/src/internal/fileSystem.ts +2 -2
  148. package/src/internal/http/client.ts +221 -204
  149. package/src/internal/http/clientResponse.ts +2 -2
  150. package/src/internal/http/middleware.ts +24 -1
  151. package/src/internal/http/multipart.ts +4 -4
  152. package/src/internal/http/multiplex.ts +54 -54
  153. package/src/internal/http/router.ts +121 -104
  154. package/src/internal/http/server.ts +17 -17
  155. package/src/internal/http/serverRequest.ts +1 -1
  156. package/src/internal/worker.ts +14 -14
  157. package/src/internal/workerRunner.ts +20 -16
@@ -32,6 +32,8 @@ export const RouteContextTypeId: Router.RouteContextTypeId = Symbol.for(
32
32
  /** @internal */
33
33
  export const RouteContext = Context.GenericTag<Router.RouteContext>("@effect/platform/Http/Router/RouteContext")
34
34
 
35
+ const isRouter = (u: unknown): u is Router.Router<unknown, unknown> => Predicate.hasProperty(u, TypeId)
36
+
35
37
  /** @internal */
36
38
  export const params = Effect.map(RouteContext, (_) => _.params)
37
39
 
@@ -131,18 +133,18 @@ export const schemaSearchParams = <R, I extends Readonly<Record<string, string>>
131
133
  return Effect.flatMap(RouteContext, (_) => parse(_.searchParams))
132
134
  }
133
135
 
134
- class RouterImpl<R, E> extends Effectable.StructuralClass<
136
+ class RouterImpl<E = never, R = never> extends Effectable.StructuralClass<
135
137
  ServerResponse.ServerResponse,
136
138
  E | Error.RouteNotFound,
137
139
  Exclude<R, Router.RouteContext>
138
- > implements Router.Router<R, E> {
140
+ > implements Router.Router<E, R> {
139
141
  readonly [TypeId]: Router.TypeId
140
142
  constructor(
141
- readonly routes: Chunk.Chunk<Router.Route<R, E>>,
143
+ readonly routes: Chunk.Chunk<Router.Route<E, R>>,
142
144
  readonly mounts: Chunk.Chunk<
143
145
  readonly [
144
146
  prefix: string,
145
- httpApp: App.Default<R, E>,
147
+ httpApp: App.Default<E, R>,
146
148
  options?: { readonly includePrefix?: boolean | undefined } | undefined
147
149
  ]
148
150
  >
@@ -176,9 +178,9 @@ class RouterImpl<R, E> extends Effectable.StructuralClass<
176
178
  }
177
179
 
178
180
  const toHttpApp = <R, E>(
179
- self: Router.Router<R, E>
180
- ): App.Default<R, E | Error.RouteNotFound> => {
181
- const router = FindMyWay.make<Router.Route<R, E>>()
181
+ self: Router.Router<E, R>
182
+ ): App.Default<E | Error.RouteNotFound, R> => {
183
+ const router = FindMyWay.make<Router.Route<E, R>>()
182
184
  const mounts = Chunk.toReadonlyArray(self.mounts).map(([path, app, options]) =>
183
185
  [
184
186
  path,
@@ -220,7 +222,7 @@ const toHttpApp = <R, E>(
220
222
  context = Context.add(context, ServerRequest.ServerRequest, sliceRequestUrl(request, path))
221
223
  }
222
224
  return Effect.locally(
223
- routeContext.route.handler as App.Default<R, E>,
225
+ routeContext.route.handler as App.Default<E, R>,
224
226
  FiberRef.currentContext,
225
227
  context
226
228
  )
@@ -259,12 +261,12 @@ function sliceRequestUrl(request: ServerRequest.ServerRequest, prefix: string) {
259
261
  return request.modify({ url: request.url.length <= prefexLen ? "/" : request.url.slice(prefexLen) })
260
262
  }
261
263
 
262
- class RouteImpl<R, E> extends Inspectable.Class implements Router.Route<R, E> {
264
+ class RouteImpl<E = never, R = never> extends Inspectable.Class implements Router.Route<E, R> {
263
265
  readonly [RouteTypeId]: Router.RouteTypeId
264
266
  constructor(
265
267
  readonly method: Method.Method | "*",
266
268
  readonly path: Router.PathInput,
267
- readonly handler: Router.Route.Handler<R, E>,
269
+ readonly handler: Router.Route.Handler<E, R>,
268
270
  readonly prefix = Option.none<string>(),
269
271
  readonly uninterruptible = false
270
272
  ) {
@@ -293,30 +295,36 @@ class RouteContextImpl implements Router.RouteContext {
293
295
  }
294
296
 
295
297
  /** @internal */
296
- export const empty: Router.Router<never, never> = new RouterImpl(Chunk.empty(), Chunk.empty())
298
+ export const empty: Router.Router<never> = new RouterImpl(Chunk.empty(), Chunk.empty())
297
299
 
298
300
  /** @internal */
299
301
  export const fromIterable = <R extends Router.Route<any, any>>(
300
302
  routes: Iterable<R>
301
303
  ): Router.Router<
302
- R extends Router.Route<infer Env, infer _> ? Env : never,
303
- R extends Router.Route<infer _, infer E> ? E : never
304
+ R extends Router.Route<infer E, infer _> ? E : never,
305
+ R extends Router.Route<infer _, infer Env> ? Env : never
304
306
  > => new RouterImpl(Chunk.fromIterable(routes), Chunk.empty()) as any
305
307
 
306
308
  /** @internal */
307
- export const makeRoute = <R, E>(
309
+ export const makeRoute = <E, R>(
308
310
  method: Method.Method,
309
311
  path: Router.PathInput,
310
- handler: Router.Route.Handler<R, E>,
312
+ handler: Router.Route.Handler<E, R>,
311
313
  prefix: Option.Option<string> = Option.none(),
312
314
  uninterruptible = false
313
- ): Router.Route<Router.Router.ExcludeProvided<R>, E> =>
314
- new RouteImpl(method, path, handler, prefix, uninterruptible) as any
315
+ ): Router.Route<E, Router.Router.ExcludeProvided<R>> =>
316
+ new RouteImpl(
317
+ method,
318
+ path,
319
+ handler,
320
+ prefix,
321
+ uninterruptible
322
+ ) as any
315
323
 
316
324
  /** @internal */
317
325
  export const concat = dual<
318
- <R1, E1>(that: Router.Router<R1, E1>) => <R, E>(self: Router.Router<R, E>) => Router.Router<R | R1, E | E1>,
319
- <R, E, R1, E1>(self: Router.Router<R, E>, that: Router.Router<R1, E1>) => Router.Router<R | R1, E | E1>
326
+ <R1, E1>(that: Router.Router<E1, R1>) => <R, E>(self: Router.Router<E, R>) => Router.Router<E | E1, R | R1>,
327
+ <R, E, R1, E1>(self: Router.Router<E, R>, that: Router.Router<E1, R1>) => Router.Router<E | E1, R | R1>
320
328
  >(2, (self, that) => new RouterImpl(Chunk.appendAll(self.routes, that.routes) as any, self.mounts))
321
329
 
322
330
  const removeTrailingSlash = (
@@ -325,8 +333,8 @@ const removeTrailingSlash = (
325
333
 
326
334
  /** @internal */
327
335
  export const prefixAll = dual<
328
- (prefix: Router.PathInput) => <R, E>(self: Router.Router<R, E>) => Router.Router<R, E>,
329
- <R, E>(self: Router.Router<R, E>, prefix: Router.PathInput) => Router.Router<R, E>
336
+ (prefix: Router.PathInput) => <R, E>(self: Router.Router<E, R>) => Router.Router<E, R>,
337
+ <R, E>(self: Router.Router<E, R>, prefix: Router.PathInput) => Router.Router<E, R>
330
338
  >(
331
339
  2,
332
340
  (self, prefix) => {
@@ -352,13 +360,13 @@ export const prefixAll = dual<
352
360
  export const mount = dual<
353
361
  <R1, E1>(
354
362
  path: `/${string}`,
355
- that: Router.Router<R1, E1>
356
- ) => <R, E>(self: Router.Router<R, E>) => Router.Router<R | R1, E | E1>,
363
+ that: Router.Router<E1, R1>
364
+ ) => <R, E>(self: Router.Router<E, R>) => Router.Router<E | E1, R | R1>,
357
365
  <R, E, R1, E1>(
358
- self: Router.Router<R, E>,
366
+ self: Router.Router<E, R>,
359
367
  path: `/${string}`,
360
- that: Router.Router<R1, E1>
361
- ) => Router.Router<R | R1, E | E1>
368
+ that: Router.Router<E1, R1>
369
+ ) => Router.Router<E | E1, R | R1>
362
370
  >(
363
371
  3,
364
372
  (self, path, that) => concat(self, prefixAll(that, path))
@@ -368,31 +376,31 @@ export const mount = dual<
368
376
  export const mountApp = dual<
369
377
  <R1, E1>(
370
378
  path: `/${string}`,
371
- that: App.Default<R1, E1>,
379
+ that: App.Default<E1, R1>,
372
380
  options?: {
373
381
  readonly includePrefix?: boolean | undefined
374
382
  } | undefined
375
383
  ) => <R, E>(
376
- self: Router.Router<R, E>
377
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, E | E1>,
384
+ self: Router.Router<E, R>
385
+ ) => Router.Router<E | E1, R | Router.Router.ExcludeProvided<R1>>,
378
386
  <R, E, R1, E1>(
379
- self: Router.Router<R, E>,
387
+ self: Router.Router<E, R>,
380
388
  path: `/${string}`,
381
- that: App.Default<R1, E1>,
389
+ that: App.Default<E1, R1>,
382
390
  options?: {
383
391
  readonly includePrefix?: boolean | undefined
384
392
  } | undefined
385
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, E | E1>
393
+ ) => Router.Router<E | E1, R | Router.Router.ExcludeProvided<R1>>
386
394
  >(
387
395
  (args) => Predicate.hasProperty(args[0], TypeId),
388
396
  <R, E, R1, E1>(
389
- self: Router.Router<R, E>,
397
+ self: Router.Router<E, R>,
390
398
  path: `/${string}`,
391
- that: App.Default<R1, E1>,
399
+ that: App.Default<E1, R1>,
392
400
  options?: {
393
401
  readonly includePrefix?: boolean | undefined
394
402
  } | undefined
395
- ): Router.Router<R | Router.Router.ExcludeProvided<R1>, E | E1> =>
403
+ ): Router.Router<E | E1, R | Router.Router.ExcludeProvided<R1>> =>
396
404
  new RouterImpl<any, any>(self.routes, Chunk.append(self.mounts, [removeTrailingSlash(path), that, options])) as any
397
405
  )
398
406
 
@@ -400,40 +408,49 @@ export const mountApp = dual<
400
408
  export const route = (method: Method.Method | "*"): {
401
409
  <R1, E1>(
402
410
  path: Router.PathInput,
403
- handler: Router.Route.Handler<R1, E1>,
411
+ handler: Router.Route.Handler<E1, R1>,
404
412
  options?: {
405
413
  readonly uninterruptible?: boolean | undefined
406
414
  } | undefined
407
415
  ): <R, E>(
408
- self: Router.Router<R, E>
409
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, E1 | E>
416
+ self: Router.Router<E, R>
417
+ ) => Router.Router<E1 | E, R | Router.Router.ExcludeProvided<R1>>
410
418
  <R, E, R1, E1>(
411
- self: Router.Router<R, E>,
419
+ self: Router.Router<E, R>,
412
420
  path: Router.PathInput,
413
- handler: Router.Route.Handler<R1, E1>,
421
+ handler: Router.Route.Handler<E1, R1>,
414
422
  options?: {
415
423
  readonly uninterruptible?: boolean | undefined
416
424
  } | undefined
417
- ): Router.Router<R | Router.Router.ExcludeProvided<R1>, E1 | E>
425
+ ): Router.Router<E1 | E, R | Router.Router.ExcludeProvided<R1>>
418
426
  } =>
419
427
  dual<
420
428
  <R1, E1>(
421
429
  path: Router.PathInput,
422
430
  handler: Router.Route.Handler<R1, E1>
423
431
  ) => <R, E>(
424
- self: Router.Router<R, E>
425
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, E | E1>,
432
+ self: Router.Router<E, R>
433
+ ) => Router.Router<E | E1, R | Router.Router.ExcludeProvided<R1>>,
426
434
  <R, E, R1, E1>(
427
- self: Router.Router<R, E>,
435
+ self: Router.Router<E, R>,
428
436
  path: Router.PathInput,
429
- handler: Router.Route.Handler<R1, E1>,
437
+ handler: Router.Route.Handler<E1, R1>,
430
438
  options?: {
431
439
  readonly uninterruptible?: boolean | undefined
432
440
  } | undefined
433
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, E | E1>
434
- >((args) => Predicate.hasProperty(args[0], TypeId), (self, path, handler, options) =>
441
+ ) => Router.Router<E | E1, R | Router.Router.ExcludeProvided<R1>>
442
+ >((args) => isRouter(args[0]), (self, path, handler, options) =>
435
443
  new RouterImpl<any, any>(
436
- Chunk.append(self.routes, new RouteImpl(method, path, handler, Option.none(), options?.uninterruptible ?? false)),
444
+ Chunk.append(
445
+ self.routes,
446
+ new RouteImpl(
447
+ method,
448
+ path,
449
+ handler,
450
+ Option.none(),
451
+ options?.uninterruptible ?? false
452
+ )
453
+ ),
437
454
  self.mounts
438
455
  ))
439
456
 
@@ -463,13 +480,13 @@ export const options = route("OPTIONS")
463
480
 
464
481
  /** @internal */
465
482
  export const use = dual<
466
- <R, E, R1, E1>(
467
- f: (self: Router.Route.Handler<R, E>) => App.Default<R1, E1>
468
- ) => (self: Router.Router<R, E>) => Router.Router<Router.Router.ExcludeProvided<R1>, E1>,
469
- <R, E, R1, E1>(
470
- self: Router.Router<R, E>,
471
- f: (self: Router.Route.Handler<R, E>) => App.Default<R1, E1>
472
- ) => Router.Router<Router.Router.ExcludeProvided<R1>, E1>
483
+ <E, R, R1, E1>(
484
+ f: (self: Router.Route.Handler<E, R>) => App.Default<E1, R1>
485
+ ) => (self: Router.Router<E, R>) => Router.Router<E1, Router.Router.ExcludeProvided<R1>>,
486
+ <E, R, R1, E1>(
487
+ self: Router.Router<E, R>,
488
+ f: (self: Router.Route.Handler<E, R>) => App.Default<E1, R1>
489
+ ) => Router.Router<E1, Router.Router.ExcludeProvided<R1>>
473
490
  >(2, (self, f) =>
474
491
  new RouterImpl<any, any>(
475
492
  Chunk.map(
@@ -484,39 +501,39 @@ export const use = dual<
484
501
 
485
502
  /** @internal */
486
503
  export const catchAll = dual<
487
- <E, R2, E2>(
488
- f: (e: E) => Router.Route.Handler<R2, E2>
489
- ) => <R>(self: Router.Router<R, E>) => Router.Router<R | Router.Router.ExcludeProvided<R2>, E2>,
490
- <R, E, R2, E2>(
491
- self: Router.Router<R, E>,
492
- f: (e: E) => Router.Route.Handler<R2, E2>
493
- ) => Router.Router<R | Router.Router.ExcludeProvided<R2>, E2>
504
+ <E, E2, R2>(
505
+ f: (e: E) => Router.Route.Handler<E2, R2>
506
+ ) => <R>(self: Router.Router<E, R>) => Router.Router<E2, R | Router.Router.ExcludeProvided<R2>>,
507
+ <R, E, E2, R2>(
508
+ self: Router.Router<E, R>,
509
+ f: (e: E) => Router.Route.Handler<E2, R2>
510
+ ) => Router.Router<E2, R | Router.Router.ExcludeProvided<R2>>
494
511
  >(2, (self, f) => use(self, Effect.catchAll(f)))
495
512
 
496
513
  /** @internal */
497
514
  export const catchAllCause = dual<
498
- <E, R2, E2>(
499
- f: (e: Cause.Cause<E>) => Router.Route.Handler<R2, E2>
500
- ) => <R>(self: Router.Router<R, E>) => Router.Router<R | Router.Router.ExcludeProvided<R2>, E2>,
501
- <R, E, R2, E2>(
502
- self: Router.Router<R, E>,
503
- f: (e: Cause.Cause<E>) => Router.Route.Handler<R2, E2>
504
- ) => Router.Router<R | Router.Router.ExcludeProvided<R2>, E2>
515
+ <E, E2, R2>(
516
+ f: (e: Cause.Cause<E>) => Router.Route.Handler<E2, R2>
517
+ ) => <R>(self: Router.Router<E, R>) => Router.Router<E2, R | Router.Router.ExcludeProvided<R2>>,
518
+ <R, E, E2, R2>(
519
+ self: Router.Router<E, R>,
520
+ f: (e: Cause.Cause<E>) => Router.Route.Handler<E2, R2>
521
+ ) => Router.Router<E2, R | Router.Router.ExcludeProvided<R2>>
505
522
  >(2, (self, f) => use(self, Effect.catchAllCause(f)))
506
523
 
507
524
  /** @internal */
508
525
  export const catchTag = dual<
509
- <K extends (E extends { _tag: string } ? E["_tag"] : never), E, R1, E1>(
526
+ <K extends (E extends { _tag: string } ? E["_tag"] : never), E, E1, R1>(
510
527
  k: K,
511
- f: (e: Extract<E, { _tag: K }>) => Router.Route.Handler<R1, E1>
528
+ f: (e: Extract<E, { _tag: K }>) => Router.Route.Handler<E1, R1>
512
529
  ) => <R>(
513
- self: Router.Router<R, E>
514
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, Exclude<E, { _tag: K }> | E1>,
515
- <R, E, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1>(
516
- self: Router.Router<R, E>,
530
+ self: Router.Router<E, R>
531
+ ) => Router.Router<Exclude<E, { _tag: K }> | E1, R | Router.Router.ExcludeProvided<R1>>,
532
+ <R, E, K extends (E extends { _tag: string } ? E["_tag"] : never), E1, R1>(
533
+ self: Router.Router<E, R>,
517
534
  k: K,
518
- f: (e: Extract<E, { _tag: K }>) => Router.Route.Handler<R1, E1>
519
- ) => Router.Router<R | Router.Router.ExcludeProvided<R1>, Exclude<E, { _tag: K }> | E1>
535
+ f: (e: Extract<E, { _tag: K }>) => Router.Route.Handler<E1, R1>
536
+ ) => Router.Router<Exclude<E, { _tag: K }> | E1, R | Router.Router.ExcludeProvided<R1>>
520
537
  >(3, (self, k, f) => use(self, Effect.catchTag(k, f)))
521
538
 
522
539
  /** @internal */
@@ -529,17 +546,17 @@ export const catchTags: {
529
546
  {})
530
547
  >(
531
548
  cases: Cases
532
- ): <R>(self: Router.Router<R, E>) => Router.Router<
549
+ ): <R>(self: Router.Router<E, R>) => Router.Router<
550
+ | Exclude<E, { _tag: keyof Cases }>
551
+ | {
552
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
553
+ }[keyof Cases],
533
554
  | R
534
555
  | Router.Router.ExcludeProvided<
535
556
  {
536
557
  [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer R>) ? R : never
537
558
  }[keyof Cases]
538
- >,
539
- | Exclude<E, { _tag: keyof Cases }>
540
- | {
541
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
542
- }[keyof Cases]
559
+ >
543
560
  >
544
561
  <
545
562
  R,
@@ -549,19 +566,19 @@ export const catchTags: {
549
566
  } :
550
567
  {})
551
568
  >(
552
- self: Router.Router<R, E>,
569
+ self: Router.Router<E, R>,
553
570
  cases: Cases
554
571
  ): Router.Router<
572
+ | Exclude<E, { _tag: keyof Cases }>
573
+ | {
574
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
575
+ }[keyof Cases],
555
576
  | R
556
577
  | Router.Router.ExcludeProvided<
557
578
  {
558
579
  [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer R>) ? R : never
559
580
  }[keyof Cases]
560
- >,
561
- | Exclude<E, { _tag: keyof Cases }>
562
- | {
563
- [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
564
- }[keyof Cases]
581
+ >
565
582
  >
566
583
  } = dual(2, (self: Router.Router<any, any>, cases: {}) => use(self, Effect.catchTags(cases)))
567
584
 
@@ -570,18 +587,18 @@ export const provideService = dual<
570
587
  tag: T,
571
588
  service: Context.Tag.Service<T>
572
589
  ) => <R, E>(
573
- self: Router.Router<R, E>
574
- ) => Router.Router<Exclude<R, Context.Tag.Identifier<T>>, E>,
590
+ self: Router.Router<E, R>
591
+ ) => Router.Router<E, Exclude<R, Context.Tag.Identifier<T>>>,
575
592
  <R, E, T extends Context.Tag<any, any>>(
576
- self: Router.Router<R, E>,
593
+ self: Router.Router<E, R>,
577
594
  tag: T,
578
595
  service: Context.Tag.Service<T>
579
- ) => Router.Router<Exclude<R, Context.Tag.Identifier<T>>, E>
596
+ ) => Router.Router<E, Exclude<R, Context.Tag.Identifier<T>>>
580
597
  >(3, <R, E, T extends Context.Tag<any, any>>(
581
- self: Router.Router<R, E>,
598
+ self: Router.Router<E, R>,
582
599
  tag: T,
583
600
  service: Context.Tag.Service<T>
584
- ): Router.Router<Exclude<R, Context.Tag.Identifier<T>>, E> => use(self, Effect.provideService(tag, service)))
601
+ ): Router.Router<E, Exclude<R, Context.Tag.Identifier<T>>> => use(self, Effect.provideService(tag, service)))
585
602
 
586
603
  /* @internal */
587
604
  export const provideServiceEffect = dual<
@@ -589,33 +606,33 @@ export const provideServiceEffect = dual<
589
606
  tag: T,
590
607
  effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
591
608
  ) => <R, E>(
592
- self: Router.Router<R, E>
609
+ self: Router.Router<E, R>
593
610
  ) => Router.Router<
611
+ E | E1,
594
612
  Exclude<
595
613
  R | Router.Router.ExcludeProvided<R1>,
596
614
  Context.Tag.Identifier<T>
597
- >,
598
- E | E1
615
+ >
599
616
  >,
600
617
  <R, E, T extends Context.Tag<any, any>, R1, E1>(
601
- self: Router.Router<R, E>,
618
+ self: Router.Router<E, R>,
602
619
  tag: T,
603
620
  effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
604
621
  ) => Router.Router<
622
+ E | E1,
605
623
  Exclude<
606
624
  R | Router.Router.ExcludeProvided<R1>,
607
625
  Context.Tag.Identifier<T>
608
- >,
609
- E | E1
626
+ >
610
627
  >
611
628
  >(3, <R, E, T extends Context.Tag<any, any>, R1, E1>(
612
- self: Router.Router<R, E>,
629
+ self: Router.Router<E, R>,
613
630
  tag: T,
614
631
  effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
615
632
  ): Router.Router<
633
+ E | E1,
616
634
  Exclude<
617
635
  R | Router.Router.ExcludeProvided<R1>,
618
636
  Context.Tag.Identifier<T>
619
- >,
620
- E | E1
637
+ >
621
638
  > => use(self, Effect.provideServiceEffect(tag, effect)) as any)
@@ -25,7 +25,7 @@ export const isServer = (u: unknown): u is Server.Server => typeof u === "object
25
25
  export const make = (
26
26
  options: {
27
27
  readonly serve: (
28
- httpApp: App.Default<never, unknown>,
28
+ httpApp: App.Default<unknown>,
29
29
  middleware?: Middleware.Middleware
30
30
  ) => Effect.Effect<void, never, Scope.Scope>
31
31
  readonly address: Server.Address
@@ -36,10 +36,10 @@ export const make = (
36
36
  export const serve = dual<
37
37
  {
38
38
  (): <R, E>(
39
- httpApp: App.Default<R, E>
39
+ httpApp: App.Default<E, R>
40
40
  ) => Layer.Layer<never, never, Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>>
41
- <R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<R, E, App>): (
42
- httpApp: App.Default<R, E>
41
+ <R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<App, E, R>): (
42
+ httpApp: App.Default<E, R>
43
43
  ) => Layer.Layer<
44
44
  never,
45
45
  never,
@@ -48,11 +48,11 @@ export const serve = dual<
48
48
  },
49
49
  {
50
50
  <R, E>(
51
- httpApp: App.Default<R, E>
51
+ httpApp: App.Default<E, R>
52
52
  ): Layer.Layer<never, never, Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>>
53
53
  <R, E, App extends App.Default<any, any>>(
54
- httpApp: App.Default<R, E>,
55
- middleware: Middleware.Middleware.Applied<R, E, App>
54
+ httpApp: App.Default<E, R>,
55
+ middleware: Middleware.Middleware.Applied<App, E, R>
56
56
  ): Layer.Layer<
57
57
  never,
58
58
  never,
@@ -62,8 +62,8 @@ export const serve = dual<
62
62
  >(
63
63
  (args) => Effect.isEffect(args[0]),
64
64
  <R, E, App extends App.Default<any, any>>(
65
- httpApp: App.Default<R, E>,
66
- middleware?: Middleware.Middleware.Applied<R, E, App>
65
+ httpApp: App.Default<E, R>,
66
+ middleware?: Middleware.Middleware.Applied<App, E, R>
67
67
  ): Layer.Layer<
68
68
  never,
69
69
  never,
@@ -81,14 +81,14 @@ export const serve = dual<
81
81
  export const serveEffect = dual<
82
82
  {
83
83
  (): <R, E>(
84
- httpApp: App.Default<R, E>
84
+ httpApp: App.Default<E, R>
85
85
  ) => Effect.Effect<
86
86
  void,
87
87
  never,
88
88
  Server.Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest>
89
89
  >
90
- <R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<R, E, App>): (
91
- httpApp: App.Default<R, E>
90
+ <R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<App, E, R>): (
91
+ httpApp: App.Default<E, R>
92
92
  ) => Effect.Effect<
93
93
  void,
94
94
  never,
@@ -97,11 +97,11 @@ export const serveEffect = dual<
97
97
  },
98
98
  {
99
99
  <R, E>(
100
- httpApp: App.Default<R, E>
100
+ httpApp: App.Default<E, R>
101
101
  ): Effect.Effect<void, never, Server.Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest>>
102
102
  <R, E, App extends App.Default<any, any>>(
103
- httpApp: App.Default<R, E>,
104
- middleware: Middleware.Middleware.Applied<R, E, App>
103
+ httpApp: App.Default<E, R>,
104
+ middleware: Middleware.Middleware.Applied<App, E, R>
105
105
  ): Effect.Effect<
106
106
  void,
107
107
  never,
@@ -111,8 +111,8 @@ export const serveEffect = dual<
111
111
  >(
112
112
  (args) => Effect.isEffect(args[0]),
113
113
  (<R, E, App extends App.Default<any, any>>(
114
- httpApp: App.Default<R, E>,
115
- middleware: Middleware.Middleware.Applied<R, E, App>
114
+ httpApp: App.Default<E, R>,
115
+ middleware: Middleware.Middleware.Applied<App, E, R>
116
116
  ): Effect.Effect<
117
117
  void,
118
118
  never,
@@ -6,7 +6,7 @@ import * as Context from "effect/Context"
6
6
  import * as Effect from "effect/Effect"
7
7
  import * as Inspectable from "effect/Inspectable"
8
8
  import * as Option from "effect/Option"
9
- import type { ReadonlyRecord } from "effect/ReadonlyRecord"
9
+ import type { ReadonlyRecord } from "effect/Record"
10
10
  import type * as Scope from "effect/Scope"
11
11
  import * as Stream from "effect/Stream"
12
12
  import type * as FileSystem from "../../FileSystem.js"
@@ -1,5 +1,6 @@
1
1
  import * as Schema from "@effect/schema/Schema"
2
2
  import * as Serializable from "@effect/schema/Serializable"
3
+ import * as Array from "effect/Array"
3
4
  import * as Cause from "effect/Cause"
4
5
  import * as Channel from "effect/Channel"
5
6
  import * as Chunk from "effect/Chunk"
@@ -13,7 +14,6 @@ import * as Layer from "effect/Layer"
13
14
  import * as Option from "effect/Option"
14
15
  import * as Pool from "effect/Pool"
15
16
  import * as Queue from "effect/Queue"
16
- import * as ReadonlyArray from "effect/ReadonlyArray"
17
17
  import * as Schedule from "effect/Schedule"
18
18
  import type * as Scope from "effect/Scope"
19
19
  import * as Stream from "effect/Stream"
@@ -64,7 +64,7 @@ export const makeManager = Effect.gen(function*(_) {
64
64
  let idCounter = 0
65
65
  return WorkerManager.of({
66
66
  [WorkerManagerTypeId]: WorkerManagerTypeId,
67
- spawn<I, E, O>({
67
+ spawn<I, O, E>({
68
68
  encode,
69
69
  initialMessage,
70
70
  permits = 1,
@@ -112,7 +112,7 @@ export const makeManager = Effect.gen(function*(_) {
112
112
  Queue.take(backing.queue),
113
113
  Effect.flatMap((msg) => {
114
114
  if (msg[0] === 0) {
115
- return Deferred.complete(readyLatch, Effect.unit)
115
+ return Deferred.complete(readyLatch, Effect.void)
116
116
  }
117
117
  return handleMessage(msg[1])
118
118
  }),
@@ -153,7 +153,7 @@ export const makeManager = Effect.gen(function*(_) {
153
153
  const handleMessage = (response: Worker.Worker.Response<E, O>) =>
154
154
  Effect.suspend(() => {
155
155
  const queue = requestMap.get(response[0])
156
- if (!queue) return Effect.unit
156
+ if (!queue) return Effect.void
157
157
 
158
158
  switch (response[1]) {
159
159
  // data
@@ -210,7 +210,7 @@ export const makeManager = Effect.gen(function*(_) {
210
210
  exit: Exit.Exit<unknown, unknown>
211
211
  ) => {
212
212
  const release = Effect.zipRight(
213
- Deferred.complete(deferred, Effect.unit),
213
+ Deferred.complete(deferred, Effect.void),
214
214
  Effect.sync(() => requestMap.delete(id))
215
215
  )
216
216
  return Exit.isFailure(exit) ?
@@ -229,7 +229,7 @@ export const makeManager = Effect.gen(function*(_) {
229
229
  .flatMap(
230
230
  Queue.take(queue),
231
231
  Exit.match({
232
- onFailure: (cause) => Cause.isEmpty(cause) ? Channel.unit : Channel.failCause(cause),
232
+ onFailure: (cause) => Cause.isEmpty(cause) ? Channel.void : Channel.failCause(cause),
233
233
  onSuccess: (value) => Channel.flatMap(Channel.write(Chunk.unsafeFromArray(value)), () => loop)
234
234
  })
235
235
  )
@@ -240,7 +240,7 @@ export const makeManager = Effect.gen(function*(_) {
240
240
  const executeEffect = (request: I) =>
241
241
  Effect.acquireUseRelease(
242
242
  executeAcquire(request),
243
- ([, queue]) => Effect.flatMap(Queue.take(queue), Exit.map(ReadonlyArray.unsafeGet(0))),
243
+ ([, queue]) => Effect.flatMap(Queue.take(queue), Exit.map(Array.unsafeGet(0))),
244
244
  executeRelease
245
245
  )
246
246
 
@@ -251,7 +251,7 @@ export const makeManager = Effect.gen(function*(_) {
251
251
  pipe(
252
252
  Effect.suspend(() => {
253
253
  const result = requestMap.get(id)
254
- if (!result) return Effect.unit
254
+ if (!result) return Effect.void
255
255
  const transferables = transfers(request)
256
256
  const spanTuple = Option.getOrUndefined(
257
257
  Option.map(span, (span) => [span.traceId, span.spanId, span.sampled] as const)
@@ -296,14 +296,14 @@ export const makeManager = Effect.gen(function*(_) {
296
296
  export const layerManager = Layer.effect(WorkerManager, makeManager)
297
297
 
298
298
  /** @internal */
299
- export const makePool = <I, E, O>(
299
+ export const makePool = <I, O, E>(
300
300
  options: Worker.WorkerPool.Options<I>
301
301
  ) =>
302
302
  Effect.gen(function*(_) {
303
303
  const manager = yield* _(WorkerManager)
304
- const workers = new Set<Worker.Worker<I, E, O>>()
304
+ const workers = new Set<Worker.Worker<I, O, E>>()
305
305
  const acquire = pipe(
306
- manager.spawn<I, E, O>(options),
306
+ manager.spawn<I, O, E>(options),
307
307
  Effect.tap((worker) => Effect.sync(() => workers.add(worker))),
308
308
  Effect.tap((worker) => Effect.addFinalizer(() => Effect.sync(() => workers.delete(worker)))),
309
309
  options.onCreate ? Effect.tap(options.onCreate) : identity
@@ -321,7 +321,7 @@ export const makePool = <I, E, O>(
321
321
  size: options.size
322
322
  })
323
323
  )
324
- const pool: Worker.WorkerPool<I, E, O> = {
324
+ const pool: Worker.WorkerPool<I, O, E> = {
325
325
  backing,
326
326
  broadcast: (message: I) =>
327
327
  Effect.forEach(workers, (worker) => worker.executeEffect(message), {
@@ -346,8 +346,8 @@ export const makePool = <I, E, O>(
346
346
  })
347
347
 
348
348
  /** @internal */
349
- export const makePoolLayer = <Tag, I, E, O>(
350
- tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
349
+ export const makePoolLayer = <Tag, I, O, E>(
350
+ tag: Context.Tag<Tag, Worker.WorkerPool<I, O, E>>,
351
351
  options: Worker.WorkerPool.Options<I>
352
352
  ) => Layer.scoped(tag, makePool(options))
353
353