@trpc/openapi
Version:
125 lines (124 loc) • 4.21 kB
JavaScript
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