@solvprotocol/upgrade-safe-transpiler
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.
102 lines • 4.59 kB
JavaScript
;
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