1+ import { createServer } from "http"
2+
13import * as NodeContext from "@effect/platform-node/NodeContext"
24import * as NodeHttpServer from "@effect/platform-node/NodeHttpServer"
35import type * as HttpApp from "@effect/platform/HttpApp"
46import * as HttpClient from "@effect/platform/HttpClient"
57import * as HttpClientRequest from "@effect/platform/HttpClientRequest"
8+ import * as HttpRouter from "@effect/platform/HttpRouter"
69import * as HttpServer from "@effect/platform/HttpServer"
7- import type * as Api from "effect-http/Api"
8- import * as Client from "effect-http/Client"
9- import type * as SwaggerRouter from "effect-http/SwaggerRouter"
1010import * as Deferred from "effect/Deferred"
1111import * as Effect from "effect/Effect"
1212import * as Layer from "effect/Layer"
13- import { createServer } from "http"
13+
14+ import type * as Api from "effect-http/Api"
15+ import type * as ApiEndpoint from "effect-http/ApiEndpoint"
16+ import * as Client from "effect-http/Client"
17+ import * as Handler from "effect-http/Handler"
18+ import type * as SwaggerRouter from "effect-http/SwaggerRouter"
19+
1420import * as NodeSwaggerFiles from "../NodeSwaggerFiles.js"
1521
1622/** @internal */
@@ -27,8 +33,6 @@ const startTestServer = <R, E>(
2733 Effect . flatMap ( ( url ) => Deferred . succeed ( allocatedUrl , url ) ) ,
2834 Effect . flatMap ( ( ) => Layer . launch ( HttpServer . serve ( app ) ) ) ,
2935 Effect . provide ( NodeServerLive ) ,
30- Effect . provide ( NodeSwaggerFiles . SwaggerFilesLive ) ,
31- Effect . provide ( NodeContext . layer ) ,
3236 Effect . forkScoped ,
3337 Effect . flatMap ( ( ) => Deferred . await ( allocatedUrl ) )
3438 ) )
@@ -39,28 +43,54 @@ export const make = <R, E, A extends Api.Api.Any>(
3943 api : A ,
4044 options ?: Partial < Client . Options >
4145) =>
42- Effect . map ( startTestServer ( app ) , ( url ) =>
43- Client . make ( api , {
44- ...options ,
45- httpClient : ( options ?. httpClient ?? HttpClient . fetch ) . pipe (
46+ startTestServer ( app ) . pipe (
47+ Effect . map ( ( url ) =>
48+ Client . make ( api , {
49+ ...options ,
50+ httpClient : ( options ?. httpClient ?? HttpClient . fetch ) . pipe (
51+ HttpClient . mapRequest ( HttpClientRequest . prependUrl ( url ) ) ,
52+ HttpClient . transformResponse (
53+ HttpClient . withFetchOptions ( { keepalive : false } )
54+ )
55+ )
56+ } )
57+ ) ,
58+ Effect . provide ( NodeSwaggerFiles . SwaggerFilesLive ) ,
59+ Effect . provide ( NodeContext . layer )
60+ )
61+
62+ /** @internal */
63+ export const makeRaw = < R , E > (
64+ app : HttpApp . Default < E , R | SwaggerRouter . SwaggerFiles >
65+ ) =>
66+ startTestServer ( app ) . pipe (
67+ Effect . map ( ( url ) =>
68+ HttpClient . fetch . pipe (
4669 HttpClient . mapRequest ( HttpClientRequest . prependUrl ( url ) ) ,
4770 HttpClient . transformResponse (
4871 HttpClient . withFetchOptions ( { keepalive : false } )
4972 )
5073 )
51- } ) )
74+ ) ,
75+ Effect . provide ( NodeSwaggerFiles . SwaggerFilesLive ) ,
76+ Effect . provide ( NodeContext . layer )
77+ )
5278
5379/** @internal */
54- export const makeRaw = < R , E > (
55- app : HttpApp . Default < E , R | SwaggerRouter . SwaggerFiles >
80+ export const handler = < A extends ApiEndpoint . ApiEndpoint . Any , E , R > (
81+ handler : Handler . Handler < A , E , R >
5682) =>
57- Effect . map ( startTestServer ( app ) , ( url ) =>
58- HttpClient . fetch . pipe (
59- HttpClient . mapRequest ( HttpClientRequest . prependUrl ( url ) ) ,
60- HttpClient . transformResponse (
61- HttpClient . withFetchOptions ( { keepalive : false } )
83+ startTestServer ( HttpRouter . fromIterable ( [ Handler . getRoute ( handler ) ] ) ) . pipe (
84+ Effect . map ( ( url ) =>
85+ HttpClient . fetch . pipe (
86+ HttpClient . mapRequest ( HttpClientRequest . prependUrl ( url ) ) ,
87+ HttpClient . transformResponse (
88+ HttpClient . withFetchOptions ( { keepalive : false } )
89+ )
6290 )
63- ) )
91+ ) ,
92+ Effect . provide ( NodeContext . layer )
93+ )
6494
6595/** @internal */
6696const serverUrl = Effect . map ( HttpServer . HttpServer , ( server ) => {
0 commit comments