zod-to-ts
Version:
generate TypeScript types from your Zod schema
27 lines (26 loc) • 1.11 kB
JavaScript
import ts, { factory as f } from 'typescript';
export function createTypeReferenceFromString(identifier) {
return f.createTypeReferenceNode(f.createIdentifier(identifier));
}
export function createTypeAlias(node, identifier, comment) {
const typeAlias = f.createTypeAliasDeclaration(undefined, f.createIdentifier(identifier), undefined, node);
if (comment) {
addJsDocComment(typeAlias, comment);
}
return typeAlias;
}
export function printNode(node, printerOptions) {
const sourceFile = ts.createSourceFile('print.ts', '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS);
const printer = ts.createPrinter(printerOptions);
return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile);
}
const identifierRE = /^[$A-Z_a-z][\w$]*$/;
export function getIdentifierOrStringLiteral(string_) {
if (identifierRE.test(string_)) {
return f.createIdentifier(string_);
}
return f.createStringLiteral(string_);
}
export function addJsDocComment(node, text) {
ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, `* ${text} `, true);
}