UNPKG

bananas-commerce

Version:

A client for bananas-commerce with support for TypeScript

27 lines (26 loc) 1.3 kB
import { Extension } from "./extension.js"; import { FetchConfig, OpenapiPaths } from "./deps/deno.land/x/openapi_ts_fetch@2.1.0/types.js"; interface FixedLengthArray<T extends unknown, L extends number> extends Array<T> { 0: T; length: L; } type ConvertToTuple<T extends Extension<string, unknown, Record<string, unknown>>> = T extends { name: infer Name; } ? Name extends PropertyKey ? [Name, T] : never : never; export type Client<T extends Extension<string, unknown, Record<string, unknown>>[]> = { [K in ConvertToTuple<T[number]> as K[0]]: Omit<K[1], "name" | "load">; }; type SpreadTuple<T extends readonly unknown[]> = T extends [ Extension<string, unknown, infer F> ] ? F : T extends [Extension<string, unknown, infer F>, ...infer R] ? F & SpreadTuple<R> : never; export declare function generateClient<P, Paths extends OpenapiPaths<P>, N extends number, T extends FixedLengthArray<Extension<string, Paths, Record<string, unknown>>, N>>(options: { config: SpreadTuple<T>; } & FetchConfig & { extensions: T; }): Client<T>; /** * Middleware for `generateClient({ use: [ ...middleware ]})`. * Must `return await next(url, init)` to properly wrap the request. */ export type Middleware = NonNullable<Parameters<typeof generateClient>[0]["use"]>[number]; export {};