UNPKG

@openzeppelin/upgrade-safe-transpiler

Version:

Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.

63 lines 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasOverride = hasOverride; exports.getOverrides = getOverrides; exports.hasConstructorOverride = hasConstructorOverride; const ast_utils_1 = require("../solc/ast-utils"); const execall_1 = require("../utils/execall"); const errorKinds = [ 'state-variable-assignment', 'state-variable-immutable', 'external-library-linking', 'struct-definition', 'enum-definition', 'constructor', 'delegatecall', 'selfdestruct', 'missing-public-upgradeto', ]; function hasOverride(node, override, resolver) { const overrides = getOverrides(node, resolver); return (overrides.includes(override) || (override === 'state-variable-assignment' && node.nodeType === 'VariableDeclaration' && node.mutability === 'immutable' && overrides.includes('state-variable-immutable'))); } function getOverrides(node, resolver) { const overrides = getOwnOverrides(node); if ('scope' in node) { const contract = resolver.resolveContract(node.scope); if (contract) { overrides.push(...getOwnOverrides(contract)); } } return overrides; } function getOwnOverrides(node) { if ('documentation' in node) { const doc = typeof node.documentation === 'string' ? node.documentation : node.documentation?.text ?? ''; const result = []; for (const { groups } of (0, execall_1.execall)(/^\s*(?:@(?<title>\w+)(?::(?<tag>[a-z][a-z-]*))? )?(?<args>(?:(?!^\s@\w+)[^])*)/m, doc)) { if (groups && groups.title === 'custom' && groups.tag === 'oz-upgrades-unsafe-allow') { result.push(...groups.args.split(/\s+/)); } } result.forEach(arg => { if (!errorKinds.includes(arg)) { throw new Error(`NatSpec: oz-upgrades-unsafe-allow argument not recognized: ${arg}`); } }); return result; } else { return []; } } function hasConstructorOverride(contract) { const ctor = (0, ast_utils_1.getConstructor)(contract); return ctor ? [...getOwnOverrides(ctor), ...getOwnOverrides(contract)].includes('constructor') : false; } //# sourceMappingURL=upgrades-overrides.js.map