UNPKG

@zenstackhq/server

Version:

ZenStack server-side adapters

75 lines 2.54 kB
"use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion */ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = factory; const api_1 = require("../api"); const shared_1 = require("../shared"); /** * Creates a TanStack Start server route handler which encapsulates Prisma CRUD operations. * * @param options Options for initialization * @returns A TanStack Start server route handler */ function factory(options) { const { modelMeta, zodSchemas } = (0, shared_1.loadAssets)(options); const requestHandler = options.handler || (0, api_1.RPCApiHandler)(); return async ({ request, params }) => { const prisma = (await options.getPrisma(request, params)); if (!prisma) { return new Response(JSON.stringify({ message: 'unable to get prisma from request context' }), { status: 500, headers: { 'Content-Type': 'application/json', }, }); } const url = new URL(request.url); const query = Object.fromEntries(url.searchParams); // Extract path from params._splat for catch-all routes const path = params._splat; if (!path) { return new Response(JSON.stringify({ message: 'missing path parameter' }), { status: 400, headers: { 'Content-Type': 'application/json', }, }); } let requestBody; if (request.body) { try { requestBody = await request.json(); } catch { // noop } } try { const r = await requestHandler({ method: request.method, path, query, requestBody, prisma, modelMeta, zodSchemas, logger: options.logger, }); return new Response(JSON.stringify(r.body), { status: r.status, headers: { 'Content-Type': 'application/json', }, }); } catch (err) { return new Response(JSON.stringify({ message: `An unhandled error occurred: ${err}` }), { status: 500, headers: { 'Content-Type': 'application/json', }, }); } }; } //# sourceMappingURL=handler.js.map