@tanstack/router-utils
Version:
Modern and scalable routing for React applications
41 lines (36 loc) • 1.09 kB
text/typescript
import { parse } from '@babel/parser'
import _generate from '@babel/generator'
import type { GeneratorOptions, GeneratorResult } from '@babel/generator'
import type { ParseResult, ParserOptions } from '@babel/parser'
import type * as _babel_types from '@babel/types'
export type ParseAstOptions = ParserOptions & {
code: string
}
export function parseAst({
code,
...opts
}: ParseAstOptions): ParseResult<_babel_types.File> {
return parse(code, {
plugins: ['jsx', 'typescript', 'explicitResourceManagement'],
sourceType: 'module',
...opts,
})
}
let generate = _generate
if ('default' in generate) {
generate = generate.default as typeof generate
}
type GenerateFromAstOptions = GeneratorOptions &
Required<Pick<GeneratorOptions, 'sourceFileName' | 'filename'>>
export function generateFromAst(
ast: _babel_types.Node,
opts?: GenerateFromAstOptions,
): GeneratorResult {
return generate(
ast,
opts
? { importAttributesKeyword: 'with', sourceMaps: true, ...opts }
: undefined,
)
}
export type { GeneratorResult } from '@babel/generator'