@@ -7,2 +7,3 @@ import { pipe } from "@effect/data/Function"; | ||
| return E.gen(function* (s) { | ||
| var _a; | ||
| let mutable_request = request; | ||
@@ -17,5 +18,6 @@ let request_response = request; | ||
| const run = interceptor.request.bind(interceptor); | ||
| const result = yield* s(E.logDebug("Executing interceptor"), E.flatMap(() => run(mutable_request)), E.tap(() => E.logDebug("Exiting interceptor")), E.annotateLogs("interceptor", name), E.annotateLogs("type", "Request"), E.withLogSpan("ms")); | ||
| const result = yield* s(E.logDebug("Interceptor ->"), E.annotateLogs("type", "Request"), E.annotateLogs("interceptor", name), E.flatMap(() => run(mutable_request)), E.tap(() => E.logDebug("<- Interceptor")), E.withLogSpan("ms")); | ||
| if (interpreter.isResponse(result)) { | ||
| request_response = result; | ||
| yield* s(E.logDebug("Request -> Response")); | ||
| break; | ||
@@ -31,3 +33,3 @@ } | ||
| ? request_response | ||
| : yield* s(E.logDebug("Executing request"), E.flatMap(() => interpreter.execute(mutable_request)), E.tap(() => E.logDebug("Request done")), E.withLogSpan("ms")); | ||
| : yield* s(E.logDebug("-> Request"), E.annotateLogs("url", mutable_request.url), E.annotateLogs("method", (_a = mutable_request.init.method) !== null && _a !== void 0 ? _a : "GET"), E.flatMap(() => interpreter.execute(mutable_request)), E.tap(() => E.logDebug("Response <-")), E.withLogSpan("ms")); | ||
| if (interceptors) { | ||
@@ -39,3 +41,3 @@ for (const interceptor of interceptors) { | ||
| const run = interceptor.response.bind(interceptor); | ||
| mutable_response = yield* s(E.logDebug("Executing interceptor"), E.flatMap(() => run(mutable_response, mutable_request)), E.tap(() => E.logDebug("Exiting interceptor")), E.annotateLogs("interceptor", name), E.annotateLogs("type", "Response"), E.withLogSpan("ms")); | ||
| mutable_response = yield* s(E.logDebug("Interceptor ->"), E.annotateLogs("type", "Response"), E.annotateLogs("interceptor", name), E.flatMap(() => run(mutable_response, mutable_request)), E.tap(() => E.logDebug("<- Interceptor")), E.withLogSpan("ms")); | ||
| } | ||
@@ -42,0 +44,0 @@ } |
+1
-1
| { | ||
| "name": "http-kit", | ||
| "version": "0.3.0", | ||
| "version": "0.3.1", | ||
| "type": "module", | ||
@@ -5,0 +5,0 @@ "description": "Platform agnostic fetch kit for the Effect package", |
+47
-5
@@ -5,8 +5,50 @@ # Http Kit | ||
| - Supports Request and Response interceptors | ||
| - Supports interceptors | ||
| - Uses Native Web Platform APIs | ||
| - Type safety, correctly typed responses and errors | ||
| - Cross platform i.e Deno, Node etc | ||
| - Inversion of control i.e Dependency injection | ||
| - Extendable using adapters | ||
| - Request and Response utilities | ||
| - Cross platform i.e Deno, Node etc using adapters | ||
| ## Getting started | ||
| ```bash | ||
| npm i http-kit @http-kit/client | ||
| npm i @effect/io @effect/data | ||
| ``` | ||
| ```ts | ||
| import * as Http from "http-kit"; | ||
| import * as HttpClient from "@http-kit/client"; | ||
| import * as FetchAdapter from "http-kit/fetch"; | ||
| const client = new HttpClient.Builder() | ||
| .setBaseUrl("https://reqres.in/api") | ||
| .setAdapter(FetchAdapter.adapter) | ||
| .build(); | ||
| const getUser = Effect.gen(function* (_) { | ||
| const http = yield* _(HttpClient.HttpClient); | ||
| return yield* _( | ||
| http.get("/users/2"), | ||
| Http.filterStatusOk, | ||
| Http.toJson, | ||
| Effect.map((_) => _.data), | ||
| Effect.flatMap(S.parse(User)) | ||
| ); | ||
| }).pipe( | ||
| Effect.tap((data) => Effect.sync(() => console.log(data))), | ||
| Effect.tapErrorCause((error) => Effect.sync(() => console.error(error))) | ||
| ); | ||
| Effect.runFork( | ||
| pipe( | ||
| getUser, | ||
| Effect.provideLayer(client.makeLayer()), | ||
| Logger.withMinimumLogLevel(LoggerLevel.Debug) | ||
| ) | ||
| ); | ||
| ``` | ||
| ## Examples | ||
| [link](playground/basic) |
20140
5.33%383
0.79%53
341.67%