cafe-utility 7.2.0 → 8.0.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.
Files changed (3) hide show
  1. package/index.d.ts +6 -2
  2. package/index.js +26 -4
  3. package/package.json +2 -2
package/index.d.ts CHANGED
@@ -62,7 +62,9 @@ declare function asArray(value: any): unknown[];
62
62
  declare function asObject(value: any): Record<string, unknown>;
63
63
  declare function represent(value: any): string;
64
64
  declare function expandError(error: any, stackTrace?: boolean): string;
65
- declare function mergeDeep(target: CafeObject, source: CafeObject): CafeObject;
65
+ declare function deepMergeInPlace<X extends object, Y extends object>(target: X, source: Y): X & Y;
66
+ declare function deepMerge2<X extends object, Y extends object>(target: X, source: Y): X & Y;
67
+ declare function deepMerge3<X extends object, Y extends object, Z extends object>(target: X, sourceA: Y, sourceB: Z): X & Y & Z;
66
68
  declare function zip<T>(objects: CafeObject<T>[], reducer: (a: T, b: T) => T): CafeObject<T>;
67
69
  declare function zipSum(objects: CafeObject<number>[]): CafeObject<number>;
68
70
  declare function asPageNumber(value: any): number;
@@ -394,7 +396,9 @@ export declare const Objects: {
394
396
  ensureDeep: typeof ensureDeep;
395
397
  replaceDeep: typeof replaceDeep;
396
398
  getFirstDeep: typeof getFirstDeep;
397
- mergeDeep: typeof mergeDeep;
399
+ deepMergeInPlace: typeof deepMergeInPlace;
400
+ deepMerge2: typeof deepMerge2;
401
+ deepMerge3: typeof deepMerge3;
398
402
  mapAllAsync: typeof mapAllAsync;
399
403
  cloneWithJson: typeof cloneWithJson;
400
404
  sortObject: typeof sortObject;
package/index.js CHANGED
@@ -292,7 +292,12 @@ function convertBytes(bytes) {
292
292
  }
293
293
 
294
294
  function isObject(value) {
295
- return value !== null && typeof value === 'object'
295
+ return (
296
+ value !== null &&
297
+ typeof value === 'object' &&
298
+ !value.constructor.isBuffer &&
299
+ value.constructor.name !== 'Uint8Array'
300
+ )
296
301
  }
297
302
 
298
303
  function isStrictlyObject(value) {
@@ -470,14 +475,14 @@ function expandError(error, stackTrace) {
470
475
  return stackTrace && error.stack ? joined + '\n' + error.stack : joined
471
476
  }
472
477
 
473
- function mergeDeep(target, source) {
478
+ function deepMergeInPlace(target, source) {
474
479
  if (isStrictlyObject(target) && isStrictlyObject(source)) {
475
480
  for (const key in source) {
476
481
  if (isStrictlyObject(source[key])) {
477
482
  if (!target[key]) {
478
483
  target[key] = {}
479
484
  }
480
- mergeDeep(target[key], source[key])
485
+ deepMergeInPlace(target[key], source[key])
481
486
  } else if (Array.isArray(source[key])) {
482
487
  target[key] = [...source[key]]
483
488
  } else {
@@ -488,6 +493,21 @@ function mergeDeep(target, source) {
488
493
  return target
489
494
  }
490
495
 
496
+ function deepMerge2(target, source) {
497
+ const result = {}
498
+ deepMergeInPlace(result, target)
499
+ deepMergeInPlace(result, source)
500
+ return result
501
+ }
502
+
503
+ function deepMerge3(target, sourceA, sourceB) {
504
+ const result = {}
505
+ deepMergeInPlace(result, target)
506
+ deepMergeInPlace(result, sourceA)
507
+ deepMergeInPlace(result, sourceB)
508
+ return result
509
+ }
510
+
491
511
  function zip(objects, reducer) {
492
512
  const result = {}
493
513
  for (const object of objects) {
@@ -2229,7 +2249,9 @@ exports.Objects = {
2229
2249
  ensureDeep,
2230
2250
  replaceDeep,
2231
2251
  getFirstDeep,
2232
- mergeDeep,
2252
+ deepMergeInPlace,
2253
+ deepMerge2,
2254
+ deepMerge3,
2233
2255
  mapAllAsync,
2234
2256
  cloneWithJson,
2235
2257
  sortObject,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cafe-utility",
3
- "version": "7.2.0",
3
+ "version": "8.0.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "exports": {
@@ -14,5 +14,5 @@
14
14
  "scripts": {},
15
15
  "keywords": [],
16
16
  "author": "",
17
- "license": "ISC"
17
+ "license": "MIT"
18
18
  }