@beignet/core
Version:
Core framework primitives for Beignet
36 lines • 1.59 kB
JavaScript
import { compareQueryTransportFields, formatQueryTransportMismatch, getObjectSchemaShape, } from "./schema-shape.js";
/** Assert that a plain contract config declares one transport per query. */
export function assertContractQueryTransport(contract) {
if (contract.query && !contract.queryTransport) {
throw new Error(`Contract "${contract.name}" declares a query schema without a query transport. Pass defineQueryTransport(...) as the second argument to .query(...).`);
}
if (!contract.query && contract.queryTransport) {
throw new Error(`Contract "${contract.name}" declares a query transport without a query schema.`);
}
if (contract.query && contract.queryTransport) {
const shape = getObjectSchemaShape(contract.query);
if (!shape)
return;
const schemaKeys = Object.keys(shape);
const transportKeys = Object.keys(contract.queryTransport.fields);
if (!compareQueryTransportFields({ schemaKeys, transportKeys })) {
throw new Error(formatQueryTransportMismatch({
contractName: contract.name,
schemaKeys,
transportKeys,
}));
}
}
}
/**
* Resolve a contract builder or plain config to the underlying contract config.
*
* @param c - The contract-like object to resolve
* @returns The underlying HttpContractConfig
*/
export function resolveContract(c) {
const contract = ("config" in c ? c.config : c);
assertContractQueryTransport(contract);
return contract;
}
//# sourceMappingURL=contract-like.js.map