@tevm/ts-plugin
Version:
A typescript plugin for tevm
97 lines (90 loc) • 3.03 kB
JavaScript
;
var fs = require('fs');
var promises = require('fs/promises');
var path = require('path');
var baseBundler = require('@tevm/base-bundler');
var bundlerCache = require('@tevm/bundler-cache');
var config = require('@tevm/config');
var Effect = require('effect/Effect');
var glob = require('glob');
var solc = require('solc');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var path__default = /*#__PURE__*/_interopDefault(path);
var solc__namespace = /*#__PURE__*/_interopNamespace(solc);
var fao = {
existsSync: fs.existsSync,
readFile: promises.readFile,
readFileSync: fs.readFileSync,
writeFileSync: fs.writeFileSync,
statSync: fs.statSync,
stat: promises.stat,
mkdirSync: fs.mkdirSync,
mkdir: promises.mkdir,
writeFile: promises.writeFile,
exists: async (path2) => {
try {
await promises.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.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$1 = Effect.runSync(config.loadConfig(cwd2));
const solcCache = bundlerCache.createCache(config$1.cacheDir, fao, cwd2);
const plugin = baseBundler.bundler(config$1, console, fao, solc__namespace, solcCache, "@tevm/contract");
plugin.resolveTsModule(`./${file}`, cwd2, false, true).then((tsContent) => promises.writeFile(path__default.default.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.cjs.map
//# sourceMappingURL=tevm-gen.cjs.map