@tevm/ts-plugin
Version:
A typescript plugin for tevm
72 lines (69 loc) • 2.23 kB
JavaScript
import { mkdirSync, statSync, writeFileSync, readFileSync, existsSync } from 'fs';
import { writeFile, mkdir, stat, readFile, access } from 'fs/promises';
import path from 'path';
import { bundler } from '@tevm/base-bundler';
import { createCache } from '@tevm/bundler-cache';
import { loadConfig } from '@tevm/config';
import { runSync } from 'effect/Effect';
import { glob } from 'glob';
import * as solc from 'solc';
var fao = {
existsSync,
readFile,
readFileSync,
writeFileSync,
statSync,
stat,
mkdirSync,
mkdir,
writeFile,
exists: async (path2) => {
try {
await access(path2);
return true;
} catch (e) {
return false;
}
}
};
var showHelp = () => {
console.log(`
Usage: tevm-gen [cwd] [include]
Description:
Generates TypeScript type definitions for Solidity contracts.
Arguments:
cwd Working directory (defaults to current directory)
include Glob pattern(s) for Solidity files, comma-separated (defaults to 'src/**/*.sol')
Options:
-h, --help Show this help message and exit
`);
};
var generate = (cwd2 = process.cwd(), include2 = ["src/**/*.sol"]) => {
console.log("Generating types from contracts...", { dir: cwd2, include: include2 });
const files = glob.sync(include2, {
cwd: cwd2
});
if (files.length === 0) {
throw new Error("No files found");
}
files.forEach(async (file) => {
const fileName = file.split("/").at(-1);
const fileDir = file.split("/").slice(0, -1).join("/");
const config = runSync(loadConfig(cwd2));
const solcCache = createCache(config.cacheDir, fao, cwd2);
const plugin = bundler(config, console, fao, solc, solcCache, "@tevm/contract");
plugin.resolveTsModule(`./${file}`, cwd2, false, true).then((tsContent) => writeFile(path.join(fileDir, `${fileName}.ts`), tsContent.code));
});
};
var args = process.argv.slice(2);
if (args.includes("-h") || args.includes("--help")) {
showHelp();
process.exit(0);
}
var [userCwd, userInclude] = args;
var cwd = userCwd || process.cwd();
var include = userInclude ? userInclude.split(",") : ["src/**/*.sol"];
generate(cwd, include);
//# sourceMappingURL=tevm-gen.js.map
//# sourceMappingURL=tevm-gen.js.map