@kubb/parser-ts
TypeScript source file parser for Kubb
Converts AST nodes and raw TypeScript code into formatted source strings using the TypeScript compiler API. Handles both .ts and .tsx output.
Installation
bun add @kubb/parser-ts
pnpm add @kubb/parser-ts
npm install @kubb/parser-ts
Usage
import { defineConfig } from 'kubb'
import { parserTs, parserTsx } from '@kubb/parser-ts'
export default defineConfig({
input: './petstore.yaml',
output: { path: './src/gen' },
parsers: [parserTs(), parserTsx()],
})
Pass an extension map to rewrite the extensions emitted in import/export statements. Keys are the source extension, values the output, and an empty string drops it. Parsers drop the extension by default. Use { '.ts': '.js' } for ESM when the consumer transpiles to JavaScript, or { '.ts': '.ts' } to keep it for Node16/NodeNext resolution:
export default defineConfig({
input: './petstore.yaml',
output: { path: './src/gen' },
parsers: [parserTs({ extension: { '.ts': '.js' } }), parserTsx()],
})
To render compiler AST nodes to source text from inside a plugin, call print on a parser instance:
import { parserTs } from '@kubb/parser-ts'
import ts from 'typescript'
const source = parserTs().print(
ts.factory.createVariableStatement(
[ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
ts.factory.createVariableDeclarationList(
[ts.factory.createVariableDeclaration('hello', undefined, undefined, ts.factory.createStringLiteral('world'))],
ts.NodeFlags.Const,
),
),
)
API
parserTs(options?)
Factory returning a parser instance for .ts and .js files. Pass to defineConfig({ parsers: [...] }) to emit TypeScript source files. The optional extension map rewrites the extensions written in import/export statements and defaults to { '.ts': '' }.
The returned instance exposes parse(file) to serialize a FileNode to TypeScript source and print(...nodes) to convert TypeScript compiler Node instances to a formatted source string.
parserTsx(options?)
Factory returning a parser instance for .tsx and .jsx files. Same API and extension option as parserTs, with JSX support.
Supporting Kubb
Kubb is an open source project, and its development is funded entirely by sponsors. If you would like to become a sponsor, please consider:
License
MIT