UNPKG

@jqassistant/ts-lce

Version:

Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.

104 lines (103 loc) 5.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JSXExpressionContainerTraverser = exports.JSXSpreadChildTraverser = exports.JSXSpreadAttributeTraverser = exports.JSXAttributeTraverser = exports.JSXFragmentTraverser = exports.JSXOpeningElementTraverser = exports.JSXElementTraverser = void 0; const utils_1 = require("@typescript-eslint/utils"); const concept_1 = require("../concept"); const traverser_1 = require("../traverser"); const traverser_utils_1 = require("../utils/traverser.utils"); class JSXElementTraverser extends traverser_1.Traverser { static CHILDREN_PROP = "children"; static OPENING_ELEMENT_PROP = "opening-element"; static CLOSING_ELEMENT_PROP = "closing-element"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXElement) { (0, traverser_utils_1.runTraverserForNode)(node.openingElement, { parentPropName: JSXElementTraverser.OPENING_ELEMENT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNodes)(node.children, { parentPropName: JSXElementTraverser.CHILDREN_PROP }, processingContext, processors, conceptMaps); if (node.closingElement) { (0, traverser_utils_1.runTraverserForNode)(node.closingElement, { parentPropName: JSXElementTraverser.CLOSING_ELEMENT_PROP }, processingContext, processors, conceptMaps); } } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXElementTraverser = JSXElementTraverser; class JSXOpeningElementTraverser extends traverser_1.Traverser { static TYPE_PARAMETERS_PROP = "type-parameters"; static ATTRIBUTES_PROP = "attributes"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXOpeningElement) { if (node.typeArguments) { (0, traverser_utils_1.runTraverserForNodes)(node.typeArguments?.params, { parentPropName: JSXOpeningElementTraverser.TYPE_PARAMETERS_PROP }, processingContext, processors, conceptMaps); } (0, traverser_utils_1.runTraverserForNodes)(node.attributes, { parentPropName: JSXOpeningElementTraverser.ATTRIBUTES_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXOpeningElementTraverser = JSXOpeningElementTraverser; class JSXFragmentTraverser extends traverser_1.Traverser { static CHILDREN_PROP = "children"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXFragment) { (0, traverser_utils_1.runTraverserForNodes)(node.children, { parentPropName: JSXFragmentTraverser.CHILDREN_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXFragmentTraverser = JSXFragmentTraverser; class JSXAttributeTraverser extends traverser_1.Traverser { static VALUE_PROP = "value"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXAttribute) { if (node.value) { (0, traverser_utils_1.runTraverserForNode)(node.value, { parentPropName: JSXAttributeTraverser.VALUE_PROP }, processingContext, processors, conceptMaps); } } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXAttributeTraverser = JSXAttributeTraverser; class JSXSpreadAttributeTraverser extends traverser_1.Traverser { static ARGUMENT_PROP = "argument"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXSpreadAttribute) { (0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: JSXSpreadAttributeTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXSpreadAttributeTraverser = JSXSpreadAttributeTraverser; class JSXSpreadChildTraverser extends traverser_1.Traverser { static EXPRESSION_PROP = "expression"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXSpreadChild) { (0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: JSXSpreadChildTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXSpreadChildTraverser = JSXSpreadChildTraverser; class JSXExpressionContainerTraverser extends traverser_1.Traverser { static EXPRESSION_PROP = "expression"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.JSXExpressionContainer) { (0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: JSXExpressionContainerTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.JSXExpressionContainerTraverser = JSXExpressionContainerTraverser;