@effect/platform 0.62.5 → 0.63.1

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/HttpApi/package.json +6 -0
  2. package/HttpApiBuilder/package.json +6 -0
  3. package/HttpApiClient/package.json +6 -0
  4. package/HttpApiEndpoint/package.json +6 -0
  5. package/HttpApiError/package.json +6 -0
  6. package/HttpApiGroup/package.json +6 -0
  7. package/HttpApiSchema/package.json +6 -0
  8. package/HttpApiSecurity/package.json +6 -0
  9. package/HttpApiSwagger/package.json +6 -0
  10. package/OpenApi/package.json +6 -0
  11. package/README.md +863 -302
  12. package/dist/cjs/HttpApi.js +168 -0
  13. package/dist/cjs/HttpApi.js.map +1 -0
  14. package/dist/cjs/HttpApiBuilder.js +471 -0
  15. package/dist/cjs/HttpApiBuilder.js.map +1 -0
  16. package/dist/cjs/HttpApiClient.js +134 -0
  17. package/dist/cjs/HttpApiClient.js.map +1 -0
  18. package/dist/cjs/HttpApiEndpoint.js +181 -0
  19. package/dist/cjs/HttpApiEndpoint.js.map +1 -0
  20. package/dist/cjs/HttpApiError.js +69 -0
  21. package/dist/cjs/HttpApiError.js.map +1 -0
  22. package/dist/cjs/HttpApiGroup.js +151 -0
  23. package/dist/cjs/HttpApiGroup.js.map +1 -0
  24. package/dist/cjs/HttpApiSchema.js +241 -0
  25. package/dist/cjs/HttpApiSchema.js.map +1 -0
  26. package/dist/cjs/HttpApiSecurity.js +83 -0
  27. package/dist/cjs/HttpApiSecurity.js.map +1 -0
  28. package/dist/cjs/HttpApiSwagger.js +50 -0
  29. package/dist/cjs/HttpApiSwagger.js.map +1 -0
  30. package/dist/cjs/HttpMethod.js +1 -1
  31. package/dist/cjs/HttpMethod.js.map +1 -1
  32. package/dist/cjs/HttpRouter.js +6 -1
  33. package/dist/cjs/HttpRouter.js.map +1 -1
  34. package/dist/cjs/OpenApi.js +317 -0
  35. package/dist/cjs/OpenApi.js.map +1 -0
  36. package/dist/cjs/index.js +21 -1
  37. package/dist/cjs/internal/apiSwagger.js +2 -0
  38. package/dist/cjs/internal/apiSwagger.js.map +1 -0
  39. package/dist/cjs/internal/httpRouter.js +6 -1
  40. package/dist/cjs/internal/httpRouter.js.map +1 -1
  41. package/dist/cjs/internal/multipart.js +5 -1
  42. package/dist/cjs/internal/multipart.js.map +1 -1
  43. package/dist/dts/HttpApi.d.ts +156 -0
  44. package/dist/dts/HttpApi.d.ts.map +1 -0
  45. package/dist/dts/HttpApiBuilder.d.ts +296 -0
  46. package/dist/dts/HttpApiBuilder.d.ts.map +1 -0
  47. package/dist/dts/HttpApiClient.d.ts +31 -0
  48. package/dist/dts/HttpApiClient.d.ts.map +1 -0
  49. package/dist/dts/HttpApiEndpoint.d.ts +350 -0
  50. package/dist/dts/HttpApiEndpoint.d.ts.map +1 -0
  51. package/dist/dts/HttpApiError.d.ts +70 -0
  52. package/dist/dts/HttpApiError.d.ts.map +1 -0
  53. package/dist/dts/HttpApiGroup.d.ts +196 -0
  54. package/dist/dts/HttpApiGroup.d.ts.map +1 -0
  55. package/dist/dts/HttpApiSchema.d.ts +223 -0
  56. package/dist/dts/HttpApiSchema.d.ts.map +1 -0
  57. package/dist/dts/HttpApiSecurity.d.ts +122 -0
  58. package/dist/dts/HttpApiSecurity.d.ts.map +1 -0
  59. package/dist/dts/HttpApiSwagger.d.ts +10 -0
  60. package/dist/dts/HttpApiSwagger.d.ts.map +1 -0
  61. package/dist/dts/HttpMethod.d.ts +16 -0
  62. package/dist/dts/HttpMethod.d.ts.map +1 -1
  63. package/dist/dts/HttpRouter.d.ts +8 -0
  64. package/dist/dts/HttpRouter.d.ts.map +1 -1
  65. package/dist/dts/HttpServerResponse.d.ts +3 -3
  66. package/dist/dts/HttpServerResponse.d.ts.map +1 -1
  67. package/dist/dts/OpenApi.d.ts +348 -0
  68. package/dist/dts/OpenApi.d.ts.map +1 -0
  69. package/dist/dts/index.d.ts +40 -0
  70. package/dist/dts/index.d.ts.map +1 -1
  71. package/dist/dts/internal/apiSwagger.d.ts +2 -0
  72. package/dist/dts/internal/apiSwagger.d.ts.map +1 -0
  73. package/dist/dts/internal/httpRouter.d.ts.map +1 -1
  74. package/dist/esm/HttpApi.js +157 -0
  75. package/dist/esm/HttpApi.js.map +1 -0
  76. package/dist/esm/HttpApiBuilder.js +447 -0
  77. package/dist/esm/HttpApiBuilder.js.map +1 -0
  78. package/dist/esm/HttpApiClient.js +124 -0
  79. package/dist/esm/HttpApiClient.js.map +1 -0
  80. package/dist/esm/HttpApiEndpoint.js +169 -0
  81. package/dist/esm/HttpApiEndpoint.js.map +1 -0
  82. package/dist/esm/HttpApiError.js +59 -0
  83. package/dist/esm/HttpApiError.js.map +1 -0
  84. package/dist/esm/HttpApiGroup.js +140 -0
  85. package/dist/esm/HttpApiGroup.js.map +1 -0
  86. package/dist/esm/HttpApiSchema.js +217 -0
  87. package/dist/esm/HttpApiSchema.js.map +1 -0
  88. package/dist/esm/HttpApiSecurity.js +73 -0
  89. package/dist/esm/HttpApiSecurity.js.map +1 -0
  90. package/dist/esm/HttpApiSwagger.js +40 -0
  91. package/dist/esm/HttpApiSwagger.js.map +1 -0
  92. package/dist/esm/HttpMethod.js +1 -1
  93. package/dist/esm/HttpMethod.js.map +1 -1
  94. package/dist/esm/HttpRouter.js +5 -0
  95. package/dist/esm/HttpRouter.js.map +1 -1
  96. package/dist/esm/OpenApi.js +299 -0
  97. package/dist/esm/OpenApi.js.map +1 -0
  98. package/dist/esm/index.js +40 -0
  99. package/dist/esm/index.js.map +1 -1
  100. package/dist/esm/internal/apiSwagger.js +2 -0
  101. package/dist/esm/internal/apiSwagger.js.map +1 -0
  102. package/dist/esm/internal/httpRouter.js +5 -0
  103. package/dist/esm/internal/httpRouter.js.map +1 -1
  104. package/dist/esm/internal/multipart.js +5 -1
  105. package/dist/esm/internal/multipart.js.map +1 -1
  106. package/package.json +83 -3
  107. package/src/HttpApi.ts +342 -0
  108. package/src/HttpApiBuilder.ts +869 -0
  109. package/src/HttpApiClient.ts +228 -0
  110. package/src/HttpApiEndpoint.ts +818 -0
  111. package/src/HttpApiError.ts +113 -0
  112. package/src/HttpApiGroup.ts +365 -0
  113. package/src/HttpApiSchema.ts +384 -0
  114. package/src/HttpApiSecurity.ts +169 -0
  115. package/src/HttpApiSwagger.ts +46 -0
  116. package/src/HttpMethod.ts +19 -1
  117. package/src/HttpRouter.ts +9 -0
  118. package/src/HttpServerResponse.ts +3 -3
  119. package/src/OpenApi.ts +665 -0
  120. package/src/index.ts +50 -0
  121. package/src/internal/apiSwagger.ts +7 -0
  122. package/src/internal/httpRouter.ts +9 -0
  123. package/src/internal/multipart.ts +5 -1
@@ -0,0 +1,447 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as AST from "@effect/schema/AST";
5
+ import * as ParseResult from "@effect/schema/ParseResult";
6
+ import * as Schema from "@effect/schema/Schema";
7
+ import * as Chunk from "effect/Chunk";
8
+ import * as Context from "effect/Context";
9
+ import * as Effect from "effect/Effect";
10
+ import * as Encoding from "effect/Encoding";
11
+ import * as FiberRef from "effect/FiberRef";
12
+ import { identity } from "effect/Function";
13
+ import { globalValue } from "effect/GlobalValue";
14
+ import * as Layer from "effect/Layer";
15
+ import * as Option from "effect/Option";
16
+ import { pipeArguments } from "effect/Pipeable";
17
+ import * as Redacted from "effect/Redacted";
18
+ import { unify } from "effect/Unify";
19
+ import * as HttpApi from "./HttpApi.js";
20
+ import * as HttpApiEndpoint from "./HttpApiEndpoint.js";
21
+ import { HttpApiDecodeError } from "./HttpApiError.js";
22
+ import * as HttpApiSchema from "./HttpApiSchema.js";
23
+ import * as HttpApp from "./HttpApp.js";
24
+ import * as HttpMethod from "./HttpMethod.js";
25
+ import * as HttpMiddleware from "./HttpMiddleware.js";
26
+ import * as HttpRouter from "./HttpRouter.js";
27
+ import * as HttpServer from "./HttpServer.js";
28
+ import * as HttpServerRequest from "./HttpServerRequest.js";
29
+ import * as HttpServerResponse from "./HttpServerResponse.js";
30
+ import * as OpenApi from "./OpenApi.js";
31
+ /**
32
+ * The router that the API endpoints are attached to.
33
+ *
34
+ * @since 1.0.0
35
+ * @category router
36
+ */
37
+ export class Router extends /*#__PURE__*/HttpRouter.Tag("@effect/platform/HttpApiBuilder/Router")() {}
38
+ /**
39
+ * Build an `HttpApp` from an `HttpApi` instance, and serve it using an
40
+ * `HttpServer`.
41
+ *
42
+ * Optionally, you can provide a middleware function that will be applied to
43
+ * the `HttpApp` before serving.
44
+ *
45
+ * @since 1.0.0
46
+ * @category constructors
47
+ */
48
+ export const serve = middleware => httpApp.pipe(Effect.map(HttpServer.serve(middleware)), Layer.unwrapEffect, Layer.provide(Router.Live));
49
+ /**
50
+ * Construct an `HttpApp` from an `HttpApi` instance.
51
+ *
52
+ * @since 1.0.0
53
+ * @category constructors
54
+ */
55
+ export const httpApp = /*#__PURE__*/Effect.gen(function* () {
56
+ const api = yield* HttpApi.HttpApi;
57
+ const router = yield* Router.router;
58
+ const apiMiddleware = yield* Effect.serviceOption(Middleware);
59
+ const errorSchema = makeErrorSchema(api);
60
+ const encodeError = Schema.encodeUnknown(errorSchema);
61
+ return router.pipe(apiMiddleware._tag === "Some" ? apiMiddleware.value : identity, Effect.catchAll(error => Effect.matchEffect(encodeError(error), {
62
+ onFailure: () => Effect.die(error),
63
+ onSuccess: Effect.succeed
64
+ })));
65
+ });
66
+ /**
67
+ * Build a root level `Layer` from an `HttpApi` instance.
68
+ *
69
+ * The `Layer` will provide the `HttpApi` service, and will require the
70
+ * implementation for all the `HttpApiGroup`'s contained in the `HttpApi`.
71
+ *
72
+ * The resulting `Layer` can be provided to the `HttpApiBuilder.serve` layer.
73
+ *
74
+ * @since 1.0.0
75
+ * @category constructors
76
+ */
77
+ export const api = self => Layer.succeed(HttpApi.HttpApi, self);
78
+ /**
79
+ * @since 1.0.0
80
+ * @category handlers
81
+ */
82
+ export const HandlersTypeId = /*#__PURE__*/Symbol.for("@effect/platform/HttpApiBuilder/Handlers");
83
+ const HandlersProto = {
84
+ [HandlersTypeId]: {
85
+ _Endpoints: identity
86
+ },
87
+ pipe() {
88
+ return pipeArguments(this, arguments);
89
+ }
90
+ };
91
+ const makeHandlers = options => {
92
+ const self = Object.create(HandlersProto);
93
+ self.group = options.group;
94
+ self.handlers = options.handlers;
95
+ return self;
96
+ };
97
+ /**
98
+ * Create a `Layer` that will implement all the endpoints in an `HttpApiGroup`.
99
+ *
100
+ * An unimplemented `Handlers` instance is passed to the `build` function, which
101
+ * you can use to add handlers to the group.
102
+ *
103
+ * You can implement endpoints using the `HttpApiBuilder.handle` api.
104
+ *
105
+ * @since 1.0.0
106
+ * @category handlers
107
+ */
108
+ export const group = (api, groupName, build) => Router.use(router => Effect.gen(function* () {
109
+ const context = yield* Effect.context();
110
+ const group = Chunk.findFirst(api.groups, group => group.identifier === groupName);
111
+ if (group._tag === "None") {
112
+ throw new Error(`Group "${groupName}" not found in API`);
113
+ }
114
+ const result = build(makeHandlers({
115
+ group: group.value,
116
+ handlers: Chunk.empty()
117
+ }));
118
+ const handlers = Effect.isEffect(result) ? yield* result : result;
119
+ const routes = [];
120
+ for (const item of handlers.handlers) {
121
+ if (item._tag === "Middleware") {
122
+ for (const route of routes) {
123
+ ;
124
+ route.handler = item.middleware(route.handler);
125
+ }
126
+ } else {
127
+ routes.push(handlerToRoute(item.endpoint, function (request) {
128
+ return Effect.mapInputContext(item.handler(request), input => Context.merge(context, input));
129
+ }, item.withFullResponse));
130
+ }
131
+ }
132
+ yield* router.concat(HttpRouter.fromIterable(routes));
133
+ }));
134
+ /**
135
+ * Add the implementation for an `HttpApiEndpoint` to a `Handlers` group.
136
+ *
137
+ * @since 1.0.0
138
+ * @category handlers
139
+ */
140
+ export const handle = (name, handler, options) => self => {
141
+ const o = Chunk.findFirst(self.group.endpoints, endpoint => endpoint.name === name);
142
+ if (o._tag === "None") {
143
+ throw new Error(`Endpoint "${name}" not found in group "${self.group.identifier}"`);
144
+ }
145
+ const endpoint = o.value;
146
+ return makeHandlers({
147
+ group: self.group,
148
+ handlers: Chunk.append(self.handlers, {
149
+ _tag: "Handler",
150
+ endpoint,
151
+ handler,
152
+ withFullResponse: options?.withFullResponse === true
153
+ })
154
+ });
155
+ };
156
+ /**
157
+ * Add `HttpMiddleware` to a `Handlers` group.
158
+ *
159
+ * Any errors are required to have a corresponding schema in the API.
160
+ * You can add middleware errors to an `HttpApiGroup` using the `HttpApiGroup.addError`
161
+ * api.
162
+ *
163
+ * @since 1.0.0
164
+ * @category middleware
165
+ */
166
+ export const middleware = middleware => self => makeHandlers({
167
+ ...self,
168
+ handlers: Chunk.append(self.handlers, {
169
+ _tag: "Middleware",
170
+ middleware
171
+ })
172
+ });
173
+ /**
174
+ * @since 1.0.0
175
+ * @category middleware
176
+ */
177
+ export class Middleware extends /*#__PURE__*/Context.Tag("@effect/platform/HttpApiBuilder/Middleware")() {}
178
+ const middlewareAdd = middleware => Effect.map(Effect.context(), context => {
179
+ const current = Context.getOption(context, Middleware);
180
+ const withContext = httpApp => Effect.mapInputContext(middleware(httpApp), input => Context.merge(context, input));
181
+ return current._tag === "None" ? withContext : httpApp => withContext(current.value(httpApp));
182
+ });
183
+ const middlewareAddNoContext = middleware => Effect.map(Effect.serviceOption(Middleware), current => {
184
+ return current._tag === "None" ? middleware : httpApp => middleware(current.value(httpApp));
185
+ });
186
+ /**
187
+ * Create an `HttpApi` level middleware `Layer`.
188
+ *
189
+ * @since 1.0.0
190
+ * @category middleware
191
+ */
192
+ export const middlewareLayer = (...args) => {
193
+ const apiFirst = HttpApi.isHttpApi(args[0]);
194
+ const withContext = apiFirst ? args[2]?.withContext === true : args[1]?.withContext === true;
195
+ const add = withContext ? middlewareAdd : middlewareAddNoContext;
196
+ const middleware = apiFirst ? args[1] : args[0];
197
+ return Effect.isEffect(middleware) ? Layer.effect(Middleware, Effect.flatMap(middleware, add)) : Layer.effect(Middleware, add(middleware));
198
+ };
199
+ /**
200
+ * Create an `HttpApi` level middleware `Layer`, that has a `Scope` provided to
201
+ * the constructor.
202
+ *
203
+ * @since 1.0.0
204
+ * @category middleware
205
+ */
206
+ export const middlewareLayerScoped = (...args) => {
207
+ const apiFirst = HttpApi.isHttpApi(args[0]);
208
+ const withContext = apiFirst ? args[2]?.withContext === true : args[1]?.withContext === true;
209
+ const add = withContext ? middlewareAdd : middlewareAddNoContext;
210
+ const middleware = apiFirst ? args[1] : args[0];
211
+ return Layer.scoped(Middleware, Effect.flatMap(middleware, add));
212
+ };
213
+ /**
214
+ * A CORS middleware layer that can be provided to the `HttpApiBuilder.serve` layer.
215
+ *
216
+ * @since 1.0.0
217
+ * @category middleware
218
+ */
219
+ export const middlewareCors = options => middlewareLayer(HttpMiddleware.cors(options));
220
+ /**
221
+ * A middleware that adds an openapi.json endpoint to the API.
222
+ *
223
+ * @since 1.0.0
224
+ * @category middleware
225
+ */
226
+ export const middlewareOpenApi = options => Router.use(router => Effect.gen(function* () {
227
+ const api = yield* HttpApi.HttpApi;
228
+ const spec = OpenApi.fromApi(api);
229
+ const response = yield* HttpServerResponse.json(spec).pipe(Effect.orDie);
230
+ yield* router.get(options?.path ?? "/openapi.json", Effect.succeed(response));
231
+ }));
232
+ const bearerLen = `Bearer `.length;
233
+ /**
234
+ * @since 1.0.0
235
+ * @category middleware
236
+ */
237
+ export const securityDecode = self => {
238
+ switch (self._tag) {
239
+ case "Bearer":
240
+ {
241
+ return Effect.map(HttpServerRequest.HttpServerRequest, request => Redacted.make((request.headers.authorization ?? "").slice(bearerLen)));
242
+ }
243
+ case "ApiKey":
244
+ {
245
+ const schema = Schema.Struct({
246
+ [self.key]: Schema.String
247
+ });
248
+ const decode = unify(self.in === "query" ? HttpServerRequest.schemaSearchParams(schema) : self.in === "cookie" ? HttpServerRequest.schemaCookies(schema) : HttpServerRequest.schemaHeaders(schema));
249
+ return Effect.match(decode, {
250
+ onFailure: () => Redacted.make(""),
251
+ onSuccess: match => Redacted.make(match[self.key])
252
+ });
253
+ }
254
+ case "Basic":
255
+ {
256
+ const empty = {
257
+ username: "",
258
+ password: Redacted.make("")
259
+ };
260
+ return HttpServerRequest.HttpServerRequest.pipe(Effect.flatMap(request => Encoding.decodeBase64String(request.headers.authorization ?? "")), Effect.match({
261
+ onFailure: () => empty,
262
+ onSuccess: header => {
263
+ const parts = header.split(":");
264
+ if (parts.length !== 2) {
265
+ return empty;
266
+ }
267
+ return {
268
+ username: parts[0],
269
+ password: Redacted.make(parts[1])
270
+ };
271
+ }
272
+ }));
273
+ }
274
+ }
275
+ };
276
+ /**
277
+ * Set a cookie from an `HttpApiSecurity.HttpApiKey` instance.
278
+ *
279
+ * You can use this api before returning a response from an endpoint handler.
280
+ *
281
+ * ```ts
282
+ * ApiBuilder.handle(
283
+ * "authenticate",
284
+ * (_) => ApiBuilder.securitySetCookie(security, "secret123")
285
+ * )
286
+ * ```
287
+ *
288
+ * @since 1.0.0
289
+ * @category middleware
290
+ */
291
+ export const securitySetCookie = (self, value, options) => {
292
+ const stringValue = typeof value === "string" ? value : Redacted.value(value);
293
+ return HttpApp.appendPreResponseHandler((_req, response) => Effect.orDie(HttpServerResponse.setCookie(response, self.key, stringValue, {
294
+ secure: true,
295
+ httpOnly: true,
296
+ ...options
297
+ })));
298
+ };
299
+ /**
300
+ * Make a middleware from an `HttpApiSecurity` instance, that can be used when
301
+ * constructing a `Handlers` group.
302
+ *
303
+ * @since 1.0.0
304
+ * @category middleware
305
+ * @example
306
+ * import { HttpApiBuilder, HttpApiSecurity } from "@effect/platform"
307
+ * import { Schema } from "@effect/schema"
308
+ * import { Context, Effect, Redacted } from "effect"
309
+ *
310
+ * class User extends Schema.Class<User>("User")({
311
+ * id: Schema.Number
312
+ * }) {}
313
+ *
314
+ * class CurrentUser extends Context.Tag("CurrentUser")<CurrentUser, User>() {}
315
+ *
316
+ * class Accounts extends Context.Tag("Accounts")<Accounts, {
317
+ * readonly findUserByAccessToken: (accessToken: string) => Effect.Effect<User>
318
+ * }>() {}
319
+ *
320
+ * const securityMiddleware = Effect.gen(function*() {
321
+ * const accounts = yield* Accounts
322
+ * return HttpApiBuilder.middlewareSecurity(
323
+ * HttpApiSecurity.bearer,
324
+ * CurrentUser,
325
+ * (token) => accounts.findUserByAccessToken(Redacted.value(token))
326
+ * )
327
+ * })
328
+ */
329
+ export const middlewareSecurity = (self, tag, f) => middleware(Effect.provideServiceEffect(tag, Effect.flatMap(securityDecode(self), f)));
330
+ /**
331
+ * Make a middleware from an `HttpApiSecurity` instance, that can be used when
332
+ * constructing a `Handlers` group.
333
+ *
334
+ * This version does not supply any context to the handlers.
335
+ *
336
+ * @since 1.0.0
337
+ * @category middleware
338
+ */
339
+ export const middlewareSecurityVoid = (self, f) => middleware(httpApp => securityDecode(self).pipe(Effect.flatMap(f), Effect.zipRight(httpApp)));
340
+ // internal
341
+ const requestPayload = (request, urlParams, isMultipart) => HttpMethod.hasBody(request.method) ? isMultipart ? Effect.orDie(request.multipart) : Effect.orDie(request.json) : Effect.succeed(urlParams);
342
+ const handlerToRoute = (endpoint, handler, isFullResponse) => {
343
+ const decodePath = Option.map(endpoint.pathSchema, Schema.decodeUnknown);
344
+ const isMultipart = endpoint.payloadSchema.pipe(Option.map(schema => HttpApiSchema.getMultipart(schema.ast)), Option.getOrElse(() => false));
345
+ const decodePayload = Option.map(endpoint.payloadSchema, Schema.decodeUnknown);
346
+ const decodeHeaders = Option.map(endpoint.headersSchema, Schema.decodeUnknown);
347
+ const encoding = HttpApiSchema.getEncoding(endpoint.successSchema.ast);
348
+ const successStatus = HttpApiSchema.getStatusSuccess(endpoint.successSchema);
349
+ const encodeSuccess = Option.map(HttpApiEndpoint.schemaSuccess(endpoint), schema => {
350
+ const encode = Schema.encodeUnknown(schema);
351
+ switch (encoding.kind) {
352
+ case "Json":
353
+ {
354
+ return body => Effect.orDie(Effect.flatMap(encode(body), json => HttpServerResponse.json(json, {
355
+ status: successStatus,
356
+ contentType: encoding.contentType
357
+ })));
358
+ }
359
+ case "Text":
360
+ {
361
+ return body => Effect.map(Effect.orDie(encode(body)), text => HttpServerResponse.text(text, {
362
+ status: successStatus,
363
+ contentType: encoding.contentType
364
+ }));
365
+ }
366
+ case "Uint8Array":
367
+ {
368
+ return body => Effect.map(Effect.orDie(encode(body)), data => HttpServerResponse.uint8Array(data, {
369
+ status: successStatus,
370
+ contentType: encoding.contentType
371
+ }));
372
+ }
373
+ case "UrlParams":
374
+ {
375
+ return body => Effect.map(Effect.orDie(encode(body)), params => HttpServerResponse.urlParams(params, {
376
+ status: successStatus,
377
+ contentType: encoding.contentType
378
+ }));
379
+ }
380
+ }
381
+ });
382
+ return HttpRouter.makeRoute(endpoint.method, endpoint.path, Effect.withFiberRuntime(fiber => {
383
+ const context = fiber.getFiberRef(FiberRef.currentContext);
384
+ const request = Context.unsafeGet(context, HttpServerRequest.HttpServerRequest);
385
+ const routeContext = Context.unsafeGet(context, HttpRouter.RouteContext);
386
+ const urlParams = Context.unsafeGet(context, HttpServerRequest.ParsedSearchParams);
387
+ return (decodePath._tag === "Some" ? Effect.catchAll(decodePath.value(routeContext.params), HttpApiDecodeError.refailParseError) : Effect.succeed(routeContext.params)).pipe(Effect.bindTo("pathParams"), decodePayload._tag === "Some" ? Effect.bind("payload", _ => requestPayload(request, urlParams, isMultipart).pipe(Effect.orDie, Effect.flatMap(raw => Effect.catchAll(decodePayload.value(raw), HttpApiDecodeError.refailParseError)))) : identity, decodeHeaders._tag === "Some" ? Effect.bind("headers", _ => Effect.orDie(decodeHeaders.value(request.headers))) : identity, Effect.flatMap(input => {
388
+ const request = {
389
+ path: input.pathParams
390
+ };
391
+ if ("payload" in input) {
392
+ request.payload = input.payload;
393
+ }
394
+ if ("headers" in input) {
395
+ request.headers = input.headers;
396
+ }
397
+ return handler(request);
398
+ }), isFullResponse ? identity : encodeSuccess._tag === "Some" ? Effect.flatMap(encodeSuccess.value) : Effect.as(HttpServerResponse.empty({
399
+ status: successStatus
400
+ })));
401
+ }));
402
+ };
403
+ const astCache = /*#__PURE__*/globalValue("@effect/platform/HttpApiBuilder/astCache", () => new WeakMap());
404
+ const makeErrorSchema = api => {
405
+ const schemas = new Set();
406
+ function processSchema(schema) {
407
+ if (astCache.has(schema.ast)) {
408
+ schemas.add(astCache.get(schema.ast));
409
+ return;
410
+ }
411
+ const ast = schema.ast;
412
+ if (ast._tag === "Union") {
413
+ for (const astType of ast.types) {
414
+ const errorSchema = Schema.make(astType).annotations({
415
+ ...ast.annotations,
416
+ ...astType.annotations
417
+ });
418
+ astCache.set(astType, errorSchema);
419
+ schemas.add(errorSchema);
420
+ }
421
+ } else {
422
+ astCache.set(ast, schema);
423
+ schemas.add(schema);
424
+ }
425
+ }
426
+ processSchema(api.errorSchema);
427
+ for (const group of api.groups) {
428
+ for (const endpoint of group.endpoints) {
429
+ processSchema(endpoint.errorSchema);
430
+ }
431
+ processSchema(group.errorSchema);
432
+ }
433
+ return Schema.Union(...[...schemas].map(schema => {
434
+ const status = HttpApiSchema.getStatusError(schema);
435
+ const encoded = AST.encodedAST(schema.ast);
436
+ const isEmpty = encoded._tag === "VoidKeyword";
437
+ return Schema.transformOrFail(Schema.Any, schema, {
438
+ decode: (_, __, ast) => ParseResult.fail(new ParseResult.Forbidden(ast, _, "Encode only schema")),
439
+ encode: (error, _, ast) => isEmpty ? HttpServerResponse.empty({
440
+ status
441
+ }) : HttpServerResponse.json(error, {
442
+ status
443
+ }).pipe(Effect.mapError(error => new ParseResult.Type(ast, error, "Could not encode to JSON")))
444
+ });
445
+ }));
446
+ };
447
+ //# sourceMappingURL=HttpApiBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApiBuilder.js","names":["AST","ParseResult","Schema","Chunk","Context","Effect","Encoding","FiberRef","identity","globalValue","Layer","Option","pipeArguments","Redacted","unify","HttpApi","HttpApiEndpoint","HttpApiDecodeError","HttpApiSchema","HttpApp","HttpMethod","HttpMiddleware","HttpRouter","HttpServer","HttpServerRequest","HttpServerResponse","OpenApi","Router","Tag","serve","middleware","httpApp","pipe","map","unwrapEffect","provide","Live","gen","api","router","apiMiddleware","serviceOption","Middleware","errorSchema","makeErrorSchema","encodeError","encodeUnknown","_tag","value","catchAll","error","matchEffect","onFailure","die","onSuccess","succeed","self","HandlersTypeId","Symbol","for","HandlersProto","_Endpoints","arguments","makeHandlers","options","Object","create","group","handlers","groupName","build","use","context","findFirst","groups","identifier","Error","result","empty","isEffect","routes","item","route","handler","push","handlerToRoute","endpoint","request","mapInputContext","input","merge","withFullResponse","concat","fromIterable","handle","name","o","endpoints","append","middlewareAdd","current","getOption","withContext","middlewareAddNoContext","middlewareLayer","args","apiFirst","isHttpApi","add","effect","flatMap","middlewareLayerScoped","scoped","middlewareCors","cors","middlewareOpenApi","spec","fromApi","response","json","orDie","get","path","bearerLen","length","securityDecode","make","headers","authorization","slice","schema","Struct","key","String","decode","in","schemaSearchParams","schemaCookies","schemaHeaders","match","username","password","decodeBase64String","header","parts","split","securitySetCookie","stringValue","appendPreResponseHandler","_req","setCookie","secure","httpOnly","middlewareSecurity","tag","f","provideServiceEffect","middlewareSecurityVoid","zipRight","requestPayload","urlParams","isMultipart","hasBody","method","multipart","isFullResponse","decodePath","pathSchema","decodeUnknown","payloadSchema","getMultipart","ast","getOrElse","decodePayload","decodeHeaders","headersSchema","encoding","getEncoding","successSchema","successStatus","getStatusSuccess","encodeSuccess","schemaSuccess","encode","kind","body","status","contentType","text","data","uint8Array","params","makeRoute","withFiberRuntime","fiber","getFiberRef","currentContext","unsafeGet","routeContext","RouteContext","ParsedSearchParams","refailParseError","bindTo","bind","_","raw","pathParams","payload","as","astCache","WeakMap","schemas","Set","processSchema","has","astType","types","annotations","set","Union","getStatusError","encoded","encodedAST","isEmpty","transformOrFail","Any","__","fail","Forbidden","mapError","Type"],"sources":["../../src/HttpApiBuilder.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as ParseResult from "@effect/schema/ParseResult";
5
+ import * as Schema from "@effect/schema/Schema";
6
+ import * as Context from "effect/Context";
7
+ import * as Effect from "effect/Effect";
8
+ import { identity } from "effect/Function";
9
+ import * as Option from "effect/Option";
10
+ import * as HttpApi from "./HttpApi.js";
11
+ import * as HttpApiSchema from "./HttpApiSchema.js";
12
+ import * as HttpClient from "./HttpClient.js";
13
+ import * as HttpClientError from "./HttpClientError.js";
14
+ import * as HttpClientRequest from "./HttpClientRequest.js";
15
+ import * as HttpClientResponse from "./HttpClientResponse.js";
16
+ import * as HttpMethod from "./HttpMethod.js";
17
+ /**
18
+ * @since 1.0.0
19
+ * @category constructors
20
+ */
21
+ export const make = (api, options) => Effect.gen(function* () {
22
+ const context = yield* Effect.context();
23
+ const httpClient = (yield* HttpClient.HttpClient).pipe(options?.baseUrl === undefined ? identity : HttpClient.mapRequest(HttpClientRequest.prependUrl(options.baseUrl)), options?.transformClient === undefined ? identity : options.transformClient);
24
+ const client = {};
25
+ HttpApi.reflect(api, {
26
+ onGroup({
27
+ group
28
+ }) {
29
+ client[group.identifier] = {};
30
+ },
31
+ onEndpoint({
32
+ endpoint,
33
+ errors,
34
+ group,
35
+ successAST,
36
+ successEncoding,
37
+ successStatus
38
+ }) {
39
+ const makeUrl = compilePath(endpoint.path);
40
+ const successDecode = successAST.pipe(Option.map(ast => {
41
+ const schema = Schema.make(ast);
42
+ switch (successEncoding.kind) {
43
+ case "Json":
44
+ {
45
+ return HttpClientResponse.schemaBodyJson(schema);
46
+ }
47
+ case "UrlParams":
48
+ {
49
+ return HttpClientResponse.schemaBodyUrlParams(schema);
50
+ }
51
+ case "Uint8Array":
52
+ {
53
+ return response => response.arrayBuffer.pipe(Effect.map(buffer => new Uint8Array(buffer)), Effect.flatMap(Schema.decodeUnknown(schema)));
54
+ }
55
+ case "Text":
56
+ {
57
+ return response => Effect.flatMap(response.text, Schema.decodeUnknown(schema));
58
+ }
59
+ }
60
+ }));
61
+ const handleError = (request, response) => {
62
+ const error = errors.get(response.status);
63
+ if (error === undefined) {
64
+ return Effect.die(new HttpClientError.ResponseError({
65
+ reason: "Decode",
66
+ request,
67
+ response
68
+ }));
69
+ } else if (Option.isNone(error)) {
70
+ return Effect.fail(new HttpClientError.ResponseError({
71
+ reason: "StatusCode",
72
+ request,
73
+ response
74
+ }));
75
+ }
76
+ const decode = Schema.decodeUnknown(Schema.make(error.value));
77
+ return response.text.pipe(Effect.flatMap(text => text === "" ? Effect.void : Effect.try({
78
+ try: () => JSON.parse(text),
79
+ catch: cause => new HttpClientError.ResponseError({
80
+ reason: "Decode",
81
+ request,
82
+ response,
83
+ cause
84
+ })
85
+ })), Effect.flatMap(json => Effect.mapError(decode(json), cause => new HttpClientError.ResponseError({
86
+ reason: "Decode",
87
+ request,
88
+ response,
89
+ cause
90
+ }))), Effect.flatMap(Effect.fail));
91
+ };
92
+ const isMultipart = endpoint.payloadSchema.pipe(Option.map(schema => HttpApiSchema.getMultipart(schema.ast)), Option.getOrElse(() => false));
93
+ const encodePayload = endpoint.payloadSchema.pipe(Option.filter(() => !isMultipart), Option.map(Schema.encodeUnknown));
94
+ const encodeHeaders = endpoint.headersSchema.pipe(Option.map(Schema.encodeUnknown));
95
+ client[group.identifier][endpoint.name] = request => {
96
+ const url = request && request.path ? makeUrl(request && request.path) : endpoint.path;
97
+ const baseRequest = HttpClientRequest.make(endpoint.method)(url);
98
+ return (isMultipart ? Effect.succeed(baseRequest.pipe(HttpClientRequest.formDataBody(request.payload))) : encodePayload._tag === "Some" ? encodePayload.value(request.payload).pipe(Effect.flatMap(payload => HttpMethod.hasBody(endpoint.method) ? HttpClientRequest.jsonBody(baseRequest, payload) : Effect.succeed(HttpClientRequest.setUrlParams(baseRequest, payload))), Effect.orDie) : Effect.succeed(baseRequest)).pipe(encodeHeaders._tag === "Some" ? Effect.flatMap(httpRequest => encodeHeaders.value(request.headers).pipe(Effect.orDie, Effect.map(headers => HttpClientRequest.setHeaders(httpRequest, headers)))) : identity, Effect.flatMap(request => Effect.flatMap(httpClient(request), response => response.status !== successStatus ? handleError(request, response) : Effect.succeed(response))), successDecode._tag === "Some" ? Effect.flatMap(successDecode.value) : Effect.asVoid, Effect.scoped, Effect.catchIf(ParseResult.isParseError, Effect.die), Effect.mapInputContext(input => Context.merge(context, input)));
99
+ };
100
+ }
101
+ });
102
+ return client;
103
+ });
104
+ // ----------------------------------------------------------------------------
105
+ const paramsRegex = /:(\w+)[^/]*/g;
106
+ const compilePath = path => {
107
+ const segments = path.split(paramsRegex);
108
+ const len = segments.length;
109
+ if (len === 1) {
110
+ return _ => path;
111
+ }
112
+ return params => {
113
+ let url = segments[0];
114
+ for (let i = 1; i < len; i++) {
115
+ if (i % 2 === 0) {
116
+ url += segments[i];
117
+ } else {
118
+ url += params[segments[i]];
119
+ }
120
+ }
121
+ return url;
122
+ };
123
+ };
124
+ //# sourceMappingURL=HttpApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApiClient.js","names":["ParseResult","Schema","Context","Effect","identity","Option","HttpApi","HttpApiSchema","HttpClient","HttpClientError","HttpClientRequest","HttpClientResponse","HttpMethod","make","api","options","gen","context","httpClient","pipe","baseUrl","undefined","mapRequest","prependUrl","transformClient","client","reflect","onGroup","group","identifier","onEndpoint","endpoint","errors","successAST","successEncoding","successStatus","makeUrl","compilePath","path","successDecode","map","ast","schema","kind","schemaBodyJson","schemaBodyUrlParams","response","arrayBuffer","buffer","Uint8Array","flatMap","decodeUnknown","text","handleError","request","error","get","status","die","ResponseError","reason","isNone","fail","decode","value","void","try","JSON","parse","catch","cause","json","mapError","isMultipart","payloadSchema","getMultipart","getOrElse","encodePayload","filter","encodeUnknown","encodeHeaders","headersSchema","name","url","baseRequest","method","succeed","formDataBody","payload","_tag","hasBody","jsonBody","setUrlParams","orDie","httpRequest","headers","setHeaders","asVoid","scoped","catchIf","isParseError","mapInputContext","input","merge","paramsRegex","segments","split","len","length","_","params","i"],"sources":["../../src/HttpApiClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}