es-toolkit 1.28.0 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/_chunk/{toMerged-CPY8Ug.js → toMerged-DGFrN7.js} +78 -68
- package/dist/browser.global.js +1 -1
- package/dist/browser.global.js.map +1 -1
- package/dist/compat/array/lastIndexOf.d.mts +20 -0
- package/dist/compat/array/lastIndexOf.d.ts +20 -0
- package/dist/compat/array/lastIndexOf.mjs +22 -0
- package/dist/compat/index.d.mts +2 -0
- package/dist/compat/index.d.ts +2 -0
- package/dist/compat/index.js +52 -21
- package/dist/compat/index.mjs +2 -0
- package/dist/compat/object/cloneDeep.mjs +2 -24
- package/dist/compat/object/cloneDeepWith.d.mts +38 -0
- package/dist/compat/object/cloneDeepWith.d.ts +38 -0
- package/dist/compat/object/cloneDeepWith.mjs +35 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/index.mjs +1 -0
- package/dist/object/cloneDeep.mjs +3 -110
- package/dist/object/cloneDeepWith.d.mts +43 -0
- package/dist/object/cloneDeepWith.d.ts +43 -0
- package/dist/object/cloneDeepWith.mjs +121 -0
- package/dist/object/flattenObject.mjs +1 -3
- package/dist/object/index.d.mts +1 -0
- package/dist/object/index.d.ts +1 -0
- package/dist/object/index.js +2 -1
- package/dist/object/index.mjs +1 -0
- package/package.json +1 -2
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { getSymbols } from '../compat/_internal/getSymbols.mjs';
|
|
2
|
+
import { isPrimitive } from '../predicate/isPrimitive.mjs';
|
|
3
|
+
import { isTypedArray } from '../predicate/isTypedArray.mjs';
|
|
4
|
+
|
|
5
|
+
function cloneDeepWith(obj, cloneValue) {
|
|
6
|
+
return cloneDeepWithImpl(obj, undefined, obj, new Map(), cloneValue);
|
|
7
|
+
}
|
|
8
|
+
function cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = new Map(), cloneValue = undefined) {
|
|
9
|
+
const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);
|
|
10
|
+
if (cloned != null) {
|
|
11
|
+
return cloned;
|
|
12
|
+
}
|
|
13
|
+
if (isPrimitive(valueToClone)) {
|
|
14
|
+
return valueToClone;
|
|
15
|
+
}
|
|
16
|
+
if (stack.has(valueToClone)) {
|
|
17
|
+
return stack.get(valueToClone);
|
|
18
|
+
}
|
|
19
|
+
if (Array.isArray(valueToClone)) {
|
|
20
|
+
const result = new Array(valueToClone.length);
|
|
21
|
+
stack.set(valueToClone, result);
|
|
22
|
+
for (let i = 0; i < valueToClone.length; i++) {
|
|
23
|
+
result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
|
|
24
|
+
}
|
|
25
|
+
if (Object.hasOwn(valueToClone, 'index')) {
|
|
26
|
+
result.index = valueToClone.index;
|
|
27
|
+
}
|
|
28
|
+
if (Object.hasOwn(valueToClone, 'input')) {
|
|
29
|
+
result.input = valueToClone.input;
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
if (valueToClone instanceof Date) {
|
|
34
|
+
return new Date(valueToClone.getTime());
|
|
35
|
+
}
|
|
36
|
+
if (valueToClone instanceof RegExp) {
|
|
37
|
+
const result = new RegExp(valueToClone.source, valueToClone.flags);
|
|
38
|
+
result.lastIndex = valueToClone.lastIndex;
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
if (valueToClone instanceof Map) {
|
|
42
|
+
const result = new Map();
|
|
43
|
+
stack.set(valueToClone, result);
|
|
44
|
+
for (const [key, value] of valueToClone) {
|
|
45
|
+
result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
if (valueToClone instanceof Set) {
|
|
50
|
+
const result = new Set();
|
|
51
|
+
stack.set(valueToClone, result);
|
|
52
|
+
for (const value of valueToClone) {
|
|
53
|
+
result.add(cloneDeepWithImpl(value, undefined, objectToClone, stack, cloneValue));
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
if (typeof Buffer !== 'undefined' && Buffer.isBuffer(valueToClone)) {
|
|
58
|
+
return valueToClone.subarray();
|
|
59
|
+
}
|
|
60
|
+
if (isTypedArray(valueToClone)) {
|
|
61
|
+
const result = new (Object.getPrototypeOf(valueToClone).constructor)(valueToClone.length);
|
|
62
|
+
stack.set(valueToClone, result);
|
|
63
|
+
for (let i = 0; i < valueToClone.length; i++) {
|
|
64
|
+
result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
if (valueToClone instanceof ArrayBuffer ||
|
|
69
|
+
(typeof SharedArrayBuffer !== 'undefined' && valueToClone instanceof SharedArrayBuffer)) {
|
|
70
|
+
return valueToClone.slice(0);
|
|
71
|
+
}
|
|
72
|
+
if (valueToClone instanceof DataView) {
|
|
73
|
+
const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);
|
|
74
|
+
stack.set(valueToClone, result);
|
|
75
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
if (typeof File !== 'undefined' && valueToClone instanceof File) {
|
|
79
|
+
const result = new File([valueToClone], valueToClone.name, {
|
|
80
|
+
type: valueToClone.type,
|
|
81
|
+
});
|
|
82
|
+
stack.set(valueToClone, result);
|
|
83
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
if (valueToClone instanceof Blob) {
|
|
87
|
+
const result = new Blob([valueToClone], { type: valueToClone.type });
|
|
88
|
+
stack.set(valueToClone, result);
|
|
89
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
if (valueToClone instanceof Error) {
|
|
93
|
+
const result = new valueToClone.constructor();
|
|
94
|
+
stack.set(valueToClone, result);
|
|
95
|
+
result.message = valueToClone.message;
|
|
96
|
+
result.name = valueToClone.name;
|
|
97
|
+
result.stack = valueToClone.stack;
|
|
98
|
+
result.cause = valueToClone.cause;
|
|
99
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
if (typeof valueToClone === 'object' && valueToClone !== null) {
|
|
103
|
+
const result = Object.create(Object.getPrototypeOf(valueToClone));
|
|
104
|
+
stack.set(valueToClone, result);
|
|
105
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
return valueToClone;
|
|
109
|
+
}
|
|
110
|
+
function copyProperties(target, source, objectToClone = target, stack, cloneValue) {
|
|
111
|
+
const keys = [...Object.keys(source), ...getSymbols(source)];
|
|
112
|
+
for (let i = 0; i < keys.length; i++) {
|
|
113
|
+
const key = keys[i];
|
|
114
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
115
|
+
if (descriptor == null || descriptor.writable) {
|
|
116
|
+
target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { cloneDeepWith, cloneDeepWithImpl, copyProperties };
|
|
@@ -15,9 +15,7 @@ function flattenObjectImpl(object, prefix = '') {
|
|
|
15
15
|
continue;
|
|
16
16
|
}
|
|
17
17
|
if (Array.isArray(value)) {
|
|
18
|
-
|
|
19
|
-
result[`${prefixedKey}.${index}`] = value[index];
|
|
20
|
-
}
|
|
18
|
+
Object.assign(result, flattenObjectImpl(value, prefixedKey));
|
|
21
19
|
continue;
|
|
22
20
|
}
|
|
23
21
|
result[prefixedKey] = value;
|
package/dist/object/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { clone } from './clone.mjs';
|
|
2
2
|
export { cloneDeep } from './cloneDeep.mjs';
|
|
3
|
+
export { cloneDeepWith } from './cloneDeepWith.mjs';
|
|
3
4
|
export { findKey } from './findKey.mjs';
|
|
4
5
|
export { flattenObject } from './flattenObject.mjs';
|
|
5
6
|
export { invert } from './invert.mjs';
|
package/dist/object/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { clone } from './clone.js';
|
|
2
2
|
export { cloneDeep } from './cloneDeep.js';
|
|
3
|
+
export { cloneDeepWith } from './cloneDeepWith.js';
|
|
3
4
|
export { findKey } from './findKey.js';
|
|
4
5
|
export { flattenObject } from './flattenObject.js';
|
|
5
6
|
export { invert } from './invert.js';
|
package/dist/object/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
-
const toMerged = require('../_chunk/toMerged-
|
|
5
|
+
const toMerged = require('../_chunk/toMerged-DGFrN7.js');
|
|
6
6
|
|
|
7
7
|
function mergeWith(target, source, merge) {
|
|
8
8
|
const sourceKeys = Object.keys(source);
|
|
@@ -49,6 +49,7 @@ function pick(obj, keys) {
|
|
|
49
49
|
|
|
50
50
|
exports.clone = toMerged.clone;
|
|
51
51
|
exports.cloneDeep = toMerged.cloneDeep;
|
|
52
|
+
exports.cloneDeepWith = toMerged.cloneDeepWith;
|
|
52
53
|
exports.findKey = toMerged.findKey;
|
|
53
54
|
exports.flattenObject = toMerged.flattenObject;
|
|
54
55
|
exports.invert = toMerged.invert;
|
package/dist/object/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { clone } from './clone.mjs';
|
|
2
2
|
export { cloneDeep } from './cloneDeep.mjs';
|
|
3
|
+
export { cloneDeepWith } from './cloneDeepWith.mjs';
|
|
3
4
|
export { findKey } from './findKey.mjs';
|
|
4
5
|
export { flattenObject } from './flattenObject.mjs';
|
|
5
6
|
export { invert } from './invert.mjs';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "es-toolkit",
|
|
3
3
|
"description": "A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.29.0",
|
|
5
5
|
"homepage": "https://es-toolkit.slash.page",
|
|
6
6
|
"bugs": "https://github.com/toss/es-toolkit/issues",
|
|
7
7
|
"repository": {
|
|
@@ -249,7 +249,6 @@
|
|
|
249
249
|
"broken-link-checker": "^0.7.8",
|
|
250
250
|
"eslint": "^9.9.0",
|
|
251
251
|
"eslint-config-prettier": "^9.1.0",
|
|
252
|
-
"eslint-plugin-jsdoc": "^50.2.2",
|
|
253
252
|
"eslint-plugin-no-for-of-array": "^0.0.1",
|
|
254
253
|
"eslint-plugin-prettier": "^5.2.1",
|
|
255
254
|
"eslint-plugin-vue": "^9.28.0",
|