@effect/platform-node 4.0.0-beta.7 → 4.0.0-beta.71

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 (123) hide show
  1. package/dist/Mime.d.ts +9 -3
  2. package/dist/Mime.d.ts.map +1 -1
  3. package/dist/Mime.js +9 -3
  4. package/dist/Mime.js.map +1 -1
  5. package/dist/NodeChildProcessSpawner.d.ts +1 -1
  6. package/dist/NodeChildProcessSpawner.js +1 -1
  7. package/dist/NodeClusterHttp.d.ts +49 -7
  8. package/dist/NodeClusterHttp.d.ts.map +1 -1
  9. package/dist/NodeClusterHttp.js +20 -10
  10. package/dist/NodeClusterHttp.js.map +1 -1
  11. package/dist/NodeClusterSocket.d.ts +57 -11
  12. package/dist/NodeClusterSocket.d.ts.map +1 -1
  13. package/dist/NodeClusterSocket.js +57 -11
  14. package/dist/NodeClusterSocket.js.map +1 -1
  15. package/dist/NodeCrypto.d.ts +10 -0
  16. package/dist/NodeCrypto.d.ts.map +1 -0
  17. package/dist/NodeCrypto.js +22 -0
  18. package/dist/NodeCrypto.js.map +1 -0
  19. package/dist/NodeFileSystem.d.ts +4 -2
  20. package/dist/NodeFileSystem.d.ts.map +1 -1
  21. package/dist/NodeFileSystem.js +30 -3
  22. package/dist/NodeFileSystem.js.map +1 -1
  23. package/dist/NodeHttpClient.d.ts +111 -24
  24. package/dist/NodeHttpClient.d.ts.map +1 -1
  25. package/dist/NodeHttpClient.js +133 -28
  26. package/dist/NodeHttpClient.js.map +1 -1
  27. package/dist/NodeHttpIncomingMessage.d.ts +43 -9
  28. package/dist/NodeHttpIncomingMessage.d.ts.map +1 -1
  29. package/dist/NodeHttpIncomingMessage.js +47 -8
  30. package/dist/NodeHttpIncomingMessage.js.map +1 -1
  31. package/dist/NodeHttpPlatform.d.ts +10 -4
  32. package/dist/NodeHttpPlatform.d.ts.map +1 -1
  33. package/dist/NodeHttpPlatform.js +34 -7
  34. package/dist/NodeHttpPlatform.js.map +1 -1
  35. package/dist/NodeHttpServer.d.ts +56 -16
  36. package/dist/NodeHttpServer.d.ts.map +1 -1
  37. package/dist/NodeHttpServer.js +117 -49
  38. package/dist/NodeHttpServer.js.map +1 -1
  39. package/dist/NodeHttpServerRequest.d.ts +29 -3
  40. package/dist/NodeHttpServerRequest.d.ts.map +1 -1
  41. package/dist/NodeHttpServerRequest.js +9 -2
  42. package/dist/NodeHttpServerRequest.js.map +1 -1
  43. package/dist/NodeMultipart.d.ts +47 -4
  44. package/dist/NodeMultipart.d.ts.map +1 -1
  45. package/dist/NodeMultipart.js +47 -4
  46. package/dist/NodeMultipart.js.map +1 -1
  47. package/dist/NodePath.d.ts +15 -6
  48. package/dist/NodePath.d.ts.map +1 -1
  49. package/dist/NodePath.js +43 -7
  50. package/dist/NodePath.js.map +1 -1
  51. package/dist/NodeRedis.d.ts +56 -9
  52. package/dist/NodeRedis.d.ts.map +1 -1
  53. package/dist/NodeRedis.js +59 -12
  54. package/dist/NodeRedis.js.map +1 -1
  55. package/dist/NodeRuntime.d.ts +27 -36
  56. package/dist/NodeRuntime.d.ts.map +1 -1
  57. package/dist/NodeRuntime.js +38 -13
  58. package/dist/NodeRuntime.js.map +1 -1
  59. package/dist/NodeServices.d.ts +44 -5
  60. package/dist/NodeServices.d.ts.map +1 -1
  61. package/dist/NodeServices.js +7 -3
  62. package/dist/NodeServices.js.map +1 -1
  63. package/dist/NodeSink.d.ts +2 -2
  64. package/dist/NodeSink.js +2 -2
  65. package/dist/NodeSocket.d.ts +18 -3
  66. package/dist/NodeSocket.d.ts.map +1 -1
  67. package/dist/NodeSocket.js +51 -4
  68. package/dist/NodeSocket.js.map +1 -1
  69. package/dist/NodeSocketServer.d.ts +2 -2
  70. package/dist/NodeSocketServer.js +2 -2
  71. package/dist/NodeStdio.d.ts +5 -2
  72. package/dist/NodeStdio.d.ts.map +1 -1
  73. package/dist/NodeStdio.js +30 -3
  74. package/dist/NodeStdio.js.map +1 -1
  75. package/dist/NodeStream.d.ts +2 -2
  76. package/dist/NodeStream.js +2 -2
  77. package/dist/NodeTerminal.d.ts +8 -2
  78. package/dist/NodeTerminal.d.ts.map +1 -1
  79. package/dist/NodeTerminal.js +29 -3
  80. package/dist/NodeTerminal.js.map +1 -1
  81. package/dist/NodeWorker.d.ts +9 -2
  82. package/dist/NodeWorker.d.ts.map +1 -1
  83. package/dist/NodeWorker.js +45 -6
  84. package/dist/NodeWorker.js.map +1 -1
  85. package/dist/NodeWorkerRunner.d.ts +5 -1
  86. package/dist/NodeWorkerRunner.d.ts.map +1 -1
  87. package/dist/NodeWorkerRunner.js +47 -5
  88. package/dist/NodeWorkerRunner.js.map +1 -1
  89. package/dist/Undici.d.ts +16 -3
  90. package/dist/Undici.d.ts.map +1 -1
  91. package/dist/Undici.js +16 -3
  92. package/dist/Undici.js.map +1 -1
  93. package/dist/index.d.ts +28 -26
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +28 -26
  96. package/dist/index.js.map +1 -1
  97. package/package.json +9 -9
  98. package/src/Mime.ts +10 -3
  99. package/src/NodeChildProcessSpawner.ts +1 -1
  100. package/src/NodeClusterHttp.ts +54 -11
  101. package/src/NodeClusterSocket.ts +57 -11
  102. package/src/NodeCrypto.ts +24 -0
  103. package/src/NodeFileSystem.ts +30 -3
  104. package/src/NodeHttpClient.ts +141 -33
  105. package/src/NodeHttpIncomingMessage.ts +55 -12
  106. package/src/NodeHttpPlatform.ts +35 -6
  107. package/src/NodeHttpServer.ts +139 -53
  108. package/src/NodeHttpServerRequest.ts +29 -3
  109. package/src/NodeMultipart.ts +47 -4
  110. package/src/NodePath.ts +43 -7
  111. package/src/NodeRedis.ts +61 -14
  112. package/src/NodeRuntime.ts +56 -37
  113. package/src/NodeServices.ts +46 -5
  114. package/src/NodeSink.ts +2 -2
  115. package/src/NodeSocket.ts +56 -4
  116. package/src/NodeSocketServer.ts +2 -2
  117. package/src/NodeStdio.ts +30 -3
  118. package/src/NodeStream.ts +2 -2
  119. package/src/NodeTerminal.ts +29 -3
  120. package/src/NodeWorker.ts +45 -6
  121. package/src/NodeWorkerRunner.ts +47 -5
  122. package/src/Undici.ts +16 -3
  123. package/src/index.ts +29 -26
@@ -1,35 +1,69 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Adapter base for exposing Node `http.IncomingMessage` values as Effect HTTP
3
+ * incoming messages.
4
+ *
5
+ * Server requests and Node client responses both arrive as Node readable
6
+ * streams with raw header objects, socket metadata, and one-shot body
7
+ * consumption. This module's `NodeHttpIncomingMessage` class keeps the original
8
+ * Node message available while presenting Effect's `HttpIncomingMessage` shape:
9
+ * typed headers, remote address lookup, stream access, and text, JSON,
10
+ * URL-encoded, and array-buffer body readers.
11
+ *
12
+ * **Mental model**
13
+ *
14
+ * The Node message remains the source of truth. The adapter translates headers
15
+ * and remote address on demand, delegates raw streaming to `NodeStream`, and
16
+ * lets subclasses choose how unknown Node errors are mapped into their HTTP
17
+ * error type.
18
+ *
19
+ * **Gotchas**
20
+ *
21
+ * Node request and response bodies are one-shot streams. The `text` and
22
+ * `arrayBuffer` readers are cached and share decoded values with each other,
23
+ * but direct `stream` access is not cached and can consume the underlying Node
24
+ * stream before a decoder reads it. Body readers honor
25
+ * `HttpIncomingMessage.MaxBodySize`.
26
+ *
27
+ * @since 4.0.0
3
28
  */
4
29
  import * as Effect from "effect/Effect";
5
30
  import * as Inspectable from "effect/Inspectable";
31
+ import * as Option from "effect/Option";
32
+ import type * as Schema from "effect/Schema";
6
33
  import type * as Stream from "effect/Stream";
7
34
  import * as Headers from "effect/unstable/http/Headers";
8
35
  import * as IncomingMessage from "effect/unstable/http/HttpIncomingMessage";
9
36
  import * as UrlParams from "effect/unstable/http/UrlParams";
10
37
  import type * as Http from "node:http";
11
38
  /**
12
- * @since 1.0.0
13
- * @category Constructors
39
+ * Base adapter from Node `IncomingMessage` to Effect HTTP incoming messages,
40
+ * exposing headers, remote address, stream access, and cached text, JSON, URL
41
+ * parameter, and array-buffer body decoders with caller-provided error mapping.
42
+ *
43
+ * @category constructors
44
+ * @since 4.0.0
14
45
  */
15
46
  export declare abstract class NodeHttpIncomingMessage<E> extends Inspectable.Class implements IncomingMessage.HttpIncomingMessage<E> {
16
47
  /**
17
- * @since 1.0.0
48
+ * Marks this value as an HTTP incoming message for runtime guards.
49
+ *
50
+ * @since 4.0.0
18
51
  */
19
52
  readonly [IncomingMessage.TypeId]: typeof IncomingMessage.TypeId;
20
53
  readonly source: Http.IncomingMessage;
21
54
  readonly onError: (error: unknown) => E;
22
- readonly remoteAddressOverride?: string | undefined;
23
- constructor(source: Http.IncomingMessage, onError: (error: unknown) => E, remoteAddressOverride?: string);
55
+ readonly remoteAddressOverride?: Option.Option<string> | undefined;
56
+ constructor(source: Http.IncomingMessage, onError: (error: unknown) => E, remoteAddressOverride?: Option.Option<string>);
24
57
  get headers(): Headers.Headers;
25
- get remoteAddress(): string | undefined;
58
+ get remoteAddress(): Option.Option<string>;
26
59
  private textEffect;
27
60
  get text(): Effect.Effect<string, E>;
28
61
  get textUnsafe(): string;
29
- get json(): Effect.Effect<unknown, E>;
30
- get jsonUnsafe(): unknown;
62
+ get json(): Effect.Effect<Schema.Json, E>;
63
+ get jsonUnsafe(): Schema.Json;
31
64
  get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, E>;
32
65
  get stream(): Stream.Stream<Uint8Array, E>;
66
+ private arrayBufferEffect;
33
67
  get arrayBuffer(): Effect.Effect<ArrayBuffer, E>;
34
68
  }
35
69
  //# sourceMappingURL=NodeHttpIncomingMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeHttpIncomingMessage.d.ts","sourceRoot":"","sources":["../src/NodeHttpIncomingMessage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAA;AACvD,OAAO,KAAK,eAAe,MAAM,0CAA0C,CAAA;AAC3E,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAA;AAC3D,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAA;AAGtC;;;GAGG;AACH,8BAAsB,uBAAuB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,KACnE,YAAW,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEjD;;OAEG;IACH,QAAQ,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,eAAe,CAAC,MAAM,CAAA;IAChE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,CAAA;IACvC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;gBAGjD,MAAM,EAAE,IAAI,CAAC,eAAe,EAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,EAC9B,qBAAqB,CAAC,EAAE,MAAM;IAShC,IAAI,OAAO,oBAEV;IAED,IAAI,aAAa,uBAEhB;IAED,OAAO,CAAC,UAAU,CAAsC;IACxD,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAenC;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAMpC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAMzD;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAKzC;IAED,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAO/C;CACF"}
1
+ {"version":3,"file":"NodeHttpIncomingMessage.d.ts","sourceRoot":"","sources":["../src/NodeHttpIncomingMessage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAA;AACvD,OAAO,KAAK,eAAe,MAAM,0CAA0C,CAAA;AAC3E,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAA;AAC3D,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAA;AAGtC;;;;;;;GAOG;AACH,8BAAsB,uBAAuB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,KACnE,YAAW,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEjD;;;;OAIG;IACH,QAAQ,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,eAAe,CAAC,MAAM,CAAA;IAChE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,CAAA;IACvC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;gBAGhE,MAAM,EAAE,IAAI,CAAC,eAAe,EAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,EAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAS/C,IAAI,OAAO,oBAEV;IAED,IAAI,aAAa,0BAEhB;IAED,OAAO,CAAC,UAAU,CAAsC;IACxD,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAgBnC;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAMxC;IAED,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAE5B;IAED,IAAI,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAMzD;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAKzC;IAED,OAAO,CAAC,iBAAiB,CAA2C;IACpE,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAe/C;CACF"}
@@ -1,19 +1,51 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Adapter base for exposing Node `http.IncomingMessage` values as Effect HTTP
3
+ * incoming messages.
4
+ *
5
+ * Server requests and Node client responses both arrive as Node readable
6
+ * streams with raw header objects, socket metadata, and one-shot body
7
+ * consumption. This module's `NodeHttpIncomingMessage` class keeps the original
8
+ * Node message available while presenting Effect's `HttpIncomingMessage` shape:
9
+ * typed headers, remote address lookup, stream access, and text, JSON,
10
+ * URL-encoded, and array-buffer body readers.
11
+ *
12
+ * **Mental model**
13
+ *
14
+ * The Node message remains the source of truth. The adapter translates headers
15
+ * and remote address on demand, delegates raw streaming to `NodeStream`, and
16
+ * lets subclasses choose how unknown Node errors are mapped into their HTTP
17
+ * error type.
18
+ *
19
+ * **Gotchas**
20
+ *
21
+ * Node request and response bodies are one-shot streams. The `text` and
22
+ * `arrayBuffer` readers are cached and share decoded values with each other,
23
+ * but direct `stream` access is not cached and can consume the underlying Node
24
+ * stream before a decoder reads it. Body readers honor
25
+ * `HttpIncomingMessage.MaxBodySize`.
26
+ *
27
+ * @since 4.0.0
3
28
  */
4
29
  import * as Effect from "effect/Effect";
5
30
  import * as Inspectable from "effect/Inspectable";
31
+ import * as Option from "effect/Option";
6
32
  import * as Headers from "effect/unstable/http/Headers";
7
33
  import * as IncomingMessage from "effect/unstable/http/HttpIncomingMessage";
8
34
  import * as UrlParams from "effect/unstable/http/UrlParams";
9
35
  import * as NodeStream from "./NodeStream.js";
10
36
  /**
11
- * @since 1.0.0
12
- * @category Constructors
37
+ * Base adapter from Node `IncomingMessage` to Effect HTTP incoming messages,
38
+ * exposing headers, remote address, stream access, and cached text, JSON, URL
39
+ * parameter, and array-buffer body decoders with caller-provided error mapping.
40
+ *
41
+ * @category constructors
42
+ * @since 4.0.0
13
43
  */
14
44
  export class NodeHttpIncomingMessage extends Inspectable.Class {
15
45
  /**
16
- * @since 1.0.0
46
+ * Marks this value as an HTTP incoming message for runtime guards.
47
+ *
48
+ * @since 4.0.0
17
49
  */
18
50
  [IncomingMessage.TypeId];
19
51
  source;
@@ -30,17 +62,18 @@ export class NodeHttpIncomingMessage extends Inspectable.Class {
30
62
  return Headers.fromInput(this.source.headers);
31
63
  }
32
64
  get remoteAddress() {
33
- return this.remoteAddressOverride ?? this.source.socket.remoteAddress;
65
+ return this.remoteAddressOverride ?? Option.fromNullishOr(this.source.socket.remoteAddress);
34
66
  }
35
67
  textEffect;
36
68
  get text() {
37
69
  if (this.textEffect) {
38
70
  return this.textEffect;
39
71
  }
40
- this.textEffect = Effect.runSync(Effect.cached(Effect.flatMap(IncomingMessage.MaxBodySize.asEffect(), maxBodySize => NodeStream.toString(() => this.source, {
72
+ this.textEffect = Effect.runSync(Effect.cached(Effect.flatMap(IncomingMessage.MaxBodySize, maxBodySize => NodeStream.toString(() => this.source, {
41
73
  onError: this.onError,
42
74
  maxBytes: maxBodySize
43
75
  }))));
76
+ this.arrayBufferEffect = Effect.map(this.textEffect, _ => new TextEncoder().encode(_).buffer);
44
77
  return this.textEffect;
45
78
  }
46
79
  get textUnsafe() {
@@ -67,11 +100,17 @@ export class NodeHttpIncomingMessage extends Inspectable.Class {
67
100
  onError: this.onError
68
101
  });
69
102
  }
103
+ arrayBufferEffect;
70
104
  get arrayBuffer() {
71
- return Effect.withFiber(fiber => NodeStream.toArrayBuffer(() => this.source, {
105
+ if (this.arrayBufferEffect) {
106
+ return this.arrayBufferEffect;
107
+ }
108
+ this.arrayBufferEffect = Effect.withFiber(fiber => NodeStream.toArrayBuffer(() => this.source, {
72
109
  onError: this.onError,
73
110
  maxBytes: fiber.getRef(IncomingMessage.MaxBodySize)
74
- }));
111
+ })).pipe(Effect.cached, Effect.runSync);
112
+ this.textEffect = Effect.map(this.arrayBufferEffect, _ => new TextDecoder().decode(_));
113
+ return this.arrayBufferEffect;
75
114
  }
76
115
  }
77
116
  //# sourceMappingURL=NodeHttpIncomingMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeHttpIncomingMessage.js","names":["Effect","Inspectable","Headers","IncomingMessage","UrlParams","NodeStream","NodeHttpIncomingMessage","Class","TypeId","source","onError","remoteAddressOverride","constructor","headers","fromInput","remoteAddress","socket","textEffect","text","runSync","cached","flatMap","MaxBodySize","asEffect","maxBodySize","toString","maxBytes","textUnsafe","json","try","JSON","parse","catch","jsonUnsafe","urlParamsBody","_","URLSearchParams","stream","fromReadable","evaluate","arrayBuffer","withFiber","fiber","toArrayBuffer","getRef"],"sources":["../src/NodeHttpIncomingMessage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"NodeHttpIncomingMessage.js","names":["Effect","Inspectable","Option","Headers","IncomingMessage","UrlParams","NodeStream","NodeHttpIncomingMessage","Class","TypeId","source","onError","remoteAddressOverride","constructor","headers","fromInput","remoteAddress","fromNullishOr","socket","textEffect","text","runSync","cached","flatMap","MaxBodySize","maxBodySize","toString","maxBytes","arrayBufferEffect","map","_","TextEncoder","encode","buffer","textUnsafe","json","try","JSON","parse","catch","jsonUnsafe","urlParamsBody","URLSearchParams","stream","fromReadable","evaluate","arrayBuffer","withFiber","fiber","toArrayBuffer","getRef","pipe","TextDecoder","decode"],"sources":["../src/NodeHttpIncomingMessage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -3,8 +3,11 @@ import * as EtagImpl from "effect/unstable/http/Etag";
3
3
  import * as Platform from "effect/unstable/http/HttpPlatform";
4
4
  import * as ServerResponse from "effect/unstable/http/HttpServerResponse";
5
5
  /**
6
- * @since 1.0.0
7
- * @category Constructors
6
+ * Creates the Node `HttpPlatform`, serving file responses from Node readable
7
+ * streams and adding MIME type and content-length headers when needed.
8
+ *
9
+ * @category constructors
10
+ * @since 4.0.0
8
11
  */
9
12
  export declare const make: import("effect/Effect").Effect<{
10
13
  readonly fileResponse: (path: string, options?: ServerResponse.Options.WithContent & {
@@ -19,8 +22,11 @@ export declare const make: import("effect/Effect").Effect<{
19
22
  }) => import("effect/Effect").Effect<ServerResponse.HttpServerResponse>;
20
23
  }, never, import("effect/FileSystem").FileSystem | EtagImpl.Generator>;
21
24
  /**
22
- * @since 1.0.0
23
- * @category Layers
25
+ * Provides the Node `HttpPlatform` together with the filesystem and ETag
26
+ * services it needs for file responses.
27
+ *
28
+ * @category layers
29
+ * @since 4.0.0
24
30
  */
25
31
  export declare const layer: Layer.Layer<Platform.HttpPlatform>;
26
32
  //# sourceMappingURL=NodeHttpPlatform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeHttpPlatform.d.ts","sourceRoot":"","sources":["../src/NodeHttpPlatform.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAErD,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAA;AAC7D,OAAO,KAAK,cAAc,MAAM,yCAAyC,CAAA;AAMzE;;;GAGG;AACH,eAAO,MAAM,IAAI;iDACT,CAAC;4BAA+D,CAAC;0BACjB,CAAC;uBAE1C,CAAC;;uGAIV,CAAL;4BAKW,CAAC;0BACF,CAAA;uBAA2D,CAAC;;sEAYrE,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAIpD,CAAA"}
1
+ {"version":3,"file":"NodeHttpPlatform.d.ts","sourceRoot":"","sources":["../src/NodeHttpPlatform.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAErD,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAA;AAC7D,OAAO,KAAK,cAAc,MAAM,yCAAyC,CAAA;AAMzE;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;iDAT+B,CAAC;4BAGI,CAAC;0BAChB,CAAC;uBAEhB,CAAC;;uGAKa,CAAA;4BAED,CAAA;0BAC7B,CAAC;uBAEE,CAAC;;sEAqBT,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAIpD,CAAA"}
@@ -1,5 +1,26 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Node.js implementation of the Effect HTTP platform service.
3
+ *
4
+ * This module connects the portable `HttpPlatform` file response helpers to
5
+ * Node runtime primitives. It is used by Node HTTP servers and static file
6
+ * handlers when returning local files, public assets, downloads, byte ranges,
7
+ * or Web `File` values as `HttpServerResponse` bodies.
8
+ *
9
+ * Path-based responses are served with `node:fs.createReadStream`; Web `File`
10
+ * responses are bridged with `Readable.fromWeb`. The implementation fills in
11
+ * `content-type` from `Mime`, falls back to `application/octet-stream`, and
12
+ * writes the `content-length` for the selected range or whole file. Node's
13
+ * stream `end` option is inclusive, so the platform converts Effect's half-open
14
+ * range before reading. Empty bodies use an empty readable stream.
15
+ *
16
+ * Provide `layer` at the Node runtime edge when file responses, static serving,
17
+ * or response bodies created from files need real filesystem and ETag support.
18
+ * These responses are raw Node streams, so they are intended for the Node HTTP
19
+ * server adapter; keep files available until the response body has been
20
+ * consumed and prefer the portable `HttpServerResponse` constructors when a
21
+ * response does not depend on Node file or stream behavior.
22
+ *
23
+ * @since 4.0.0
3
24
  */
4
25
  import { pipe } from "effect/Function";
5
26
  import * as Layer from "effect/Layer";
@@ -12,14 +33,17 @@ import { Readable } from "node:stream";
12
33
  import Mime from "./Mime.js";
13
34
  import * as NodeFileSystem from "./NodeFileSystem.js";
14
35
  /**
15
- * @since 1.0.0
16
- * @category Constructors
36
+ * Creates the Node `HttpPlatform`, serving file responses from Node readable
37
+ * streams and adding MIME type and content-length headers when needed.
38
+ *
39
+ * @category constructors
40
+ * @since 4.0.0
17
41
  */
18
42
  export const make = /*#__PURE__*/Platform.make({
19
43
  fileResponse(path, status, statusText, headers, start, end, contentLength) {
20
- const stream = Fs.createReadStream(path, {
44
+ const stream = contentLength === 0 ? Readable.from([]) : Fs.createReadStream(path, {
21
45
  start,
22
- end
46
+ end: end === undefined ? undefined : end - 1
23
47
  });
24
48
  return ServerResponse.raw(stream, {
25
49
  headers: {
@@ -43,8 +67,11 @@ export const make = /*#__PURE__*/Platform.make({
43
67
  }
44
68
  });
45
69
  /**
46
- * @since 1.0.0
47
- * @category Layers
70
+ * Provides the Node `HttpPlatform` together with the filesystem and ETag
71
+ * services it needs for file responses.
72
+ *
73
+ * @category layers
74
+ * @since 4.0.0
48
75
  */
49
76
  export const layer = /*#__PURE__*/pipe(/*#__PURE__*/Layer.effect(Platform.HttpPlatform)(make), /*#__PURE__*/Layer.provide(NodeFileSystem.layer), /*#__PURE__*/Layer.provide(EtagImpl.layer));
50
77
  //# sourceMappingURL=NodeHttpPlatform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeHttpPlatform.js","names":["pipe","Layer","EtagImpl","Headers","Platform","ServerResponse","Fs","Readable","Mime","NodeFileSystem","make","fileResponse","path","status","statusText","headers","start","end","contentLength","stream","createReadStream","raw","getType","toString","fileWebResponse","file","_options","fromWeb","merge","fromRecordUnsafe","name","size","layer","effect","HttpPlatform","provide"],"sources":["../src/NodeHttpPlatform.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,SAASA,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,2BAA2B;AACrD,OAAO,KAAKC,OAAO,MAAM,8BAA8B;AACvD,OAAO,KAAKC,QAAQ,MAAM,mCAAmC;AAC7D,OAAO,KAAKC,cAAc,MAAM,yCAAyC;AACzE,OAAO,KAAKC,EAAE,MAAM,SAAS;AAC7B,SAASC,QAAQ,QAAQ,aAAa;AACtC,OAAOC,IAAI,MAAM,WAAW;AAC5B,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;;AAIA,OAAO,MAAMC,IAAI,gBAAGN,QAAQ,CAACM,IAAI,CAAC;EAChCC,YAAYA,CAACC,IAAI,EAAEC,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,KAAK,EAAEC,GAAG,EAAEC,aAAa;IACvE,MAAMC,MAAM,GAAGb,EAAE,CAACc,gBAAgB,CAACR,IAAI,EAAE;MAAEI,KAAK;MAAEC;IAAG,CAAE,CAAC;IACxD,OAAOZ,cAAc,CAACgB,GAAG,CAACF,MAAM,EAAE;MAChCJ,OAAO,EAAE;QACP,GAAGA,OAAO;QACV,cAAc,EAAEA,OAAO,CAAC,cAAc,CAAC,IAAIP,IAAI,CAACc,OAAO,CAACV,IAAI,CAAC,IAAI,0BAA0B;QAC3F,gBAAgB,EAAEM,aAAa,CAACK,QAAQ;OACzC;MACDV,MAAM;MACNC;KACD,CAAC;EACJ,CAAC;EACDU,eAAeA,CAACC,IAAI,EAAEZ,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEW,QAAQ;IACzD,OAAOrB,cAAc,CAACgB,GAAG,CAACd,QAAQ,CAACoB,OAAO,CAACF,IAAI,CAACN,MAAM,EAAS,CAAC,EAAE;MAChEJ,OAAO,EAAEZ,OAAO,CAACyB,KAAK,CACpBb,OAAO,EACPZ,OAAO,CAAC0B,gBAAgB,CAAC;QACvB,cAAc,EAAEd,OAAO,CAAC,cAAc,CAAC,IAAIP,IAAI,CAACc,OAAO,CAACG,IAAI,CAACK,IAAI,CAAC,IAAI,0BAA0B;QAChG,gBAAgB,EAAEL,IAAI,CAACM,IAAI,CAACR,QAAQ;OACrC,CAAC,CACH;MACDV,MAAM;MACNC;KACD,CAAC;EACJ;CACD,CAAC;AAEF;;;;AAIA,OAAO,MAAMkB,KAAK,gBAAuChC,IAAI,cAC3DC,KAAK,CAACgC,MAAM,CAAC7B,QAAQ,CAAC8B,YAAY,CAAC,CAACxB,IAAI,CAAC,eACzCT,KAAK,CAACkC,OAAO,CAAC1B,cAAc,CAACuB,KAAK,CAAC,eACnC/B,KAAK,CAACkC,OAAO,CAACjC,QAAQ,CAAC8B,KAAK,CAAC,CAC9B","ignoreList":[]}
1
+ {"version":3,"file":"NodeHttpPlatform.js","names":["pipe","Layer","EtagImpl","Headers","Platform","ServerResponse","Fs","Readable","Mime","NodeFileSystem","make","fileResponse","path","status","statusText","headers","start","end","contentLength","stream","from","createReadStream","undefined","raw","getType","toString","fileWebResponse","file","_options","fromWeb","merge","fromRecordUnsafe","name","size","layer","effect","HttpPlatform","provide"],"sources":["../src/NodeHttpPlatform.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAASA,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,2BAA2B;AACrD,OAAO,KAAKC,OAAO,MAAM,8BAA8B;AACvD,OAAO,KAAKC,QAAQ,MAAM,mCAAmC;AAC7D,OAAO,KAAKC,cAAc,MAAM,yCAAyC;AACzE,OAAO,KAAKC,EAAE,MAAM,SAAS;AAC7B,SAASC,QAAQ,QAAQ,aAAa;AACtC,OAAOC,IAAI,MAAM,WAAW;AAC5B,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;;;;;AAOA,OAAO,MAAMC,IAAI,gBAAGN,QAAQ,CAACM,IAAI,CAAC;EAChCC,YAAYA,CAACC,IAAI,EAAEC,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,KAAK,EAAEC,GAAG,EAAEC,aAAa;IACvE,MAAMC,MAAM,GAAGD,aAAa,KAAK,CAAC,GAC9BX,QAAQ,CAACa,IAAI,CAAC,EAAE,CAAC,GACjBd,EAAE,CAACe,gBAAgB,CAACT,IAAI,EAAE;MAAEI,KAAK;MAAEC,GAAG,EAAEA,GAAG,KAAKK,SAAS,GAAGA,SAAS,GAAGL,GAAG,GAAG;IAAC,CAAE,CAAC;IACtF,OAAOZ,cAAc,CAACkB,GAAG,CAACJ,MAAM,EAAE;MAChCJ,OAAO,EAAE;QACP,GAAGA,OAAO;QACV,cAAc,EAAEA,OAAO,CAAC,cAAc,CAAC,IAAIP,IAAI,CAACgB,OAAO,CAACZ,IAAI,CAAC,IAAI,0BAA0B;QAC3F,gBAAgB,EAAEM,aAAa,CAACO,QAAQ;OACzC;MACDZ,MAAM;MACNC;KACD,CAAC;EACJ,CAAC;EACDY,eAAeA,CAACC,IAAI,EAAEd,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEa,QAAQ;IACzD,OAAOvB,cAAc,CAACkB,GAAG,CAAChB,QAAQ,CAACsB,OAAO,CAACF,IAAI,CAACR,MAAM,EAAS,CAAC,EAAE;MAChEJ,OAAO,EAAEZ,OAAO,CAAC2B,KAAK,CACpBf,OAAO,EACPZ,OAAO,CAAC4B,gBAAgB,CAAC;QACvB,cAAc,EAAEhB,OAAO,CAAC,cAAc,CAAC,IAAIP,IAAI,CAACgB,OAAO,CAACG,IAAI,CAACK,IAAI,CAAC,IAAI,0BAA0B;QAChG,gBAAgB,EAAEL,IAAI,CAACM,IAAI,CAACR,QAAQ;OACrC,CAAC,CACH;MACDZ,MAAM;MACNC;KACD,CAAC;EACJ;CACD,CAAC;AAEF;;;;;;;AAOA,OAAO,MAAMoB,KAAK,gBAAuClC,IAAI,cAC3DC,KAAK,CAACkC,MAAM,CAAC/B,QAAQ,CAACgC,YAAY,CAAC,CAAC1B,IAAI,CAAC,eACzCT,KAAK,CAACoC,OAAO,CAAC5B,cAAc,CAACyB,KAAK,CAAC,eACnCjC,KAAK,CAACoC,OAAO,CAACnC,QAAQ,CAACgC,KAAK,CAAC,CAC9B","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import * as Config from "effect/Config";
2
+ import * as Duration from "effect/Duration";
2
3
  import * as Effect from "effect/Effect";
3
4
  import type * as FileSystem from "effect/FileSystem";
4
5
  import { type LazyArg } from "effect/Function";
@@ -19,10 +20,17 @@ import type { Duplex } from "node:stream";
19
20
  import * as NodeServices from "./NodeServices.ts";
20
21
  import { NodeWS } from "./NodeSocket.ts";
21
22
  /**
22
- * @since 1.0.0
23
+ * Creates a scoped `HttpServer` from a Node `http.Server`, starts listening
24
+ * with the supplied options, registers request and upgrade handling, and closes
25
+ * the server during scope finalization with optional graceful-shutdown control.
26
+ *
23
27
  * @category constructors
28
+ * @since 4.0.0
24
29
  */
25
- export declare const make: (evaluate: LazyArg<Http.Server<typeof Http.IncomingMessage, typeof Http.ServerResponse>>, options: Net.ListenOptions) => Effect.Effect<{
30
+ export declare const make: (evaluate: LazyArg<Http.Server<typeof Http.IncomingMessage, typeof Http.ServerResponse>>, options: Net.ListenOptions & {
31
+ readonly disablePreemptiveShutdown?: boolean | undefined;
32
+ readonly gracefulShutdownTimeout?: Duration.Input | undefined;
33
+ }) => Effect.Effect<{
26
34
  readonly serve: {
27
35
  <E, R>(effect: Effect.Effect<HttpServerResponse, E, R>): Effect.Effect<void, never, Exclude<R, HttpServerRequest> | Scope.Scope>;
28
36
  <E, R, App extends Effect.Effect<HttpServerResponse, any, any>>(effect: Effect.Effect<HttpServerResponse, E, R>, middleware: Middleware.HttpMiddleware.Applied<App, E, R>): Effect.Effect<void, never, Exclude<R, HttpServerRequest> | Scope.Scope>;
@@ -30,44 +38,76 @@ export declare const make: (evaluate: LazyArg<Http.Server<typeof Http.IncomingMe
30
38
  readonly address: HttpServer.Address;
31
39
  }, ServeError, Scope.Scope>;
32
40
  /**
33
- * @since 1.0.0
41
+ * Creates a Node `request` event handler for an Effect HTTP application,
42
+ * injecting a `HttpServerRequest` and interrupting the request fiber if the
43
+ * client closes the response before it finishes.
44
+ *
34
45
  * @category Handlers
46
+ * @since 4.0.0
35
47
  */
36
48
  export declare const makeHandler: <R, E, App extends Effect.Effect<HttpServerResponse, any, any> = Effect.Effect<HttpServerResponse, E, R>>(httpEffect: Effect.Effect<HttpServerResponse, E, R>, options: {
37
49
  readonly scope: Scope.Scope;
38
50
  readonly middleware?: Middleware.HttpMiddleware.Applied<App, E, R> | undefined;
39
51
  }) => Effect.Effect<(nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) => void, never, Exclude<Effect.Services<App>, HttpServerRequest | Scope.Scope>>;
40
52
  /**
41
- * @since 1.0.0
53
+ * Creates a Node `upgrade` event handler for an Effect HTTP application,
54
+ * exposing the upgraded WebSocket as the request's `upgrade` effect and
55
+ * interrupting the request fiber when the socket closes early.
56
+ *
42
57
  * @category Handlers
58
+ * @since 4.0.0
43
59
  */
44
60
  export declare const makeUpgradeHandler: <R, E, App extends Effect.Effect<HttpServerResponse, any, any> = Effect.Effect<HttpServerResponse, E, R>>(lazyWss: Effect.Effect<NodeWS.WebSocketServer>, httpEffect: Effect.Effect<HttpServerResponse, E, R>, options: {
45
61
  readonly scope: Scope.Scope;
46
62
  readonly middleware?: Middleware.HttpMiddleware.Applied<App, E, R> | undefined;
47
63
  }) => Effect.Effect<(nodeRequest: Http.IncomingMessage, socket: Duplex, head: Buffer) => void, never, Exclude<Effect.Services<App>, HttpServerRequest | Scope.Scope>>;
48
64
  /**
49
- * @since 1.0.0
50
- * @category Layers
65
+ * Provides an `HttpServer` by creating and managing a scoped Node
66
+ * `http.Server` with the supplied listen and shutdown options.
67
+ *
68
+ * @category layers
69
+ * @since 4.0.0
51
70
  */
52
- export declare const layerServer: (evaluate: LazyArg<Http.Server<typeof Http.IncomingMessage, typeof Http.ServerResponse>>, options: Net.ListenOptions) => Layer.Layer<HttpServer.HttpServer, ServeError>;
71
+ export declare const layerServer: (evaluate: LazyArg<Http.Server<typeof Http.IncomingMessage, typeof Http.ServerResponse>>, options: Net.ListenOptions & {
72
+ readonly disablePreemptiveShutdown?: boolean | undefined;
73
+ readonly gracefulShutdownTimeout?: Duration.Input | undefined;
74
+ }) => Layer.Layer<HttpServer.HttpServer, ServeError>;
53
75
  /**
54
- * @since 1.0.0
55
- * @category Layers
76
+ * Provides the Node HTTP support services used by `NodeHttpServer`, including
77
+ * the HTTP platform, ETag generator, and core Node platform services.
78
+ *
79
+ * @category layers
80
+ * @since 4.0.0
56
81
  */
57
82
  export declare const layerHttpServices: Layer.Layer<NodeServices.NodeServices | HttpPlatform.HttpPlatform | Etag.Generator>;
58
83
  /**
59
- * @since 1.0.0
60
- * @category Layers
84
+ * Provides a Node `HttpServer` together with the Node HTTP platform, ETag, and
85
+ * core platform services required to serve requests.
86
+ *
87
+ * @category layers
88
+ * @since 4.0.0
61
89
  */
62
- export declare const layer: (evaluate: LazyArg<Http.Server>, options: Net.ListenOptions) => Layer.Layer<HttpServer.HttpServer | NodeServices.NodeServices | HttpPlatform.HttpPlatform | Etag.Generator, ServeError>;
90
+ export declare const layer: (evaluate: LazyArg<Http.Server>, options: Net.ListenOptions & {
91
+ readonly disablePreemptiveShutdown?: boolean | undefined;
92
+ readonly gracefulShutdownTimeout?: Duration.Input | undefined;
93
+ }) => Layer.Layer<HttpServer.HttpServer | NodeServices.NodeServices | HttpPlatform.HttpPlatform | Etag.Generator, ServeError>;
63
94
  /**
64
- * @since 1.0.0
65
- * @category Layers
95
+ * Provides a Node `HttpServer` and HTTP support services, reading the listen
96
+ * and shutdown options from a `Config` value.
97
+ *
98
+ * @category layers
99
+ * @since 4.0.0
66
100
  */
67
- export declare const layerConfig: (evaluate: LazyArg<Http.Server>, options: Config.Wrap<Net.ListenOptions>) => Layer.Layer<HttpServer.HttpServer | FileSystem.FileSystem | Path.Path | HttpPlatform.HttpPlatform | Etag.Generator, ServeError | Config.ConfigError>;
101
+ export declare const layerConfig: (evaluate: LazyArg<Http.Server>, options: Config.Wrap<Net.ListenOptions & {
102
+ readonly disablePreemptiveShutdown?: boolean | undefined;
103
+ readonly gracefulShutdownTimeout?: Duration.Input | undefined;
104
+ }>) => Layer.Layer<HttpServer.HttpServer | FileSystem.FileSystem | Path.Path | HttpPlatform.HttpPlatform | Etag.Generator, ServeError | Config.ConfigError>;
68
105
  /**
69
- * @since 1.0.0
106
+ * Provides a test HTTP server listening on an ephemeral port together with a
107
+ * Fetch-backed `HttpClient` configured for server integration tests.
108
+ *
70
109
  * @category Testing
110
+ * @since 4.0.0
71
111
  */
72
112
  export declare const layerTest: Layer.Layer<HttpServer.HttpServer | FileSystem.FileSystem | Path.Path | HttpPlatform.HttpPlatform | Etag.Generator | HttpClient, ServeError, never>;
73
113
  //# sourceMappingURL=NodeHttpServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeHttpServer.d.ts","sourceRoot":"","sources":["../src/NodeHttpServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NodeHttpServer.d.ts","sourceRoot":"","sources":["../src/NodeHttpServer.ts"],"names":[],"mappings":"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"}