1 | var React = require('react');
|
2 |
|
3 | const FUNCTION_REGEX = /react(\d+)?./i;
|
4 |
|
5 | function classComponent(component) {
|
6 | return (
|
7 | typeof component === 'function' && component.prototype && !!component.prototype.isReactComponent
|
8 | );
|
9 | }
|
10 |
|
11 |
|
12 | function functionComponent(component) {
|
13 | return (
|
14 | typeof component === 'function' &&
|
15 | String(component).includes('return') &&
|
16 | !!String(component).match(FUNCTION_REGEX) &&
|
17 | String(component).includes('.createElement')
|
18 | );
|
19 | }
|
20 |
|
21 | function component(component) {
|
22 | return classComponent(component) || functionComponent(component);
|
23 | }
|
24 |
|
25 | function element(typeElement) {
|
26 | return React.isValidElement(typeElement);
|
27 | }
|
28 |
|
29 | function DOMTypeElement(typeElement) {
|
30 | return element(typeElement) && typeof typeElement.type === 'string';
|
31 | }
|
32 |
|
33 | function compositeTypeElement(typeElement) {
|
34 | return element(typeElement) && typeof typeElement.type === 'function';
|
35 | }
|
36 |
|
37 | function compatible(item) {
|
38 | return element(item) || component(item);
|
39 | }
|
40 |
|
41 | var isReact = {};
|
42 |
|
43 | isReact.classComponent = classComponent;
|
44 | isReact.functionComponent = functionComponent;
|
45 | isReact.component = component;
|
46 | isReact.element = element;
|
47 | isReact.DOMTypeElement = DOMTypeElement;
|
48 | isReact.compositeTypeElement = compositeTypeElement;
|
49 | isReact.compatible = compatible;
|
50 |
|
51 | module.exports = isReact;
|