es-toolkit 1.15.1-dev.426 → 1.15.1-dev.427
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/dist/browser.global.js +1 -1
- package/dist/browser.global.js.map +1 -1
- package/dist/compat/array/find.d.mts +122 -0
- package/dist/compat/array/find.d.ts +122 -0
- package/dist/compat/array/find.mjs +42 -0
- package/dist/compat/index.d.mts +1 -0
- package/dist/compat/index.d.ts +1 -0
- package/dist/compat/index.js +328 -290
- package/dist/compat/index.mjs +1 -0
- package/package.json +1 -1
package/dist/compat/index.js
CHANGED
|
@@ -42,57 +42,32 @@ function fill(array, value, start = 0, end = array.length) {
|
|
|
42
42
|
return initial.fill(array, value, start, end);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
for (const item of arr) {
|
|
53
|
-
if (currentDepth < flooredDepth &&
|
|
54
|
-
(Array.isArray(item) ||
|
|
55
|
-
Boolean(item?.[Symbol.isConcatSpreadable]) ||
|
|
56
|
-
(item !== null && typeof item === 'object' && Object.prototype.toString.call(item) === '[object Arguments]'))) {
|
|
57
|
-
if (Array.isArray(item)) {
|
|
58
|
-
recursive(item, currentDepth + 1);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
recursive(Array.from(item), currentDepth + 1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
result.push(item);
|
|
66
|
-
}
|
|
45
|
+
const IS_PLAIN = /^\w*$/;
|
|
46
|
+
const IS_DEEP = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
|
|
47
|
+
function isDeepKey(key) {
|
|
48
|
+
switch (typeof key) {
|
|
49
|
+
case 'number':
|
|
50
|
+
case 'symbol': {
|
|
51
|
+
return false;
|
|
67
52
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function flattenDeep(value) {
|
|
74
|
-
return flatten(value, Infinity);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function flattenDepth(value, depth = 1) {
|
|
78
|
-
return flatten(value, depth);
|
|
53
|
+
case 'string': {
|
|
54
|
+
return !IS_PLAIN.test(key) && IS_DEEP.test(key);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
79
57
|
}
|
|
80
58
|
|
|
81
59
|
function isSymbol(value) {
|
|
82
60
|
return typeof value === 'symbol' || (value != null && value instanceof Symbol);
|
|
83
61
|
}
|
|
84
62
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (Array.isArray(value)) {
|
|
89
|
-
return false;
|
|
63
|
+
function toKey(value) {
|
|
64
|
+
if (typeof value === 'string' || isSymbol(value)) {
|
|
65
|
+
return value;
|
|
90
66
|
}
|
|
91
|
-
if (
|
|
92
|
-
return
|
|
67
|
+
if (Object.is(value?.valueOf(), -0)) {
|
|
68
|
+
return '-0';
|
|
93
69
|
}
|
|
94
|
-
return
|
|
95
|
-
(object != null && Object.hasOwn(object, value)));
|
|
70
|
+
return `${value}`;
|
|
96
71
|
}
|
|
97
72
|
|
|
98
73
|
function toPath(deepKey) {
|
|
@@ -131,7 +106,316 @@ function toPath(deepKey) {
|
|
|
131
106
|
lastIndex = PROPERTY_REGEXP.lastIndex;
|
|
132
107
|
}
|
|
133
108
|
}
|
|
134
|
-
return result;
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function get(object, path, defaultValue) {
|
|
113
|
+
let resolvedPath;
|
|
114
|
+
if (Array.isArray(path)) {
|
|
115
|
+
resolvedPath = path;
|
|
116
|
+
}
|
|
117
|
+
else if (typeof path === 'string' && isDeepKey(path) && object?.[path] == null) {
|
|
118
|
+
resolvedPath = toPath(path);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
resolvedPath = [path];
|
|
122
|
+
}
|
|
123
|
+
if (resolvedPath.length === 0) {
|
|
124
|
+
return defaultValue;
|
|
125
|
+
}
|
|
126
|
+
let current = object;
|
|
127
|
+
let index;
|
|
128
|
+
for (index = 0; index < resolvedPath.length && current != null; index++) {
|
|
129
|
+
const key = toKey(resolvedPath[index]);
|
|
130
|
+
current = current[key];
|
|
131
|
+
}
|
|
132
|
+
if (current === null && index === resolvedPath.length) {
|
|
133
|
+
return current;
|
|
134
|
+
}
|
|
135
|
+
return current ?? defaultValue;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function property(path) {
|
|
139
|
+
return function (object) {
|
|
140
|
+
return get(object, path);
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function isArrayMatch(target, source) {
|
|
145
|
+
if (source.length === 0) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
if (!Array.isArray(target)) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const countedIndex = new Set();
|
|
152
|
+
for (let i = 0; i < source.length; i++) {
|
|
153
|
+
const sourceItem = source[i];
|
|
154
|
+
const index = target.findIndex((targetItem, index) => {
|
|
155
|
+
return isMatch(targetItem, sourceItem) && !countedIndex.has(index);
|
|
156
|
+
});
|
|
157
|
+
if (index === -1) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
countedIndex.add(index);
|
|
161
|
+
}
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function isMapMatch(target, source) {
|
|
166
|
+
if (source.size === 0) {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
if (!(target instanceof Map)) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
for (const [key, value] of source.entries()) {
|
|
173
|
+
if (!isMatch(target.get(key), value)) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function isSetMatch(target, source) {
|
|
181
|
+
if (source.size === 0) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
if (!(target instanceof Set)) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
return isArrayMatch([...target], [...source]);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function isMatch(target, source) {
|
|
191
|
+
if (source === target) {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
switch (typeof source) {
|
|
195
|
+
case 'object': {
|
|
196
|
+
if (source == null) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
const keys = Object.keys(source);
|
|
200
|
+
if (target == null) {
|
|
201
|
+
if (keys.length === 0) {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
if (Array.isArray(source)) {
|
|
207
|
+
return isArrayMatch(target, source);
|
|
208
|
+
}
|
|
209
|
+
if (source instanceof Map) {
|
|
210
|
+
return isMapMatch(target, source);
|
|
211
|
+
}
|
|
212
|
+
if (source instanceof Set) {
|
|
213
|
+
return isSetMatch(target, source);
|
|
214
|
+
}
|
|
215
|
+
for (let i = 0; i < keys.length; i++) {
|
|
216
|
+
const key = keys[i];
|
|
217
|
+
if (!isTypedArray$1.isPrimitive(target) && !(key in target)) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
if (source[key] === undefined && target[key] !== undefined) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
if (!isMatch(target[key], source[key])) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
case 'function': {
|
|
230
|
+
if (Object.keys(source).length > 0) {
|
|
231
|
+
return isMatch(target, { ...source });
|
|
232
|
+
}
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
default: {
|
|
236
|
+
return !source;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function matches(source) {
|
|
242
|
+
source = toMerged.cloneDeep(source);
|
|
243
|
+
return (target) => {
|
|
244
|
+
return isMatch(target, source);
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function cloneDeep(obj) {
|
|
249
|
+
if (typeof obj !== 'object') {
|
|
250
|
+
return toMerged.cloneDeep(obj);
|
|
251
|
+
}
|
|
252
|
+
switch (Object.prototype.toString.call(obj)) {
|
|
253
|
+
case isFunction.numberTag:
|
|
254
|
+
case isFunction.stringTag:
|
|
255
|
+
case isFunction.booleanTag: {
|
|
256
|
+
const result = new obj.constructor(obj?.valueOf());
|
|
257
|
+
toMerged.copyProperties(result, obj);
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
case isFunction.argumentsTag: {
|
|
261
|
+
const result = {};
|
|
262
|
+
toMerged.copyProperties(result, obj);
|
|
263
|
+
result.length = obj.length;
|
|
264
|
+
result[Symbol.iterator] = obj[Symbol.iterator];
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
default: {
|
|
268
|
+
return toMerged.cloneDeep(obj);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\d*)$/;
|
|
274
|
+
function isIndex(value) {
|
|
275
|
+
switch (typeof value) {
|
|
276
|
+
case 'number': {
|
|
277
|
+
return Number.isInteger(value) && value >= 0 && value < Number.MAX_SAFE_INTEGER;
|
|
278
|
+
}
|
|
279
|
+
case 'symbol': {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
case 'string': {
|
|
283
|
+
return IS_UNSIGNED_INTEGER.test(value);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function isArguments(value) {
|
|
289
|
+
return value !== null && typeof value === 'object' && isFunction.getTag(value) === '[object Arguments]';
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function has(object, path) {
|
|
293
|
+
let resolvedPath;
|
|
294
|
+
if (Array.isArray(path)) {
|
|
295
|
+
resolvedPath = path;
|
|
296
|
+
}
|
|
297
|
+
else if (typeof path === 'string' && isDeepKey(path) && object?.[path] == null) {
|
|
298
|
+
resolvedPath = toPath(path);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
resolvedPath = [path];
|
|
302
|
+
}
|
|
303
|
+
if (resolvedPath.length === 0) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
let current = object;
|
|
307
|
+
for (let i = 0; i < resolvedPath.length; i++) {
|
|
308
|
+
const key = resolvedPath[i];
|
|
309
|
+
if (current == null || !Object.prototype.hasOwnProperty.call(current, key)) {
|
|
310
|
+
const isSparseIndex = (Array.isArray(current) || isArguments(current)) && isIndex(key) && key < current.length;
|
|
311
|
+
if (!isSparseIndex) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
current = current[key];
|
|
316
|
+
}
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function matchesProperty(property, source) {
|
|
321
|
+
property = Array.isArray(property) ? property : toKey(property);
|
|
322
|
+
source = cloneDeep(source);
|
|
323
|
+
return function (target) {
|
|
324
|
+
const result = get(target, property);
|
|
325
|
+
if (result === undefined) {
|
|
326
|
+
return has(target, property);
|
|
327
|
+
}
|
|
328
|
+
if (source === undefined) {
|
|
329
|
+
return result === undefined;
|
|
330
|
+
}
|
|
331
|
+
return isMatch(result, source);
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
function find(source, doesMatch) {
|
|
336
|
+
let values = source;
|
|
337
|
+
if (!Array.isArray(source)) {
|
|
338
|
+
values = Object.values(source);
|
|
339
|
+
}
|
|
340
|
+
switch (typeof doesMatch) {
|
|
341
|
+
case 'function': {
|
|
342
|
+
if (!Array.isArray(source)) {
|
|
343
|
+
const entries = Object.entries(source);
|
|
344
|
+
for (let i = 0; i < entries.length; i++) {
|
|
345
|
+
const entry = entries[i];
|
|
346
|
+
const key = entry[0];
|
|
347
|
+
const value = entry[1];
|
|
348
|
+
if (doesMatch(value, key, source)) {
|
|
349
|
+
return value;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
return values.find(doesMatch);
|
|
355
|
+
}
|
|
356
|
+
case 'object': {
|
|
357
|
+
if (Array.isArray(doesMatch) && doesMatch.length === 2) {
|
|
358
|
+
const key = doesMatch[0];
|
|
359
|
+
const value = doesMatch[1];
|
|
360
|
+
return values.find(matchesProperty(key, value));
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
return values.find(matches(doesMatch));
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
case 'string': {
|
|
367
|
+
return values.find(property(doesMatch));
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
function flatten(value, depth = 1) {
|
|
373
|
+
const result = [];
|
|
374
|
+
const flooredDepth = Math.floor(depth);
|
|
375
|
+
if (!Array.isArray(value)) {
|
|
376
|
+
return result;
|
|
377
|
+
}
|
|
378
|
+
const recursive = (arr, currentDepth) => {
|
|
379
|
+
for (const item of arr) {
|
|
380
|
+
if (currentDepth < flooredDepth &&
|
|
381
|
+
(Array.isArray(item) ||
|
|
382
|
+
Boolean(item?.[Symbol.isConcatSpreadable]) ||
|
|
383
|
+
(item !== null && typeof item === 'object' && Object.prototype.toString.call(item) === '[object Arguments]'))) {
|
|
384
|
+
if (Array.isArray(item)) {
|
|
385
|
+
recursive(item, currentDepth + 1);
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
recursive(Array.from(item), currentDepth + 1);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
result.push(item);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
recursive(value, 0);
|
|
397
|
+
return result;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
function flattenDeep(value) {
|
|
401
|
+
return flatten(value, Infinity);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
function flattenDepth(value, depth = 1) {
|
|
405
|
+
return flatten(value, depth);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
const regexIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
|
|
409
|
+
const regexIsPlainProp = /^\w*$/;
|
|
410
|
+
function isKey(value, object) {
|
|
411
|
+
if (Array.isArray(value)) {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol(value)) {
|
|
415
|
+
return true;
|
|
416
|
+
}
|
|
417
|
+
return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||
|
|
418
|
+
(object != null && Object.hasOwn(object, value)));
|
|
135
419
|
}
|
|
136
420
|
|
|
137
421
|
function getPath(key, object) {
|
|
@@ -213,21 +497,6 @@ function size(target) {
|
|
|
213
497
|
return Object.keys(target).length;
|
|
214
498
|
}
|
|
215
499
|
|
|
216
|
-
const IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\d*)$/;
|
|
217
|
-
function isIndex(value) {
|
|
218
|
-
switch (typeof value) {
|
|
219
|
-
case 'number': {
|
|
220
|
-
return Number.isInteger(value) && value >= 0 && value < Number.MAX_SAFE_INTEGER;
|
|
221
|
-
}
|
|
222
|
-
case 'symbol': {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
case 'string': {
|
|
226
|
-
return IS_UNSIGNED_INTEGER.test(value);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
500
|
function set(obj, path, value) {
|
|
232
501
|
const resolvedPath = Array.isArray(path) ? path : typeof path === 'string' ? toPath(path) : [path];
|
|
233
502
|
let current = obj;
|
|
@@ -292,94 +561,6 @@ function bind(func, thisObj, ...partialArgs) {
|
|
|
292
561
|
const bindPlaceholder = Symbol('bind.placeholder');
|
|
293
562
|
bind.placeholder = bindPlaceholder;
|
|
294
563
|
|
|
295
|
-
const IS_PLAIN = /^\w*$/;
|
|
296
|
-
const IS_DEEP = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
|
|
297
|
-
function isDeepKey(key) {
|
|
298
|
-
switch (typeof key) {
|
|
299
|
-
case 'number':
|
|
300
|
-
case 'symbol': {
|
|
301
|
-
return false;
|
|
302
|
-
}
|
|
303
|
-
case 'string': {
|
|
304
|
-
return !IS_PLAIN.test(key) && IS_DEEP.test(key);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
function toKey(value) {
|
|
310
|
-
if (typeof value === 'string' || isSymbol(value)) {
|
|
311
|
-
return value;
|
|
312
|
-
}
|
|
313
|
-
if (Object.is(value?.valueOf(), -0)) {
|
|
314
|
-
return '-0';
|
|
315
|
-
}
|
|
316
|
-
return `${value}`;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
function get(object, path, defaultValue) {
|
|
320
|
-
let resolvedPath;
|
|
321
|
-
if (Array.isArray(path)) {
|
|
322
|
-
resolvedPath = path;
|
|
323
|
-
}
|
|
324
|
-
else if (typeof path === 'string' && isDeepKey(path) && object?.[path] == null) {
|
|
325
|
-
resolvedPath = toPath(path);
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
328
|
-
resolvedPath = [path];
|
|
329
|
-
}
|
|
330
|
-
if (resolvedPath.length === 0) {
|
|
331
|
-
return defaultValue;
|
|
332
|
-
}
|
|
333
|
-
let current = object;
|
|
334
|
-
let index;
|
|
335
|
-
for (index = 0; index < resolvedPath.length && current != null; index++) {
|
|
336
|
-
const key = toKey(resolvedPath[index]);
|
|
337
|
-
current = current[key];
|
|
338
|
-
}
|
|
339
|
-
if (current === null && index === resolvedPath.length) {
|
|
340
|
-
return current;
|
|
341
|
-
}
|
|
342
|
-
return current ?? defaultValue;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
function isArguments(value) {
|
|
346
|
-
return value !== null && typeof value === 'object' && isFunction.getTag(value) === '[object Arguments]';
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
function has(object, path) {
|
|
350
|
-
let resolvedPath;
|
|
351
|
-
if (Array.isArray(path)) {
|
|
352
|
-
resolvedPath = path;
|
|
353
|
-
}
|
|
354
|
-
else if (typeof path === 'string' && isDeepKey(path) && object?.[path] == null) {
|
|
355
|
-
resolvedPath = toPath(path);
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
resolvedPath = [path];
|
|
359
|
-
}
|
|
360
|
-
if (resolvedPath.length === 0) {
|
|
361
|
-
return false;
|
|
362
|
-
}
|
|
363
|
-
let current = object;
|
|
364
|
-
for (let i = 0; i < resolvedPath.length; i++) {
|
|
365
|
-
const key = resolvedPath[i];
|
|
366
|
-
if (current == null || !Object.prototype.hasOwnProperty.call(current, key)) {
|
|
367
|
-
const isSparseIndex = (Array.isArray(current) || isArguments(current)) && isIndex(key) && key < current.length;
|
|
368
|
-
if (!isSparseIndex) {
|
|
369
|
-
return false;
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
current = current[key];
|
|
373
|
-
}
|
|
374
|
-
return true;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
function property(path) {
|
|
378
|
-
return function (object) {
|
|
379
|
-
return get(object, path);
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
|
|
383
564
|
function identity(x) {
|
|
384
565
|
return x;
|
|
385
566
|
}
|
|
@@ -446,31 +627,6 @@ function isTypedArray(x) {
|
|
|
446
627
|
return isTypedArray$1.isTypedArray(x);
|
|
447
628
|
}
|
|
448
629
|
|
|
449
|
-
function cloneDeep(obj) {
|
|
450
|
-
if (typeof obj !== 'object') {
|
|
451
|
-
return toMerged.cloneDeep(obj);
|
|
452
|
-
}
|
|
453
|
-
switch (Object.prototype.toString.call(obj)) {
|
|
454
|
-
case isFunction.numberTag:
|
|
455
|
-
case isFunction.stringTag:
|
|
456
|
-
case isFunction.booleanTag: {
|
|
457
|
-
const result = new obj.constructor(obj?.valueOf());
|
|
458
|
-
toMerged.copyProperties(result, obj);
|
|
459
|
-
return result;
|
|
460
|
-
}
|
|
461
|
-
case isFunction.argumentsTag: {
|
|
462
|
-
const result = {};
|
|
463
|
-
toMerged.copyProperties(result, obj);
|
|
464
|
-
result.length = obj.length;
|
|
465
|
-
result[Symbol.iterator] = obj[Symbol.iterator];
|
|
466
|
-
return result;
|
|
467
|
-
}
|
|
468
|
-
default: {
|
|
469
|
-
return toMerged.cloneDeep(obj);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
|
|
474
630
|
function mergeWith(object, ...otherArgs) {
|
|
475
631
|
const sources = otherArgs.slice(0, -1);
|
|
476
632
|
const merge = otherArgs[otherArgs.length - 1];
|
|
@@ -557,125 +713,6 @@ function isBoolean(x) {
|
|
|
557
713
|
return false;
|
|
558
714
|
}
|
|
559
715
|
|
|
560
|
-
function isArrayMatch(target, source) {
|
|
561
|
-
if (source.length === 0) {
|
|
562
|
-
return true;
|
|
563
|
-
}
|
|
564
|
-
if (!Array.isArray(target)) {
|
|
565
|
-
return false;
|
|
566
|
-
}
|
|
567
|
-
const countedIndex = new Set();
|
|
568
|
-
for (let i = 0; i < source.length; i++) {
|
|
569
|
-
const sourceItem = source[i];
|
|
570
|
-
const index = target.findIndex((targetItem, index) => {
|
|
571
|
-
return isMatch(targetItem, sourceItem) && !countedIndex.has(index);
|
|
572
|
-
});
|
|
573
|
-
if (index === -1) {
|
|
574
|
-
return false;
|
|
575
|
-
}
|
|
576
|
-
countedIndex.add(index);
|
|
577
|
-
}
|
|
578
|
-
return true;
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
function isMapMatch(target, source) {
|
|
582
|
-
if (source.size === 0) {
|
|
583
|
-
return true;
|
|
584
|
-
}
|
|
585
|
-
if (!(target instanceof Map)) {
|
|
586
|
-
return false;
|
|
587
|
-
}
|
|
588
|
-
for (const [key, value] of source.entries()) {
|
|
589
|
-
if (!isMatch(target.get(key), value)) {
|
|
590
|
-
return false;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
return true;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
function isSetMatch(target, source) {
|
|
597
|
-
if (source.size === 0) {
|
|
598
|
-
return true;
|
|
599
|
-
}
|
|
600
|
-
if (!(target instanceof Set)) {
|
|
601
|
-
return false;
|
|
602
|
-
}
|
|
603
|
-
return isArrayMatch([...target], [...source]);
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
function isMatch(target, source) {
|
|
607
|
-
if (source === target) {
|
|
608
|
-
return true;
|
|
609
|
-
}
|
|
610
|
-
switch (typeof source) {
|
|
611
|
-
case 'object': {
|
|
612
|
-
if (source == null) {
|
|
613
|
-
return true;
|
|
614
|
-
}
|
|
615
|
-
const keys = Object.keys(source);
|
|
616
|
-
if (target == null) {
|
|
617
|
-
if (keys.length === 0) {
|
|
618
|
-
return true;
|
|
619
|
-
}
|
|
620
|
-
return false;
|
|
621
|
-
}
|
|
622
|
-
if (Array.isArray(source)) {
|
|
623
|
-
return isArrayMatch(target, source);
|
|
624
|
-
}
|
|
625
|
-
if (source instanceof Map) {
|
|
626
|
-
return isMapMatch(target, source);
|
|
627
|
-
}
|
|
628
|
-
if (source instanceof Set) {
|
|
629
|
-
return isSetMatch(target, source);
|
|
630
|
-
}
|
|
631
|
-
for (let i = 0; i < keys.length; i++) {
|
|
632
|
-
const key = keys[i];
|
|
633
|
-
if (!isTypedArray$1.isPrimitive(target) && !(key in target)) {
|
|
634
|
-
return false;
|
|
635
|
-
}
|
|
636
|
-
if (source[key] === undefined && target[key] !== undefined) {
|
|
637
|
-
return false;
|
|
638
|
-
}
|
|
639
|
-
if (!isMatch(target[key], source[key])) {
|
|
640
|
-
return false;
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
return true;
|
|
644
|
-
}
|
|
645
|
-
case 'function': {
|
|
646
|
-
if (Object.keys(source).length > 0) {
|
|
647
|
-
return isMatch(target, { ...source });
|
|
648
|
-
}
|
|
649
|
-
return false;
|
|
650
|
-
}
|
|
651
|
-
default: {
|
|
652
|
-
return !source;
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
function matches(source) {
|
|
658
|
-
source = toMerged.cloneDeep(source);
|
|
659
|
-
return (target) => {
|
|
660
|
-
return isMatch(target, source);
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
function matchesProperty(property, source) {
|
|
665
|
-
property = Array.isArray(property) ? property : toKey(property);
|
|
666
|
-
source = cloneDeep(source);
|
|
667
|
-
return function (target) {
|
|
668
|
-
const result = get(target, property);
|
|
669
|
-
if (result === undefined) {
|
|
670
|
-
return has(target, property);
|
|
671
|
-
}
|
|
672
|
-
if (source === undefined) {
|
|
673
|
-
return result === undefined;
|
|
674
|
-
}
|
|
675
|
-
return isMatch(result, source);
|
|
676
|
-
};
|
|
677
|
-
}
|
|
678
|
-
|
|
679
716
|
const startsWith = (str, target, position = 0) => {
|
|
680
717
|
return str.startsWith(target, position);
|
|
681
718
|
};
|
|
@@ -815,6 +852,7 @@ exports.concat = concat;
|
|
|
815
852
|
exports.difference = difference;
|
|
816
853
|
exports.endsWith = endsWith;
|
|
817
854
|
exports.fill = fill;
|
|
855
|
+
exports.find = find;
|
|
818
856
|
exports.flatten = flatten;
|
|
819
857
|
exports.flattenDeep = flattenDeep;
|
|
820
858
|
exports.flattenDepth = flattenDepth;
|
package/dist/compat/index.mjs
CHANGED
|
@@ -97,6 +97,7 @@ export { chunk } from './array/chunk.mjs';
|
|
|
97
97
|
export { concat } from './array/concat.mjs';
|
|
98
98
|
export { difference } from './array/difference.mjs';
|
|
99
99
|
export { fill } from './array/fill.mjs';
|
|
100
|
+
export { find } from './array/find.mjs';
|
|
100
101
|
export { flatten } from './array/flatten.mjs';
|
|
101
102
|
export { flattenDeep } from './array/flattenDeep.mjs';
|
|
102
103
|
export { flattenDepth } from './array/flattenDepth.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.15.1-dev.
|
|
4
|
+
"version": "1.15.1-dev.427+ff49feba",
|
|
5
5
|
"homepage": "https://es-toolkit.slash.page",
|
|
6
6
|
"bugs": "https://github.com/toss/es-toolkit/issues",
|
|
7
7
|
"repository": {
|