UNPKG

@trpc/openapi

Version:

OpenAPI document generator for tRPC routers

141 lines (137 loc) 5.58 kB
const require_objectSpread2$1 = require('../objectSpread2-Cw30I7tb.cjs'); //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js var require_objectWithoutPropertiesLoose = require_objectSpread2$1.__commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js"(exports, module) { 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; } module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js var require_objectWithoutProperties = require_objectSpread2$1.__commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js"(exports, module) { var objectWithoutPropertiesLoose = require_objectWithoutPropertiesLoose(); function _objectWithoutProperties$1(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; } module.exports = _objectWithoutProperties$1, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region src/heyapi/index.ts var import_objectSpread2 = require_objectSpread2$1.__toESM(require_objectSpread2$1.require_objectSpread2(), 1); var import_objectWithoutProperties = require_objectSpread2$1.__toESM(require_objectWithoutProperties(), 1); 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"); return void 0; }, number(ctx) { if (ctx.schema.format === "bigint") return ctx.$.type("bigint"); return void 0; } }; } /** * @internal - Prefer `configureTRPCHeyApiClient` */ function createTRPCHeyApiClientConfig(opts) { const transformer = (opts === null || opts === void 0 ? void 0 : opts.transformer) ? resolveTransformer(opts.transformer) : void 0; return (0, import_objectSpread2.default)({ 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 = (0, import_objectWithoutProperties.default)(opts, _excluded); const trpcConfig = createTRPCHeyApiClientConfig({ transformer }); client.setConfig((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, heyConfig), trpcConfig)); if (transformer) client.interceptors.error.use(createTRPCErrorInterceptor(transformer)); } //#endregion exports.configureTRPCHeyApiClient = configureTRPCHeyApiClient; exports.createTRPCErrorInterceptor = createTRPCErrorInterceptor; exports.createTRPCHeyApiClientConfig = createTRPCHeyApiClientConfig; exports.createTRPCHeyApiTypeResolvers = createTRPCHeyApiTypeResolvers;