@effect/platform-node 0.27.2 → 0.27.4

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 (39) hide show
  1. package/Http/Server/dist/effect-platform-node-Http-Server.cjs.dev.js +3 -1
  2. package/Http/Server/dist/effect-platform-node-Http-Server.cjs.prod.js +3 -1
  3. package/Http/Server/dist/effect-platform-node-Http-Server.esm.js +2 -1
  4. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.d.mts +2 -0
  5. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.d.mts.map +1 -0
  6. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.d.ts +2 -0
  7. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.d.ts.map +1 -0
  8. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.dev.js +75 -0
  9. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.js +7 -0
  10. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.mjs +1 -0
  11. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.prod.js +75 -0
  12. package/Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.esm.js +65 -0
  13. package/Http/ServerRequest/package.json +4 -0
  14. package/HttpServer/dist/effect-platform-node-HttpServer.cjs.dev.js +6 -4
  15. package/HttpServer/dist/effect-platform-node-HttpServer.cjs.prod.js +6 -4
  16. package/HttpServer/dist/effect-platform-node-HttpServer.esm.js +5 -3
  17. package/WorkerRunner/dist/effect-platform-node-WorkerRunner.cjs.dev.js +9 -2
  18. package/WorkerRunner/dist/effect-platform-node-WorkerRunner.cjs.prod.js +9 -2
  19. package/WorkerRunner/dist/effect-platform-node-WorkerRunner.esm.js +9 -3
  20. package/dist/Server-1f2aa4ca.cjs.dev.js +83 -0
  21. package/dist/Server-96c17c96.cjs.prod.js +83 -0
  22. package/dist/Server-c315ddf2.esm.js +57 -0
  23. package/dist/declarations/src/Http/Server.d.ts +11 -0
  24. package/dist/declarations/src/Http/Server.d.ts.map +1 -1
  25. package/dist/declarations/src/Http/ServerRequest.d.ts +18 -0
  26. package/dist/declarations/src/Http/ServerRequest.d.ts.map +1 -0
  27. package/dist/declarations/src/HttpServer.d.ts +3 -3
  28. package/dist/declarations/src/HttpServer.d.ts.map +1 -1
  29. package/dist/declarations/src/WorkerRunner.d.ts +6 -0
  30. package/dist/declarations/src/WorkerRunner.d.ts.map +1 -1
  31. package/dist/{Server-9108df65.cjs.prod.js → server-42346e37.cjs.prod.js} +29 -69
  32. package/dist/{Server-c9262046.esm.js → server-442c5e69.esm.js} +29 -70
  33. package/dist/{Server-7a3dbcbe.cjs.dev.js → server-b13861a8.cjs.dev.js} +29 -69
  34. package/package.json +7 -1
  35. package/src/Http/Server.ts +25 -0
  36. package/src/Http/ServerRequest.ts +19 -0
  37. package/src/HttpServer.ts +3 -3
  38. package/src/WorkerRunner.ts +7 -0
  39. package/src/internal/http/server.ts +49 -24
@@ -4,7 +4,7 @@ var FileSystem = require('@effect/platform/FileSystem');
4
4
  var App = require('@effect/platform/Http/App');
5
5
  var IncomingMessage = require('@effect/platform/Http/IncomingMessage');
6
6
  var Middleware = require('@effect/platform/Http/Middleware');
7
- var Server$1 = require('@effect/platform/Http/Server');
7
+ var Server = require('@effect/platform/Http/Server');
8
8
  var Error = require('@effect/platform/Http/ServerError');
9
9
  var ServerRequest = require('@effect/platform/Http/ServerRequest');
10
10
  var Config = require('effect/Config');
@@ -39,26 +39,11 @@ function _interopNamespace(e) {
39
39
  return Object.freeze(n);
40
40
  }
41
41
 
42
- function _mergeNamespaces(n, m) {
43
- m.forEach(function (e) {
44
- e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
45
- if (k !== 'default' && !(k in n)) {
46
- var d = Object.getOwnPropertyDescriptor(e, k);
47
- Object.defineProperty(n, k, d.get ? d : {
48
- enumerable: true,
49
- get: function () { return e[k]; }
50
- });
51
- }
52
- });
53
- });
54
- return Object.freeze(n);
55
- }
56
-
57
42
  var FileSystem__namespace = /*#__PURE__*/_interopNamespace(FileSystem);
58
43
  var App__namespace = /*#__PURE__*/_interopNamespace(App);
59
44
  var IncomingMessage__namespace = /*#__PURE__*/_interopNamespace(IncomingMessage);
60
45
  var Middleware__namespace = /*#__PURE__*/_interopNamespace(Middleware);
61
- var Server__namespace = /*#__PURE__*/_interopNamespace(Server$1);
46
+ var Server__namespace = /*#__PURE__*/_interopNamespace(Server);
62
47
  var Error__namespace = /*#__PURE__*/_interopNamespace(Error);
63
48
  var ServerRequest__namespace = /*#__PURE__*/_interopNamespace(ServerRequest);
64
49
  var Config__namespace = /*#__PURE__*/_interopNamespace(Config);
@@ -70,7 +55,7 @@ var Runtime__namespace = /*#__PURE__*/_interopNamespace(Runtime);
70
55
  var Stream__namespace = /*#__PURE__*/_interopNamespace(Stream);
71
56
 
72
57
  /** @internal */
73
- const make$1 = (evaluate, options) => Effect__namespace.gen(function* (_) {
58
+ const make = (evaluate, options) => Effect__namespace.gen(function* (_) {
74
59
  const server = evaluate();
75
60
  const serverFiber = yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.async(resume => {
76
61
  server.close(error => {
@@ -102,24 +87,10 @@ const make$1 = (evaluate, options) => Effect__namespace.gen(function* (_) {
102
87
  hostname: address.address,
103
88
  port: address.port
104
89
  },
105
- serve: (httpApp, middleware) => {
106
- const handledApp = middleware ? middleware(App__namespace.withDefaultMiddleware(respond(httpApp))) : App__namespace.withDefaultMiddleware(respond(httpApp));
107
- return Effect__namespace.flatMap(Effect__namespace.all([Effect__namespace.runtime(), Effect__namespace.fiberId]), ([runtime, fiberId]) => {
108
- const runFork = Runtime__namespace.runFork(runtime);
109
- function handler(nodeRequest, nodeResponse) {
110
- const fiber = runFork(Effect__namespace.provideService(handledApp, ServerRequest__namespace.ServerRequest, new ServerRequestImpl(nodeRequest, nodeResponse)));
111
- nodeResponse.on("close", () => {
112
- if (!nodeResponse.writableEnded) {
113
- runFork(fiber.interruptAsFork(fiberId));
114
- }
115
- });
116
- }
117
- return Effect__namespace.all([Effect__namespace.acquireRelease(Effect__namespace.sync(() => server.on("request", handler)), () => Effect__namespace.sync(() => server.off("request", handler))), Fiber__namespace.join(serverFiber)], {
118
- discard: true,
119
- concurrency: "unbounded"
120
- });
121
- });
122
- }
90
+ serve: (httpApp, middleware) => Effect__namespace.flatMap(makeHandler(httpApp, middleware), handler => Effect__namespace.all([Effect__namespace.acquireRelease(Effect__namespace.sync(() => server.on("request", handler)), () => Effect__namespace.sync(() => server.off("request", handler))), Fiber__namespace.join(serverFiber)], {
91
+ discard: true,
92
+ concurrency: "unbounded"
93
+ }))
123
94
  });
124
95
  }).pipe(Effect__namespace.locally(IncomingMessage__namespace.maxBodySize, Option__namespace.some(FileSystem__namespace.Size(1024 * 1024 * 10))));
125
96
  const respond = /*#__PURE__*/Middleware__namespace.make(httpApp => Effect__namespace.flatMap(ServerRequest__namespace.ServerRequest, request => Effect__namespace.tapErrorCause(Effect__namespace.tap(Effect__namespace.flatMap(httpApp, response => Effect__namespace.flatMap(App__namespace.preResponseHandler, f => f(request, response))), response => handleResponse(request, response)), _cause => Effect__namespace.sync(() => {
@@ -131,6 +102,22 @@ const respond = /*#__PURE__*/Middleware__namespace.make(httpApp => Effect__names
131
102
  nodeResponse.end();
132
103
  }
133
104
  }))));
105
+
106
+ /** @internal */
107
+ const makeHandler = (httpApp, middleware) => {
108
+ const handledApp = middleware ? middleware(App__namespace.withDefaultMiddleware(respond(httpApp))) : App__namespace.withDefaultMiddleware(respond(httpApp));
109
+ return Effect__namespace.map(Effect__namespace.zip(Effect__namespace.runtime(), Effect__namespace.fiberId), ([runtime, fiberId]) => {
110
+ const runFork = Runtime__namespace.runFork(runtime);
111
+ return function handler(nodeRequest, nodeResponse) {
112
+ const fiber = runFork(Effect__namespace.provideService(handledApp, ServerRequest__namespace.ServerRequest, new ServerRequestImpl(nodeRequest, nodeResponse)));
113
+ nodeResponse.on("close", () => {
114
+ if (!nodeResponse.writableEnded) {
115
+ runFork(fiber.interruptAsFork(fiberId));
116
+ }
117
+ });
118
+ };
119
+ });
120
+ };
134
121
  class ServerRequestImpl extends incomingMessage.IncomingMessageImpl {
135
122
  constructor(source, response, url = source.url, headersOverride, remoteAddressOverride) {
136
123
  super(source, _ => Error__namespace.RequestError({
@@ -182,10 +169,10 @@ class ServerRequestImpl extends incomingMessage.IncomingMessageImpl {
182
169
  }
183
170
 
184
171
  /** @internal */
185
- const layer$1 = (evaluate, options) => Layer__namespace.merge(Layer__namespace.scoped(Server__namespace.Server, make$1(evaluate, options)), platform.layer);
172
+ const layer = (evaluate, options) => Layer__namespace.merge(Layer__namespace.scoped(Server__namespace.Server, make(evaluate, options)), platform.layer);
186
173
 
187
174
  /** @internal */
188
- const layerConfig$1 = (evaluate, options) => Layer__namespace.merge(Layer__namespace.scoped(Server__namespace.Server, Effect__namespace.flatMap(Effect__namespace.config(Config__namespace.unwrap(options)), options => make$1(evaluate, options))), platform.layer);
175
+ const layerConfig = (evaluate, options) => Layer__namespace.merge(Layer__namespace.scoped(Server__namespace.Server, Effect__namespace.flatMap(Effect__namespace.config(Config__namespace.unwrap(options)), options => make(evaluate, options))), platform.layer);
189
176
  const handleResponse = (request, response) => Effect__namespace.suspend(() => {
190
177
  const nodeResponse = request.response;
191
178
  if (request.method === "HEAD") {
@@ -266,38 +253,11 @@ const handleResponse = (request, response) => Effect__namespace.suspend(() => {
266
253
  }
267
254
  });
268
255
 
269
- /**
270
- * @since 1.0.0
271
- *
272
- * Also includes exports from [`@effect/platform/Http/Server`](https://effect-ts.github.io/platform/platform/Http/Server.ts.html).
273
- */
274
-
275
- /**
276
- * @since 1.0.0
277
- * @category constructors
278
- */
279
- const make = make$1;
280
-
281
- /**
282
- * @since 1.0.0
283
- * @category layers
284
- */
285
- const layer = layer$1;
286
-
287
- /**
288
- * @since 1.0.0
289
- * @category layers
290
- */
291
- const layerConfig = layerConfig$1;
292
-
293
- var Server = /*#__PURE__*/_mergeNamespaces({
294
- __proto__: null,
295
- make: make,
296
- layer: layer,
297
- layerConfig: layerConfig
298
- }, [Server__namespace]);
256
+ /** @internal */
257
+ const requestSource = self => self.source;
299
258
 
300
- exports.Server = Server;
301
259
  exports.layer = layer;
302
260
  exports.layerConfig = layerConfig;
303
261
  exports.make = make;
262
+ exports.makeHandler = makeHandler;
263
+ exports.requestSource = requestSource;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform-node",
3
- "version": "0.27.2",
3
+ "version": "0.27.4",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "main": "dist/effect-platform-node.cjs.js",
6
6
  "module": "dist/effect-platform-node.esm.js",
@@ -136,6 +136,12 @@
136
136
  "import": "./Http/Server/dist/effect-platform-node-Http-Server.cjs.mjs",
137
137
  "default": "./Http/Server/dist/effect-platform-node-Http-Server.cjs.js"
138
138
  },
139
+ "./Http/ServerRequest": {
140
+ "types": "./dist/declarations/src/Http/ServerRequest.d.ts",
141
+ "module": "./Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.esm.js",
142
+ "import": "./Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.mjs",
143
+ "default": "./Http/ServerRequest/dist/effect-platform-node-Http-ServerRequest.cjs.js"
144
+ },
139
145
  "./HttpClient": {
140
146
  "types": "./dist/declarations/src/HttpClient.d.ts",
141
147
  "module": "./HttpClient/dist/effect-platform-node-HttpClient.esm.js",
@@ -3,8 +3,11 @@
3
3
  *
4
4
  * Also includes exports from [`@effect/platform/Http/Server`](https://effect-ts.github.io/platform/platform/Http/Server.ts.html).
5
5
  */
6
+ import type * as App from "@effect/platform/Http/App"
7
+ import type * as Middleware from "@effect/platform/Http/Middleware"
6
8
  import type * as Platform from "@effect/platform/Http/Platform"
7
9
  import type * as Server from "@effect/platform/Http/Server"
10
+ import type * as ServerRequest from "@effect/platform/Http/ServerRequest"
8
11
  import type * as Config from "effect/Config"
9
12
  import type * as ConfigError from "effect/ConfigError"
10
13
  import type * as Effect from "effect/Effect"
@@ -29,6 +32,28 @@ export const make: (
29
32
  options: Net.ListenOptions
30
33
  ) => Effect.Effect<Scope.Scope, never, Server.Server> = internal.make
31
34
 
35
+ /**
36
+ * @since 1.0.0
37
+ * @category constructors
38
+ */
39
+ export const makeHandler: {
40
+ <R, E>(
41
+ httpApp: App.Default<R, E>
42
+ ): Effect.Effect<
43
+ Exclude<R, ServerRequest.ServerRequest>,
44
+ never,
45
+ (nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse<Http.IncomingMessage>) => void
46
+ >
47
+ <R, E, App extends App.Default<any, any>>(
48
+ httpApp: App.Default<R, E>,
49
+ middleware: Middleware.Middleware.Applied<R, E, App>
50
+ ): Effect.Effect<
51
+ Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
52
+ never,
53
+ (nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse<Http.IncomingMessage>) => void
54
+ >
55
+ } = internal.makeHandler
56
+
32
57
  /**
33
58
  * @since 1.0.0
34
59
  * @category layers
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @since 1.0.0
3
+ *
4
+ * Also includes exports from [`@effect/platform/Http/ServerRequest`](https://effect-ts.github.io/platform/platform/Http/ServerRequest.ts.html).
5
+ */
6
+ import type * as ServerRequest from "@effect/platform/Http/ServerRequest"
7
+ import type * as Http from "node:http"
8
+ import * as internal from "../internal/http/server"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ */
13
+ export * from "@effect/platform/Http/ServerRequest"
14
+
15
+ /**
16
+ * @category conversions
17
+ * @since 1.0.0
18
+ */
19
+ export const toIncomingMessage: (self: ServerRequest.ServerRequest) => Http.IncomingMessage = internal.requestSource
package/src/HttpServer.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as request from "@effect/platform-node/Http/ServerRequest"
4
5
  import * as app from "@effect/platform/Http/App"
5
6
  import * as body from "@effect/platform/Http/Body"
6
7
  import * as headers from "@effect/platform/Http/Headers"
7
8
  import * as middleware from "@effect/platform/Http/Middleware"
8
9
  import * as router from "@effect/platform/Http/Router"
9
10
  import * as error from "@effect/platform/Http/ServerError"
10
- import * as request from "@effect/platform/Http/ServerRequest"
11
11
  import * as response from "@effect/platform/Http/ServerResponse"
12
12
  import * as urlParams from "@effect/platform/Http/UrlParams"
13
13
  import * as etag from "./Http/Etag"
@@ -67,8 +67,8 @@ export {
67
67
  /**
68
68
  * @since 1.0.0
69
69
  *
70
- * - Docs: [Http/ServerRequest](https://effect-ts.github.io/platform/platform/Http/ServerRequest.ts.html)
71
- * - Module: `@effect/platform/Http/ServerRequest`
70
+ * - Docs: [Http/ServerRequest](https://effect-ts.github.io/platform/platform-node/Http/ServerRequest.ts.html)
71
+ * - Module: `@effect/platform-node/Http/ServerRequest`
72
72
  */
73
73
  request,
74
74
  /**
@@ -6,6 +6,7 @@
6
6
  import type { WorkerError } from "@effect/platform/WorkerError"
7
7
  import type * as Runner from "@effect/platform/WorkerRunner"
8
8
  import type { Effect } from "effect"
9
+ import type * as Layer from "effect/Layer"
9
10
  import type * as Scope from "effect/Scope"
10
11
  import type * as Stream from "effect/Stream"
11
12
  import * as internal from "./internal/workerRunner"
@@ -23,3 +24,9 @@ export const make: <I, R, E, O>(
23
24
  process: (request: I) => Stream.Stream<R, E, O>,
24
25
  options?: Runner.Runner.Options<O> | undefined
25
26
  ) => Effect.Effect<R | Scope.Scope, WorkerError, void> = internal.make
27
+
28
+ /**
29
+ * @since 1.0.0
30
+ * @category layers
31
+ */
32
+ export const layer: Layer.Layer<never, never, Runner.PlatformRunner> = internal.layer
@@ -78,35 +78,15 @@ export const make = (
78
78
  hostname: address.address,
79
79
  port: address.port
80
80
  },
81
- serve: (httpApp, middleware) => {
82
- const handledApp = middleware
83
- ? middleware(App.withDefaultMiddleware(respond(httpApp)))
84
- : App.withDefaultMiddleware(respond(httpApp))
85
- return Effect.flatMap(Effect.all([Effect.runtime(), Effect.fiberId]), ([runtime, fiberId]) => {
86
- const runFork = Runtime.runFork(runtime)
87
- function handler(nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) {
88
- const fiber = runFork(
89
- Effect.provideService(
90
- handledApp,
91
- ServerRequest.ServerRequest,
92
- new ServerRequestImpl(nodeRequest, nodeResponse)
93
- )
94
- )
95
- nodeResponse.on("close", () => {
96
- if (!nodeResponse.writableEnded) {
97
- runFork(fiber.interruptAsFork(fiberId))
98
- }
99
- })
100
- }
101
- return Effect.all([
81
+ serve: (httpApp, middleware) =>
82
+ Effect.flatMap(makeHandler(httpApp, middleware!), (handler) =>
83
+ Effect.all([
102
84
  Effect.acquireRelease(
103
85
  Effect.sync(() => server.on("request", handler)),
104
86
  () => Effect.sync(() => server.off("request", handler))
105
87
  ),
106
88
  Fiber.join(serverFiber)
107
- ], { discard: true, concurrency: "unbounded" }) as Effect.Effect<never, Error.ServeError, never>
108
- })
109
- }
89
+ ], { discard: true, concurrency: "unbounded" }) as Effect.Effect<never, Error.ServeError, never>)
110
90
  })
111
91
  }).pipe(
112
92
  Effect.locally(
@@ -138,6 +118,47 @@ const respond = Middleware.make((httpApp) =>
138
118
  ))
139
119
  )
140
120
 
121
+ /** @internal */
122
+ export const makeHandler: {
123
+ <R, E>(httpApp: App.Default<R, E>): Effect.Effect<
124
+ Exclude<R, ServerRequest.ServerRequest>,
125
+ never,
126
+ (nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) => void
127
+ >
128
+ <R, E, App extends App.Default<any, any>>(
129
+ httpApp: App.Default<R, E>,
130
+ middleware: Middleware.Middleware.Applied<R, E, App>
131
+ ): Effect.Effect<
132
+ Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
133
+ never,
134
+ (nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) => void
135
+ >
136
+ } = <R, E>(httpApp: App.Default<R, E>, middleware?: Middleware.Middleware) => {
137
+ const handledApp = middleware
138
+ ? middleware(App.withDefaultMiddleware(respond(httpApp)))
139
+ : App.withDefaultMiddleware(respond(httpApp))
140
+ return Effect.map(
141
+ Effect.zip(Effect.runtime<R>(), Effect.fiberId),
142
+ ([runtime, fiberId]) => {
143
+ const runFork = Runtime.runFork(runtime)
144
+ return function handler(nodeRequest: Http.IncomingMessage, nodeResponse: Http.ServerResponse) {
145
+ const fiber = runFork(
146
+ Effect.provideService(
147
+ handledApp,
148
+ ServerRequest.ServerRequest,
149
+ new ServerRequestImpl(nodeRequest, nodeResponse)
150
+ )
151
+ )
152
+ nodeResponse.on("close", () => {
153
+ if (!nodeResponse.writableEnded) {
154
+ runFork(fiber.interruptAsFork(fiberId))
155
+ }
156
+ })
157
+ }
158
+ }
159
+ )
160
+ }
161
+
141
162
  class ServerRequestImpl extends IncomingMessageImpl<Error.RequestError> implements ServerRequest.ServerRequest {
142
163
  readonly [ServerRequest.TypeId]: ServerRequest.TypeId
143
164
 
@@ -339,3 +360,7 @@ const handleResponse = (request: ServerRequest.ServerRequest, response: ServerRe
339
360
  }
340
361
  }
341
362
  })
363
+
364
+ /** @internal */
365
+ export const requestSource = (self: ServerRequest.ServerRequest): Http.IncomingMessage =>
366
+ (self as ServerRequestImpl).source