1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.ITERATOR_SYMBOL = undefined;
|
7 |
|
8 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
9 |
|
10 | var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
11 |
|
12 |
|
13 | exports.getAdapter = getAdapter;
|
14 | exports.makeOptions = makeOptions;
|
15 | exports.isCustomComponentElement = isCustomComponentElement;
|
16 | exports.propsOfNode = propsOfNode;
|
17 | exports.typeOfNode = typeOfNode;
|
18 | exports.nodeHasType = nodeHasType;
|
19 | exports.nodeMatches = nodeMatches;
|
20 | exports.nodeEqual = nodeEqual;
|
21 | exports.containsChildrenSubArray = containsChildrenSubArray;
|
22 | exports.childrenToSimplifiedArray = childrenToSimplifiedArray;
|
23 | exports.isReactElementAlike = isReactElementAlike;
|
24 | exports.withSetStateAllowed = withSetStateAllowed;
|
25 | exports.AND = AND;
|
26 | exports.displayNameOfNode = displayNameOfNode;
|
27 | exports.sym = sym;
|
28 | exports.privateSet = privateSet;
|
29 | exports.cloneElement = cloneElement;
|
30 | exports.spyMethod = spyMethod;
|
31 |
|
32 | var _object = require('object.assign');
|
33 |
|
34 | var _object2 = _interopRequireDefault(_object);
|
35 |
|
36 | var _lodash = require('lodash.isequal');
|
37 |
|
38 | var _lodash2 = _interopRequireDefault(_lodash);
|
39 |
|
40 | var _objectIs = require('object-is');
|
41 |
|
42 | var _objectIs2 = _interopRequireDefault(_objectIs);
|
43 |
|
44 | var _object3 = require('object.entries');
|
45 |
|
46 | var _object4 = _interopRequireDefault(_object3);
|
47 |
|
48 | var _functionPrototype = require('function.prototype.name');
|
49 |
|
50 | var _functionPrototype2 = _interopRequireDefault(_functionPrototype);
|
51 |
|
52 | var _has = require('has');
|
53 |
|
54 | var _has2 = _interopRequireDefault(_has);
|
55 |
|
56 | var _arrayPrototype = require('array.prototype.flat');
|
57 |
|
58 | var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype);
|
59 |
|
60 | var _stringPrototype = require('string.prototype.trim');
|
61 |
|
62 | var _stringPrototype2 = _interopRequireDefault(_stringPrototype);
|
63 |
|
64 | var _configuration = require('./configuration');
|
65 |
|
66 | var _RSTTraversal = require('./RSTTraversal');
|
67 |
|
68 | var _getAdapter = require('./getAdapter');
|
69 |
|
70 | var _getAdapter2 = _interopRequireDefault(_getAdapter);
|
71 |
|
72 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
73 |
|
74 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
75 |
|
76 | var ITERATOR_SYMBOL = exports.ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
|
77 |
|
78 | function getAdapter() {
|
79 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
80 |
|
81 | console.warn('getAdapter from Utils is deprecated; please use ./getAdapter instead');
|
82 | return (0, _getAdapter2['default'])(options);
|
83 | }
|
84 |
|
85 | function makeOptions(options) {
|
86 | var attachTo = options.attachTo,
|
87 | hydrateIn = options.hydrateIn;
|
88 |
|
89 |
|
90 | if (attachTo && hydrateIn && attachTo !== hydrateIn) {
|
91 | throw new TypeError('If both the `attachTo` and `hydrateIn` options are provided, they must be === (for backwards compatibility)');
|
92 | }
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 | var mountTargets = {
|
99 | attachTo: hydrateIn || attachTo || undefined,
|
100 | hydrateIn: hydrateIn || undefined
|
101 | };
|
102 |
|
103 | return (0, _object2['default'])({}, (0, _configuration.get)(), options, mountTargets);
|
104 | }
|
105 |
|
106 | function isCustomComponentElement(inst, adapter) {
|
107 | return !!inst && adapter.isValidElement(inst) && typeof inst.type === 'function';
|
108 | }
|
109 |
|
110 | function propsOfNode(node) {
|
111 | return (0, _object4['default'])(node && node.props || {}).filter(function (_ref) {
|
112 | var _ref2 = _slicedToArray(_ref, 2),
|
113 | value = _ref2[1];
|
114 |
|
115 | return typeof value !== 'undefined';
|
116 | }).reduce(function (acc, _ref3) {
|
117 | var _ref4 = _slicedToArray(_ref3, 2),
|
118 | key = _ref4[0],
|
119 | value = _ref4[1];
|
120 |
|
121 | return (0, _object2['default'])(acc, _defineProperty({}, key, value));
|
122 | }, {});
|
123 | }
|
124 |
|
125 | function typeOfNode(node) {
|
126 | return node ? node.type : null;
|
127 | }
|
128 |
|
129 | function nodeHasType(node, type) {
|
130 | if (!type || !node) return false;
|
131 |
|
132 | var adapter = (0, _getAdapter2['default'])();
|
133 | if (adapter.displayNameOfNode) {
|
134 | var displayName = adapter.displayNameOfNode(node);
|
135 | return displayName === type;
|
136 | }
|
137 |
|
138 | if (!node.type) return false;
|
139 | if (typeof node.type === 'string') return node.type === type;
|
140 | return (typeof node.type === 'function' ? (0, _functionPrototype2['default'])(node.type) === type : node.type.name === type) || node.type.displayName === type;
|
141 | }
|
142 |
|
143 | function internalChildrenCompare(a, b, lenComp, isLoose) {
|
144 | var nodeCompare = isLoose ? nodeMatches : nodeEqual;
|
145 |
|
146 | if (a === b) return true;
|
147 | if (!Array.isArray(a) && !Array.isArray(b)) {
|
148 | return nodeCompare(a, b, lenComp);
|
149 | }
|
150 | var flatA = (0, _arrayPrototype2['default'])(a, Infinity);
|
151 | var flatB = (0, _arrayPrototype2['default'])(b, Infinity);
|
152 | if (flatA.length !== flatB.length) return false;
|
153 | if (flatA.length === 0 && flatB.length === 0) return true;
|
154 | for (var i = 0; i < flatA.length; i += 1) {
|
155 | if (!nodeCompare(flatA[i], flatB[i], lenComp)) return false;
|
156 | }
|
157 | return true;
|
158 | }
|
159 |
|
160 | function childrenMatch(a, b, lenComp) {
|
161 | return internalChildrenCompare(a, b, lenComp, true);
|
162 | }
|
163 |
|
164 | function childrenEqual(a, b, lenComp) {
|
165 | return internalChildrenCompare(a, b, lenComp, false);
|
166 | }
|
167 |
|
168 | function removeNullaryReducer(acc, _ref5) {
|
169 | var _ref6 = _slicedToArray(_ref5, 2),
|
170 | key = _ref6[0],
|
171 | value = _ref6[1];
|
172 |
|
173 | var addition = value == null ? {} : _defineProperty({}, key, value);
|
174 | return (0, _object2['default'])({}, acc, addition);
|
175 | }
|
176 |
|
177 | function internalNodeCompare(a, b, lenComp, isLoose) {
|
178 | if (a === b) return true;
|
179 | if (!a || !b) return false;
|
180 | if (a.type !== b.type) return false;
|
181 |
|
182 | var left = propsOfNode(a);
|
183 | var right = propsOfNode(b);
|
184 | if (isLoose) {
|
185 | left = (0, _object4['default'])(left).reduce(removeNullaryReducer, {});
|
186 | right = (0, _object4['default'])(right).reduce(removeNullaryReducer, {});
|
187 | }
|
188 |
|
189 | var leftKeys = Object.keys(left);
|
190 | for (var i = 0; i < leftKeys.length; i += 1) {
|
191 | var prop = leftKeys[i];
|
192 |
|
193 | if (prop === 'children') {
|
194 |
|
195 | } else if (!(prop in right)) {
|
196 | return false;
|
197 | } else if (right[prop] === left[prop]) {
|
198 |
|
199 | } else if (_typeof(right[prop]) === _typeof(left[prop]) && _typeof(left[prop]) === 'object') {
|
200 | if (!(0, _lodash2['default'])(left[prop], right[prop])) return false;
|
201 | } else {
|
202 | return false;
|
203 | }
|
204 | }
|
205 |
|
206 | var leftHasChildren = 'children' in left;
|
207 | var rightHasChildren = 'children' in right;
|
208 | var childCompare = isLoose ? childrenMatch : childrenEqual;
|
209 | if (leftHasChildren || rightHasChildren) {
|
210 | if (!childCompare(childrenToSimplifiedArray(left.children, isLoose), childrenToSimplifiedArray(right.children, isLoose), lenComp)) {
|
211 | return false;
|
212 | }
|
213 | }
|
214 |
|
215 | if (!isTextualNode(a)) {
|
216 | var rightKeys = Object.keys(right);
|
217 | return lenComp(leftKeys.length - leftHasChildren, rightKeys.length - rightHasChildren);
|
218 | }
|
219 |
|
220 | return false;
|
221 | }
|
222 |
|
223 | function nodeMatches(a, b) {
|
224 | var lenComp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _objectIs2['default'];
|
225 |
|
226 | return internalNodeCompare(a, b, lenComp, true);
|
227 | }
|
228 |
|
229 | function nodeEqual(a, b) {
|
230 | var lenComp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _objectIs2['default'];
|
231 |
|
232 | return internalNodeCompare(a, b, lenComp, false);
|
233 | }
|
234 |
|
235 | function containsChildrenSubArray(match, node, subArray) {
|
236 | var children = (0, _RSTTraversal.childrenOfNode)(node);
|
237 | var checker = function checker(_, i) {
|
238 | return arraysEqual(match, children.slice(i, i + subArray.length), subArray);
|
239 | };
|
240 | return children.some(checker);
|
241 | }
|
242 |
|
243 | function arraysEqual(match, left, right) {
|
244 | return left.length === right.length && left.every(function (el, i) {
|
245 | return match(el, right[i]);
|
246 | });
|
247 | }
|
248 |
|
249 | function childrenToArray(children) {
|
250 | var result = [];
|
251 |
|
252 | var push = function push(el) {
|
253 | if (el === null || el === false || typeof el === 'undefined') return;
|
254 | result.push(el);
|
255 | };
|
256 |
|
257 | if (Array.isArray(children)) {
|
258 | children.forEach(push);
|
259 | } else {
|
260 | push(children);
|
261 | }
|
262 | return result;
|
263 | }
|
264 |
|
265 | function childrenToSimplifiedArray(nodeChildren) {
|
266 | var isLoose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
267 |
|
268 | var childrenArray = childrenToArray(nodeChildren);
|
269 | var simplifiedArray = [];
|
270 |
|
271 | for (var i = 0; i < childrenArray.length; i += 1) {
|
272 | var child = childrenArray[i];
|
273 | var previousChild = simplifiedArray.pop();
|
274 |
|
275 | if (typeof previousChild === 'undefined') {
|
276 | simplifiedArray.push(child);
|
277 | } else if (isTextualNode(child) && isTextualNode(previousChild)) {
|
278 | simplifiedArray.push(previousChild + child);
|
279 | } else {
|
280 | simplifiedArray.push(previousChild);
|
281 | simplifiedArray.push(child);
|
282 | }
|
283 | }
|
284 |
|
285 | if (isLoose) {
|
286 | return simplifiedArray.map(function (x) {
|
287 | return typeof x === 'string' ? (0, _stringPrototype2['default'])(x) : x;
|
288 | });
|
289 | }
|
290 |
|
291 | return simplifiedArray;
|
292 | }
|
293 |
|
294 | function isTextualNode(node) {
|
295 | return typeof node === 'string' || typeof node === 'number';
|
296 | }
|
297 |
|
298 | function isReactElementAlike(arg, adapter) {
|
299 | return adapter.isValidElement(arg) || isTextualNode(arg) || Array.isArray(arg);
|
300 | }
|
301 |
|
302 |
|
303 | function withSetStateAllowed(fn) {
|
304 |
|
305 |
|
306 |
|
307 | var cleanup = false;
|
308 | if (typeof global.document === 'undefined') {
|
309 | cleanup = true;
|
310 | global.document = {};
|
311 | }
|
312 | fn();
|
313 | if (cleanup) {
|
314 |
|
315 |
|
316 | global.document = undefined;
|
317 | delete global.document;
|
318 | }
|
319 | }
|
320 |
|
321 | function AND(fns) {
|
322 | var fnsReversed = fns.slice().reverse();
|
323 | return function (x) {
|
324 | return fnsReversed.every(function (fn) {
|
325 | return fn(x);
|
326 | });
|
327 | };
|
328 | }
|
329 |
|
330 | function displayNameOfNode(node) {
|
331 | if (!node) return null;
|
332 |
|
333 | var type = node.type;
|
334 |
|
335 |
|
336 | if (!type) return null;
|
337 |
|
338 | return type.displayName || (typeof type === 'function' ? (0, _functionPrototype2['default'])(type) : type.name || type);
|
339 | }
|
340 |
|
341 | function sym(s) {
|
342 | return typeof Symbol === 'function' ? Symbol['for']('enzyme.' + String(s)) : s;
|
343 | }
|
344 |
|
345 | function privateSet(obj, prop, value) {
|
346 | Object.defineProperty(obj, prop, {
|
347 | value: value,
|
348 | enumerable: false,
|
349 | writable: true
|
350 | });
|
351 | }
|
352 |
|
353 | function cloneElement(adapter, el, props) {
|
354 | return adapter.createElement(el.type, (0, _object2['default'])({}, el.props, props));
|
355 | }
|
356 |
|
357 | function spyMethod(instance, methodName) {
|
358 | var lastReturnValue = void 0;
|
359 | var originalMethod = instance[methodName];
|
360 | var hasOwn = (0, _has2['default'])(instance, methodName);
|
361 | var descriptor = void 0;
|
362 | if (hasOwn) {
|
363 | descriptor = Object.getOwnPropertyDescriptor(instance, methodName);
|
364 | }
|
365 | Object.defineProperty(instance, methodName, {
|
366 | configurable: true,
|
367 | enumerable: !descriptor || !!descriptor.enumerable,
|
368 | value: function () {
|
369 | function value() {
|
370 | for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
|
371 | args[_key] = arguments[_key];
|
372 | }
|
373 |
|
374 | var result = originalMethod.apply(this, args);
|
375 | lastReturnValue = result;
|
376 | return result;
|
377 | }
|
378 |
|
379 | return value;
|
380 | }()
|
381 | });
|
382 | return {
|
383 | restore: function () {
|
384 | function restore() {
|
385 | if (hasOwn) {
|
386 | if (descriptor) {
|
387 | Object.defineProperty(instance, methodName, descriptor);
|
388 | } else {
|
389 |
|
390 | instance[methodName] = originalMethod;
|
391 |
|
392 | }
|
393 | } else {
|
394 |
|
395 | delete instance[methodName];
|
396 |
|
397 | }
|
398 | }
|
399 |
|
400 | return restore;
|
401 | }(),
|
402 | getLastReturnValue: function () {
|
403 | function getLastReturnValue() {
|
404 | return lastReturnValue;
|
405 | }
|
406 |
|
407 | return getLastReturnValue;
|
408 | }()
|
409 | };
|
410 | } |
\ | No newline at end of file |