@rightcapital/php-parser
Version:
TypeScript types for PHP Parser JSON representation
65 lines (64 loc) • 3.25 kB
JavaScript
;
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;