UNPKG

@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
"use strict"; 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