@trpc/openapi
Version:
140 lines (136 loc) • 5.41 kB
JavaScript
import { __commonJS, __toESM } from "../chunk-CJ2cON1m.mjs";
import { require_objectSpread2 } from "../objectSpread2-Blgb1OZh.mjs";
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js
var require_objectWithoutPropertiesLoose = __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 = __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 = __toESM(require_objectSpread2(), 1);
var import_objectWithoutProperties = __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
export { configureTRPCHeyApiClient, createTRPCErrorInterceptor, createTRPCHeyApiClientConfig, createTRPCHeyApiTypeResolvers };
//# sourceMappingURL=index.mjs.map