@effect/platform 0.43.10 → 0.44.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 (235) hide show
  1. package/dist/cjs/Error.js +4 -0
  2. package/dist/cjs/Error.js.map +1 -1
  3. package/dist/cjs/Http/App.js.map +1 -1
  4. package/dist/cjs/Http/Body.js.map +1 -1
  5. package/dist/cjs/Http/Client.js.map +1 -1
  6. package/dist/cjs/Http/ClientError.js +4 -0
  7. package/dist/cjs/Http/ClientError.js.map +1 -1
  8. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  9. package/dist/cjs/Http/IncomingMessage.js.map +1 -1
  10. package/dist/cjs/Http/Multipart.js.map +1 -1
  11. package/dist/cjs/Http/Server.js +26 -1
  12. package/dist/cjs/Http/Server.js.map +1 -1
  13. package/dist/cjs/Http/ServerError.js.map +1 -1
  14. package/dist/cjs/Http/ServerResponse.js.map +1 -1
  15. package/dist/cjs/HttpServer.js +7 -1
  16. package/dist/cjs/HttpServer.js.map +1 -1
  17. package/dist/cjs/KeyValueStore.js.map +1 -1
  18. package/dist/cjs/Path.js.map +1 -1
  19. package/dist/cjs/Transferable.js +51 -48
  20. package/dist/cjs/Transferable.js.map +1 -1
  21. package/dist/cjs/Worker.js +6 -1
  22. package/dist/cjs/Worker.js.map +1 -1
  23. package/dist/cjs/WorkerError.js +4 -0
  24. package/dist/cjs/WorkerError.js.map +1 -1
  25. package/dist/cjs/index.js +62 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/internal/commandExecutor.js +1 -1
  28. package/dist/cjs/internal/commandExecutor.js.map +1 -1
  29. package/dist/cjs/internal/effectify.js.map +1 -1
  30. package/dist/cjs/internal/fileSystem.js +1 -1
  31. package/dist/cjs/internal/fileSystem.js.map +1 -1
  32. package/dist/cjs/internal/http/body.js.map +1 -1
  33. package/dist/cjs/internal/http/client.js +2 -2
  34. package/dist/cjs/internal/http/client.js.map +1 -1
  35. package/dist/cjs/internal/http/etag.js +1 -1
  36. package/dist/cjs/internal/http/etag.js.map +1 -1
  37. package/dist/cjs/internal/http/multipart.js.map +1 -1
  38. package/dist/cjs/internal/http/platform.js +1 -1
  39. package/dist/cjs/internal/http/platform.js.map +1 -1
  40. package/dist/cjs/internal/http/router.js +1 -1
  41. package/dist/cjs/internal/http/router.js.map +1 -1
  42. package/dist/cjs/internal/http/server.js +23 -2
  43. package/dist/cjs/internal/http/server.js.map +1 -1
  44. package/dist/cjs/internal/http/serverRequest.js +1 -1
  45. package/dist/cjs/internal/http/serverRequest.js.map +1 -1
  46. package/dist/cjs/internal/http/serverResponse.js.map +1 -1
  47. package/dist/cjs/internal/keyValueStore.js +2 -2
  48. package/dist/cjs/internal/keyValueStore.js.map +1 -1
  49. package/dist/cjs/internal/path.js +9 -4
  50. package/dist/cjs/internal/path.js.map +1 -1
  51. package/dist/cjs/internal/terminal.js +1 -1
  52. package/dist/cjs/internal/terminal.js.map +1 -1
  53. package/dist/cjs/internal/worker.js +16 -12
  54. package/dist/cjs/internal/worker.js.map +1 -1
  55. package/dist/cjs/internal/workerError.js.map +1 -1
  56. package/dist/cjs/internal/workerRunner.js +15 -12
  57. package/dist/cjs/internal/workerRunner.js.map +1 -1
  58. package/dist/dts/Command.d.ts +9 -9
  59. package/dist/dts/Command.d.ts.map +1 -1
  60. package/dist/dts/CommandExecutor.d.ts +13 -13
  61. package/dist/dts/CommandExecutor.d.ts.map +1 -1
  62. package/dist/dts/Effectify.d.ts +55 -55
  63. package/dist/dts/Effectify.d.ts.map +1 -1
  64. package/dist/dts/Error.d.ts +2 -6
  65. package/dist/dts/Error.d.ts.map +1 -1
  66. package/dist/dts/FileSystem.d.ts +35 -35
  67. package/dist/dts/FileSystem.d.ts.map +1 -1
  68. package/dist/dts/Http/App.d.ts +5 -5
  69. package/dist/dts/Http/App.d.ts.map +1 -1
  70. package/dist/dts/Http/Body.d.ts +10 -11
  71. package/dist/dts/Http/Body.d.ts.map +1 -1
  72. package/dist/dts/Http/Client.d.ts +32 -32
  73. package/dist/dts/Http/Client.d.ts.map +1 -1
  74. package/dist/dts/Http/ClientError.d.ts +2 -6
  75. package/dist/dts/Http/ClientError.d.ts.map +1 -1
  76. package/dist/dts/Http/ClientRequest.d.ts +16 -16
  77. package/dist/dts/Http/ClientRequest.d.ts.map +1 -1
  78. package/dist/dts/Http/ClientResponse.d.ts +3 -3
  79. package/dist/dts/Http/ClientResponse.d.ts.map +1 -1
  80. package/dist/dts/Http/Etag.d.ts +2 -2
  81. package/dist/dts/Http/Etag.d.ts.map +1 -1
  82. package/dist/dts/Http/IncomingMessage.d.ts +10 -10
  83. package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
  84. package/dist/dts/Http/Middleware.d.ts +3 -3
  85. package/dist/dts/Http/Multipart.d.ts +18 -19
  86. package/dist/dts/Http/Multipart.d.ts.map +1 -1
  87. package/dist/dts/Http/Multiplex.d.ts +4 -4
  88. package/dist/dts/Http/Multiplex.d.ts.map +1 -1
  89. package/dist/dts/Http/Platform.d.ts +3 -3
  90. package/dist/dts/Http/Platform.d.ts.map +1 -1
  91. package/dist/dts/Http/Router.d.ts +10 -10
  92. package/dist/dts/Http/Router.d.ts.map +1 -1
  93. package/dist/dts/Http/Server.d.ts +39 -14
  94. package/dist/dts/Http/Server.d.ts.map +1 -1
  95. package/dist/dts/Http/ServerError.d.ts +2 -3
  96. package/dist/dts/Http/ServerError.d.ts.map +1 -1
  97. package/dist/dts/Http/ServerRequest.d.ts +9 -9
  98. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  99. package/dist/dts/Http/ServerResponse.d.ts +7 -7
  100. package/dist/dts/Http/ServerResponse.d.ts.map +1 -1
  101. package/dist/dts/Http/UrlParams.d.ts +4 -4
  102. package/dist/dts/HttpServer.d.ts +24 -0
  103. package/dist/dts/HttpServer.d.ts.map +1 -1
  104. package/dist/dts/KeyValueStore.d.ts +21 -21
  105. package/dist/dts/KeyValueStore.d.ts.map +1 -1
  106. package/dist/dts/Path.d.ts +3 -3
  107. package/dist/dts/Path.d.ts.map +1 -1
  108. package/dist/dts/Runtime.d.ts +1 -1
  109. package/dist/dts/Runtime.d.ts.map +1 -1
  110. package/dist/dts/Terminal.d.ts +5 -5
  111. package/dist/dts/Terminal.d.ts.map +1 -1
  112. package/dist/dts/Transferable.d.ts +35 -13
  113. package/dist/dts/Transferable.d.ts.map +1 -1
  114. package/dist/dts/Worker.d.ts +58 -41
  115. package/dist/dts/Worker.d.ts.map +1 -1
  116. package/dist/dts/WorkerError.d.ts +3 -7
  117. package/dist/dts/WorkerError.d.ts.map +1 -1
  118. package/dist/dts/WorkerRunner.d.ts +13 -13
  119. package/dist/dts/WorkerRunner.d.ts.map +1 -1
  120. package/dist/dts/index.d.ts +61 -0
  121. package/dist/dts/index.d.ts.map +1 -0
  122. package/dist/esm/Error.js +3 -0
  123. package/dist/esm/Error.js.map +1 -1
  124. package/dist/esm/Http/App.js.map +1 -1
  125. package/dist/esm/Http/Body.js.map +1 -1
  126. package/dist/esm/Http/Client.js.map +1 -1
  127. package/dist/esm/Http/ClientError.js +3 -0
  128. package/dist/esm/Http/ClientError.js.map +1 -1
  129. package/dist/esm/Http/ClientResponse.js.map +1 -1
  130. package/dist/esm/Http/IncomingMessage.js.map +1 -1
  131. package/dist/esm/Http/Multipart.js.map +1 -1
  132. package/dist/esm/Http/Server.js +25 -0
  133. package/dist/esm/Http/Server.js.map +1 -1
  134. package/dist/esm/Http/ServerError.js.map +1 -1
  135. package/dist/esm/Http/ServerResponse.js.map +1 -1
  136. package/dist/esm/HttpServer.js +24 -0
  137. package/dist/esm/HttpServer.js.map +1 -1
  138. package/dist/esm/KeyValueStore.js.map +1 -1
  139. package/dist/esm/Path.js.map +1 -1
  140. package/dist/esm/Transferable.js +48 -45
  141. package/dist/esm/Transferable.js.map +1 -1
  142. package/dist/esm/Worker.js +5 -0
  143. package/dist/esm/Worker.js.map +1 -1
  144. package/dist/esm/WorkerError.js +3 -0
  145. package/dist/esm/WorkerError.js.map +1 -1
  146. package/dist/esm/index.js +61 -0
  147. package/dist/esm/index.js.map +1 -0
  148. package/dist/esm/internal/commandExecutor.js +2 -2
  149. package/dist/esm/internal/commandExecutor.js.map +1 -1
  150. package/dist/esm/internal/effectify.js.map +1 -1
  151. package/dist/esm/internal/fileSystem.js +2 -2
  152. package/dist/esm/internal/fileSystem.js.map +1 -1
  153. package/dist/esm/internal/http/body.js.map +1 -1
  154. package/dist/esm/internal/http/client.js +2 -2
  155. package/dist/esm/internal/http/client.js.map +1 -1
  156. package/dist/esm/internal/http/etag.js +1 -1
  157. package/dist/esm/internal/http/etag.js.map +1 -1
  158. package/dist/esm/internal/http/multipart.js.map +1 -1
  159. package/dist/esm/internal/http/platform.js +1 -1
  160. package/dist/esm/internal/http/platform.js.map +1 -1
  161. package/dist/esm/internal/http/router.js +1 -1
  162. package/dist/esm/internal/http/router.js.map +1 -1
  163. package/dist/esm/internal/http/server.js +18 -1
  164. package/dist/esm/internal/http/server.js.map +1 -1
  165. package/dist/esm/internal/http/serverRequest.js +1 -1
  166. package/dist/esm/internal/http/serverRequest.js.map +1 -1
  167. package/dist/esm/internal/http/serverResponse.js.map +1 -1
  168. package/dist/esm/internal/keyValueStore.js +2 -2
  169. package/dist/esm/internal/keyValueStore.js.map +1 -1
  170. package/dist/esm/internal/path.js +3 -3
  171. package/dist/esm/internal/path.js.map +1 -1
  172. package/dist/esm/internal/terminal.js +2 -2
  173. package/dist/esm/internal/terminal.js.map +1 -1
  174. package/dist/esm/internal/worker.js +14 -11
  175. package/dist/esm/internal/worker.js.map +1 -1
  176. package/dist/esm/internal/workerError.js.map +1 -1
  177. package/dist/esm/internal/workerRunner.js +15 -12
  178. package/dist/esm/internal/workerRunner.js.map +1 -1
  179. package/package.json +11 -3
  180. package/src/Command.ts +9 -9
  181. package/src/CommandExecutor.ts +13 -13
  182. package/src/Effectify.ts +55 -55
  183. package/src/Error.ts +2 -3
  184. package/src/FileSystem.ts +35 -35
  185. package/src/Http/App.ts +5 -5
  186. package/src/Http/Body.ts +12 -13
  187. package/src/Http/Client.ts +37 -37
  188. package/src/Http/ClientError.ts +2 -3
  189. package/src/Http/ClientRequest.ts +17 -17
  190. package/src/Http/ClientResponse.ts +8 -5
  191. package/src/Http/Etag.ts +2 -2
  192. package/src/Http/IncomingMessage.ts +27 -23
  193. package/src/Http/Middleware.ts +4 -4
  194. package/src/Http/Multipart.ts +22 -25
  195. package/src/Http/Multiplex.ts +4 -4
  196. package/src/Http/Platform.ts +3 -3
  197. package/src/Http/Router.ts +16 -16
  198. package/src/Http/Server.ts +53 -18
  199. package/src/Http/ServerError.ts +2 -3
  200. package/src/Http/ServerRequest.ts +22 -22
  201. package/src/Http/ServerResponse.ts +9 -10
  202. package/src/Http/UrlParams.ts +6 -6
  203. package/src/HttpServer.ts +24 -0
  204. package/src/KeyValueStore.ts +23 -23
  205. package/src/Path.ts +3 -3
  206. package/src/Runtime.ts +1 -1
  207. package/src/Terminal.ts +4 -4
  208. package/src/Transferable.ts +88 -70
  209. package/src/Worker.ts +73 -57
  210. package/src/WorkerError.ts +3 -4
  211. package/src/WorkerRunner.ts +21 -21
  212. package/src/index.ts +74 -0
  213. package/src/internal/command.ts +7 -7
  214. package/src/internal/commandExecutor.ts +3 -3
  215. package/src/internal/effectify.ts +1 -1
  216. package/src/internal/fileSystem.ts +3 -3
  217. package/src/internal/http/body.ts +12 -12
  218. package/src/internal/http/client.ts +42 -46
  219. package/src/internal/http/clientRequest.ts +15 -15
  220. package/src/internal/http/clientResponse.ts +18 -18
  221. package/src/internal/http/etag.ts +1 -1
  222. package/src/internal/http/middleware.ts +4 -4
  223. package/src/internal/http/multipart.ts +32 -39
  224. package/src/internal/http/multiplex.ts +5 -5
  225. package/src/internal/http/platform.ts +2 -2
  226. package/src/internal/http/router.ts +14 -14
  227. package/src/internal/http/server.ts +60 -23
  228. package/src/internal/http/serverRequest.ts +24 -24
  229. package/src/internal/http/serverResponse.ts +11 -11
  230. package/src/internal/keyValueStore.ts +7 -7
  231. package/src/internal/path.ts +4 -4
  232. package/src/internal/terminal.ts +2 -2
  233. package/src/internal/worker.ts +55 -39
  234. package/src/internal/workerError.ts +1 -1
  235. package/src/internal/workerRunner.ts +55 -30
@@ -15,7 +15,7 @@ import * as internalBody from "./body.js"
15
15
  /** @internal */
16
16
  export const TypeId: ServerResponse.TypeId = Symbol.for("@effect/platform/Http/ServerResponse") as ServerResponse.TypeId
17
17
 
18
- class ServerResponseImpl extends Effectable.StructuralClass<never, never, ServerResponse.ServerResponse>
18
+ class ServerResponseImpl extends Effectable.StructuralClass<ServerResponse.ServerResponse>
19
19
  implements ServerResponse.ServerResponse
20
20
  {
21
21
  readonly [TypeId]: ServerResponse.TypeId
@@ -42,7 +42,7 @@ class ServerResponseImpl extends Effectable.StructuralClass<never, never, Server
42
42
  }
43
43
  }
44
44
 
45
- commit(): Effect.Effect<never, never, ServerResponse.ServerResponse> {
45
+ commit(): Effect.Effect<ServerResponse.ServerResponse> {
46
46
  return Effect.succeed(this)
47
47
  }
48
48
 
@@ -95,7 +95,7 @@ export const text = (body: string, options?: ServerResponse.Options.WithContentT
95
95
  export const json = (
96
96
  body: unknown,
97
97
  options?: ServerResponse.Options.WithContent
98
- ): Effect.Effect<never, Body.BodyError, ServerResponse.ServerResponse> =>
98
+ ): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError> =>
99
99
  Effect.map(internalBody.json(body), (body) =>
100
100
  new ServerResponseImpl(
101
101
  options?.status ?? 200,
@@ -117,14 +117,14 @@ export const unsafeJson = (
117
117
  )
118
118
 
119
119
  /** @internal */
120
- export const schemaJson = <R, I, A>(
121
- schema: Schema.Schema<R, I, A>
120
+ export const schemaJson = <A, I, R>(
121
+ schema: Schema.Schema<A, I, R>
122
122
  ) => {
123
123
  const encode = internalBody.jsonSchema(schema)
124
124
  return (
125
125
  body: A,
126
126
  options?: ServerResponse.Options.WithContent
127
- ): Effect.Effect<R, Body.BodyError, ServerResponse.ServerResponse> =>
127
+ ): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError, R> =>
128
128
  Effect.map(encode(body), (body) =>
129
129
  new ServerResponseImpl(
130
130
  options?.status ?? 200,
@@ -138,7 +138,7 @@ export const schemaJson = <R, I, A>(
138
138
  export const file = (
139
139
  path: string,
140
140
  options?: ServerResponse.Options & FileSystem.StreamOptions
141
- ): Effect.Effect<Platform.Platform, PlatformError.PlatformError, ServerResponse.ServerResponse> =>
141
+ ): Effect.Effect<ServerResponse.ServerResponse, PlatformError.PlatformError, Platform.Platform> =>
142
142
  Effect.flatMap(
143
143
  Platform.Platform,
144
144
  (platform) => platform.fileResponse(path, options)
@@ -148,7 +148,7 @@ export const file = (
148
148
  export const fileWeb = (
149
149
  file: Body.Body.FileLike,
150
150
  options?: ServerResponse.Options.WithContent & FileSystem.StreamOptions
151
- ): Effect.Effect<Platform.Platform, never, ServerResponse.ServerResponse> =>
151
+ ): Effect.Effect<ServerResponse.ServerResponse, never, Platform.Platform> =>
152
152
  Effect.flatMap(
153
153
  Platform.Platform,
154
154
  (platform) => platform.fileWebResponse(file, options)
@@ -189,7 +189,7 @@ export const formData = (
189
189
 
190
190
  /** @internal */
191
191
  export const stream = (
192
- body: Stream.Stream<never, unknown, Uint8Array>,
192
+ body: Stream.Stream<Uint8Array, unknown>,
193
193
  options?: ServerResponse.Options
194
194
  ): ServerResponse.ServerResponse =>
195
195
  new ServerResponseImpl(
@@ -268,7 +268,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
268
268
  if (withoutBody) {
269
269
  return new Response(undefined, {
270
270
  status: response.status,
271
- statusText: response.statusText,
271
+ statusText: response.statusText as string,
272
272
  headers: response.headers
273
273
  })
274
274
  }
@@ -277,7 +277,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
277
277
  case "Empty": {
278
278
  return new Response(undefined, {
279
279
  status: response.status,
280
- statusText: response.statusText,
280
+ statusText: response.statusText as string,
281
281
  headers: response.headers
282
282
  })
283
283
  }
@@ -14,7 +14,7 @@ export const TypeId: KeyValueStore.TypeId = Symbol.for(
14
14
  ) as KeyValueStore.TypeId
15
15
 
16
16
  /** @internal */
17
- export const keyValueStoreTag = Context.Tag<KeyValueStore.KeyValueStore>(TypeId)
17
+ export const keyValueStoreTag = Context.GenericTag<KeyValueStore.KeyValueStore>("@effect/platform/KeyValueStore")
18
18
 
19
19
  /** @internal */
20
20
  export const make: (
@@ -68,9 +68,9 @@ export const SchemaStoreTypeId: KeyValueStore.SchemaStoreTypeId = Symbol.for(
68
68
  ) as KeyValueStore.SchemaStoreTypeId
69
69
 
70
70
  /** @internal */
71
- const makeSchemaStore = <R, I, A>(
71
+ const makeSchemaStore = <A, I, R>(
72
72
  store: KeyValueStore.KeyValueStore,
73
- schema: Schema.Schema<R, I, A>
73
+ schema: Schema.Schema<A, I, R>
74
74
  ): KeyValueStore.SchemaStore<R, A> => {
75
75
  const jsonSchema = Schema.parseJson(schema)
76
76
  const parse = Schema.decodeUnknown(jsonSchema)
@@ -166,11 +166,11 @@ export const layerFileSystem = (directory: string) =>
166
166
  )
167
167
 
168
168
  /** @internal */
169
- export const layerSchema = <R, I, A>(
170
- schema: Schema.Schema<R, I, A>,
171
- tagIdentifier?: unknown
169
+ export const layerSchema = <A, I, R>(
170
+ schema: Schema.Schema<A, I, R>,
171
+ tagIdentifier: string
172
172
  ) => {
173
- const tag = Context.Tag<KeyValueStore.SchemaStore<R, A>>(tagIdentifier)
173
+ const tag = Context.GenericTag<KeyValueStore.SchemaStore<R, A>>(tagIdentifier)
174
174
  const layer = Layer.effect(tag, Effect.map(keyValueStoreTag, (store) => store.forSchema(schema)))
175
175
  return { tag, layer } as const
176
176
  }
@@ -1,13 +1,13 @@
1
- import { Tag } from "effect/Context"
1
+ import { GenericTag } from "effect/Context"
2
2
  import * as Effect from "effect/Effect"
3
3
  import { identity } from "effect/Function"
4
4
  import * as Layer from "effect/Layer"
5
- import * as PathB from "path-browserify"
5
+ import PathB from "path-browserify"
6
6
  import { BadArgument } from "../Error.js"
7
7
  import type { Path as _Path } from "../Path.js"
8
8
 
9
9
  /** @internal */
10
- export const Path = Tag<_Path>("@effect/platform/Path")
10
+ export const Path = GenericTag<_Path>("@effect/platform/Path")
11
11
 
12
12
  /** @internal */
13
13
  export const layer = Layer.succeed(
@@ -28,7 +28,7 @@ export const layer = Layer.succeed(
28
28
  * - MIT
29
29
  */
30
30
 
31
- function fromFileUrl(url: URL): Effect.Effect<never, BadArgument, string> {
31
+ function fromFileUrl(url: URL): Effect.Effect<string, BadArgument> {
32
32
  if (url.protocol !== "file:") {
33
33
  return Effect.fail(BadArgument({
34
34
  module: "Path",
@@ -1,5 +1,5 @@
1
- import { Tag } from "effect/Context"
1
+ import { GenericTag } from "effect/Context"
2
2
  import type * as Terminal from "../Terminal.js"
3
3
 
4
4
  /** @internal */
5
- export const tag = Tag<Terminal.Terminal>("@effect/platform/Terminal")
5
+ export const tag = GenericTag<Terminal.Terminal>("@effect/platform/Terminal")
@@ -39,8 +39,8 @@ export const PlatformWorkerTypeId: Worker.PlatformWorkerTypeId = Symbol.for(
39
39
  ) as Worker.PlatformWorkerTypeId
40
40
 
41
41
  /** @internal */
42
- export const PlatformWorker = Context.Tag<Worker.PlatformWorker>(
43
- PlatformWorkerTypeId
42
+ export const PlatformWorker = Context.GenericTag<Worker.PlatformWorker>(
43
+ "@effect/platform/Worker/PlatformWorker"
44
44
  )
45
45
 
46
46
  /** @internal */
@@ -49,8 +49,13 @@ export const WorkerManagerTypeId: Worker.WorkerManagerTypeId = Symbol.for(
49
49
  ) as Worker.WorkerManagerTypeId
50
50
 
51
51
  /** @internal */
52
- export const WorkerManager = Context.Tag<Worker.WorkerManager>(
53
- WorkerManagerTypeId
52
+ export const WorkerManager = Context.GenericTag<Worker.WorkerManager>(
53
+ "@effect/platform/Worker/WorkerManager"
54
+ )
55
+
56
+ /** @internal */
57
+ export const Spawner = Context.GenericTag<Worker.Spawner, Worker.SpawnerFn>(
58
+ "@effect/platform/Worker/Spawner"
54
59
  )
55
60
 
56
61
  /** @internal */
@@ -64,28 +69,37 @@ export const makeManager = Effect.gen(function*(_) {
64
69
  initialMessage,
65
70
  permits = 1,
66
71
  queue,
67
- spawn,
68
72
  transfers = (_) => []
69
73
  }: Worker.Worker.Options<I>) {
70
74
  return Effect.gen(function*(_) {
75
+ const spawn = yield* _(Spawner)
71
76
  const id = idCounter++
72
77
  let requestIdCounter = 0
73
78
  const semaphore = yield* _(Effect.makeSemaphore(permits))
74
79
  const requestMap = new Map<
75
80
  number,
76
- readonly [Queue.Queue<Exit.Exit<E | WorkerError, ReadonlyArray<O>>>, Deferred.Deferred<never, void>]
81
+ readonly [Queue.Queue<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>, Deferred.Deferred<void>]
77
82
  >()
78
83
  const sendQueue = yield* _(Effect.acquireRelease(
79
84
  Queue.unbounded<readonly [message: Worker.Worker.Request, transfers?: ReadonlyArray<unknown>]>(),
80
85
  Queue.shutdown
81
86
  ))
82
87
 
88
+ const collector = Transferable.unsafeMakeCollector()
89
+ const wrappedEncode = encode ?
90
+ ((message: I) =>
91
+ Effect.zipRight(
92
+ collector.clear,
93
+ Effect.provideService(encode(message), Transferable.Collector, collector)
94
+ )) :
95
+ Effect.succeed
96
+
83
97
  const outbound = queue ?? (yield* _(defaultQueue<I>()))
84
98
  yield* _(Effect.addFinalizer(() => outbound.shutdown))
85
99
 
86
100
  yield* _(
87
101
  Effect.gen(function*(_) {
88
- const readyLatch = yield* _(Deferred.make<never, void>())
102
+ const readyLatch = yield* _(Deferred.make<void>())
89
103
  const backing = yield* _(
90
104
  platform.spawn<Worker.Worker.Request, Worker.Worker.Response<E, O>>(spawn(id))
91
105
  )
@@ -172,8 +186,8 @@ export const makeManager = Effect.gen(function*(_) {
172
186
  Effect.tap(
173
187
  Effect.all([
174
188
  Effect.sync(() => requestIdCounter++),
175
- Queue.unbounded<Exit.Exit<E | WorkerError, ReadonlyArray<O>>>(),
176
- Deferred.make<never, void>(),
189
+ Queue.unbounded<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>(),
190
+ Deferred.make<void>(),
177
191
  Effect.map(
178
192
  Effect.serviceOption(Tracer.ParentSpan),
179
193
  Option.filter((span): span is Tracer.Span => span._tag === "Span")
@@ -189,8 +203,8 @@ export const makeManager = Effect.gen(function*(_) {
189
203
  const executeRelease = (
190
204
  [id, , deferred]: [
191
205
  number,
192
- Queue.Queue<Exit.Exit<E | WorkerError, ReadonlyArray<O>>>,
193
- Deferred.Deferred<never, void>,
206
+ Queue.Queue<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>,
207
+ Deferred.Deferred<void>,
194
208
  Option.Option<Tracer.Span>
195
209
  ],
196
210
  exit: Exit.Exit<unknown, unknown>
@@ -211,8 +225,8 @@ export const makeManager = Effect.gen(function*(_) {
211
225
  executeRelease
212
226
  ),
213
227
  ([, queue]) => {
214
- const loop: Channel.Channel<never, unknown, unknown, unknown, E | WorkerError, Chunk.Chunk<O>, void> =
215
- Channel.flatMap(
228
+ const loop: Channel.Channel<Chunk.Chunk<O>, unknown, E | WorkerError, unknown, void, unknown> = Channel
229
+ .flatMap(
216
230
  Queue.take(queue),
217
231
  Exit.match({
218
232
  onFailure: (cause) => Cause.isEmpty(cause) ? Channel.unit : Channel.failCause(cause),
@@ -244,8 +258,12 @@ export const makeManager = Effect.gen(function*(_) {
244
258
  )
245
259
  return pipe(
246
260
  Effect.flatMap(
247
- encode ? encode(request) : Effect.succeed(request),
248
- (payload) => sendQueue.offer([[id, 0, payload, spanTuple], transferables])
261
+ wrappedEncode(request),
262
+ (payload) =>
263
+ sendQueue.offer([[id, 0, payload, spanTuple], [
264
+ ...transferables,
265
+ ...collector.unsafeRead()
266
+ ]])
249
267
  ),
250
268
  Effect.catchAllCause((cause) => Queue.offer(result[0], Exit.failCause(cause))),
251
269
  Effect.zipRight(Deferred.await(result[1]))
@@ -278,9 +296,8 @@ export const makeManager = Effect.gen(function*(_) {
278
296
  export const layerManager = Layer.effect(WorkerManager, makeManager)
279
297
 
280
298
  /** @internal */
281
- export const makePool = <W>() =>
282
- <I, E, O>(
283
- options: Worker.WorkerPool.Options<I, W>
299
+ export const makePool = <I, E, O>(
300
+ options: Worker.WorkerPool.Options<I>
284
301
  ) =>
285
302
  Effect.gen(function*(_) {
286
303
  const manager = yield* _(WorkerManager)
@@ -329,27 +346,22 @@ export const makePool = <W>() =>
329
346
  })
330
347
 
331
348
  /** @internal */
332
- export const makePoolLayer = <W>(managerLayer: Layer.Layer<never, never, Worker.WorkerManager>) =>
333
- <Tag, I, E, O>(
349
+ export const makePoolLayer = <Tag, I, E, O>(
334
350
  tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
335
- options: Worker.WorkerPool.Options<I, W>
336
- ) => Layer.scoped(tag, makePool<W>()(options)).pipe(Layer.provide(managerLayer))
351
+ options: Worker.WorkerPool.Options<I>
352
+ ) => Layer.scoped(tag, makePool(options))
337
353
 
338
354
  /** @internal */
339
355
  export const makeSerialized = <
340
- I extends Schema.TaggedRequest.Any,
341
- W = unknown
356
+ I extends Schema.TaggedRequest.Any
342
357
  >(
343
- options: Worker.SerializedWorker.Options<I, W>
344
- ): Effect.Effect<Worker.WorkerManager | Scope.Scope, WorkerError, Worker.SerializedWorker<I>> =>
358
+ options: Worker.SerializedWorker.Options<I>
359
+ ): Effect.Effect<Worker.SerializedWorker<I>, WorkerError, Worker.WorkerManager | Worker.Spawner | Scope.Scope> =>
345
360
  Effect.gen(function*(_) {
346
361
  const manager = yield* _(WorkerManager)
347
362
  const backing = yield* _(
348
363
  manager.spawn({
349
364
  ...options as any,
350
- transfers(message) {
351
- return Transferable.get(message)
352
- },
353
365
  encode(message) {
354
366
  return Effect.mapError(Serializable.serialize(message as any), (error) => WorkerError("encode", error))
355
367
  }
@@ -380,15 +392,14 @@ export const makeSerialized = <
380
392
  })
381
393
 
382
394
  /** @internal */
383
- export const makePoolSerialized = <W>() =>
384
- <I extends Schema.TaggedRequest.Any>(
385
- options: Worker.SerializedWorkerPool.Options<I, W>
395
+ export const makePoolSerialized = <I extends Schema.TaggedRequest.Any>(
396
+ options: Worker.SerializedWorkerPool.Options<I>
386
397
  ) =>
387
398
  Effect.gen(function*(_) {
388
399
  const manager = yield* _(WorkerManager)
389
400
  const workers = new Set<Worker.SerializedWorker<I>>()
390
401
  const acquire = pipe(
391
- makeSerialized<I, W>(options),
402
+ makeSerialized<I>(options),
392
403
  Effect.tap((worker) => Effect.sync(() => workers.add(worker))),
393
404
  Effect.tap((worker) => Effect.addFinalizer(() => Effect.sync(() => workers.delete(worker)))),
394
405
  options.onCreate ? Effect.tap(options.onCreate) : identity,
@@ -432,9 +443,14 @@ export const makePoolSerialized = <W>() =>
432
443
  })
433
444
 
434
445
  /** @internal */
435
- export const makePoolSerializedLayer =
436
- <W>(managerLayer: Layer.Layer<never, never, Worker.WorkerManager>) =>
437
- <Tag, I extends Schema.TaggedRequest.Any>(
438
- tag: Context.Tag<Tag, Worker.SerializedWorkerPool<I>>,
439
- options: Worker.SerializedWorkerPool.Options<I, W>
440
- ) => Layer.scoped(tag, makePoolSerialized<W>()(options)).pipe(Layer.provide(managerLayer))
446
+ export const makePoolSerializedLayer = <Tag, I extends Schema.TaggedRequest.Any>(
447
+ tag: Context.Tag<Tag, Worker.SerializedWorkerPool<I>>,
448
+ options: Worker.SerializedWorkerPool.Options<I>
449
+ ) => Layer.scoped(tag, makePoolSerialized(options))
450
+
451
+ /** @internal */
452
+ export const layerSpawner = <W = unknown>(spawner: Worker.SpawnerFn<W>) =>
453
+ Layer.succeed(
454
+ Spawner,
455
+ spawner
456
+ )
@@ -10,7 +10,7 @@ export const WorkerErrorTypeId: WorkerError_.WorkerErrorTypeId = Symbol.for(
10
10
  export const WorkerError = (
11
11
  reason: WorkerError_.WorkerError["reason"],
12
12
  error: unknown,
13
- stack?: string
13
+ stack?: string | undefined
14
14
  ): WorkerError_.WorkerError =>
15
15
  Data.struct({
16
16
  [WorkerErrorTypeId]: WorkerErrorTypeId,
@@ -25,13 +25,13 @@ export const PlatformRunnerTypeId: WorkerRunner.PlatformRunnerTypeId = Symbol.fo
25
25
  ) as WorkerRunner.PlatformRunnerTypeId
26
26
 
27
27
  /** @internal */
28
- export const PlatformRunner = Context.Tag<WorkerRunner.PlatformRunner>(
29
- PlatformRunnerTypeId
28
+ export const PlatformRunner = Context.GenericTag<WorkerRunner.PlatformRunner>(
29
+ "@effect/platform/Runner/PlatformRunner"
30
30
  )
31
31
 
32
32
  /** @internal */
33
33
  export const make = <I, R, E, O>(
34
- process: (request: I) => Stream.Stream<R, E, O> | Effect.Effect<R, E, O>,
34
+ process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
35
35
  options?: WorkerRunner.Runner.Options<I, E, O>
36
36
  ) =>
37
37
  Effect.gen(function*(_) {
@@ -46,12 +46,12 @@ export const make = <I, R, E, O>(
46
46
  platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E>>(shutdown),
47
47
  Scope.extend(scope)
48
48
  )
49
- const fiberMap = new Map<number, Fiber.Fiber<never, void>>()
49
+ const fiberMap = new Map<number, Fiber.Fiber<void>>()
50
50
 
51
51
  yield* _(
52
52
  Queue.take(backing.queue),
53
53
  options?.decode ?
54
- Effect.flatMap((req): Effect.Effect<never, WorkerError.WorkerError, Worker.Worker.Request<I>> => {
54
+ Effect.flatMap((req): Effect.Effect<Worker.Worker.Request<I>, WorkerError.WorkerError> => {
55
55
  if (req[1] === 1) {
56
56
  return Effect.succeed(req)
57
57
  }
@@ -68,26 +68,41 @@ export const make = <I, R, E, O>(
68
68
  }
69
69
 
70
70
  const stream = process(req[2])
71
+ const collector = Transferable.unsafeMakeCollector()
71
72
 
72
73
  let effect = Effect.isEffect(stream) ?
73
74
  Effect.matchCauseEffect(stream, {
74
75
  onFailure: (cause) =>
75
76
  Either.match(Cause.failureOrCause(cause), {
76
77
  onLeft: (error) => {
77
- const transfers = options?.transfers ? options.transfers(error) : undefined
78
+ const transfers = options?.transfers ? options.transfers(error) : []
78
79
  return pipe(
79
- options?.encodeError ? options.encodeError(req[2], error) : Effect.succeed(error),
80
- Effect.flatMap((payload) => backing.send([id, 2, payload as any], transfers)),
80
+ options?.encodeError
81
+ ? Effect.provideService(options.encodeError(req[2], error), Transferable.Collector, collector)
82
+ : Effect.succeed(error),
83
+ Effect.flatMap((payload) =>
84
+ backing.send([id, 2, payload as any], [
85
+ ...transfers,
86
+ ...collector.unsafeRead()
87
+ ])
88
+ ),
81
89
  Effect.catchAllCause((cause) => backing.send([id, 3, Cause.squash(cause)]))
82
90
  )
83
91
  },
84
92
  onRight: (cause) => backing.send([id, 3, Cause.squash(cause)])
85
93
  }),
86
94
  onSuccess: (data) => {
87
- const transfers = options?.transfers ? options.transfers(data) : undefined
95
+ const transfers = options?.transfers ? options.transfers(data) : []
88
96
  return pipe(
89
- options?.encodeOutput ? options.encodeOutput(req[2], data) : Effect.succeed(data),
90
- Effect.flatMap((payload) => backing.send([id, 0, [payload]], transfers)),
97
+ options?.encodeOutput
98
+ ? Effect.provideService(options.encodeOutput(req[2], data), Transferable.Collector, collector)
99
+ : Effect.succeed(data),
100
+ Effect.flatMap((payload) =>
101
+ backing.send([id, 0, [payload]], [
102
+ ...transfers,
103
+ ...collector.unsafeRead()
104
+ ])
105
+ ),
91
106
  Effect.catchAllCause((cause) => backing.send([id, 3, Cause.squash(cause)]))
92
107
  )
93
108
  }
@@ -103,7 +118,8 @@ export const make = <I, R, E, O>(
103
118
  }
104
119
 
105
120
  const transfers: Array<unknown> = []
106
- return Effect.flatMap(
121
+ collector.unsafeClear()
122
+ return pipe(
107
123
  Effect.forEach(data, (data) => {
108
124
  if (options?.transfers) {
109
125
  for (const option of options.transfers(data)) {
@@ -112,7 +128,11 @@ export const make = <I, R, E, O>(
112
128
  }
113
129
  return Effect.orDie(options.encodeOutput!(req[2], data))
114
130
  }),
115
- (payload) => backing.send([id, 0, payload], transfers)
131
+ Effect.provideService(Transferable.Collector, collector),
132
+ Effect.flatMap((payload) => {
133
+ collector.unsafeRead().forEach((transfer) => transfers.push(transfer))
134
+ return backing.send([id, 0, payload], transfers)
135
+ })
116
136
  )
117
137
  }),
118
138
  Stream.runDrain,
@@ -120,10 +140,18 @@ export const make = <I, R, E, O>(
120
140
  onFailure: (cause) =>
121
141
  Either.match(Cause.failureOrCause(cause), {
122
142
  onLeft: (error) => {
123
- const transfers = options?.transfers ? options.transfers(error) : undefined
143
+ const transfers = options?.transfers ? options.transfers(error) : []
144
+ collector.unsafeClear()
124
145
  return pipe(
125
- options?.encodeError ? options.encodeError(req[2], error) : Effect.succeed(error),
126
- Effect.flatMap((payload) => backing.send([id, 2, payload as any], transfers)),
146
+ options?.encodeError
147
+ ? Effect.provideService(options.encodeError(req[2], error), Transferable.Collector, collector)
148
+ : Effect.succeed(error),
149
+ Effect.flatMap((payload) =>
150
+ backing.send([id, 2, payload as any], [
151
+ ...transfers,
152
+ ...collector.unsafeRead()
153
+ ])
154
+ ),
127
155
  Effect.catchAllCause((cause) => backing.send([id, 3, Cause.squash(cause)]))
128
156
  )
129
157
  },
@@ -158,9 +186,9 @@ export const make = <I, R, E, O>(
158
186
 
159
187
  /** @internal */
160
188
  export const layer = <I, R, E, O>(
161
- process: (request: I) => Stream.Stream<R, E, O> | Effect.Effect<R, E, O>,
189
+ process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
162
190
  options?: WorkerRunner.Runner.Options<I, E, O>
163
- ): Layer.Layer<WorkerRunner.PlatformRunner | R, WorkerError.WorkerError, never> =>
191
+ ): Layer.Layer<never, WorkerError.WorkerError, WorkerRunner.PlatformRunner | R> =>
164
192
  Layer.scopedDiscard(make(process, options))
165
193
 
166
194
  /** @internal */
@@ -170,20 +198,20 @@ export const makeSerialized = <
170
198
  A extends Schema.TaggedRequest.Any,
171
199
  const Handlers extends WorkerRunner.SerializedRunner.Handlers<A>
172
200
  >(
173
- schema: Schema.Schema<R, I, A>,
201
+ schema: Schema.Schema<A, I, R>,
174
202
  handlers: Handlers
175
203
  ): Effect.Effect<
204
+ void,
205
+ WorkerError.WorkerError,
176
206
  | R
177
207
  | WorkerRunner.PlatformRunner
178
208
  | Scope.Scope
179
- | WorkerRunner.SerializedRunner.HandlersContext<Handlers>,
180
- WorkerError.WorkerError,
181
- void
209
+ | WorkerRunner.SerializedRunner.HandlersContext<Handlers>
182
210
  > =>
183
211
  Effect.gen(function*(_) {
184
212
  const scope = yield* _(Effect.scope)
185
213
  let context = Context.empty() as Context.Context<any>
186
- const parseRequest = Schema.decodeUnknown(schema) as (_: unknown) => Effect.Effect<never, never, A>
214
+ const parseRequest = Schema.decodeUnknown(schema) as (_: unknown) => Effect.Effect<A>
187
215
 
188
216
  return yield* _(make((request: A) => {
189
217
  const result = (handlers as any)[request._tag](request)
@@ -197,9 +225,6 @@ export const makeSerialized = <
197
225
  }
198
226
  return Stream.provideContext(result as any, context)
199
227
  }, {
200
- transfers(message) {
201
- return Transferable.get(message)
202
- },
203
228
  decode(message) {
204
229
  return Effect.mapError(
205
230
  parseRequest(message),
@@ -228,12 +253,12 @@ export const layerSerialized = <
228
253
  A extends Schema.TaggedRequest.Any,
229
254
  const Handlers extends WorkerRunner.SerializedRunner.Handlers<A>
230
255
  >(
231
- schema: Schema.Schema<R, I, A>,
256
+ schema: Schema.Schema<A, I, R>,
232
257
  handlers: Handlers
233
258
  ): Layer.Layer<
259
+ never,
260
+ WorkerError.WorkerError,
234
261
  | R
235
262
  | WorkerRunner.PlatformRunner
236
- | WorkerRunner.SerializedRunner.HandlersContext<Handlers>,
237
- WorkerError.WorkerError,
238
- never
263
+ | WorkerRunner.SerializedRunner.HandlersContext<Handlers>
239
264
  > => Layer.scopedDiscard(makeSerialized(schema, handlers))