UNPKG

@trpc/openapi

Version:

OpenAPI document generator for tRPC routers

125 lines (124 loc) • 4.21 kB
import { t as _objectSpread2 } from "../objectSpread2-Dh4InpQf.mjs"; //#region \0@oxc-project+runtime@0.149.0/helpers/esm/objectWithoutPropertiesLoose.js function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } //#endregion //#region \0@oxc-project+runtime@0.149.0/helpers/esm/objectWithoutProperties.js function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } //#endregion //#region src/heyapi/index.ts const _excluded = ["transformer"]; function resolveTransformer(transformer) { if ("input" in transformer) return transformer; return { input: transformer, output: transformer }; } /** * Returns the `~resolvers` object for the `@hey-api/typescript` plugin. * * Maps `date` and `date-time` string formats to `Date` so that the * generated SDK uses `Date` instead of `string` for those fields. * * @example * ```ts * import { createClient } from '@hey-api/openapi-ts'; * import { createTRPCHeyApiTypeResolvers } from '@trpc/openapi/heyapi'; * * await createClient({ * plugins: [ * { name: '@hey-api/typescript', '~resolvers': createTRPCHeyApiTypeResolvers() }, * ], * }); * ``` */ function createTRPCHeyApiTypeResolvers() { return { string(ctx) { if (ctx.schema.format === "date-time" || ctx.schema.format === "date") return ctx.$.type("Date"); }, number(ctx) { if (ctx.schema.format === "bigint") return ctx.$.type("bigint"); } }; } /** * @internal - Prefer `configureTRPCHeyApiClient` */ function createTRPCHeyApiClientConfig(opts) { const transformer = (opts === null || opts === void 0 ? void 0 : opts.transformer) ? resolveTransformer(opts.transformer) : void 0; return _objectSpread2({ querySerializer: (query) => { const params = new URLSearchParams(); for (const [key, value] of Object.entries(query)) { if (value === void 0) continue; if (key === "input" && transformer) params.append(key, JSON.stringify(transformer.input.serialize(value))); else params.append(key, JSON.stringify(value)); } return params.toString(); } }, transformer && { bodySerializer: (body) => { return JSON.stringify(transformer.input.serialize(body)); }, responseTransformer: async (data) => { if (!!data && typeof data === "object" && "result" in data) { const result = data.result; if (!result.type || result.type === "data") result.data = transformer.output.deserialize(result.data); } return data; } }); } /** * @internal - Prefer `configureTRPCHeyApiClient` */ function createTRPCErrorInterceptor(transformerOpts) { const transformer = resolveTransformer(transformerOpts); return (error) => { if (!!error && typeof error === "object" && "error" in error) error.error = transformer.output.deserialize(error.error); return error; }; } /** * Configures a hey-api client for use with a tRPC OpenAPI backend. * * Sets up querySerializer, bodySerializer, responseTransformer, and * an error interceptor (for transformer-based error deserialization) * in a single call. * * @example * ```ts * import { configureTRPCHeyApiClient } from '@trpc/openapi/heyapi'; * import superjson from 'superjson'; * import { client } from './generated/client.gen'; * * configureTRPCHeyApiClient(client, { * baseUrl: 'http://localhost:3000', * transformer: superjson, * }); * ``` */ function configureTRPCHeyApiClient(client, opts) { const { transformer } = opts, heyConfig = _objectWithoutProperties(opts, _excluded); const trpcConfig = createTRPCHeyApiClientConfig({ transformer }); client.setConfig(_objectSpread2(_objectSpread2({}, heyConfig), trpcConfig)); if (transformer) client.interceptors.error.use(createTRPCErrorInterceptor(transformer)); } //#endregion export { configureTRPCHeyApiClient, createTRPCErrorInterceptor, createTRPCHeyApiClientConfig, createTRPCHeyApiTypeResolvers }; //# sourceMappingURL=index.mjs.map