trpc-playground
Version:
playground for running tRPC queries in the browser
69 lines (66 loc) • 1.97 kB
JavaScript
import {
resolveConfig
} from "./chunk-YYRHFXX6.js";
// src/handler.ts
import { renderPlaygroundPage } from "@trpc-playground/html";
import { defineHandler } from "uttp";
var handler = defineHandler(async (helpers, config) => {
const resolvedConfig = resolveConfig(config);
let htmlPlaygroundPage = void 0;
if (resolvedConfig.server?.serveHtml) {
htmlPlaygroundPage = renderPlaygroundPage({
...resolvedConfig.renderOptions,
clientConfig: resolvedConfig
});
}
const types = await resolvedConfig.resolveTypes(config.router);
const stringifiedTypes = JSON.stringify(types);
return {
async handleRequest(request) {
if (request.method === "HEAD") {
return {
status: 204,
body: void 0
};
}
if (request.method === "GET" && resolvedConfig.server.serveHtml) {
return {
status: 200,
headers: {
"Content-Type": "text/html"
},
body: htmlPlaygroundPage
};
}
if (request.method === "POST") {
let body;
const rawBody = request.rawRequest.body;
if (typeof rawBody === "object" && rawBody !== null && "operation" in rawBody) {
body = rawBody;
} else {
try {
body = await helpers.parseBodyAsString(request.rawRequest);
} catch {
return { status: 413, body: void 0 };
}
}
const bodyObject = typeof body === "string" ? JSON.parse(body) : body;
if (bodyObject.operation === "getRouterSchema") {
return {
headers: {
"Content-Type": "application/json"
},
status: 200,
body: stringifiedTypes
};
}
return { status: 400, body: void 0 };
}
return { status: 400, body: void 0 };
},
adapterOptions: { maxBodySize: resolvedConfig.server.maxBodySize }
};
});
export {
handler
};