UNPKG

@solvprotocol/upgrade-safe-transpiler

Version:

Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.

102 lines 4.59 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const minimist_1 = __importDefault(require("minimist")); const _1 = require("."); const find_already_initializable_1 = require("./find-already-initializable"); async function getPaths() { const hardhat = require.resolve('hardhat', { paths: [process.cwd()] }); const hre = await Promise.resolve().then(() => __importStar(require(hardhat))); return hre.config.paths; } function readCommandFlags(resolveRootRelative) { const { b: buildInfo, i: initializablePath, p: publicInitializers = [], D: deleteOriginals = false, x: exclude = [], } = (0, minimist_1.default)(process.argv.slice(2)); return { buildInfo, deleteOriginals, initializablePath: initializablePath && resolveRootRelative(initializablePath), publicInitializers: ensureArray(publicInitializers).map(resolveRootRelative), exclude: ensureArray(exclude).map(p => p.replace(/^(!*)(.*)/, (_, neg, pat) => neg + resolveRootRelative(pat))), }; } function ensureArray(arr) { if (Array.isArray(arr)) { return arr; } else { return [arr]; } } async function getVersion() { // eslint-disable-next-line @typescript-eslint/no-var-requires const pkg = require('../package.json'); return pkg.name + '@' + pkg.version; } async function main() { console.error(await getVersion()); const paths = await getPaths(); const resolveRootRelative = (p) => path_1.default.relative(paths.root, path_1.default.resolve(p)); const options = readCommandFlags(resolveRootRelative); let buildInfo = options.buildInfo; if (buildInfo === undefined) { const buildInfoDir = path_1.default.join(paths.artifacts, 'build-info'); const filenames = await fs_1.promises.readdir(buildInfoDir); if (filenames.length != 1) { throw new Error(`Expected ${buildInfoDir} to contain only one file`); } buildInfo = path_1.default.join(buildInfoDir, filenames[0]); } const { input: solcInput, output: solcOutput, solcVersion, } = JSON.parse(await fs_1.promises.readFile(buildInfo, 'utf8')); const transpiled = await (0, _1.transpile)(solcInput, solcOutput, paths, { solcVersion, ...options }); await Promise.all(transpiled.map(async (t) => { const outputPath = path_1.default.join(paths.root, t.path); await fs_1.promises.mkdir(path_1.default.dirname(outputPath), { recursive: true }); await fs_1.promises.writeFile(outputPath, t.source); })); if (options.deleteOriginals) { const keep = new Set([ ...transpiled.map(t => t.path), ...(0, find_already_initializable_1.findAlreadyInitializable)(solcOutput, options.initializablePath), ].map(p => path_1.default.join(paths.root, p))); if (options.initializablePath) { keep.add(path_1.default.join(paths.root, options.initializablePath)); } const originals = Object.keys(solcOutput.sources) .map(s => path_1.default.join(paths.root, s)) .filter(p => !keep.has(p)); await Promise.all(originals.map(p => fs_1.promises.unlink(p).catch(() => undefined))); } } main().catch(e => { console.error(e); process.exit(1); }); //# sourceMappingURL=cli.js.map