@openzeppelin/upgradeability-transpiler
Version:
Transpiles Solidity contracts to updgradable versions compatible with OpenZeppelin SDK.
120 lines • 4.15 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ajv_1 = __importDefault(require("ajv"));
const util_1 = __importDefault(require("util"));
const ast_1 = __importDefault(require("./schemas/ast"));
const nodeSchemaValidator = new ajv_1.default({ allErrors: true });
const isASTNode = nodeSchemaValidator.compile(ast_1.default);
function throwIfInvalidNode(node) {
if (!isASTNode(node)) {
throw new Error(util_1.default.inspect(node) + ' is not a valid AST node.');
}
if (node.nodes) {
for (const child of node.nodes) {
throwIfInvalidNode(child);
}
}
}
exports.throwIfInvalidNode = throwIfInvalidNode;
function isContractKind(node, kind) {
return node.contractKind === kind;
}
exports.isContractKind = isContractKind;
function isInterface(node) {
return isContractKind(node, 'interface');
}
exports.isInterface = isInterface;
function isContract(node) {
return isContractKind(node, 'contract');
}
exports.isContract = isContract;
function isImportDirective(node) {
return node.nodeType === 'ImportDirective';
}
exports.isImportDirective = isImportDirective;
function isVarDeclaration(node) {
return node.nodeType === 'VariableDeclaration';
}
exports.isVarDeclaration = isVarDeclaration;
function isContractType(node) {
return node.nodeType === 'ContractDefinition';
}
exports.isContractType = isContractType;
function isPragmaDirective(node) {
return node.nodeType === 'PragmaDirective';
}
exports.isPragmaDirective = isPragmaDirective;
function isModifierInvocation(node) {
return node.nodeType === 'ModifierInvocation';
}
exports.isModifierInvocation = isModifierInvocation;
function isContractDefinition(node) {
return node.nodeType === 'ContractDefinition';
}
exports.isContractDefinition = isContractDefinition;
function isFunctionDefinition(node) {
return node.nodeType === 'FunctionDefinition';
}
exports.isFunctionDefinition = isFunctionDefinition;
function getSourceIndices(node) {
return node.src
.split(':')
.map(val => parseInt(val))
.slice(0, 2);
}
exports.getSourceIndices = getSourceIndices;
function getNodeSources(node, source) {
const [start, len] = getSourceIndices(node);
return [start, len, source.slice(start, start + len)];
}
exports.getNodeSources = getNodeSources;
function getFirstNode(node, predicate) {
const ret = getNodes(node, predicate);
return ret.length ? ret[0] : null;
}
exports.getFirstNode = getFirstNode;
function getNodes(node, predicate) {
if (!node.nodes)
throw new Error('Node has to have nodes defined');
return node.nodes.filter(predicate);
}
exports.getNodes = getNodes;
function getImportDirectives(node) {
return getNodes(node, isImportDirective);
}
exports.getImportDirectives = getImportDirectives;
function getPragmaDirectives(node) {
return getNodes(node, isPragmaDirective);
}
exports.getPragmaDirectives = getPragmaDirectives;
function getVarDeclarations(node) {
return getNodes(node, isVarDeclaration);
}
exports.getVarDeclarations = getVarDeclarations;
function getContracts(node) {
return getNodes(node, isContractType);
}
exports.getContracts = getContracts;
function getConstructor(node) {
return getFirstNode(node, (node) => isFunctionDefinition(node) && node.kind === 'constructor');
}
exports.getConstructor = getConstructor;
function getContract(art) {
const ret = getFirstNode(art.ast, (node) => isContractDefinition(node) && node.name === art.contractName);
if (ret == null)
throw new Error(`Can't find ${art.contractName} in ${util_1.default.inspect(art)}`);
return ret;
}
exports.getContract = getContract;
function getContractById(node, id) {
return getFirstNode(node, (node) => isContractDefinition(node) && node.id === id);
}
exports.getContractById = getContractById;
function stripBraces(source) {
return source.slice(1).slice(0, -1);
}
exports.stripBraces = stripBraces;
//# sourceMappingURL=ast-utils.js.map
;