@beignet/core
Version:
Core framework primitives for Beignet
30 lines (26 loc) • 793 B
text/typescript
import type { HttpContractConfig } from "./types.js";
/**
* Contract input accepted by APIs that can unwrap builders.
*/
export type ContractLike = HttpContractConfig | { config: HttpContractConfig };
/**
* Resolve a contract-like type to its plain `HttpContractConfig`.
*/
export type ResolveContract<T> = T extends { config: infer C }
? C extends HttpContractConfig
? C
: never
: T extends HttpContractConfig
? T
: never;
/**
* 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<T extends ContractLike>(
c: T,
): ResolveContract<T> {
return ("config" in c ? c.config : c) as ResolveContract<T>;
}