UNPKG

@tevm/ts-plugin

Version:
97 lines (90 loc) 3.03 kB
#!/usr/bin/env node 'use strict'; 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