// http.live.ts
import { HttpClient, HttpClientRequest } from "@effect/platform";
import { Config, Effect } from "effect";
export const makeHttpClient = Effect.gen(function* () {
const baseURL = yield* Config.string("BASE_PATH");
const defaultClient = yield* HttpClient.HttpClient;
return defaultClient.pipe(HttpClient.mapRequest(HttpClientRequest.prependUrl(baseURL)));
});
// http.client.ts
import * as Platform from "@effect/platform";
import { Context, Layer } from "effect";
import { makeHttpClient } from "./http.live";
export class HttpClient extends Context.Tag("@app/http-client")<
HttpClient,
Platform.HttpClient.HttpClient.Service
>() {
static Layer = Layer.effect(HttpClient, makeHttpClient);
static Live = Layer.provide(HttpClient.Layer, Platform.FetchHttpClient.layer);
}
// runtime.ts
export const AppLayer = Layer.mergeAll(NodeFileSystem.layer, Path.layer, HttpClient.Live);
// http.live.ts
import { HttpClient, HttpClientRequest } from "@effect/platform";
import { Config, Effect } from "effect";
export const makeHttpClient = Effect.gen(function* () {
const baseURL = yield* Config.string("BASE_PATH");
const defaultClient = yield* HttpClient.HttpClient;
return defaultClient.pipe(HttpClient.mapRequest(HttpClientRequest.prependUrl(baseURL)));
});
// http.client.ts
import * as Platform from "@effect/platform";
import { Context, Layer } from "effect";
import { makeHttpClient } from "./http.live";
export class HttpClient extends Context.Tag("@app/http-client")<
HttpClient,
Platform.HttpClient.HttpClient.Service
>() {
static Layer = Layer.effect(HttpClient, makeHttpClient);
static Live = Layer.provide(HttpClient.Layer, Platform.FetchHttpClient.layer);
}
// runtime.ts
export const AppLayer = Layer.mergeAll(NodeFileSystem.layer, Path.layer, HttpClient.Live);