UNPKG

@solvprotocol/upgrade-safe-transpiler

Version:

Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.

65 lines 3.07 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateWithInit = void 0; const path_1 = __importDefault(require("path")); const compare_versions_1 = require("compare-versions"); const format_lines_1 = require("./transformations/utils/format-lines"); const utils_1 = require("solidity-ast/utils"); const ast_utils_1 = require("./solc/ast-utils"); const rename_1 = require("./rename"); const relative_path_1 = require("./utils/relative-path"); const upgrades_overrides_1 = require("./utils/upgrades-overrides"); function generateWithInit(transform, destPath, solcVersion = '0.6.0') { const pragmaVersion = (0, compare_versions_1.satisfies)(solcVersion, '>=0.7') ? '0.7' : '0.6'; const res = [ `pragma solidity >=${pragmaVersion} <0.9;`, `pragma experimental ABIEncoderV2;`, ``, ]; for (const sourceUnit of transform.asts()) { for (const contract of (0, utils_1.findAll)('ContractDefinition', sourceUnit)) { if (contract.contractKind !== 'contract' || contract.abstract) { continue; } const constructorNode = (0, ast_utils_1.getConstructor)(contract); let argNames = ''; if (constructorNode) { argNames = constructorNode.parameters.parameters.map(p => p.name).join(', '); } let argsList = ''; if (constructorNode) { const source = transform.read(constructorNode); const argsMatch = source.match(/\((.*?)\)/s); if (argsMatch === null) { throw new Error(`Could not find constructor arguments for ${contract.name}`); } [, argsList] = argsMatch; } const renamedContract = (0, rename_1.renameContract)(contract.name); let parents = []; let statements = []; if ((0, upgrades_overrides_1.hasConstructorOverride)(contract)) { parents = [`${(0, rename_1.renameContract)(contract.name)}(${argNames})`]; } else { statements = [`__${contract.name}_init(${argNames});`]; } res.push(`import "${(0, relative_path_1.relativePath)(path_1.default.dirname(destPath), (0, rename_1.renamePath)(sourceUnit.absolutePath))}";`, ``, `contract ${renamedContract}WithInit is ${renamedContract} {`, [ [ `constructor(${argsList})`, ...parents, ...((0, compare_versions_1.satisfies)(pragmaVersion, '>=0.7') ? [] : [`public`]), `payable initializer {`, ].join(' '), statements, `}`, ], `}`); } } return (0, format_lines_1.formatLines)(0, res); } exports.generateWithInit = generateWithInit; //# sourceMappingURL=generate-with-init.js.map