UNPKG

@openzeppelin/upgradeability-transpiler

Version:

Transpiles Solidity contracts to updgradable versions compatible with OpenZeppelin SDK.

120 lines 4.15 kB
"use strict"; 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