class MiddlewareError extends Data.TaggedError("MiddlewareError")<{
message: string;
}> {}
const viteMiddleware = HttpMiddleware.make((app) =>
Effect.gen(function* () {
if (!viteDevServer) return yield* app;
const request = yield* HttpServerRequest.HttpServerRequest;
const req = NodeHttpServerRequest.toIncomingMessage(request);
const res = NodeHttpServerRequest.toServerResponse(request);
return yield* Effect.async<
Effect.Effect.Success<typeof app>,
Effect.Effect.Error<typeof app> | MiddlewareError,
Effect.Effect.Context<typeof app>
>((resume) => {
const listener = () => {
resume(
Effect.succeed(
HttpServerResponse.raw(null, {
status: res.statusCode,
statusText: res.statusMessage,
}),
),
);
};
res.once("finish", listener);
const next = (err?: any) => {
if (err) {
return resume(
Effect.fail(new MiddlewareError({ message: String(err) })),
);
}
res.off("finish", listener);
return resume(app);
};
viteDevServer.middlewares(req, res, next);
});
}),
);
class MiddlewareError extends Data.TaggedError("MiddlewareError")<{
message: string;
}> {}
const viteMiddleware = HttpMiddleware.make((app) =>
Effect.gen(function* () {
if (!viteDevServer) return yield* app;
const request = yield* HttpServerRequest.HttpServerRequest;
const req = NodeHttpServerRequest.toIncomingMessage(request);
const res = NodeHttpServerRequest.toServerResponse(request);
return yield* Effect.async<
Effect.Effect.Success<typeof app>,
Effect.Effect.Error<typeof app> | MiddlewareError,
Effect.Effect.Context<typeof app>
>((resume) => {
const listener = () => {
resume(
Effect.succeed(
HttpServerResponse.raw(null, {
status: res.statusCode,
statusText: res.statusMessage,
}),
),
);
};
res.once("finish", listener);
const next = (err?: any) => {
if (err) {
return resume(
Effect.fail(new MiddlewareError({ message: String(err) })),
);
}
res.off("finish", listener);
return resume(app);
};
viteDevServer.middlewares(req, res, next);
});
}),
);