source: node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js@ a762898

Last change on this file since a762898 was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 1.6 KB
Line 
1'use strict';
2
3Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
5const cloneDeepWith$1 = require('../../object/cloneDeepWith.js');
6const getTag = require('../_internal/getTag.js');
7const tags = require('../_internal/tags.js');
8
9function cloneDeepWith(obj, customizer) {
10 return cloneDeepWith$1.cloneDeepWith(obj, (value, key, object, stack) => {
11 const cloned = customizer?.(value, key, object, stack);
12 if (cloned !== undefined) {
13 return cloned;
14 }
15 if (typeof obj !== 'object') {
16 return undefined;
17 }
18 if (getTag.getTag(obj) === tags.objectTag && typeof obj.constructor !== 'function') {
19 const result = {};
20 stack.set(obj, result);
21 cloneDeepWith$1.copyProperties(result, obj, object, stack);
22 return result;
23 }
24 switch (Object.prototype.toString.call(obj)) {
25 case tags.numberTag:
26 case tags.stringTag:
27 case tags.booleanTag: {
28 const result = new obj.constructor(obj?.valueOf());
29 cloneDeepWith$1.copyProperties(result, obj);
30 return result;
31 }
32 case tags.argumentsTag: {
33 const result = {};
34 cloneDeepWith$1.copyProperties(result, obj);
35 result.length = obj.length;
36 result[Symbol.iterator] = obj[Symbol.iterator];
37 return result;
38 }
39 default: {
40 return undefined;
41 }
42 }
43 });
44}
45
46exports.cloneDeepWith = cloneDeepWith;
Note: See TracBrowser for help on using the repository browser.