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