UNPKG

@cosmwasm/ts-codegen

Version:

@cosmwasm/ts-codegen converts your CosmWasm smart contracts into dev-friendly TypeScript classes so you can focus on shipping code.

43 lines (42 loc) 1.61 kB
import generate from '@babel/generator'; import { parse } from '@babel/parser'; import traverse from '@babel/traverse'; import * as t from '@babel/types'; import { writeFileSync } from 'fs'; import { sync as mkdirp } from 'mkdirp'; import { dirname } from 'path'; import { unused } from './unused'; export const writeAstToFile = (outPath, program, filename, removeUnusedImports = false, isTsDisable = false, isEslintDisable = false) => { const ast = t.program(program); const content = generate(ast).code; if (removeUnusedImports) { const plugins = ['typescript']; const newAst = parse(content, { sourceType: 'module', plugins, }); traverse(newAst, unused); const content2 = generate(newAst).code; writeContentToFile(outPath, content2, filename, isTsDisable, isEslintDisable); } else { writeContentToFile(outPath, content, filename, isTsDisable, isEslintDisable); } }; export const writeContentToFile = (outPath, content, filename, isTsDisable = false, isEslintDisable = false) => { let esLintPrefix = ''; let tsLintPrefix = ''; let nameWithoutPath = filename.replace(outPath, ''); // strip off leading slash if (nameWithoutPath.startsWith('/')) nameWithoutPath = nameWithoutPath.replace(/^\//, ''); if (isTsDisable) { tsLintPrefix = `//@ts-nocheck\n`; } if (isEslintDisable) { esLintPrefix = `/* eslint-disable */\n`; } const text = tsLintPrefix + esLintPrefix + content; mkdirp(dirname(filename)); writeFileSync(filename, text); };