@effect/platform 0.87.0 → 0.87.2

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 (43) hide show
  1. package/HttpLayerRouter/package.json +6 -0
  2. package/README.md +272 -2
  3. package/dist/cjs/HttpApiBuilder.js +15 -1
  4. package/dist/cjs/HttpApiBuilder.js.map +1 -1
  5. package/dist/cjs/HttpApiScalar.js +29 -11
  6. package/dist/cjs/HttpApiScalar.js.map +1 -1
  7. package/dist/cjs/HttpApiSwagger.js +32 -15
  8. package/dist/cjs/HttpApiSwagger.js.map +1 -1
  9. package/dist/cjs/HttpLayerRouter.js +494 -0
  10. package/dist/cjs/HttpLayerRouter.js.map +1 -0
  11. package/dist/cjs/index.js +3 -1
  12. package/dist/cjs/internal/httpRouter.js +3 -1
  13. package/dist/cjs/internal/httpRouter.js.map +1 -1
  14. package/dist/dts/HttpApiBuilder.d.ts +6 -0
  15. package/dist/dts/HttpApiBuilder.d.ts.map +1 -1
  16. package/dist/dts/HttpApiScalar.d.ts +14 -2
  17. package/dist/dts/HttpApiScalar.d.ts.map +1 -1
  18. package/dist/dts/HttpApiSwagger.d.ts +12 -2
  19. package/dist/dts/HttpApiSwagger.d.ts.map +1 -1
  20. package/dist/dts/HttpLayerRouter.d.ts +481 -0
  21. package/dist/dts/HttpLayerRouter.d.ts.map +1 -0
  22. package/dist/dts/index.d.ts +4 -0
  23. package/dist/dts/index.d.ts.map +1 -1
  24. package/dist/dts/internal/httpRouter.d.ts.map +1 -1
  25. package/dist/esm/HttpApiBuilder.js +14 -0
  26. package/dist/esm/HttpApiBuilder.js.map +1 -1
  27. package/dist/esm/HttpApiScalar.js +28 -10
  28. package/dist/esm/HttpApiScalar.js.map +1 -1
  29. package/dist/esm/HttpApiSwagger.js +31 -14
  30. package/dist/esm/HttpApiSwagger.js.map +1 -1
  31. package/dist/esm/HttpLayerRouter.js +468 -0
  32. package/dist/esm/HttpLayerRouter.js.map +1 -0
  33. package/dist/esm/index.js +4 -0
  34. package/dist/esm/index.js.map +1 -1
  35. package/dist/esm/internal/httpRouter.js +3 -1
  36. package/dist/esm/internal/httpRouter.js.map +1 -1
  37. package/package.json +10 -2
  38. package/src/HttpApiBuilder.ts +30 -0
  39. package/src/HttpApiScalar.ts +79 -41
  40. package/src/HttpApiSwagger.ts +49 -18
  41. package/src/HttpLayerRouter.ts +920 -0
  42. package/src/index.ts +5 -0
  43. package/src/internal/httpRouter.ts +4 -1
@@ -0,0 +1,494 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MiddlewareTypeId = exports.HttpRouter = exports.FindMyWay = void 0;
7
+ Object.defineProperty(exports, "RouteContext", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _HttpRouter.RouteContext;
11
+ }
12
+ });
13
+ exports.middleware = exports.make = exports.layer = exports.cors = exports.addHttpApi = exports.TypeId = exports.RouterConfig = exports.RouteTypeId = void 0;
14
+ Object.defineProperty(exports, "params", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return _HttpRouter.params;
18
+ }
19
+ });
20
+ exports.route = exports.prefixRoute = exports.prefixPath = void 0;
21
+ Object.defineProperty(exports, "schemaJson", {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _HttpRouter.schemaJson;
25
+ }
26
+ });
27
+ Object.defineProperty(exports, "schemaNoBody", {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _HttpRouter.schemaNoBody;
31
+ }
32
+ });
33
+ Object.defineProperty(exports, "schemaParams", {
34
+ enumerable: true,
35
+ get: function () {
36
+ return _HttpRouter.schemaParams;
37
+ }
38
+ });
39
+ Object.defineProperty(exports, "schemaPathParams", {
40
+ enumerable: true,
41
+ get: function () {
42
+ return _HttpRouter.schemaPathParams;
43
+ }
44
+ });
45
+ exports.use = exports.toHttpEffect = exports.serve = void 0;
46
+ var HttpServerRequest = _interopRequireWildcard(require("@effect/platform/HttpServerRequest"));
47
+ var HttpServerResponse = _interopRequireWildcard(require("@effect/platform/HttpServerResponse"));
48
+ var Arr = _interopRequireWildcard(require("effect/Array"));
49
+ var Context = _interopRequireWildcard(require("effect/Context"));
50
+ var Effect = _interopRequireWildcard(require("effect/Effect"));
51
+ var FiberRef = _interopRequireWildcard(require("effect/FiberRef"));
52
+ var _Function = require("effect/Function");
53
+ var Layer = _interopRequireWildcard(require("effect/Layer"));
54
+ var Option = _interopRequireWildcard(require("effect/Option"));
55
+ var Scope = _interopRequireWildcard(require("effect/Scope"));
56
+ var Tracer = _interopRequireWildcard(require("effect/Tracer"));
57
+ var FindMyWay = _interopRequireWildcard(require("find-my-way-ts"));
58
+ var _FindMyWay = FindMyWay;
59
+ exports.FindMyWay = FindMyWay;
60
+ var HttpApi = _interopRequireWildcard(require("./HttpApi.js"));
61
+ var HttpApiBuilder = _interopRequireWildcard(require("./HttpApiBuilder.js"));
62
+ var HttpMiddleware = _interopRequireWildcard(require("./HttpMiddleware.js"));
63
+ var _HttpRouter = require("./HttpRouter.js");
64
+ var HttpServer = _interopRequireWildcard(require("./HttpServer.js"));
65
+ var HttpServerError = _interopRequireWildcard(require("./HttpServerError.js"));
66
+ var OpenApi = _interopRequireWildcard(require("./OpenApi.js"));
67
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
68
+ /**
69
+ * @since 1.0.0
70
+ */
71
+
72
+ /**
73
+ * @since 1.0.0
74
+ * @category Re-exports
75
+ */
76
+
77
+ /**
78
+ * @since 1.0.0
79
+ * @category HttpRouter
80
+ */
81
+ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/platform/HttpLayerRouter/HttpRouter");
82
+ /**
83
+ * @since 1.0.0
84
+ * @category HttpRouter
85
+ */
86
+ const HttpRouter = exports.HttpRouter = /*#__PURE__*/Context.GenericTag("@effect/platform/HttpLayerRouter");
87
+ /**
88
+ * @since 1.0.0
89
+ * @category HttpRouter
90
+ */
91
+ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
92
+ const router = FindMyWay.make(yield* RouterConfig);
93
+ const addAll = routes => Effect.contextWith(context => {
94
+ const middleware = getMiddleware(context);
95
+ const applyMiddleware = effect => {
96
+ for (let i = 0; i < middleware.length; i++) {
97
+ effect = middleware[i](effect);
98
+ }
99
+ return effect;
100
+ };
101
+ for (let i = 0; i < routes.length; i++) {
102
+ const route = middleware.length === 0 ? routes[i] : makeRoute({
103
+ ...routes[i],
104
+ handler: applyMiddleware(routes[i].handler)
105
+ });
106
+ if (route.method === "*") {
107
+ router.all(route.path, route);
108
+ } else {
109
+ router.on(route.method, route.path, route);
110
+ }
111
+ }
112
+ });
113
+ return HttpRouter.of({
114
+ [TypeId]: TypeId,
115
+ prefixed(prefix) {
116
+ return HttpRouter.of({
117
+ [TypeId]: TypeId,
118
+ asHttpEffect: this.asHttpEffect,
119
+ prefixed: newPrefix => this.prefixed(prefixPath(prefix, newPrefix)),
120
+ addAll: routes => addAll(routes.map(prefixRoute(prefix))),
121
+ add: (method, path, handler, options) => addAll([makeRoute({
122
+ method,
123
+ path: prefixPath(path, prefix),
124
+ handler: Effect.isEffect(handler) ? handler : Effect.flatMap(HttpServerRequest.HttpServerRequest, handler),
125
+ uninterruptible: options?.uninterruptible ?? false,
126
+ prefix: Option.some(prefix)
127
+ })])
128
+ });
129
+ },
130
+ addAll,
131
+ add: (method, path, handler, options) => addAll([route(method, path, handler, options)]),
132
+ asHttpEffect() {
133
+ return Effect.withFiberRuntime(fiber => {
134
+ const contextMap = new Map(fiber.currentContext.unsafeMap);
135
+ const request = contextMap.get(HttpServerRequest.HttpServerRequest.key);
136
+ let result = router.find(request.method, request.url);
137
+ if (result === undefined && request.method === "HEAD") {
138
+ result = router.find("GET", request.url);
139
+ }
140
+ if (result === undefined) {
141
+ return Effect.fail(new HttpServerError.RouteNotFound({
142
+ request
143
+ }));
144
+ }
145
+ const route = result.handler;
146
+ if (route.prefix._tag === "Some") {
147
+ contextMap.set(HttpServerRequest.HttpServerRequest.key, sliceRequestUrl(request, route.prefix.value));
148
+ }
149
+ contextMap.set(HttpServerRequest.ParsedSearchParams.key, result.searchParams);
150
+ contextMap.set(_HttpRouter.RouteContext.key, {
151
+ [_HttpRouter.RouteContextTypeId]: _HttpRouter.RouteContextTypeId,
152
+ route,
153
+ params: result.params
154
+ });
155
+ const span = contextMap.get(Tracer.ParentSpan.key);
156
+ if (span && span._tag === "Span") {
157
+ span.attribute("http.route", route.path);
158
+ }
159
+ return Effect.locally(route.uninterruptible ? route.handler : Effect.interruptible(route.handler), FiberRef.currentContext, Context.unsafeMake(contextMap));
160
+ });
161
+ }
162
+ });
163
+ });
164
+ function sliceRequestUrl(request, prefix) {
165
+ const prefexLen = prefix.length;
166
+ return request.modify({
167
+ url: request.url.length <= prefexLen ? "/" : request.url.slice(prefexLen)
168
+ });
169
+ }
170
+ /**
171
+ * @since 1.0.0
172
+ * @category Configuration
173
+ */
174
+ class RouterConfig extends /*#__PURE__*/Context.Reference()("@effect/platform/HttpLayerRouter/RouterConfig", {
175
+ defaultValue: /*#__PURE__*/(0, _Function.constant)({})
176
+ }) {}
177
+ exports.RouterConfig = RouterConfig;
178
+ /**
179
+ * A helper function that is the equivalent of:
180
+ *
181
+ * ```ts
182
+ * import * as HttpLayerRouter from "@effect/platform/HttpLayerRouter"
183
+ * import * as Effect from "effect/Effect"
184
+ * import * as Layer from "effect/Layer"
185
+ *
186
+ * const MyRoute = Layer.scopedDiscard(Effect.gen(function*() {
187
+ * const router = yield* HttpLayerRouter.HttpRouter
188
+ *
189
+ * // then use `router.add` to add a route
190
+ * }))
191
+ * ```
192
+ *
193
+ * @since 1.0.0
194
+ * @category HttpRouter
195
+ */
196
+ const use = f => Layer.scopedDiscard(Effect.flatMap(HttpRouter, f));
197
+ /**
198
+ * @since 1.0.0
199
+ * @category HttpRouter
200
+ */
201
+ exports.use = use;
202
+ const layer = exports.layer = /*#__PURE__*/Layer.effect(HttpRouter, make);
203
+ /**
204
+ * @since 1.0.0
205
+ * @category HttpRouter
206
+ */
207
+ const toHttpEffect = appLayer => Effect.gen(function* () {
208
+ const scope = yield* Effect.scope;
209
+ const memoMap = yield* Layer.CurrentMemoMap;
210
+ const context = yield* Layer.buildWithMemoMap(Layer.provideMerge(appLayer, layer), memoMap, scope);
211
+ const router = Context.get(context, HttpRouter);
212
+ return router.asHttpEffect();
213
+ });
214
+ /**
215
+ * @since 1.0.0
216
+ * @category Route
217
+ */
218
+ exports.toHttpEffect = toHttpEffect;
219
+ const RouteTypeId = exports.RouteTypeId = /*#__PURE__*/Symbol.for("@effect/platform/HttpLayerRouter/Route");
220
+ const makeRoute = options => ({
221
+ ...options,
222
+ uninterruptible: options.uninterruptible ?? false,
223
+ prefix: options.prefix ?? Option.none(),
224
+ [RouteTypeId]: RouteTypeId
225
+ });
226
+ /**
227
+ * @since 1.0.0
228
+ * @category Route
229
+ */
230
+ const route = (method, path, handler, options) => makeRoute({
231
+ ...options,
232
+ method,
233
+ path,
234
+ handler: Effect.isEffect(handler) ? handler : Effect.flatMap(HttpServerRequest.HttpServerRequest, handler),
235
+ uninterruptible: options?.uninterruptible ?? false
236
+ });
237
+ exports.route = route;
238
+ const removeTrailingSlash = path => path.endsWith("/") ? path.slice(0, -1) : path;
239
+ /**
240
+ * @since 1.0.0
241
+ * @category PathInput
242
+ */
243
+ const prefixPath = exports.prefixPath = /*#__PURE__*/(0, _Function.dual)(2, (self, prefix) => {
244
+ prefix = removeTrailingSlash(prefix);
245
+ return self === "/" ? prefix : prefix + self;
246
+ });
247
+ /**
248
+ * @since 1.0.0
249
+ * @category Route
250
+ */
251
+ const prefixRoute = exports.prefixRoute = /*#__PURE__*/(0, _Function.dual)(2, (self, prefix) => makeRoute({
252
+ ...self,
253
+ path: prefixPath(self.path, prefix),
254
+ prefix: Option.match(self.prefix, {
255
+ onNone: () => Option.some(prefix),
256
+ onSome: existingPrefix => Option.some(prefixPath(existingPrefix, prefix))
257
+ })
258
+ }));
259
+ /**
260
+ * @since 1.0.0
261
+ * @category Middleware
262
+ */
263
+ const MiddlewareTypeId = exports.MiddlewareTypeId = /*#__PURE__*/Symbol.for("@effect/platform/HttpLayerRouter/Middleware");
264
+ /**
265
+ * Create a middleware layer that can be used to modify requests and responses.
266
+ *
267
+ * ```ts
268
+ * import * as HttpLayerRouter from "@effect/platform/HttpLayerRouter"
269
+ * import * as HttpMiddleware from "@effect/platform/HttpMiddleware"
270
+ * import * as HttpServerResponse from "@effect/platform/HttpServerResponse"
271
+ * import * as Context from "effect/Context"
272
+ * import * as Effect from "effect/Effect"
273
+ * import * as Layer from "effect/Layer"
274
+ *
275
+ * // Here we are defining a CORS middleware
276
+ * const CorsMiddleware = HttpLayerRouter.middleware(HttpMiddleware.cors()).layer
277
+ * // You can also use HttpLayerRouter.cors() to create a CORS middleware
278
+ *
279
+ * class CurrentSession extends Context.Tag("CurrentSession")<CurrentSession, {
280
+ * readonly token: string
281
+ * }>() {}
282
+ *
283
+ * // You can create middleware that provides a service to the HTTP requests.
284
+ * const SessionMiddleware = HttpLayerRouter.middleware<{
285
+ * provides: CurrentSession
286
+ * }>()(
287
+ * Effect.gen(function*() {
288
+ * yield* Effect.log("SessionMiddleware initialized")
289
+ *
290
+ * return (httpEffect) =>
291
+ * Effect.provideService(httpEffect, CurrentSession, {
292
+ * token: "dummy-token"
293
+ * })
294
+ * })
295
+ * ).layer
296
+ *
297
+ * Effect.gen(function*() {
298
+ * const router = yield* HttpLayerRouter.HttpRouter
299
+ * yield* router.add(
300
+ * "GET",
301
+ * "/hello",
302
+ * Effect.gen(function*() {
303
+ * // Requests can now access the current session
304
+ * const session = yield* CurrentSession
305
+ * return HttpServerResponse.text(`Hello, World! Your token is ${session.token}`)
306
+ * })
307
+ * )
308
+ * }).pipe(
309
+ * Layer.effectDiscard,
310
+ * // Provide the SessionMiddleware & CorsMiddleware to some routes
311
+ * Layer.provide([SessionMiddleware, CorsMiddleware])
312
+ * )
313
+ * ```
314
+ *
315
+ * @since 1.0.0
316
+ * @category Middleware
317
+ */
318
+ const middleware = function () {
319
+ if (arguments.length === 0) {
320
+ return makeMiddleware;
321
+ }
322
+ return makeMiddleware(arguments[0]);
323
+ };
324
+ exports.middleware = middleware;
325
+ const makeMiddleware = middleware => new MiddlewareImpl(Effect.isEffect(middleware) ? Layer.scopedContext(Effect.map(middleware, fn => Context.unsafeMake(new Map([[fnContextKey, fn]])))) : Layer.succeedContext(Context.unsafeMake(new Map([[fnContextKey, middleware]]))));
326
+ let middlewareId = 0;
327
+ const fnContextKey = "@effect/platform/HttpLayerRouter/MiddlewareFn";
328
+ class MiddlewareImpl {
329
+ layerFn;
330
+ dependencies;
331
+ [MiddlewareTypeId] = {};
332
+ constructor(layerFn, dependencies) {
333
+ this.layerFn = layerFn;
334
+ this.dependencies = dependencies;
335
+ const contextKey = `@effect/platform/HttpLayerRouter/Middleware-${++middlewareId}`;
336
+ this.layer = Layer.scopedContext(Effect.gen(this, function* () {
337
+ const context = yield* Effect.context();
338
+ const stack = [context.unsafeMap.get(fnContextKey)];
339
+ if (this.dependencies) {
340
+ const memoMap = yield* Layer.CurrentMemoMap;
341
+ const scope = Context.get(context, Scope.Scope);
342
+ const depsContext = yield* Layer.buildWithMemoMap(this.dependencies, memoMap, scope);
343
+ // eslint-disable-next-line no-restricted-syntax
344
+ stack.push(...getMiddleware(depsContext));
345
+ }
346
+ return Context.unsafeMake(new Map([[contextKey, stack]]));
347
+ })).pipe(Layer.provide(this.layerFn));
348
+ }
349
+ layer;
350
+ combine(other) {
351
+ return new MiddlewareImpl(this.layerFn, this.dependencies ? Layer.provideMerge(this.dependencies, other.layer) : other.layer);
352
+ }
353
+ }
354
+ const middlewareCache = /*#__PURE__*/new WeakMap();
355
+ const getMiddleware = context => {
356
+ let arr = middlewareCache.get(context);
357
+ if (arr) return arr;
358
+ const topLevel = Arr.empty();
359
+ let maxLength = 0;
360
+ for (const [key, value] of context.unsafeMap) {
361
+ if (key.startsWith("@effect/platform/HttpLayerRouter/Middleware-")) {
362
+ topLevel.push(value);
363
+ if (value.length > maxLength) {
364
+ maxLength = value.length;
365
+ }
366
+ }
367
+ }
368
+ if (topLevel.length === 0) {
369
+ arr = [];
370
+ } else {
371
+ const middleware = new Set();
372
+ for (let i = maxLength - 1; i >= 0; i--) {
373
+ for (const arr of topLevel) {
374
+ if (i < arr.length) {
375
+ middleware.add(arr[i]);
376
+ }
377
+ }
378
+ }
379
+ arr = Arr.fromIterable(middleware).reverse();
380
+ }
381
+ middlewareCache.set(context, arr);
382
+ return arr;
383
+ };
384
+ /**
385
+ * A middleware that applies CORS headers to the HTTP response.
386
+ *
387
+ * @since 1.0.0
388
+ * @category Middleware
389
+ */
390
+ const cors = options => middleware(HttpMiddleware.cors(options)).layer;
391
+ /**
392
+ * ```ts
393
+ * import * as NodeHttpServer from "@effect/platform-node/NodeHttpServer"
394
+ * import * as NodeRuntime from "@effect/platform-node/NodeRuntime"
395
+ * import * as HttpApi from "@effect/platform/HttpApi"
396
+ * import * as HttpApiBuilder from "@effect/platform/HttpApiBuilder"
397
+ * import * as HttpApiEndpoint from "@effect/platform/HttpApiEndpoint"
398
+ * import * as HttpApiGroup from "@effect/platform/HttpApiGroup"
399
+ * import * as HttpApiScalar from "@effect/platform/HttpApiScalar"
400
+ * import * as HttpLayerRouter from "@effect/platform/HttpLayerRouter"
401
+ * import * as HttpMiddleware from "@effect/platform/HttpMiddleware"
402
+ * import * as Effect from "effect/Effect"
403
+ * import * as Layer from "effect/Layer"
404
+ * import { createServer } from "http"
405
+ *
406
+ * // First, we define our HttpApi
407
+ * class MyApi extends HttpApi.make("api").add(
408
+ * HttpApiGroup.make("users").add(
409
+ * HttpApiEndpoint.get("me", "/me")
410
+ * ).prefix("/users")
411
+ * ) {}
412
+ *
413
+ * // Implement the handlers for the API
414
+ * const UsersApiLayer = HttpApiBuilder.group(MyApi, "users", (handers) => handers.handle("me", () => Effect.void))
415
+ *
416
+ * // Use `HttpLayerRouter.addHttpApi` to register the API with the router
417
+ * const HttpApiRoutes = HttpLayerRouter.addHttpApi(MyApi, {
418
+ * openapiPath: "/docs/openapi.json"
419
+ * }).pipe(
420
+ * // Provide the api handlers layer
421
+ * Layer.provide(UsersApiLayer)
422
+ * )
423
+ *
424
+ * // Create a /docs route for the API documentation
425
+ * const DocsRoute = HttpApiScalar.layerHttpLayerRouter({
426
+ * api: MyApi,
427
+ * path: "/docs"
428
+ * })
429
+ *
430
+ * const CorsMiddleware = HttpLayerRouter.middleware(HttpMiddleware.cors())
431
+ * // You can also use HttpLayerRouter.cors() to create a CORS middleware
432
+ *
433
+ * // Finally, we merge all routes and serve them using the Node HTTP server
434
+ * const AllRoutes = Layer.mergeAll(
435
+ * HttpApiRoutes,
436
+ * DocsRoute
437
+ * ).pipe(
438
+ * Layer.provide(CorsMiddleware.layer)
439
+ * )
440
+ *
441
+ * HttpLayerRouter.serve(AllRoutes).pipe(
442
+ * Layer.provide(NodeHttpServer.layer(createServer, { port: 3000 })),
443
+ * Layer.launch,
444
+ * NodeRuntime.runMain
445
+ * )
446
+ * ```
447
+ *
448
+ * @since 1.0.0
449
+ * @category HttpApi
450
+ */
451
+ exports.cors = cors;
452
+ const addHttpApi = (api, options) => {
453
+ const ApiMiddleware = middleware(HttpApiBuilder.buildMiddleware(api)).layer;
454
+ return HttpApiBuilder.Router.unwrap(Effect.fnUntraced(function* (router_) {
455
+ const contextMap = new Map();
456
+ const router = yield* HttpRouter;
457
+ const routes = Arr.empty();
458
+ const context = yield* Effect.context();
459
+ contextMap.set(HttpApi.Api.key, {
460
+ api,
461
+ context
462
+ });
463
+ for (const route of router_.routes) {
464
+ routes.push(makeRoute(route));
465
+ }
466
+ yield* router.addAll(routes);
467
+ if (options?.openapiPath) {
468
+ const spec = OpenApi.fromApi(api);
469
+ yield* router.add("GET", options.openapiPath, Effect.succeed(HttpServerResponse.unsafeJson(spec)));
470
+ }
471
+ return Context.unsafeMake(contextMap);
472
+ }, Layer.effectContext)).pipe(Layer.provide(ApiMiddleware));
473
+ };
474
+ /**
475
+ * Serves the provided application layer as an HTTP server.
476
+ *
477
+ * @since 1.0.0
478
+ * @category Server
479
+ */
480
+ exports.addHttpApi = addHttpApi;
481
+ const serve = (appLayer, options) => {
482
+ let middleware = options?.middleware;
483
+ if (options?.disableLogger !== true) {
484
+ middleware = middleware ? (0, _Function.compose)(middleware, HttpMiddleware.logger) : HttpMiddleware.logger;
485
+ }
486
+ const RouterLayer = options?.routerConfig ? Layer.provide(layer, Layer.succeed(RouterConfig, options.routerConfig)) : layer;
487
+ return Effect.gen(function* () {
488
+ const router = yield* HttpRouter;
489
+ const handler = router.asHttpEffect();
490
+ return middleware ? HttpServer.serve(handler, middleware) : HttpServer.serve(handler);
491
+ }).pipe(Layer.unwrapScoped, options?.disableListenLog ? _Function.identity : HttpServer.withLogAddress, Layer.provide(appLayer), Layer.provide(RouterLayer));
492
+ };
493
+ exports.serve = serve;
494
+ //# sourceMappingURL=HttpLayerRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpLayerRouter.js","names":["HttpServerRequest","_interopRequireWildcard","require","HttpServerResponse","Arr","Context","Effect","FiberRef","_Function","Layer","Option","Scope","Tracer","FindMyWay","_FindMyWay","exports","HttpApi","HttpApiBuilder","HttpMiddleware","_HttpRouter","HttpServer","HttpServerError","OpenApi","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","Symbol","for","HttpRouter","GenericTag","make","gen","router","RouterConfig","addAll","routes","contextWith","context","middleware","getMiddleware","applyMiddleware","effect","length","route","makeRoute","handler","method","all","path","on","of","prefixed","prefix","asHttpEffect","newPrefix","prefixPath","map","prefixRoute","add","options","isEffect","flatMap","uninterruptible","some","withFiberRuntime","fiber","contextMap","Map","currentContext","unsafeMap","request","key","result","find","url","undefined","fail","RouteNotFound","_tag","sliceRequestUrl","value","ParsedSearchParams","searchParams","RouteContext","RouteContextTypeId","params","span","ParentSpan","attribute","locally","interruptible","unsafeMake","prefexLen","modify","slice","Reference","defaultValue","constant","use","scopedDiscard","layer","toHttpEffect","appLayer","scope","memoMap","CurrentMemoMap","buildWithMemoMap","provideMerge","RouteTypeId","none","removeTrailingSlash","endsWith","dual","self","match","onNone","onSome","existingPrefix","MiddlewareTypeId","arguments","makeMiddleware","MiddlewareImpl","scopedContext","fn","fnContextKey","succeedContext","middlewareId","layerFn","dependencies","constructor","contextKey","stack","depsContext","push","pipe","provide","combine","other","middlewareCache","arr","topLevel","empty","maxLength","startsWith","Set","fromIterable","reverse","cors","addHttpApi","api","ApiMiddleware","buildMiddleware","Router","unwrap","fnUntraced","router_","Api","openapiPath","spec","fromApi","succeed","unsafeJson","effectContext","serve","disableLogger","compose","logger","RouterLayer","routerConfig","unwrapScoped","disableListenLog","identity","withLogAddress"],"sources":["../../src/HttpLayerRouter.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WorkerRunner = exports.WorkerError = exports.Worker = exports.UrlParams = exports.Url = exports.Transferable = exports.Terminal = exports.Template = exports.SocketServer = exports.Socket = exports.Runtime = exports.PlatformLogger = exports.PlatformConfigProvider = exports.Path = exports.OpenApiJsonSchema = exports.OpenApi = exports.Ndjson = exports.Multipart = exports.MsgPack = exports.KeyValueStore = exports.HttpTraceContext = exports.HttpServerResponse = exports.HttpServerRespondable = exports.HttpServerRequest = exports.HttpServerError = exports.HttpServer = exports.HttpRouter = exports.HttpPlatform = exports.HttpMultiplex = exports.HttpMiddleware = exports.HttpMethod = exports.HttpIncomingMessage = exports.HttpClientResponse = exports.HttpClientRequest = exports.HttpClientError = exports.HttpClient = exports.HttpBody = exports.HttpApp = exports.HttpApiSwagger = exports.HttpApiSecurity = exports.HttpApiSchema = exports.HttpApiScalar = exports.HttpApiMiddleware = exports.HttpApiGroup = exports.HttpApiError = exports.HttpApiEndpoint = exports.HttpApiClient = exports.HttpApiBuilder = exports.HttpApi = exports.Headers = exports.FileSystem = exports.FetchHttpClient = exports.Etag = exports.Error = exports.Effectify = exports.Cookies = exports.CommandExecutor = exports.Command = exports.ChannelSchema = void 0;
6
+ exports.WorkerRunner = exports.WorkerError = exports.Worker = exports.UrlParams = exports.Url = exports.Transferable = exports.Terminal = exports.Template = exports.SocketServer = exports.Socket = exports.Runtime = exports.PlatformLogger = exports.PlatformConfigProvider = exports.Path = exports.OpenApiJsonSchema = exports.OpenApi = exports.Ndjson = exports.Multipart = exports.MsgPack = exports.KeyValueStore = exports.HttpTraceContext = exports.HttpServerResponse = exports.HttpServerRespondable = exports.HttpServerRequest = exports.HttpServerError = exports.HttpServer = exports.HttpRouter = exports.HttpPlatform = exports.HttpMultiplex = exports.HttpMiddleware = exports.HttpMethod = exports.HttpLayerRouter = exports.HttpIncomingMessage = exports.HttpClientResponse = exports.HttpClientRequest = exports.HttpClientError = exports.HttpClient = exports.HttpBody = exports.HttpApp = exports.HttpApiSwagger = exports.HttpApiSecurity = exports.HttpApiSchema = exports.HttpApiScalar = exports.HttpApiMiddleware = exports.HttpApiGroup = exports.HttpApiError = exports.HttpApiEndpoint = exports.HttpApiClient = exports.HttpApiBuilder = exports.HttpApi = exports.Headers = exports.FileSystem = exports.FetchHttpClient = exports.Etag = exports.Error = exports.Effectify = exports.Cookies = exports.CommandExecutor = exports.Command = exports.ChannelSchema = void 0;
7
7
  var _ChannelSchema = _interopRequireWildcard(require("./ChannelSchema.js"));
8
8
  exports.ChannelSchema = _ChannelSchema;
9
9
  var _Command = _interopRequireWildcard(require("./Command.js"));
@@ -60,6 +60,8 @@ var _HttpClientResponse = _interopRequireWildcard(require("./HttpClientResponse.
60
60
  exports.HttpClientResponse = _HttpClientResponse;
61
61
  var _HttpIncomingMessage = _interopRequireWildcard(require("./HttpIncomingMessage.js"));
62
62
  exports.HttpIncomingMessage = _HttpIncomingMessage;
63
+ var _HttpLayerRouter = _interopRequireWildcard(require("./HttpLayerRouter.js"));
64
+ exports.HttpLayerRouter = _HttpLayerRouter;
63
65
  var _HttpMethod = _interopRequireWildcard(require("./HttpMethod.js"));
64
66
  exports.HttpMethod = _HttpMethod;
65
67
  var _HttpMiddleware = _interopRequireWildcard(require("./HttpMiddleware.js"));
@@ -141,9 +141,11 @@ const toHttpApp = (self, config) => {
141
141
  const context = Context.unsafeMake(new Map(fiber.getFiberRef(FiberRef.currentContext).unsafeMap));
142
142
  const request = Context.unsafeGet(context, ServerRequest.HttpServerRequest);
143
143
  if (mountsLen > 0) {
144
+ const searchIndex = request.url.indexOf("?");
145
+ const pathname = searchIndex === -1 ? request.url : request.url.slice(0, searchIndex);
144
146
  for (let i = 0; i < mountsLen; i++) {
145
147
  const [path, routeContext, options] = mounts[i];
146
- if (request.url.startsWith(path)) {
148
+ if (pathname === path || pathname.startsWith(path + "/")) {
147
149
  context.unsafeMap.set(RouteContext.key, routeContext);
148
150
  if (options?.includePrefix !== true) {
149
151
  context.unsafeMap.set(ServerRequest.HttpServerRequest.key, sliceRequestUrl(request, path));