solid-start-trpc
Version:
```ts import { createSolidAPIHandler } from "solid-start-trpc";
47 lines (46 loc) • 1.51 kB
JavaScript
import { getPath, notFoundError } from "./utils";
import { resolveHTTPResponse } from "@trpc/server/http";
export function createSolidAPIHandler(opts) {
return async (args) => {
const path = getPath(args);
if (path === null) {
return notFoundError(opts);
}
const res = {
headers: {},
};
const url = new URL(args.request.url);
const req = {
query: url.searchParams,
method: args.request.method,
headers: Object.fromEntries(args.request.headers),
body: await args.request.text(),
};
const result = await resolveHTTPResponse({
router: opts.router,
responseMeta: opts.responseMeta,
req,
path,
createContext: async () => await opts.createContext?.({
req: args.request,
res,
}),
});
const mRes = new Response(result.body, {
status: result.status,
});
for (const [key, value] of Object.entries(result.headers ? { ...res.headers, ...result.headers } : res.headers)) {
if (typeof value === "undefined") {
continue;
}
if (typeof value === "string") {
mRes.headers.set(key, value);
continue;
}
for (const v of value) {
mRes.headers.append(key, v);
}
}
return mRes;
};
}