@effect/platform-node 0.104.0 → 4.0.0-beta.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 (321) hide show
  1. package/dist/Mime.d.ts +15 -0
  2. package/dist/Mime.d.ts.map +1 -0
  3. package/dist/Mime.js +16 -0
  4. package/dist/Mime.js.map +1 -0
  5. package/dist/NodeChildProcessSpawner.d.ts +7 -0
  6. package/dist/NodeChildProcessSpawner.d.ts.map +1 -0
  7. package/dist/NodeChildProcessSpawner.js +7 -0
  8. package/dist/NodeChildProcessSpawner.js.map +1 -0
  9. package/dist/NodeClusterHttp.d.ts +44 -0
  10. package/dist/NodeClusterHttp.d.ts.map +1 -0
  11. package/dist/{esm/NodeClusterHttp.js → NodeClusterHttp.js} +14 -18
  12. package/dist/NodeClusterHttp.js.map +1 -0
  13. package/dist/{dts/NodeClusterSocket.d.ts → NodeClusterSocket.d.ts} +13 -13
  14. package/dist/NodeClusterSocket.d.ts.map +1 -0
  15. package/dist/{esm/NodeClusterSocket.js → NodeClusterSocket.js} +13 -13
  16. package/dist/NodeClusterSocket.js.map +1 -0
  17. package/dist/NodeFileSystem.d.ts +8 -0
  18. package/dist/NodeFileSystem.d.ts.map +1 -0
  19. package/dist/NodeFileSystem.js.map +1 -0
  20. package/dist/NodeHttpClient.d.ts +110 -0
  21. package/dist/NodeHttpClient.d.ts.map +1 -0
  22. package/dist/NodeHttpClient.js +446 -0
  23. package/dist/NodeHttpClient.js.map +1 -0
  24. package/dist/NodeHttpIncomingMessage.d.ts +35 -0
  25. package/dist/NodeHttpIncomingMessage.d.ts.map +1 -0
  26. package/dist/NodeHttpIncomingMessage.js +77 -0
  27. package/dist/NodeHttpIncomingMessage.js.map +1 -0
  28. package/dist/NodeHttpPlatform.d.ts +26 -0
  29. package/dist/NodeHttpPlatform.d.ts.map +1 -0
  30. package/dist/{esm/internal/httpPlatform.js → NodeHttpPlatform.js} +20 -11
  31. package/dist/NodeHttpPlatform.js.map +1 -0
  32. package/dist/NodeHttpServer.d.ts +73 -0
  33. package/dist/NodeHttpServer.d.ts.map +1 -0
  34. package/dist/NodeHttpServer.js +376 -0
  35. package/dist/NodeHttpServer.js.map +1 -0
  36. package/dist/NodeHttpServerRequest.d.ts +16 -0
  37. package/dist/NodeHttpServerRequest.d.ts.map +1 -0
  38. package/dist/NodeHttpServerRequest.js +14 -0
  39. package/dist/NodeHttpServerRequest.js.map +1 -0
  40. package/dist/NodeMultipart.d.ts +26 -0
  41. package/dist/NodeMultipart.d.ts.map +1 -0
  42. package/dist/NodeMultipart.js +131 -0
  43. package/dist/NodeMultipart.js.map +1 -0
  44. package/dist/NodePath.d.ts +18 -0
  45. package/dist/NodePath.d.ts.map +1 -0
  46. package/dist/NodePath.js.map +1 -0
  47. package/dist/NodeRedis.d.ts +31 -0
  48. package/dist/NodeRedis.d.ts.map +1 -0
  49. package/dist/NodeRedis.js +51 -0
  50. package/dist/NodeRedis.js.map +1 -0
  51. package/dist/NodeRuntime.d.ts +94 -0
  52. package/dist/NodeRuntime.d.ts.map +1 -0
  53. package/dist/NodeRuntime.js +33 -0
  54. package/dist/NodeRuntime.js.map +1 -0
  55. package/dist/NodeServices.d.ts +20 -0
  56. package/dist/NodeServices.d.ts.map +1 -0
  57. package/dist/NodeServices.js +12 -0
  58. package/dist/NodeServices.js.map +1 -0
  59. package/dist/NodeSink.d.ts.map +1 -0
  60. package/dist/NodeSink.js.map +1 -0
  61. package/dist/NodeSocket.d.ts +23 -0
  62. package/dist/NodeSocket.d.ts.map +1 -0
  63. package/dist/{esm/NodeSocket.js → NodeSocket.js} +9 -8
  64. package/dist/NodeSocket.js.map +1 -0
  65. package/dist/NodeSocketServer.d.ts.map +1 -0
  66. package/dist/NodeSocketServer.js.map +1 -0
  67. package/dist/NodeStdio.d.ts +8 -0
  68. package/dist/NodeStdio.d.ts.map +1 -0
  69. package/dist/NodeStdio.js +10 -0
  70. package/dist/NodeStdio.js.map +1 -0
  71. package/dist/{dts/NodeStream.d.ts → NodeStream.d.ts} +1 -1
  72. package/dist/NodeStream.d.ts.map +1 -0
  73. package/dist/{esm/NodeStream.js → NodeStream.js} +1 -1
  74. package/dist/NodeStream.js.map +1 -0
  75. package/dist/{dts/NodeTerminal.d.ts → NodeTerminal.d.ts} +2 -2
  76. package/dist/NodeTerminal.d.ts.map +1 -0
  77. package/dist/{esm/NodeTerminal.js → NodeTerminal.js} +1 -1
  78. package/dist/NodeTerminal.js.map +1 -0
  79. package/dist/NodeWorker.d.ts +15 -0
  80. package/dist/NodeWorker.d.ts.map +1 -0
  81. package/dist/NodeWorker.js +81 -0
  82. package/dist/NodeWorker.js.map +1 -0
  83. package/dist/NodeWorkerRunner.d.ts +8 -0
  84. package/dist/NodeWorkerRunner.d.ts.map +1 -0
  85. package/dist/NodeWorkerRunner.js +85 -0
  86. package/dist/NodeWorkerRunner.js.map +1 -0
  87. package/dist/{dts/Undici.d.ts → Undici.d.ts} +3 -3
  88. package/dist/Undici.d.ts.map +1 -0
  89. package/dist/{esm/Undici.js → Undici.js} +3 -3
  90. package/dist/Undici.js.map +1 -0
  91. package/dist/index.d.ts +102 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/{esm/index.js → index.js} +25 -7
  94. package/dist/index.js.map +1 -0
  95. package/package.json +60 -213
  96. package/src/Mime.ts +18 -0
  97. package/src/NodeChildProcessSpawner.ts +6 -0
  98. package/src/NodeClusterHttp.ts +33 -35
  99. package/src/NodeClusterSocket.ts +23 -24
  100. package/src/NodeFileSystem.ts +3 -3
  101. package/src/NodeHttpClient.ts +506 -70
  102. package/src/NodeHttpIncomingMessage.ts +105 -0
  103. package/src/NodeHttpPlatform.ts +44 -10
  104. package/src/NodeHttpServer.ts +539 -102
  105. package/src/NodeHttpServerRequest.ts +8 -8
  106. package/src/NodeMultipart.ts +156 -1
  107. package/src/NodePath.ts +5 -6
  108. package/src/NodeRedis.ts +74 -0
  109. package/src/NodeRuntime.ts +95 -3
  110. package/src/NodeServices.ts +34 -0
  111. package/src/NodeSocket.ts +24 -16
  112. package/src/NodeStdio.ts +12 -0
  113. package/src/NodeStream.ts +1 -1
  114. package/src/NodeTerminal.ts +2 -2
  115. package/src/NodeWorker.ts +89 -20
  116. package/src/NodeWorkerRunner.ts +89 -12
  117. package/src/Undici.ts +7 -7
  118. package/src/index.ts +44 -21
  119. package/NodeClusterHttp/package.json +0 -6
  120. package/NodeClusterSocket/package.json +0 -6
  121. package/NodeCommandExecutor/package.json +0 -6
  122. package/NodeContext/package.json +0 -6
  123. package/NodeFileSystem/ParcelWatcher/package.json +0 -6
  124. package/NodeFileSystem/package.json +0 -6
  125. package/NodeHttpClient/package.json +0 -6
  126. package/NodeHttpPlatform/package.json +0 -6
  127. package/NodeHttpServer/package.json +0 -6
  128. package/NodeHttpServerRequest/package.json +0 -6
  129. package/NodeKeyValueStore/package.json +0 -6
  130. package/NodeMultipart/package.json +0 -6
  131. package/NodePath/package.json +0 -6
  132. package/NodeRuntime/package.json +0 -6
  133. package/NodeSink/package.json +0 -6
  134. package/NodeSocket/package.json +0 -6
  135. package/NodeSocketServer/package.json +0 -6
  136. package/NodeStream/package.json +0 -6
  137. package/NodeTerminal/package.json +0 -6
  138. package/NodeWorker/package.json +0 -6
  139. package/NodeWorkerRunner/package.json +0 -6
  140. package/Undici/package.json +0 -6
  141. package/dist/cjs/NodeClusterHttp.js +0 -61
  142. package/dist/cjs/NodeClusterHttp.js.map +0 -1
  143. package/dist/cjs/NodeClusterSocket.js +0 -77
  144. package/dist/cjs/NodeClusterSocket.js.map +0 -1
  145. package/dist/cjs/NodeCommandExecutor.js +0 -18
  146. package/dist/cjs/NodeCommandExecutor.js.map +0 -1
  147. package/dist/cjs/NodeContext.js +0 -24
  148. package/dist/cjs/NodeContext.js.map +0 -1
  149. package/dist/cjs/NodeFileSystem/ParcelWatcher.js +0 -18
  150. package/dist/cjs/NodeFileSystem/ParcelWatcher.js.map +0 -1
  151. package/dist/cjs/NodeFileSystem.js +0 -18
  152. package/dist/cjs/NodeFileSystem.js.map +0 -1
  153. package/dist/cjs/NodeHttpClient.js +0 -92
  154. package/dist/cjs/NodeHttpClient.js.map +0 -1
  155. package/dist/cjs/NodeHttpPlatform.js +0 -19
  156. package/dist/cjs/NodeHttpPlatform.js.map +0 -1
  157. package/dist/cjs/NodeHttpServer.js +0 -68
  158. package/dist/cjs/NodeHttpServer.js.map +0 -1
  159. package/dist/cjs/NodeHttpServerRequest.js +0 -19
  160. package/dist/cjs/NodeHttpServerRequest.js.map +0 -1
  161. package/dist/cjs/NodeKeyValueStore.js +0 -18
  162. package/dist/cjs/NodeKeyValueStore.js.map +0 -1
  163. package/dist/cjs/NodeMultipart.js +0 -17
  164. package/dist/cjs/NodeMultipart.js.map +0 -1
  165. package/dist/cjs/NodePath.js +0 -28
  166. package/dist/cjs/NodePath.js.map +0 -1
  167. package/dist/cjs/NodeRuntime.js +0 -18
  168. package/dist/cjs/NodeRuntime.js.map +0 -1
  169. package/dist/cjs/NodeSink.js +0 -17
  170. package/dist/cjs/NodeSink.js.map +0 -1
  171. package/dist/cjs/NodeSocket.js +0 -51
  172. package/dist/cjs/NodeSocket.js.map +0 -1
  173. package/dist/cjs/NodeSocketServer.js +0 -17
  174. package/dist/cjs/NodeSocketServer.js.map +0 -1
  175. package/dist/cjs/NodeStream.js +0 -17
  176. package/dist/cjs/NodeStream.js.map +0 -1
  177. package/dist/cjs/NodeTerminal.js +0 -23
  178. package/dist/cjs/NodeTerminal.js.map +0 -1
  179. package/dist/cjs/NodeWorker.js +0 -29
  180. package/dist/cjs/NodeWorker.js.map +0 -1
  181. package/dist/cjs/NodeWorkerRunner.js +0 -21
  182. package/dist/cjs/NodeWorkerRunner.js.map +0 -1
  183. package/dist/cjs/Undici.js +0 -26
  184. package/dist/cjs/Undici.js.map +0 -1
  185. package/dist/cjs/index.js +0 -50
  186. package/dist/cjs/index.js.map +0 -1
  187. package/dist/cjs/internal/httpClient.js +0 -196
  188. package/dist/cjs/internal/httpClient.js.map +0 -1
  189. package/dist/cjs/internal/httpClientUndici.js +0 -194
  190. package/dist/cjs/internal/httpClientUndici.js.map +0 -1
  191. package/dist/cjs/internal/httpIncomingMessage.js +0 -74
  192. package/dist/cjs/internal/httpIncomingMessage.js.map +0 -1
  193. package/dist/cjs/internal/httpPlatform.js +0 -49
  194. package/dist/cjs/internal/httpPlatform.js.map +0 -1
  195. package/dist/cjs/internal/httpServer.js +0 -352
  196. package/dist/cjs/internal/httpServer.js.map +0 -1
  197. package/dist/cjs/internal/worker.js +0 -82
  198. package/dist/cjs/internal/worker.js.map +0 -1
  199. package/dist/cjs/internal/workerRunner.js +0 -83
  200. package/dist/cjs/internal/workerRunner.js.map +0 -1
  201. package/dist/dts/NodeClusterHttp.d.ts +0 -41
  202. package/dist/dts/NodeClusterHttp.d.ts.map +0 -1
  203. package/dist/dts/NodeClusterSocket.d.ts.map +0 -1
  204. package/dist/dts/NodeCommandExecutor.d.ts +0 -9
  205. package/dist/dts/NodeCommandExecutor.d.ts.map +0 -1
  206. package/dist/dts/NodeContext.d.ts +0 -17
  207. package/dist/dts/NodeContext.d.ts.map +0 -1
  208. package/dist/dts/NodeFileSystem/ParcelWatcher.d.ts +0 -8
  209. package/dist/dts/NodeFileSystem/ParcelWatcher.d.ts.map +0 -1
  210. package/dist/dts/NodeFileSystem.d.ts +0 -8
  211. package/dist/dts/NodeFileSystem.d.ts.map +0 -1
  212. package/dist/dts/NodeHttpClient.d.ts +0 -116
  213. package/dist/dts/NodeHttpClient.d.ts.map +0 -1
  214. package/dist/dts/NodeHttpPlatform.d.ts +0 -19
  215. package/dist/dts/NodeHttpPlatform.d.ts.map +0 -1
  216. package/dist/dts/NodeHttpServer.d.ts +0 -91
  217. package/dist/dts/NodeHttpServer.d.ts.map +0 -1
  218. package/dist/dts/NodeHttpServerRequest.d.ts +0 -16
  219. package/dist/dts/NodeHttpServerRequest.d.ts.map +0 -1
  220. package/dist/dts/NodeKeyValueStore.d.ts +0 -9
  221. package/dist/dts/NodeKeyValueStore.d.ts.map +0 -1
  222. package/dist/dts/NodeMultipart.d.ts +0 -8
  223. package/dist/dts/NodeMultipart.d.ts.map +0 -1
  224. package/dist/dts/NodePath.d.ts +0 -21
  225. package/dist/dts/NodePath.d.ts.map +0 -1
  226. package/dist/dts/NodeRuntime.d.ts +0 -7
  227. package/dist/dts/NodeRuntime.d.ts.map +0 -1
  228. package/dist/dts/NodeSink.d.ts.map +0 -1
  229. package/dist/dts/NodeSocket.d.ts +0 -22
  230. package/dist/dts/NodeSocket.d.ts.map +0 -1
  231. package/dist/dts/NodeSocketServer.d.ts.map +0 -1
  232. package/dist/dts/NodeStream.d.ts.map +0 -1
  233. package/dist/dts/NodeTerminal.d.ts.map +0 -1
  234. package/dist/dts/NodeWorker.d.ts +0 -28
  235. package/dist/dts/NodeWorker.d.ts.map +0 -1
  236. package/dist/dts/NodeWorkerRunner.d.ts +0 -17
  237. package/dist/dts/NodeWorkerRunner.d.ts.map +0 -1
  238. package/dist/dts/Undici.d.ts.map +0 -1
  239. package/dist/dts/index.d.ts +0 -85
  240. package/dist/dts/index.d.ts.map +0 -1
  241. package/dist/dts/internal/httpClient.d.ts +0 -2
  242. package/dist/dts/internal/httpClient.d.ts.map +0 -1
  243. package/dist/dts/internal/httpClientUndici.d.ts +0 -2
  244. package/dist/dts/internal/httpClientUndici.d.ts.map +0 -1
  245. package/dist/dts/internal/httpIncomingMessage.d.ts +0 -2
  246. package/dist/dts/internal/httpIncomingMessage.d.ts.map +0 -1
  247. package/dist/dts/internal/httpPlatform.d.ts +0 -2
  248. package/dist/dts/internal/httpPlatform.d.ts.map +0 -1
  249. package/dist/dts/internal/httpServer.d.ts +0 -2
  250. package/dist/dts/internal/httpServer.d.ts.map +0 -1
  251. package/dist/dts/internal/worker.d.ts +0 -2
  252. package/dist/dts/internal/worker.d.ts.map +0 -1
  253. package/dist/dts/internal/workerRunner.d.ts +0 -2
  254. package/dist/dts/internal/workerRunner.d.ts.map +0 -1
  255. package/dist/esm/NodeClusterHttp.js.map +0 -1
  256. package/dist/esm/NodeClusterSocket.js.map +0 -1
  257. package/dist/esm/NodeCommandExecutor.js +0 -10
  258. package/dist/esm/NodeCommandExecutor.js.map +0 -1
  259. package/dist/esm/NodeContext.js +0 -16
  260. package/dist/esm/NodeContext.js.map +0 -1
  261. package/dist/esm/NodeFileSystem/ParcelWatcher.js +0 -10
  262. package/dist/esm/NodeFileSystem/ParcelWatcher.js.map +0 -1
  263. package/dist/esm/NodeFileSystem.js.map +0 -1
  264. package/dist/esm/NodeHttpClient.js +0 -84
  265. package/dist/esm/NodeHttpClient.js.map +0 -1
  266. package/dist/esm/NodeHttpPlatform.js +0 -12
  267. package/dist/esm/NodeHttpPlatform.js.map +0 -1
  268. package/dist/esm/NodeHttpServer.js +0 -61
  269. package/dist/esm/NodeHttpServer.js.map +0 -1
  270. package/dist/esm/NodeHttpServerRequest.js +0 -12
  271. package/dist/esm/NodeHttpServerRequest.js.map +0 -1
  272. package/dist/esm/NodeKeyValueStore.js +0 -10
  273. package/dist/esm/NodeKeyValueStore.js.map +0 -1
  274. package/dist/esm/NodeMultipart.js +0 -8
  275. package/dist/esm/NodeMultipart.js.map +0 -1
  276. package/dist/esm/NodePath.js.map +0 -1
  277. package/dist/esm/NodeRuntime.js +0 -10
  278. package/dist/esm/NodeRuntime.js.map +0 -1
  279. package/dist/esm/NodeSink.js.map +0 -1
  280. package/dist/esm/NodeSocket.js.map +0 -1
  281. package/dist/esm/NodeSocketServer.js.map +0 -1
  282. package/dist/esm/NodeStream.js.map +0 -1
  283. package/dist/esm/NodeTerminal.js.map +0 -1
  284. package/dist/esm/NodeWorker.js +0 -22
  285. package/dist/esm/NodeWorker.js.map +0 -1
  286. package/dist/esm/NodeWorkerRunner.js +0 -13
  287. package/dist/esm/NodeWorkerRunner.js.map +0 -1
  288. package/dist/esm/Undici.js.map +0 -1
  289. package/dist/esm/index.js.map +0 -1
  290. package/dist/esm/internal/httpClient.js +0 -187
  291. package/dist/esm/internal/httpClient.js.map +0 -1
  292. package/dist/esm/internal/httpClientUndici.js +0 -186
  293. package/dist/esm/internal/httpClientUndici.js.map +0 -1
  294. package/dist/esm/internal/httpIncomingMessage.js +0 -66
  295. package/dist/esm/internal/httpIncomingMessage.js.map +0 -1
  296. package/dist/esm/internal/httpPlatform.js.map +0 -1
  297. package/dist/esm/internal/httpServer.js +0 -337
  298. package/dist/esm/internal/httpServer.js.map +0 -1
  299. package/dist/esm/internal/worker.js +0 -73
  300. package/dist/esm/internal/worker.js.map +0 -1
  301. package/dist/esm/internal/workerRunner.js +0 -76
  302. package/dist/esm/internal/workerRunner.js.map +0 -1
  303. package/dist/esm/package.json +0 -4
  304. package/index/package.json +0 -6
  305. package/src/NodeCommandExecutor.ts +0 -13
  306. package/src/NodeContext.ts +0 -40
  307. package/src/NodeFileSystem/ParcelWatcher.ts +0 -12
  308. package/src/NodeKeyValueStore.ts +0 -15
  309. package/src/internal/httpClient.ts +0 -260
  310. package/src/internal/httpClientUndici.ts +0 -231
  311. package/src/internal/httpIncomingMessage.ts +0 -92
  312. package/src/internal/httpPlatform.ts +0 -46
  313. package/src/internal/httpServer.ts +0 -517
  314. package/src/internal/worker.ts +0 -86
  315. package/src/internal/workerRunner.ts +0 -77
  316. /package/dist/{esm/NodeFileSystem.js → NodeFileSystem.js} +0 -0
  317. /package/dist/{esm/NodePath.js → NodePath.js} +0 -0
  318. /package/dist/{dts/NodeSink.d.ts → NodeSink.d.ts} +0 -0
  319. /package/dist/{esm/NodeSink.js → NodeSink.js} +0 -0
  320. /package/dist/{dts/NodeSocketServer.d.ts → NodeSocketServer.d.ts} +0 -0
  321. /package/dist/{esm/NodeSocketServer.js → NodeSocketServer.js} +0 -0
@@ -1,517 +0,0 @@
1
- import * as MultipartNode from "@effect/platform-node-shared/NodeMultipart"
2
- import * as Cookies from "@effect/platform/Cookies"
3
- import * as Etag from "@effect/platform/Etag"
4
- import * as FileSystem from "@effect/platform/FileSystem"
5
- import type * as Headers from "@effect/platform/Headers"
6
- import * as App from "@effect/platform/HttpApp"
7
- import * as IncomingMessage from "@effect/platform/HttpIncomingMessage"
8
- import type { HttpMethod } from "@effect/platform/HttpMethod"
9
- import type * as Middleware from "@effect/platform/HttpMiddleware"
10
- import * as Server from "@effect/platform/HttpServer"
11
- import * as Error from "@effect/platform/HttpServerError"
12
- import * as ServerRequest from "@effect/platform/HttpServerRequest"
13
- import type * as ServerResponse from "@effect/platform/HttpServerResponse"
14
- import type * as Multipart from "@effect/platform/Multipart"
15
- import type * as Path from "@effect/platform/Path"
16
- import * as Socket from "@effect/platform/Socket"
17
- import * as Cause from "effect/Cause"
18
- import * as Chunk from "effect/Chunk"
19
- import * as Config from "effect/Config"
20
- import * as Effect from "effect/Effect"
21
- import * as FiberSet from "effect/FiberSet"
22
- import { type LazyArg, pipe } from "effect/Function"
23
- import * as Layer from "effect/Layer"
24
- import * as Option from "effect/Option"
25
- import type { ReadonlyRecord } from "effect/Record"
26
- import * as Runtime from "effect/Runtime"
27
- import * as Scope from "effect/Scope"
28
- import * as Stream from "effect/Stream"
29
- import * as Http from "node:http"
30
- import type * as Net from "node:net"
31
- import type { Duplex } from "node:stream"
32
- import { Readable } from "node:stream"
33
- import { pipeline } from "node:stream/promises"
34
- import * as WS from "ws"
35
- import * as NodeContext from "../NodeContext.js"
36
- import * as NodeHttpClient from "../NodeHttpClient.js"
37
- import { HttpIncomingMessageImpl } from "./httpIncomingMessage.js"
38
- import * as internalPlatform from "./httpPlatform.js"
39
-
40
- /** @internal */
41
- export const make = (
42
- evaluate: LazyArg<Http.Server>,
43
- options: Net.ListenOptions
44
- ): Effect.Effect<Server.HttpServer, Error.ServeError, Scope.Scope> =>
45
- Effect.gen(function*() {
46
- const scope = yield* Effect.scope
47
- const server = yield* Effect.acquireRelease(
48
- Effect.sync(evaluate),
49
- (server) =>
50
- Effect.async<void>((resume) => {
51
- if (!server.listening) {
52
- return resume(Effect.void)
53
- }
54
- server.close((error) => {
55
- if (error) {
56
- resume(Effect.die(error))
57
- } else {
58
- resume(Effect.void)
59
- }
60
- })
61
- })
62
- )
63
-
64
- yield* Effect.async<void, Error.ServeError>((resume) => {
65
- function onError(cause: Error) {
66
- resume(Effect.fail(new Error.ServeError({ cause })))
67
- }
68
- server.on("error", onError)
69
- server.listen(options, () => {
70
- server.off("error", onError)
71
- resume(Effect.void)
72
- })
73
- })
74
-
75
- const address = server.address()!
76
-
77
- const wss = yield* pipe(
78
- Effect.acquireRelease(
79
- Effect.sync(() => new WS.WebSocketServer({ noServer: true })),
80
- (wss) =>
81
- Effect.async<void>((resume) => {
82
- wss.close(() => resume(Effect.void))
83
- })
84
- ),
85
- Scope.extend(scope),
86
- Effect.cached
87
- )
88
-
89
- return Server.make({
90
- address: typeof address === "string" ?
91
- {
92
- _tag: "UnixAddress",
93
- path: address
94
- } :
95
- {
96
- _tag: "TcpAddress",
97
- hostname: address.address === "::" ? "0.0.0.0" : address.address,
98
- port: address.port
99
- },
100
- serve: (httpApp, middleware) =>
101
- Effect.gen(function*() {
102
- const handler = yield* makeHandler(httpApp, middleware!)
103
- const upgradeHandler = yield* makeUpgradeHandler(wss, httpApp, middleware!)
104
- yield* Effect.addFinalizer(() =>
105
- Effect.sync(() => {
106
- server.off("request", handler)
107
- server.off("upgrade", upgradeHandler)
108
- })
109
- )
110
- server.on("request", handler)
111
- server.on("upgrade", upgradeHandler)
112
- })
113
- })
114
- }).pipe(
115
- Effect.provideService(
116
- IncomingMessage.MaxBodySize,
117
- Option.some(FileSystem.Size(1024 * 1024 * 10))
118
- )
119
- )
120
-
121
- /** @internal */
122
- export const makeHandler: {
123
- <R, E>(httpApp: App.Default<E, R>): Effect.Effect<
124
- (nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) => void,
125
- never,
126
- Exclude<R, ServerRequest.HttpServerRequest | Scope.Scope>
127
- >
128
- <R, E, App extends App.Default<any, any>>(
129
- httpApp: App.Default<E, R>,
130
- middleware: Middleware.HttpMiddleware.Applied<App, E, R>
131
- ): Effect.Effect<
132
- (nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) => void,
133
- never,
134
- Exclude<Effect.Effect.Context<App>, ServerRequest.HttpServerRequest | Scope.Scope>
135
- >
136
- } = <E, R>(httpApp: App.Default<E, R>, middleware?: Middleware.HttpMiddleware) => {
137
- const handledApp = App.toHandled(httpApp, handleResponse, middleware)
138
- return Effect.map(Effect.runtime<R>(), (runtime) => {
139
- const runFork = Runtime.runFork(runtime)
140
- return function handler(
141
- nodeRequest: Http.IncomingMessage,
142
- nodeResponse: Http.ServerResponse
143
- ) {
144
- const fiber = runFork(
145
- Effect.provideService(
146
- handledApp,
147
- ServerRequest.HttpServerRequest,
148
- new ServerRequestImpl(nodeRequest, nodeResponse)
149
- )
150
- )
151
- nodeResponse.on("close", () => {
152
- if (!nodeResponse.writableEnded) {
153
- fiber.unsafeInterruptAsFork(Error.clientAbortFiberId)
154
- }
155
- })
156
- }
157
- })
158
- }
159
-
160
- /** @internal */
161
- export const makeUpgradeHandler = <R, E>(
162
- lazyWss: Effect.Effect<WS.WebSocketServer>,
163
- httpApp: App.Default<E, R>,
164
- middleware?: Middleware.HttpMiddleware
165
- ) => {
166
- const handledApp = App.toHandled(httpApp, handleResponse, middleware)
167
- return Effect.map(FiberSet.makeRuntime<R>(), (runFork) =>
168
- function handler(
169
- nodeRequest: Http.IncomingMessage,
170
- socket: Duplex,
171
- head: Buffer
172
- ) {
173
- let nodeResponse_: Http.ServerResponse | undefined = undefined
174
- const nodeResponse = () => {
175
- if (nodeResponse_ === undefined) {
176
- nodeResponse_ = new Http.ServerResponse(nodeRequest)
177
- nodeResponse_.assignSocket(socket as any)
178
- nodeResponse_.on("finish", () => {
179
- socket.end()
180
- })
181
- }
182
- return nodeResponse_
183
- }
184
- const upgradeEffect = Socket.fromWebSocket(Effect.flatMap(
185
- lazyWss,
186
- (wss) =>
187
- Effect.acquireRelease(
188
- Effect.async<globalThis.WebSocket>((resume) =>
189
- wss.handleUpgrade(nodeRequest, socket, head, (ws) => {
190
- resume(Effect.succeed(ws as any))
191
- })
192
- ),
193
- (ws) => Effect.sync(() => ws.close())
194
- )
195
- ))
196
- const fiber = runFork(
197
- Effect.provideService(
198
- handledApp,
199
- ServerRequest.HttpServerRequest,
200
- new ServerRequestImpl(nodeRequest, nodeResponse, upgradeEffect)
201
- )
202
- )
203
- socket.on("close", () => {
204
- if (!socket.writableEnded) {
205
- fiber.unsafeInterruptAsFork(Error.clientAbortFiberId)
206
- }
207
- })
208
- })
209
- }
210
-
211
- class ServerRequestImpl extends HttpIncomingMessageImpl<Error.RequestError> implements ServerRequest.HttpServerRequest {
212
- readonly [ServerRequest.TypeId]: ServerRequest.TypeId
213
-
214
- constructor(
215
- readonly source: Http.IncomingMessage,
216
- readonly response: Http.ServerResponse | LazyArg<Http.ServerResponse>,
217
- private upgradeEffect?: Effect.Effect<Socket.Socket, Error.RequestError>,
218
- readonly url = source.url!,
219
- private headersOverride?: Headers.Headers,
220
- remoteAddressOverride?: string
221
- ) {
222
- super(source, (cause) =>
223
- new Error.RequestError({
224
- request: this,
225
- reason: "Decode",
226
- cause
227
- }), remoteAddressOverride)
228
- this[ServerRequest.TypeId] = ServerRequest.TypeId
229
- }
230
-
231
- private cachedCookies: ReadonlyRecord<string, string> | undefined
232
- get cookies() {
233
- if (this.cachedCookies) {
234
- return this.cachedCookies
235
- }
236
- return this.cachedCookies = Cookies.parseHeader(this.headers.cookie ?? "")
237
- }
238
-
239
- get resolvedResponse(): Http.ServerResponse {
240
- return typeof this.response === "function" ? this.response() : this.response
241
- }
242
-
243
- modify(
244
- options: {
245
- readonly url?: string | undefined
246
- readonly headers?: Headers.Headers | undefined
247
- readonly remoteAddress?: string | undefined
248
- }
249
- ) {
250
- return new ServerRequestImpl(
251
- this.source,
252
- this.response,
253
- this.upgradeEffect,
254
- options.url ?? this.url,
255
- options.headers ?? this.headersOverride,
256
- options.remoteAddress ?? this.remoteAddressOverride
257
- )
258
- }
259
-
260
- get originalUrl(): string {
261
- return this.source.url!
262
- }
263
-
264
- get method(): HttpMethod {
265
- return this.source.method!.toUpperCase() as HttpMethod
266
- }
267
-
268
- get headers(): Headers.Headers {
269
- this.headersOverride ??= this.source.headers as Headers.Headers
270
- return this.headersOverride
271
- }
272
-
273
- private multipartEffect:
274
- | Effect.Effect<
275
- Multipart.Persisted,
276
- Multipart.MultipartError,
277
- Scope.Scope | FileSystem.FileSystem | Path.Path
278
- >
279
- | undefined
280
- get multipart(): Effect.Effect<
281
- Multipart.Persisted,
282
- Multipart.MultipartError,
283
- Scope.Scope | FileSystem.FileSystem | Path.Path
284
- > {
285
- if (this.multipartEffect) {
286
- return this.multipartEffect
287
- }
288
- this.multipartEffect = Effect.runSync(Effect.cached(
289
- MultipartNode.persisted(this.source, this.source.headers)
290
- ))
291
- return this.multipartEffect
292
- }
293
-
294
- get multipartStream(): Stream.Stream<Multipart.Part, Multipart.MultipartError> {
295
- return MultipartNode.stream(this.source, this.source.headers)
296
- }
297
-
298
- get upgrade(): Effect.Effect<Socket.Socket, Error.RequestError> {
299
- return this.upgradeEffect ?? Effect.fail(
300
- new Error.RequestError({
301
- request: this,
302
- reason: "Decode",
303
- description: "not an upgradeable ServerRequest"
304
- })
305
- )
306
- }
307
-
308
- toString(): string {
309
- return `ServerRequest(${this.method} ${this.url})`
310
- }
311
-
312
- toJSON(): unknown {
313
- return IncomingMessage.inspect(this, {
314
- _id: "@effect/platform/HttpServerRequest",
315
- method: this.method,
316
- url: this.originalUrl
317
- })
318
- }
319
- }
320
-
321
- /** @internal */
322
- export const layerServer = (
323
- evaluate: LazyArg<Http.Server>,
324
- options: Net.ListenOptions
325
- ) => Layer.scoped(Server.HttpServer, make(evaluate, options))
326
-
327
- /** @internal */
328
- export const layerContext = Layer.mergeAll(
329
- internalPlatform.layer,
330
- Etag.layerWeak,
331
- NodeContext.layer
332
- )
333
-
334
- /** @internal */
335
- export const layer = (
336
- evaluate: LazyArg<Http.Server>,
337
- options: Net.ListenOptions
338
- ) =>
339
- Layer.mergeAll(
340
- Layer.scoped(Server.HttpServer, make(evaluate, options)),
341
- layerContext
342
- )
343
-
344
- /** @internal */
345
- export const layerTest = Server.layerTestClient.pipe(
346
- Layer.provide(NodeHttpClient.layerWithoutAgent),
347
- Layer.provide(NodeHttpClient.makeAgentLayer({ keepAlive: false })),
348
- Layer.provideMerge(layer(Http.createServer, { port: 0 }))
349
- )
350
-
351
- /** @internal */
352
- export const layerConfig = (
353
- evaluate: LazyArg<Http.Server>,
354
- options: Config.Config.Wrap<Net.ListenOptions>
355
- ) =>
356
- Layer.mergeAll(
357
- Layer.scoped(
358
- Server.HttpServer,
359
- Effect.flatMap(Config.unwrap(options), (options) => make(evaluate, options))
360
- ),
361
- internalPlatform.layer,
362
- Etag.layerWeak,
363
- NodeContext.layer
364
- )
365
-
366
- const handleResponse = (request: ServerRequest.HttpServerRequest, response: ServerResponse.HttpServerResponse) =>
367
- Effect.suspend((): Effect.Effect<void, Error.ResponseError> => {
368
- const nodeResponse = (request as ServerRequestImpl).resolvedResponse
369
- if (nodeResponse.writableEnded) {
370
- return Effect.void
371
- }
372
-
373
- let headers: Record<string, string | Array<string>> = response.headers
374
- if (!Cookies.isEmpty(response.cookies)) {
375
- headers = { ...headers }
376
- const toSet = Cookies.toSetCookieHeaders(response.cookies)
377
- if (headers["set-cookie"] !== undefined) {
378
- toSet.push(headers["set-cookie"] as string)
379
- }
380
- headers["set-cookie"] = toSet
381
- }
382
-
383
- if (request.method === "HEAD") {
384
- nodeResponse.writeHead(response.status, headers)
385
- return Effect.async<void>((resume) => {
386
- nodeResponse.end(() => resume(Effect.void))
387
- })
388
- }
389
- const body = response.body
390
- switch (body._tag) {
391
- case "Empty": {
392
- nodeResponse.writeHead(response.status, headers)
393
- nodeResponse.end()
394
- return Effect.void
395
- }
396
- case "Raw": {
397
- nodeResponse.writeHead(response.status, headers)
398
- if (
399
- typeof body.body === "object" && body.body !== null && "pipe" in body.body &&
400
- typeof body.body.pipe === "function"
401
- ) {
402
- return Effect.tryPromise({
403
- try: (signal) => pipeline(body.body as any, nodeResponse, { signal, end: true }),
404
- catch: (cause) =>
405
- new Error.ResponseError({
406
- request,
407
- response,
408
- reason: "Decode",
409
- cause
410
- })
411
- }).pipe(
412
- Effect.interruptible,
413
- Effect.tapErrorCause(handleCause(nodeResponse, response))
414
- )
415
- }
416
- return Effect.async<void>((resume) => {
417
- nodeResponse.end(body.body, () => resume(Effect.void))
418
- })
419
- }
420
- case "Uint8Array": {
421
- nodeResponse.writeHead(response.status, headers)
422
- return Effect.async<void>((resume) => {
423
- nodeResponse.end(body.body, () => resume(Effect.void))
424
- })
425
- }
426
- case "FormData": {
427
- return Effect.suspend(() => {
428
- const r = new Response(body.formData)
429
- nodeResponse.writeHead(response.status, {
430
- ...headers,
431
- ...Object.fromEntries(r.headers)
432
- })
433
- return Effect.async<void, Error.ResponseError>((resume, signal) => {
434
- Readable.fromWeb(r.body as any, { signal })
435
- .pipe(nodeResponse)
436
- .on("error", (cause) => {
437
- resume(Effect.fail(
438
- new Error.ResponseError({
439
- request,
440
- response,
441
- reason: "Decode",
442
- cause
443
- })
444
- ))
445
- })
446
- .once("finish", () => {
447
- resume(Effect.void)
448
- })
449
- }).pipe(
450
- Effect.interruptible,
451
- Effect.tapErrorCause(handleCause(nodeResponse, response))
452
- )
453
- })
454
- }
455
- case "Stream": {
456
- nodeResponse.writeHead(response.status, headers)
457
- const drainLatch = Effect.unsafeMakeLatch()
458
- nodeResponse.on("drain", () => drainLatch.unsafeOpen())
459
- return body.stream.pipe(
460
- Stream.orDie,
461
- Stream.runForEachChunk((chunk) => {
462
- const array = Chunk.toReadonlyArray(chunk)
463
- if (array.length === 0) return Effect.void
464
- let needDrain = false
465
- for (let i = 0; i < array.length; i++) {
466
- const written = nodeResponse.write(array[i])
467
- if (!written && !needDrain) {
468
- needDrain = true
469
- drainLatch.unsafeClose()
470
- } else if (written && needDrain) {
471
- needDrain = false
472
- }
473
- }
474
- if (!needDrain) return Effect.void
475
- return drainLatch.await
476
- }),
477
- Effect.interruptible,
478
- Effect.matchCauseEffect({
479
- onSuccess: () => Effect.sync(() => nodeResponse.end()),
480
- onFailure: handleCause(nodeResponse, response)
481
- })
482
- )
483
- }
484
- }
485
- })
486
-
487
- const handleCause = (
488
- nodeResponse: Http.ServerResponse,
489
- original: ServerResponse.HttpServerResponse
490
- ) =>
491
- <E>(originalCause: Cause.Cause<E>) =>
492
- Error.causeResponse(originalCause).pipe(
493
- Effect.flatMap(([response, cause]) => {
494
- const headersSent = nodeResponse.headersSent
495
- if (!headersSent) {
496
- nodeResponse.writeHead(response.status)
497
- }
498
- if (!nodeResponse.writableEnded) {
499
- nodeResponse.end()
500
- }
501
- return Effect.failCause(
502
- headersSent
503
- ? Cause.sequential(originalCause, Cause.die(original))
504
- : cause
505
- )
506
- })
507
- )
508
-
509
- /** @internal */
510
- export const toIncomingMessage = (self: ServerRequest.HttpServerRequest): Http.IncomingMessage =>
511
- (self as ServerRequestImpl).source
512
-
513
- /** @internal */
514
- export const toServerResponse = (self: ServerRequest.HttpServerRequest): Http.ServerResponse => {
515
- const res = (self as ServerRequestImpl).response
516
- return typeof res === "function" ? res() : res
517
- }
@@ -1,86 +0,0 @@
1
- import * as Worker from "@effect/platform/Worker"
2
- import { WorkerError } from "@effect/platform/WorkerError"
3
- import * as Deferred from "effect/Deferred"
4
- import * as Effect from "effect/Effect"
5
- import * as Exit from "effect/Exit"
6
- import * as Layer from "effect/Layer"
7
- import * as Scope from "effect/Scope"
8
- import type * as ChildProcess from "node:child_process"
9
- import type * as WorkerThreads from "node:worker_threads"
10
-
11
- const platformWorkerImpl = Worker.makePlatform<WorkerThreads.Worker | ChildProcess.ChildProcess>()({
12
- setup({ scope, worker }) {
13
- return Effect.flatMap(Deferred.make<void, WorkerError>(), (exitDeferred) => {
14
- const thing = "postMessage" in worker ?
15
- {
16
- postMessage(msg: any, t?: any) {
17
- worker.postMessage(msg, t)
18
- },
19
- kill: () => worker.terminate(),
20
- worker
21
- } :
22
- {
23
- postMessage(msg: any, _?: any) {
24
- worker.send(msg)
25
- },
26
- kill: () => worker.kill("SIGKILL"),
27
- worker
28
- }
29
- worker.on("exit", () => {
30
- Deferred.unsafeDone(exitDeferred, Exit.void)
31
- })
32
- return Effect.as(
33
- Scope.addFinalizer(
34
- scope,
35
- Effect.suspend(() => {
36
- thing.postMessage([1])
37
- return Deferred.await(exitDeferred)
38
- }).pipe(
39
- Effect.interruptible,
40
- Effect.timeout(5000),
41
- Effect.catchAllCause(() => Effect.sync(() => thing.kill()))
42
- )
43
- ),
44
- thing
45
- )
46
- })
47
- },
48
- listen({ deferred, emit, port }) {
49
- port.worker.on("message", (message) => {
50
- emit(message)
51
- })
52
- port.worker.on("messageerror", (cause) => {
53
- Deferred.unsafeDone(
54
- deferred,
55
- new WorkerError({ reason: "decode", cause })
56
- )
57
- })
58
- port.worker.on("error", (cause) => {
59
- Deferred.unsafeDone(deferred, new WorkerError({ reason: "unknown", cause }))
60
- })
61
- port.worker.on("exit", (code) => {
62
- Deferred.unsafeDone(
63
- deferred,
64
- new WorkerError({ reason: "unknown", cause: new Error(`exited with code ${code}`) })
65
- )
66
- })
67
- return Effect.void
68
- }
69
- })
70
-
71
- /** @internal */
72
- export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl)
73
-
74
- /** @internal */
75
- export const layerManager = Layer.provide(Worker.layerManager, layerWorker)
76
-
77
- /** @internal */
78
- export const layer = (spawn: (id: number) => WorkerThreads.Worker | ChildProcess.ChildProcess) =>
79
- Layer.merge(
80
- layerManager,
81
- Worker.layerSpawner(spawn)
82
- )
83
-
84
- /** @internal */
85
- export const layerPlatform = (spawn: (id: number) => WorkerThreads.Worker | ChildProcess.ChildProcess) =>
86
- Layer.merge(layerWorker, Worker.layerSpawner(spawn))
@@ -1,77 +0,0 @@
1
- import { WorkerError } from "@effect/platform/WorkerError"
2
- import * as Runner from "@effect/platform/WorkerRunner"
3
- import * as Cause from "effect/Cause"
4
- import * as Context from "effect/Context"
5
- import * as Deferred from "effect/Deferred"
6
- import * as Effect from "effect/Effect"
7
- import * as Exit from "effect/Exit"
8
- import * as FiberSet from "effect/FiberSet"
9
- import * as Layer from "effect/Layer"
10
- import * as Runtime from "effect/Runtime"
11
- import * as Scope from "effect/Scope"
12
- import * as WorkerThreads from "node:worker_threads"
13
-
14
- const platformRunnerImpl = Runner.PlatformRunner.of({
15
- [Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
16
- start<I, O>(closeLatch: Deferred.Deferred<void, WorkerError>) {
17
- return Effect.gen(function*() {
18
- if (!WorkerThreads.parentPort && !process.send) {
19
- return yield* new WorkerError({ reason: "spawn", cause: new Error("not in a worker") })
20
- }
21
-
22
- const unsafeSend = WorkerThreads.parentPort
23
- ? (message: any, transfers?: any) => WorkerThreads.parentPort!.postMessage(message, transfers)
24
- : (message: any, _transfers?: any) => process.send!(message)
25
- const send = (_portId: number, message: O, transfers?: ReadonlyArray<unknown>) =>
26
- Effect.sync(() => unsafeSend([1, message], transfers as any))
27
-
28
- const run = Effect.fnUntraced(function*<A, E, R>(
29
- handler: (portId: number, message: I) => Effect.Effect<A, E, R> | void
30
- ) {
31
- const runtime = (yield* Effect.interruptible(Effect.runtime<R | Scope.Scope>())).pipe(
32
- Runtime.updateContext(Context.omit(Scope.Scope))
33
- ) as Runtime.Runtime<R>
34
- const fiberSet = yield* FiberSet.make<any, WorkerError | E>()
35
- const runFork = Runtime.runFork(runtime)
36
- const onExit = (exit: Exit.Exit<any, E>) => {
37
- if (exit._tag === "Failure" && !Cause.isInterruptedOnly(exit.cause)) {
38
- Deferred.unsafeDone(closeLatch, Exit.die(Cause.squash(exit.cause)))
39
- }
40
- }
41
- ;(WorkerThreads.parentPort ?? process).on("message", (message: Runner.BackingRunner.Message<I>) => {
42
- if (message[0] === 0) {
43
- const result = handler(0, message[1])
44
- if (Effect.isEffect(result)) {
45
- const fiber = runFork(result)
46
- fiber.addObserver(onExit)
47
- FiberSet.unsafeAdd(fiberSet, fiber)
48
- }
49
- } else {
50
- if (WorkerThreads.parentPort) {
51
- WorkerThreads.parentPort.close()
52
- } else {
53
- process.channel?.unref()
54
- }
55
- Deferred.unsafeDone(closeLatch, Exit.void)
56
- }
57
- })
58
-
59
- if (WorkerThreads.parentPort) {
60
- WorkerThreads.parentPort.on("messageerror", (cause) => {
61
- Deferred.unsafeDone(closeLatch, new WorkerError({ reason: "decode", cause }))
62
- })
63
- WorkerThreads.parentPort.on("error", (cause) => {
64
- Deferred.unsafeDone(closeLatch, new WorkerError({ reason: "unknown", cause }))
65
- })
66
- }
67
-
68
- unsafeSend([0])
69
- })
70
-
71
- return { run, send }
72
- })
73
- }
74
- })
75
-
76
- /** @internal */
77
- export const layer = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl)
File without changes
File without changes
File without changes