@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
JavaScript
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);
};