@gnus.ai/upgrade-safe-transpiler-diamond
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe using Diamond Pattern (EIP-2535).
62 lines • 2.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addDiamondAccess = void 0;
const utils_1 = require("solidity-ast/utils");
const ast_utils_1 = require("../solc/ast-utils");
const upgrades_overrides_1 = require("../utils/upgrades-overrides");
const path_1 = __importDefault(require("path"));
const get_identifiers_used_1 = require("./utils/get-identifiers-used");
const rename_1 = require("../rename");
function* addDiamondAccess(sourceUnit, tools) {
const { resolver } = tools;
const contractScopes = new Map();
const contractPaths = new Map();
const suContractNameSet = new Set();
const { dir, name, ext } = path_1.default.parse(sourceUnit.absolutePath);
const suContractPath = `${dir}/${name}Storage${ext}`;
for (const contractNode of (0, utils_1.findAll)('ContractDefinition', sourceUnit)) {
if ((0, get_identifiers_used_1.getNodeCount)('VariableDeclaration', contractNode, (node) => {
return node.stateVariable && !node.constant &&
!(0, upgrades_overrides_1.hasOverride)(node, 'state-variable-assignment') &&
!(0, upgrades_overrides_1.hasOverride)(node, 'state-variable-immutable');
}) > 0) {
if (!contractPaths.has(suContractPath)) {
contractPaths.set(suContractPath, suContractNameSet);
}
suContractNameSet.add(contractNode.name + 'Storage');
}
for (const [_, identifierVar] of (0, get_identifiers_used_1.getUniqueIdentifierVarsUsed)(contractNode, tools)) {
const { identifier, varDecl } = identifierVar;
const scopedContractName = (0, get_identifiers_used_1.getScopedContractName)(varDecl.scope, contractPaths, contractScopes, tools);
const storageLayoutAccess = scopedContractName + `.layout().`;
const idBounds = (0, ast_utils_1.getNodeBounds)(identifier);
yield {
start: idBounds.start,
length: idBounds.length,
kind: 'set-storage-access-var-inits',
transform: source => storageLayoutAccess + source,
};
}
}
let last;
for (const node of (0, utils_1.findAll)('PragmaDirective', sourceUnit)) {
last = node;
}
for (const node of (0, utils_1.findAll)('ImportDirective', sourceUnit)) {
last = node;
}
const after = last ? (0, ast_utils_1.getNodeBounds)(last) : { start: 0, length: 0 };
const start = after.start + after.length;
const importsText = (0, rename_1.getContractsImportPath)(contractPaths, dir, '');
yield {
start,
length: 0,
kind: 'append-storage-imports',
text: importsText,
};
}
exports.addDiamondAccess = addDiamondAccess;
//# sourceMappingURL=add-diamond-access.js.map