UNPKG

2.34 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _omitBy = _interopRequireDefault(require("lodash/omitBy"));
9
10var _isNil = _interopRequireDefault(require("lodash/isNil"));
11
12var _reactIs = require("react-is");
13
14var _RSTTraversal = require("enzyme/build/RSTTraversal");
15
16var _utils = require("./utils");
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20function getChildren(node, options) {
21 const children = (0, _utils.compact)((0, _RSTTraversal.childrenOfNode)(node).map(n => internalNodeToJson(n, options)));
22
23 if (children.length > 0) {
24 return children;
25 }
26
27 return null;
28}
29
30function getProps(node, options) {
31 const props = (0, _omitBy.default)(Object.assign({}, (0, _RSTTraversal.propsOfNode)(node)), (val, key) => {
32 if (key === 'children' || val === undefined) {
33 return true;
34 }
35
36 if (options.ignoreDefaultProps === true && (0, _reactIs.isValidElementType)(node.type) && node.type.defaultProps && key in node.type.defaultProps && node.type.defaultProps[key] === val) {
37 return true;
38 }
39 });
40
41 if (!(0, _isNil.default)(node.key) && options.noKey !== true) {
42 props.key = node.key;
43 }
44
45 return props;
46}
47
48function internalNodeToJson(node, options) {
49 if (typeof node === 'string' || typeof node === 'number') {
50 return node;
51 }
52
53 if ((0, _isNil.default)(node) || node === false) {
54 return '';
55 }
56
57 const json = (0, _utils.applyMap)({
58 node,
59 type: (0, _utils.extractTypeName)(node),
60 props: getProps(node, options),
61 children: getChildren(node, options),
62 $$typeof: Symbol.for('react.test.json')
63 }, options);
64
65 if (!(0, _isNil.default)(json) && !(0, _isNil.default)(json.type)) {
66 return json;
67 }
68}
69
70const shallowToJson = (wrapper, options = {}) => {
71 if ((0, _isNil.default)(wrapper) || wrapper.length === 0) {
72 return null;
73 }
74
75 if (wrapper.length > 1 && typeof wrapper.getNodesInternal === 'function') {
76 const nodes = wrapper.getNodesInternal();
77 return nodes.map(node => internalNodeToJson(node, options));
78 }
79
80 if (typeof wrapper.getNodeInternal === 'function') {
81 const node = wrapper.getNodeInternal();
82 return internalNodeToJson(node, options);
83 }
84
85 return null;
86};
87
88var _default = shallowToJson;
89exports.default = _default;
\No newline at end of file