Package Exports
- @kubb/ast
- @kubb/ast/package.json
- @kubb/ast/types
Readme
Spec-agnostic AST layer for Kubb. Defines nodes, visitor pattern, factory functions, and type guards used across codegen plugins.
Imports
| Path | Contents |
|---|---|
@kubb/ast |
Runtime: factory functions, guards, visitor, ref helpers, constants |
@kubb/ast/types |
Types only: all node interfaces, type aliases, visitor types |
Node tree
RootNode
├── schemas: SchemaNode[]
└── operations: OperationNode[]
├── parameters: ParameterNode[] → SchemaNode
├── requestBody?: SchemaNode
└── responses: ResponseNode[] → SchemaNode?
SchemaNode (discriminated union)
object → properties: PropertyNode[] → SchemaNode
array | tuple → items: SchemaNode[]
union | intersection → members: SchemaNode[]
enum | ref | string | number | integer | bigint
boolean | null | any | unknown | void
date | datetime | time | uuid | email | url | blobUsage
Factory
import { createRoot, createOperation, createSchema, createProperty } from '@kubb/ast'
const root = createRoot({
schemas: [
createSchema({
name: 'Pet',
type: 'object',
properties: [
createProperty({ name: 'id', schema: createSchema({ type: 'integer' }), required: true }),
createProperty({ name: 'name', schema: createSchema({ type: 'string' }), required: true }),
],
}),
],
})Visitor
import { walk, transform, collect } from '@kubb/ast'
// Side effects
await walk(root, {
schema(node) { console.log(node.type) },
})
// Immutable transformation
const updated = transform(root, {
schema(node) { return { ...node, description: 'generated' } },
})
// Extraction
const types = collect<string>(root, {
schema(node) { return node.type },
})Guards
import { isSchemaNode, narrowSchema } from '@kubb/ast'
import type { Node } from '@kubb/ast/types'
function process(node: Node) {
if (isSchemaNode(node)) {
const obj = narrowSchema(node, 'object')
obj?.properties?.forEach(p => console.log(p.name))
}
}Refs
import { buildRefMap, resolveRef } from '@kubb/ast'
const refMap = buildRefMap(root)
const pet = resolveRef(refMap, 'Pet')Supporting Kubb
Kubb uses an MIT-licensed open source project with its ongoing development made possible entirely by the support of Sponsors. If you would like to become a sponsor, please consider: