UNPKG

react-carousel-query

Version:

A infinite carousel component made with react that handles the pagination for you.

89 lines (67 loc) 2.82 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = findAllReactCreateClassCalls; var _astTypes = require("ast-types"); var _isReactComponentClass = _interopRequireDefault(require("../utils/isReactComponentClass")); var _isReactCreateClassCall = _interopRequireDefault(require("../utils/isReactCreateClassCall")); var _isReactForwardRefCall = _interopRequireDefault(require("../utils/isReactForwardRefCall")); var _isStatelessComponent = _interopRequireDefault(require("../utils/isStatelessComponent")); var _normalizeClassDefinition = _interopRequireDefault(require("../utils/normalizeClassDefinition")); var _resolveToValue = _interopRequireDefault(require("../utils/resolveToValue")); /** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * */ /** * Given an AST, this function tries to find all object expressions that are * passed to `React.createClass` calls, by resolving all references properly. */ function findAllReactCreateClassCalls(ast) { const definitions = new Set(); function classVisitor(path) { if ((0, _isReactComponentClass.default)(path)) { (0, _normalizeClassDefinition.default)(path); definitions.add(path); } return false; } function statelessVisitor(path) { if ((0, _isStatelessComponent.default)(path)) { definitions.add(path); } return false; } (0, _astTypes.visit)(ast, { visitFunctionDeclaration: statelessVisitor, visitFunctionExpression: statelessVisitor, visitArrowFunctionExpression: statelessVisitor, visitClassExpression: classVisitor, visitClassDeclaration: classVisitor, visitCallExpression: function (path) { if ((0, _isReactForwardRefCall.default)(path)) { // If the the inner function was previously identified as a component // replace it with the parent node const inner = (0, _resolveToValue.default)(path.get('arguments', 0)); definitions.delete(inner); definitions.add(path); // Do not traverse into arguments return false; } else if ((0, _isReactCreateClassCall.default)(path)) { const resolvedPath = (0, _resolveToValue.default)(path.get('arguments', 0)); if (_astTypes.namedTypes.ObjectExpression.check(resolvedPath.node)) { definitions.add(resolvedPath); } // Do not traverse into arguments return false; } // If it is neither of the above cases we need to traverse further // as this call expression could be a HOC this.traverse(path); } }); return Array.from(definitions); }