123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import isReactComponentClass from '../utils/isReactComponentClass.js';
- import isReactCreateClassCall from '../utils/isReactCreateClassCall.js';
- import isReactForwardRefCall from '../utils/isReactForwardRefCall.js';
- import isStatelessComponent from '../utils/isStatelessComponent.js';
- import normalizeClassDefinition from '../utils/normalizeClassDefinition.js';
- import resolveToValue from '../utils/resolveToValue.js';
- import { visitors } from '@babel/traverse';
- function classVisitor(path, state) {
- if (isReactComponentClass(path)) {
- normalizeClassDefinition(path);
- state.foundDefinitions.add(path);
- }
- path.skip();
- }
- function statelessVisitor(path, state) {
- if (isStatelessComponent(path)) {
- state.foundDefinitions.add(path);
- }
- path.skip();
- }
- const explodedVisitors = visitors.explode({
- FunctionDeclaration: { enter: statelessVisitor },
- FunctionExpression: { enter: statelessVisitor },
- ObjectMethod: { enter: statelessVisitor },
- ArrowFunctionExpression: { enter: statelessVisitor },
- ClassExpression: { enter: classVisitor },
- ClassDeclaration: { enter: classVisitor },
- CallExpression: {
- enter: function (path, state) {
- const argument = path.get('arguments')[0];
- if (!argument) {
- return;
- }
- if (isReactForwardRefCall(path)) {
-
-
- const inner = resolveToValue(argument);
- state.foundDefinitions.delete(inner);
- state.foundDefinitions.add(path);
-
- return path.skip();
- }
- else if (isReactCreateClassCall(path)) {
- const resolvedPath = resolveToValue(argument);
- if (resolvedPath.isObjectExpression()) {
- state.foundDefinitions.add(resolvedPath);
- }
-
- return path.skip();
- }
- },
- },
- });
- export default class FindAllDefinitionsResolver {
- resolve(file) {
- const state = {
- foundDefinitions: new Set(),
- };
- file.traverse(explodedVisitors, state);
- return Array.from(state.foundDefinitions);
- }
- }
|