UNPKG

babel-plugin-flow-react-proptypes

Version:
101 lines (80 loc) 3.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isExact = isExact; exports.makeLiteral = makeLiteral; exports.getExportNameForType = getExportNameForType; exports.containsReactElement = containsReactElement; exports.hasReactElementTypeAnnotationReturn = hasReactElementTypeAnnotationReturn; exports.PLUGIN_NAME = exports.$debug = void 0; var t = _interopRequireWildcard(require("@babel/types")); var _traverse = _interopRequireDefault(require("@babel/traverse")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var $debug = function $debug() {}; // export const $debug = console.error.bind(console); exports.$debug = $debug; var PLUGIN_NAME = 'babel-plugin-flow-react-proptypes'; exports.PLUGIN_NAME = PLUGIN_NAME; function isExact(node) { return node.id.name === '$Exact'; } function makeLiteral(value) { if (typeof value === 'string') return t.stringLiteral(value);else if (typeof value === 'number') return t.numericLiteral(value);else if (typeof value === 'boolean') return t.booleanLiteral(value);else { $debug('Encountered invalid literal', value); throw new TypeError("Invalid type supplied, this is a bug in ".concat(PLUGIN_NAME, ", typeof is ").concat(_typeof(value), " with value ").concat(value)); } } function getExportNameForType(name) { return "bpfrpt_proptype_".concat(name); } function containsReactElement(node) { var fakeRoot = { type: 'File', program: { type: 'Program', sourceType: 'module', body: [node] } }; var matched = false; (0, _traverse["default"])(fakeRoot, { JSXElement: function JSXElement(path) { matched = true; path.stop(); }, CallExpression: function CallExpression(path) { if (matched) { path.stop(); return; } var node = path.node; var callee = node.callee; if (callee.type !== 'MemberExpression') return; if (callee.object && callee.object.name === 'React' && callee.property && callee.property.name === 'createElement') { matched = true; path.stop(); } } }); return matched; } function hasReactElementTypeAnnotationReturn(node) { if (node.type !== 'ArrowFunctionExpression') { return false; } if (!node.returnType || node.returnType.type !== 'TypeAnnotation') { return false; } var type = node.returnType.typeAnnotation; if (type.type === 'GenericTypeAnnotation') { if (type.id && type.id.name === 'ReactElement') { return true; } else { return false; } } return false; }