@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,260 +0,0 @@
1
- import * as Cookies from "@effect/platform/Cookies"
2
- import type * as Body from "@effect/platform/HttpBody"
3
- import * as Client from "@effect/platform/HttpClient"
4
- import * as Error from "@effect/platform/HttpClientError"
5
- import type * as ClientRequest from "@effect/platform/HttpClientRequest"
6
- import * as ClientResponse from "@effect/platform/HttpClientResponse"
7
- import * as IncomingMessage from "@effect/platform/HttpIncomingMessage"
8
- import * as Context from "effect/Context"
9
- import * as Effect from "effect/Effect"
10
- import { pipe } from "effect/Function"
11
- import * as Layer from "effect/Layer"
12
- import type * as Scope from "effect/Scope"
13
- import * as Stream from "effect/Stream"
14
- import * as Http from "node:http"
15
- import * as Https from "node:https"
16
- import { Readable } from "node:stream"
17
- import { pipeline } from "node:stream/promises"
18
- import type * as NodeClient from "../NodeHttpClient.js"
19
- import * as NodeSink from "../NodeSink.js"
20
- import { HttpIncomingMessageImpl } from "./httpIncomingMessage.js"
21
-
22
- /** @internal */
23
- export const HttpAgentTypeId: NodeClient.HttpAgentTypeId = Symbol.for(
24
- "@effect/platform-node/Http/NodeClient/HttpAgent"
25
- ) as NodeClient.HttpAgentTypeId
26
-
27
- /** @internal */
28
- export const HttpAgent = Context.GenericTag<NodeClient.HttpAgent>("@effect/platform-node/Http/NodeClient/HttpAgent")
29
-
30
- /** @internal */
31
- export const makeAgent = (options?: Https.AgentOptions): Effect.Effect<NodeClient.HttpAgent, never, Scope.Scope> =>
32
- Effect.map(
33
- Effect.all([
34
- Effect.acquireRelease(
35
- Effect.sync(() => new Http.Agent(options)),
36
- (agent) => Effect.sync(() => agent.destroy())
37
- ),
38
- Effect.acquireRelease(
39
- Effect.sync(() => new Https.Agent(options)),
40
- (agent) => Effect.sync(() => agent.destroy())
41
- )
42
- ]),
43
- ([http, https]) => ({
44
- [HttpAgentTypeId]: HttpAgentTypeId,
45
- http,
46
- https
47
- })
48
- )
49
-
50
- /** @internal */
51
- export const makeAgentLayer = (options?: Https.AgentOptions): Layer.Layer<NodeClient.HttpAgent> =>
52
- Layer.scoped(HttpAgent, makeAgent(options))
53
-
54
- /** @internal */
55
- export const agentLayer = makeAgentLayer()
56
-
57
- const fromAgent = (agent: NodeClient.HttpAgent): Client.HttpClient =>
58
- Client.make((request, url, signal) => {
59
- const nodeRequest = url.protocol === "https:" ?
60
- Https.request(url, {
61
- agent: agent.https,
62
- method: request.method,
63
- headers: request.headers,
64
- signal
65
- }) :
66
- Http.request(url, {
67
- agent: agent.http,
68
- method: request.method,
69
- headers: request.headers,
70
- signal
71
- })
72
- return pipe(
73
- Effect.zipRight(sendBody(nodeRequest, request, request.body), waitForResponse(nodeRequest, request), {
74
- concurrent: true
75
- }),
76
- Effect.map((_) => new ClientResponseImpl(request, _))
77
- )
78
- })
79
-
80
- const sendBody = (
81
- nodeRequest: Http.ClientRequest,
82
- request: ClientRequest.HttpClientRequest,
83
- body: Body.HttpBody
84
- ): Effect.Effect<void, Error.RequestError> =>
85
- Effect.suspend((): Effect.Effect<void, Error.RequestError> => {
86
- switch (body._tag) {
87
- case "Empty": {
88
- nodeRequest.end()
89
- return waitForFinish(nodeRequest, request)
90
- }
91
- case "Uint8Array":
92
- case "Raw": {
93
- nodeRequest.end(body.body)
94
- return waitForFinish(nodeRequest, request)
95
- }
96
- case "FormData": {
97
- const response = new Response(body.formData)
98
-
99
- response.headers.forEach((value, key) => {
100
- nodeRequest.setHeader(key, value)
101
- })
102
-
103
- return Effect.tryPromise({
104
- try: () => pipeline(Readable.fromWeb(response.body! as any), nodeRequest),
105
- catch: (cause) =>
106
- new Error.RequestError({
107
- request,
108
- reason: "Transport",
109
- cause
110
- })
111
- })
112
- }
113
- case "Stream": {
114
- return Stream.run(
115
- Stream.mapError(body.stream, (cause) =>
116
- new Error.RequestError({
117
- request,
118
- reason: "Encode",
119
- cause
120
- })),
121
- NodeSink.fromWritable(() => nodeRequest, (cause) =>
122
- new Error.RequestError({
123
- request,
124
- reason: "Transport",
125
- cause
126
- }))
127
- )
128
- }
129
- }
130
- })
131
-
132
- const waitForResponse = (nodeRequest: Http.ClientRequest, request: ClientRequest.HttpClientRequest) =>
133
- Effect.async<Http.IncomingMessage, Error.RequestError>((resume) => {
134
- function onError(cause: Error) {
135
- resume(Effect.fail(
136
- new Error.RequestError({
137
- request,
138
- reason: "Transport",
139
- cause
140
- })
141
- ))
142
- }
143
- nodeRequest.on("error", onError)
144
-
145
- function onResponse(response: Http.IncomingMessage) {
146
- nodeRequest.off("error", onError)
147
- resume(Effect.succeed(response))
148
- }
149
- nodeRequest.on("upgrade", onResponse)
150
- nodeRequest.on("response", onResponse)
151
-
152
- return Effect.sync(() => {
153
- nodeRequest.off("error", onError)
154
- nodeRequest.off("upgrade", onResponse)
155
- nodeRequest.off("response", onResponse)
156
- })
157
- })
158
-
159
- const waitForFinish = (nodeRequest: Http.ClientRequest, request: ClientRequest.HttpClientRequest) =>
160
- Effect.async<void, Error.RequestError>((resume) => {
161
- function onError(cause: Error) {
162
- resume(Effect.fail(
163
- new Error.RequestError({
164
- request,
165
- reason: "Transport",
166
- cause
167
- })
168
- ))
169
- }
170
- nodeRequest.once("error", onError)
171
-
172
- function onFinish() {
173
- nodeRequest.off("error", onError)
174
- resume(Effect.void)
175
- }
176
- nodeRequest.once("finish", onFinish)
177
-
178
- return Effect.sync(() => {
179
- nodeRequest.off("error", onError)
180
- nodeRequest.off("finish", onFinish)
181
- })
182
- })
183
-
184
- class ClientResponseImpl extends HttpIncomingMessageImpl<Error.ResponseError>
185
- implements ClientResponse.HttpClientResponse
186
- {
187
- readonly [ClientResponse.TypeId]: ClientResponse.TypeId
188
-
189
- constructor(
190
- readonly request: ClientRequest.HttpClientRequest,
191
- source: Http.IncomingMessage
192
- ) {
193
- super(source, (cause) =>
194
- new Error.ResponseError({
195
- request,
196
- response: this,
197
- reason: "Decode",
198
- cause
199
- }))
200
- this[ClientResponse.TypeId] = ClientResponse.TypeId
201
- }
202
-
203
- get status() {
204
- return this.source.statusCode!
205
- }
206
-
207
- cachedCookies?: Cookies.Cookies
208
- get cookies(): Cookies.Cookies {
209
- if (this.cachedCookies !== undefined) {
210
- return this.cachedCookies
211
- }
212
- const header = this.source.headers["set-cookie"]
213
- if (Array.isArray(header)) {
214
- return this.cachedCookies = Cookies.fromSetCookie(header)
215
- }
216
- return this.cachedCookies = Cookies.empty
217
- }
218
-
219
- get formData(): Effect.Effect<FormData, Error.ResponseError> {
220
- return Effect.tryPromise({
221
- try: () => {
222
- const init: {
223
- headers: HeadersInit
224
- status?: number
225
- statusText?: string
226
- } = {
227
- headers: new globalThis.Headers(this.source.headers as any)
228
- }
229
-
230
- if (this.source.statusCode) {
231
- init.status = this.source.statusCode
232
- }
233
-
234
- if (this.source.statusMessage) {
235
- init.statusText = this.source.statusMessage
236
- }
237
-
238
- return new Response(Readable.toWeb(this.source) as any, init).formData()
239
- },
240
- catch: this.onError
241
- })
242
- }
243
-
244
- toJSON(): unknown {
245
- return IncomingMessage.inspect(this, {
246
- _id: "@effect/platform/HttpClientResponse",
247
- request: this.request.toJSON(),
248
- status: this.status
249
- })
250
- }
251
- }
252
-
253
- /** @internal */
254
- export const make = Effect.map(HttpAgent, fromAgent)
255
-
256
- /** @internal */
257
- export const layerWithoutAgent = Client.layerMergedContext(make)
258
-
259
- /** @internal */
260
- export const layer = Layer.provide(layerWithoutAgent, agentLayer)
@@ -1,231 +0,0 @@
1
- import * as Cookies from "@effect/platform/Cookies"
2
- import * as Headers from "@effect/platform/Headers"
3
- import type * as Body from "@effect/platform/HttpBody"
4
- import * as Client from "@effect/platform/HttpClient"
5
- import * as Error from "@effect/platform/HttpClientError"
6
- import type * as ClientRequest from "@effect/platform/HttpClientRequest"
7
- import * as ClientResponse from "@effect/platform/HttpClientResponse"
8
- import * as IncomingMessage from "@effect/platform/HttpIncomingMessage"
9
- import * as UrlParams from "@effect/platform/UrlParams"
10
- import * as Context from "effect/Context"
11
- import * as Effect from "effect/Effect"
12
- import * as FiberRef from "effect/FiberRef"
13
- import * as Inspectable from "effect/Inspectable"
14
- import * as Layer from "effect/Layer"
15
- import * as Option from "effect/Option"
16
- import type * as Scope from "effect/Scope"
17
- import type * as Stream from "effect/Stream"
18
- import type * as NodeClient from "../NodeHttpClient.js"
19
- import * as NodeStream from "../NodeStream.js"
20
- import * as Undici from "../Undici.js"
21
-
22
- /** @internal */
23
- export const Dispatcher = Context.GenericTag<NodeClient.Dispatcher, Undici.Dispatcher>(
24
- "@effect/platform-node/NodeHttpClient/Dispatcher"
25
- )
26
-
27
- /** @internal */
28
- export const makeDispatcher: Effect.Effect<Undici.Dispatcher, never, Scope.Scope> = Effect.acquireRelease(
29
- Effect.sync(() => new Undici.Agent()),
30
- (dispatcher) => Effect.promise(() => dispatcher.destroy())
31
- )
32
-
33
- /** @internal */
34
- export const dispatcherLayer = Layer.scoped(Dispatcher, makeDispatcher)
35
-
36
- /** @internal */
37
- export const dispatcherLayerGlobal = Layer.sync(Dispatcher, () => Undici.getGlobalDispatcher())
38
-
39
- /** @internal */
40
- export const undiciOptionsTagKey = "@effect/platform-node/NodeHttpClient/undiciOptions"
41
-
42
- /** @internal */
43
- export const make = (dispatcher: Undici.Dispatcher): Client.HttpClient =>
44
- Client.make((request, url, signal, fiber) => {
45
- const context = fiber.getFiberRef(FiberRef.currentContext)
46
- const options: Undici.Dispatcher.RequestOptions = context.unsafeMap.get(undiciOptionsTagKey) ?? {}
47
- return convertBody(request.body).pipe(
48
- Effect.flatMap((body) =>
49
- Effect.tryPromise({
50
- try: () =>
51
- dispatcher.request({
52
- ...options,
53
- signal,
54
- method: request.method,
55
- headers: request.headers,
56
- origin: url.origin,
57
- path: url.pathname + url.search + url.hash,
58
- body,
59
- // leave timeouts to Effect.timeout etc
60
- headersTimeout: 60 * 60 * 1000,
61
- bodyTimeout: 0
62
- }),
63
- catch: (cause) =>
64
- new Error.RequestError({
65
- request,
66
- reason: "Transport",
67
- cause
68
- })
69
- })
70
- ),
71
- Effect.map((response) => new ClientResponseImpl(request, response))
72
- )
73
- })
74
-
75
- function convertBody(
76
- body: Body.HttpBody
77
- ): Effect.Effect<Exclude<Undici.Dispatcher.DispatchOptions["body"], undefined>> {
78
- switch (body._tag) {
79
- case "Empty": {
80
- return Effect.succeed(null)
81
- }
82
- case "Uint8Array":
83
- case "Raw": {
84
- return Effect.succeed(body.body as Uint8Array)
85
- }
86
- case "FormData": {
87
- return Effect.succeed(body.formData as Undici.FormData)
88
- }
89
- case "Stream": {
90
- return NodeStream.toReadable(body.stream)
91
- }
92
- }
93
- }
94
-
95
- function noopErrorHandler(_: any) {}
96
-
97
- class ClientResponseImpl extends Inspectable.Class implements ClientResponse.HttpClientResponse {
98
- readonly [IncomingMessage.TypeId]: IncomingMessage.TypeId
99
- readonly [ClientResponse.TypeId]: ClientResponse.TypeId
100
-
101
- constructor(
102
- readonly request: ClientRequest.HttpClientRequest,
103
- readonly source: Undici.Dispatcher.ResponseData
104
- ) {
105
- super()
106
- this[IncomingMessage.TypeId] = IncomingMessage.TypeId
107
- this[ClientResponse.TypeId] = ClientResponse.TypeId
108
- source.body.on("error", noopErrorHandler)
109
- }
110
-
111
- get status() {
112
- return this.source.statusCode!
113
- }
114
-
115
- get statusText() {
116
- return undefined
117
- }
118
-
119
- cachedCookies?: Cookies.Cookies
120
- get cookies(): Cookies.Cookies {
121
- if (this.cachedCookies !== undefined) {
122
- return this.cachedCookies
123
- }
124
- const header = this.source.headers["set-cookie"]
125
- if (header !== undefined) {
126
- return this.cachedCookies = Cookies.fromSetCookie(Array.isArray(header) ? header : [header])
127
- }
128
- return this.cachedCookies = Cookies.empty
129
- }
130
-
131
- get headers(): Headers.Headers {
132
- return Headers.fromInput(this.source.headers)
133
- }
134
-
135
- get remoteAddress(): Option.Option<string> {
136
- return Option.none()
137
- }
138
-
139
- get stream(): Stream.Stream<Uint8Array, Error.ResponseError> {
140
- return NodeStream.fromReadable(() => this.source.body, (cause) =>
141
- new Error.ResponseError({
142
- request: this.request,
143
- response: this,
144
- reason: "Decode",
145
- cause
146
- }))
147
- }
148
-
149
- get json(): Effect.Effect<unknown, Error.ResponseError> {
150
- return Effect.tryMap(this.text, {
151
- try: (text) => text === "" ? null : JSON.parse(text) as unknown,
152
- catch: (cause) =>
153
- new Error.ResponseError({
154
- request: this.request,
155
- response: this,
156
- reason: "Decode",
157
- cause
158
- })
159
- })
160
- }
161
-
162
- private textBody?: Effect.Effect<string, Error.ResponseError>
163
- get text(): Effect.Effect<string, Error.ResponseError> {
164
- return this.textBody ??= Effect.tryPromise({
165
- try: () => this.source.body.text(),
166
- catch: (cause) =>
167
- new Error.ResponseError({
168
- request: this.request,
169
- response: this,
170
- reason: "Decode",
171
- cause
172
- })
173
- }).pipe(Effect.cached, Effect.runSync)
174
- }
175
-
176
- get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, Error.ResponseError> {
177
- return Effect.flatMap(this.text, (_) =>
178
- Effect.try({
179
- try: () => UrlParams.fromInput(new URLSearchParams(_)),
180
- catch: (cause) =>
181
- new Error.ResponseError({
182
- request: this.request,
183
- response: this,
184
- reason: "Decode",
185
- cause
186
- })
187
- }))
188
- }
189
-
190
- private formDataBody?: Effect.Effect<FormData, Error.ResponseError>
191
- get formData(): Effect.Effect<FormData, Error.ResponseError> {
192
- return this.formDataBody ??= Effect.tryPromise({
193
- try: () => this.source.body.formData() as Promise<FormData>,
194
- catch: (cause) =>
195
- new Error.ResponseError({
196
- request: this.request,
197
- response: this,
198
- reason: "Decode",
199
- cause
200
- })
201
- }).pipe(Effect.cached, Effect.runSync)
202
- }
203
-
204
- private arrayBufferBody?: Effect.Effect<ArrayBuffer, Error.ResponseError>
205
- get arrayBuffer(): Effect.Effect<ArrayBuffer, Error.ResponseError> {
206
- return this.arrayBufferBody ??= Effect.tryPromise({
207
- try: () => this.source.body.arrayBuffer(),
208
- catch: (cause) =>
209
- new Error.ResponseError({
210
- request: this.request,
211
- response: this,
212
- reason: "Decode",
213
- cause
214
- })
215
- }).pipe(Effect.cached, Effect.runSync)
216
- }
217
-
218
- toJSON(): unknown {
219
- return IncomingMessage.inspect(this, {
220
- _id: "@effect/platform/HttpClientResponse",
221
- request: this.request.toJSON(),
222
- status: this.status
223
- })
224
- }
225
- }
226
-
227
- /** @internal */
228
- export const layerWithoutDispatcher = Client.layerMergedContext(Effect.map(Dispatcher, make))
229
-
230
- /** @internal */
231
- export const layer = Layer.provide(layerWithoutDispatcher, dispatcherLayer)
@@ -1,92 +0,0 @@
1
- import * as Headers from "@effect/platform/Headers"
2
- import * as IncomingMessage from "@effect/platform/HttpIncomingMessage"
3
- import * as UrlParams from "@effect/platform/UrlParams"
4
- import * as Effect from "effect/Effect"
5
- import * as Inspectable from "effect/Inspectable"
6
- import * as Option from "effect/Option"
7
- import type * as Stream from "effect/Stream"
8
- import type * as Http from "node:http"
9
- import * as NodeStream from "../NodeStream.js"
10
-
11
- /** @internal */
12
- export abstract class HttpIncomingMessageImpl<E> extends Inspectable.Class
13
- implements IncomingMessage.HttpIncomingMessage<E>
14
- {
15
- readonly [IncomingMessage.TypeId]: IncomingMessage.TypeId
16
-
17
- constructor(
18
- readonly source: Http.IncomingMessage,
19
- readonly onError: (error: unknown) => E,
20
- readonly remoteAddressOverride?: string
21
- ) {
22
- super()
23
- this[IncomingMessage.TypeId] = IncomingMessage.TypeId
24
- }
25
-
26
- get headers() {
27
- return Headers.fromInput(this.source.headers as any)
28
- }
29
-
30
- get remoteAddress() {
31
- return Option.fromNullable(this.remoteAddressOverride ?? this.source.socket.remoteAddress)
32
- }
33
-
34
- private textEffect: Effect.Effect<string, E> | undefined
35
- get text(): Effect.Effect<string, E> {
36
- if (this.textEffect) {
37
- return this.textEffect
38
- }
39
- this.textEffect = Effect.runSync(Effect.cached(
40
- Effect.flatMap(
41
- IncomingMessage.MaxBodySize,
42
- (maxBodySize) =>
43
- NodeStream.toString(() => this.source, {
44
- onFailure: this.onError,
45
- maxBytes: Option.getOrUndefined(maxBodySize)
46
- })
47
- )
48
- ))
49
- return this.textEffect
50
- }
51
-
52
- get unsafeText(): string {
53
- return Effect.runSync(this.text)
54
- }
55
-
56
- get json(): Effect.Effect<unknown, E> {
57
- return Effect.tryMap(this.text, {
58
- try: (_) => _ === "" ? null : JSON.parse(_) as unknown,
59
- catch: this.onError
60
- })
61
- }
62
-
63
- get unsafeJson(): unknown {
64
- return Effect.runSync(this.json)
65
- }
66
-
67
- get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, E> {
68
- return Effect.flatMap(this.text, (_) =>
69
- Effect.try({
70
- try: () => UrlParams.fromInput(new URLSearchParams(_)),
71
- catch: this.onError
72
- }))
73
- }
74
-
75
- get stream(): Stream.Stream<Uint8Array, E> {
76
- return NodeStream.fromReadable<E, Uint8Array>(
77
- () => this.source,
78
- this.onError
79
- )
80
- }
81
-
82
- get arrayBuffer(): Effect.Effect<ArrayBuffer, E> {
83
- return Effect.flatMap(
84
- IncomingMessage.MaxBodySize,
85
- (maxBodySize) =>
86
- NodeStream.toUint8Array(() => this.source, {
87
- onFailure: this.onError,
88
- maxBytes: Option.getOrUndefined(maxBodySize)
89
- })
90
- )
91
- }
92
- }
@@ -1,46 +0,0 @@
1
- import * as EtagImpl from "@effect/platform/Etag"
2
- import * as Headers from "@effect/platform/Headers"
3
- import * as Platform from "@effect/platform/HttpPlatform"
4
- import * as ServerResponse from "@effect/platform/HttpServerResponse"
5
- import { pipe } from "effect/Function"
6
- import * as Layer from "effect/Layer"
7
- import Mime from "mime"
8
- import * as Fs from "node:fs"
9
- import { Readable } from "node:stream"
10
- import * as FileSystem from "../NodeFileSystem.js"
11
-
12
- /** @internal */
13
- export const make = Platform.make({
14
- fileResponse(path, status, statusText, headers, start, end, contentLength) {
15
- const stream = Fs.createReadStream(path, { start, end })
16
- return ServerResponse.raw(stream, {
17
- headers: {
18
- ...headers,
19
- "content-type": headers["content-type"] ?? Mime.getType(path) ?? "application/octet-stream",
20
- "content-length": contentLength.toString()
21
- },
22
- status,
23
- statusText
24
- })
25
- },
26
- fileWebResponse(file, status, statusText, headers, _options) {
27
- return ServerResponse.raw(Readable.fromWeb(file.stream() as any), {
28
- headers: Headers.merge(
29
- headers,
30
- Headers.unsafeFromRecord({
31
- "content-type": headers["content-type"] ?? Mime.getType(file.name) ?? "application/octet-stream",
32
- "content-length": file.size.toString()
33
- })
34
- ),
35
- status,
36
- statusText
37
- })
38
- }
39
- })
40
-
41
- /** @internal */
42
- export const layer = pipe(
43
- Layer.effect(Platform.HttpPlatform, make),
44
- Layer.provide(FileSystem.layer),
45
- Layer.provide(EtagImpl.layer)
46
- )