Globals.d.ts
Features
Every plugin of Kubb
has options and with the global Kubb
, you can access those options with Kubb.Plugins
.
See packages/core/src/globals.d.ts
ts
/**
* `tsconfig.json`
* @example
"compilerOptions": {
___ "types": ["@kubb/core/globals"]
}
* @example implementation
type SwaggerPlugin = Kubb.Plugins["@kubb/swagger"]
const swaggerPlugin: SwaggerPlugin={
___ validate: true
}
*/
declare namespace Kubb {
namespace Helpers {
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never
type LastOf<T> = UnionToIntersection<T extends any ? () => T : never> extends () => infer R ? R : never
// TS4.0+
type Push<T extends any[], V> = [...T, V]
// TS4.1+
type TuplifyUnion<T, L = LastOf<T>, N = [T] extends [never] ? true : false> = true extends N ? [] : Push<TuplifyUnion<Exclude<T, L>>, L>
type ObjValueTuple<T, KS extends any[] = TuplifyUnion<keyof T>, R extends any[] = []> = KS extends [infer K, ...infer KT]
? ObjValueTuple<T, KT, [...R, [name: K & keyof T, options: T[K & keyof T]]]>
: R
type TupleToUnion<T> = T extends Array<infer ITEMS> ? ITEMS : never
}
type Plugins = {
['@kubb/plugin-oas']: import('@kubb/plugin-Oas').PluginOas
['@kubb/plugin-redoc']: import('@kubb/plugin-redoc').PluginRedoc
['@kubb/swagger-client']: import('@kubb/swagger-client').PluginClient
['@kubb/swagger-faker']: import('@kubb/swagger-faker').PluginFaker
['@kubb/swagger-swr']: import('@kubb/swagger-swr').PluginSwr
['@kubb/swagger-tanstack-query']: import('@kubb/swagger-tanstack-query').PluginTanstackQuery
['@kubb/swagger-ts']: import('@kubb/swagger-ts').PluginTs
['@kubb/swagger-zod']: import('@kubb/swagger-zod').PluginZod
['@kubb/swagger-zodios']: import('@kubb/swagger-zodios').PluginZodios
['@kubb/swagger-msw']: import('@kubb/swagger-msw').PluginMsw
}
type OptionsPlugins = { [K in keyof Plugins]: Plugins[K]['options'] }
type OptionsOfPlugin<K extends keyof Plugins> = Plugins[K]['options']
type PluginUnion = Helpers.TupleToUnion<Helpers.ObjValueTuple<OptionsPlugins>>
type Plugin = keyof Plugins
}
TypeScript
To get TypeScript support for Kubb, add @kubb/core/globals
to your tsconfig.json:
json
{
"compilerOptions": {
"types": [
"@kubb/core/globals"
]
}
}
Usage
typescript
import { Kubb } from '@kubb/core'
export type SwaggerPluginOptions = Kubb.OptionsOfPlugin<'@kubb/plugin-oas'>
// ^? SwaggerPluginOptions = { validate? boolean | undefined; output?: string | false | undefined...}
typescript
import { Kubb } from '@kubb/core'
export type SwaggerName = Kubb.Plugins['@kubb/plugin-oas']['name']
// ^? "swagger"
typescript
import { Kubb } from '@kubb/core'
export type SwaggerPluginOptions = Kubb.Plugins['@kubb/plugin-oas']['options']
// ^? SwaggerPluginOptions = { validate? boolean | undefined; output?: string | false | undefined...}
typescript
import { Kubb } from '@kubb/core'
export type SwaggerPluginOptions = Kubb.OptionsPlugins['@kubb/plugin-oas']['options']
// ^? SwaggerPluginOptions = { validate? boolean | undefined; output?: string | false | undefined...}
Notes
This feature could be useful for:
- Types support for
Kubb
options - Prototyping