UNPKG

@solvprotocol/upgrade-safe-transpiler

Version:

Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.

48 lines 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findAlreadyInitializable = void 0; const utils_1 = require("solidity-ast/utils"); function findAlreadyInitializable(solcOutput, initializablePath) { var _a; if (initializablePath === undefined) { return []; } const initSourceUnit = (_a = solcOutput.sources[initializablePath]) === null || _a === void 0 ? void 0 : _a.ast; if (initSourceUnit === undefined) { throw new Error(`File ${initializablePath} is not found or has not been compiled`); } const [initContract, ...otherContracts] = (0, utils_1.findAll)('ContractDefinition', initSourceUnit); if (otherContracts.length > 0) { throw new Error(`File ${initializablePath} contains contracts other than Initializable`); } if (initContract === undefined || initContract.name !== 'Initializable') { throw new Error(`File ${initializablePath} does not contain Initializable`); } const initializableSources = []; for (const source in solcOutput.sources) { if (source === initializablePath) { continue; } const { ast } = solcOutput.sources[source]; const initializable = new Set(); for (const contract of (0, utils_1.findAll)('ContractDefinition', ast)) { if (contract.linearizedBaseContracts.includes(initContract.id)) { initializable.add(true); } else if (contract.contractKind === 'contract') { initializable.add(false); } } if (initializable.has(true)) { if (initializable.has(false)) { throw new Error(`File ${source} contains both Initializable and non-Initializable contracts`); } else { initializableSources.push(source); } } } return initializableSources; } exports.findAlreadyInitializable = findAlreadyInitializable; //# sourceMappingURL=find-already-initializable.js.map