@solvprotocol/upgrade-safe-transpiler
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.
48 lines • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasConstructorOverride = exports.getOverrides = exports.hasOverride = void 0;
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) {
return getOverrides(node).includes(override);
}
exports.hasOverride = hasOverride;
function getOverrides(node) {
var _a, _b;
if ('documentation' in node) {
const doc = typeof node.documentation === 'string' ? node.documentation : (_b = (_a = node.documentation) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : '';
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 [];
}
}
exports.getOverrides = getOverrides;
function hasConstructorOverride(contract) {
const ctor = (0, ast_utils_1.getConstructor)(contract);
return ctor ? hasOverride(ctor, 'constructor') : false;
}
exports.hasConstructorOverride = hasConstructorOverride;
//# sourceMappingURL=upgrades-overrides.js.map