UNPKG

@rightcapital/php-parser

Version:

TypeScript types for PHP Parser JSON representation

65 lines (64 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeRetrieverHelpers = void 0; const types_1 = require("../types/types"); const php_doc_helpers_1 = require("./php-doc-helpers"); class NodeRetrieverHelpers { static getRootClassNode(rootNode) { const namespaceNode = NodeRetrieverHelpers.findNodeByNodeType(rootNode, types_1.NodeType.Stmt_Namespace); if (namespaceNode === null || namespaceNode === void 0 ? void 0 : namespaceNode.stmts) { return this.findNodeByNodeType(namespaceNode.stmts, types_1.NodeType.Stmt_Class); } return undefined; } static getPropertiesFromClassNode(classNode, filePathParts, fileRelativePath, uses) { if (classNode.stmts) { return this.filterNodeByNodeType(classNode.stmts, types_1.NodeType.Stmt_Property) .filter((propertyNode) => (propertyNode.flags & 8) === 0) .map((propertyNode) => { var _a, _b; const varTagValueNode = php_doc_helpers_1.PhpDocHelpers.parseCommentTextToTagValueNode((_a = propertyNode.attributes.comments) === null || _a === void 0 ? void 0 : _a.at(-1).text); const typeGenerationPackage = php_doc_helpers_1.PhpDocHelpers.getTypescriptTypeFromTypeNode(varTagValueNode.type, filePathParts, fileRelativePath, uses); return { name: propertyNode.props[0].name.name, commentText: (_b = propertyNode.attributes.comments) === null || _b === void 0 ? void 0 : _b.at(-1).text, varTagValueNode, typeGenerationPackage, }; }); } return []; } static getUsesMap(rootNode) { const namespaceNode = NodeRetrieverHelpers.findNodeByNodeType(rootNode, types_1.NodeType.Stmt_Namespace); if (namespaceNode === null || namespaceNode === void 0 ? void 0 : namespaceNode.stmts) { return Object.fromEntries(this.filterNodeByNodeType(namespaceNode.stmts, types_1.NodeType.Stmt_Use) .map((useNode) => NodeRetrieverHelpers.getPartsByName(useNode.uses[0].name.name)) .map((parts) => [parts.slice(-1), parts])); } return {}; } static getGetTypeFunctionReturnValue(classNode) { if (classNode.stmts) { const classMethodNodes = this.filterNodeByNodeType(classNode.stmts, types_1.NodeType.Stmt_ClassMethod); const getTypeMethodNode = classMethodNodes.find((node) => node.name.name === 'getType'); if (getTypeMethodNode) { const returnNode = this.findNodeByNodeType(getTypeMethodNode.stmts, types_1.NodeType.Stmt_Return); if (returnNode) { return returnNode.expr.value; } } } return undefined; } static findNodeByNodeType(nodes, nodeType) { return nodes.find((node) => node.nodeType === nodeType); } static filterNodeByNodeType(nodes, nodeType) { return nodes.filter((node) => node.nodeType === nodeType); } static getPartsByName(name) { return name.split('\\'); } } exports.NodeRetrieverHelpers = NodeRetrieverHelpers;