@cleverbrush/deep 1.0.0-beta.2 → 1.0.0-beta.4
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/deepEqual.d.ts +2 -0
- package/dist/deepEqual.js +63 -0
- package/dist/deepExtend.d.ts +10 -0
- package/dist/deepExtend.js +40 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +14 -0
- package/package.json +5 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const isBothNaN = function (v1, v2) {
|
|
4
|
+
return Number.isNaN(v1) && Number.isNaN(v2);
|
|
5
|
+
};
|
|
6
|
+
const deepEqual = function (p1, p2) {
|
|
7
|
+
if (arguments.length !== 2)
|
|
8
|
+
return false;
|
|
9
|
+
const cache = new Map();
|
|
10
|
+
const compare = function (o1, o2) {
|
|
11
|
+
const arraysAreIdentical = function (a1, a2) {
|
|
12
|
+
if (a1.length !== a2.length)
|
|
13
|
+
return false;
|
|
14
|
+
const c1 = a1.map((t) => t).sort();
|
|
15
|
+
const c2 = a2.map((t) => t).sort();
|
|
16
|
+
for (let i = 0; i < c1.length; i++) {
|
|
17
|
+
if (!compare(c1[i], c2[i]))
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
};
|
|
22
|
+
if (arguments.length !== 2)
|
|
23
|
+
return false;
|
|
24
|
+
if (o1 === o2)
|
|
25
|
+
return true;
|
|
26
|
+
if (typeof o1 !== typeof o2)
|
|
27
|
+
return false;
|
|
28
|
+
if (isBothNaN(o1, o2))
|
|
29
|
+
return true;
|
|
30
|
+
if ((Array.isArray(o1) && !Array.isArray(o2)) ||
|
|
31
|
+
(!Array.isArray(o1) && Array.isArray(o2))) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(o1) && Array.isArray(o2)) {
|
|
35
|
+
return arraysAreIdentical(o1, o2);
|
|
36
|
+
}
|
|
37
|
+
if (typeof o1 === 'object') {
|
|
38
|
+
if (cache.get(o1) === true) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
cache.set(o1, true);
|
|
42
|
+
const keys1 = Object.keys(o1);
|
|
43
|
+
const keys2 = Object.keys(o2);
|
|
44
|
+
if (keys1.length != keys2.length)
|
|
45
|
+
return false;
|
|
46
|
+
keys1.sort();
|
|
47
|
+
keys2.sort();
|
|
48
|
+
for (let i = 0; i < keys1.length; i++) {
|
|
49
|
+
if (keys1[i] !== keys2[i]) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const v1 = o1[keys1[i]];
|
|
53
|
+
const v2 = o2[keys1[i]];
|
|
54
|
+
if (!compare(v1, v2))
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
};
|
|
61
|
+
return compare(p1, p2);
|
|
62
|
+
};
|
|
63
|
+
exports.default = deepEqual;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare type CommonProps<T1, T2> = {
|
|
2
|
+
[k in keyof T1 & keyof T2]: T1[k] extends never ? never : T2[k] extends never ? never : T2[k];
|
|
3
|
+
};
|
|
4
|
+
export declare type PropsInFirstOnly<T1, T2> = Omit<T1, keyof T2>;
|
|
5
|
+
export declare type MergeTwo<T1, T2> = PropsInFirstOnly<T1, T2> & PropsInFirstOnly<T2, T1> & {
|
|
6
|
+
[k in keyof CommonProps<T1, T2>]: T1[k] extends Record<string, unknown> ? T2[k] extends Record<string, unknown> ? MergeTwo<T1[k], T2[k]> : T2[k] : T2[k];
|
|
7
|
+
};
|
|
8
|
+
export declare type Merge<T extends unknown[]> = T['length'] extends 3 ? MergeTwo<T[0], MergeTwo<T[1], T[2]>> : T['length'] extends 2 ? MergeTwo<T[0], T[1]> : T['length'] extends 1 ? T[0] : T extends [...infer K, infer PL, infer L] ? Merge<[Merge<[...K]>, MergeTwo<PL, L>]> : never;
|
|
9
|
+
declare const deepExtend: <T extends unknown[]>(...args: T) => Merge<T>;
|
|
10
|
+
export default deepExtend;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const deepExtend = function () {
|
|
4
|
+
if (arguments.length === 0)
|
|
5
|
+
return false;
|
|
6
|
+
if (arguments.length === 1)
|
|
7
|
+
return arguments[0];
|
|
8
|
+
if (typeof arguments[0] !== 'object')
|
|
9
|
+
return false;
|
|
10
|
+
const result = {};
|
|
11
|
+
const extendObject = function (o1, o2) {
|
|
12
|
+
if (o2 == null)
|
|
13
|
+
return;
|
|
14
|
+
const keys = Object.keys(o2);
|
|
15
|
+
for (let i = 0; i < keys.length; i++) {
|
|
16
|
+
if (o2.hasOwnProperty(keys[i])) {
|
|
17
|
+
if (!o1.hasOwnProperty(keys[i]) ||
|
|
18
|
+
!(typeof o1[keys[i]] === 'object' &&
|
|
19
|
+
typeof o2[keys[i]] === 'object')) {
|
|
20
|
+
o1[keys[i]] = o2[keys[i]];
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
if (o1[keys[i]] == null) {
|
|
24
|
+
o1[keys[i]] = o2[keys[i]];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
extendObject(o1[keys[i]], o2[keys[i]]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
for (let i = 0; i < arguments.length; i++) {
|
|
34
|
+
if (typeof arguments[i] === 'object' && arguments[i]) {
|
|
35
|
+
extendObject(result, arguments[i]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
exports.default = deepExtend;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import deepEqual from './deepEqual';
|
|
2
|
+
import deepExtend, { Merge } from './deepExtend';
|
|
3
|
+
export { deepEqual, deepExtend, Merge };
|
|
4
|
+
declare const _default: {
|
|
5
|
+
deepEqual: (p1: any, p2: any) => boolean;
|
|
6
|
+
deepExtend: <T extends unknown[]>(...args: T) => Merge<T>;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deepExtend = exports.deepEqual = void 0;
|
|
7
|
+
const deepEqual_1 = __importDefault(require("./deepEqual"));
|
|
8
|
+
exports.deepEqual = deepEqual_1.default;
|
|
9
|
+
const deepExtend_1 = __importDefault(require("./deepExtend"));
|
|
10
|
+
exports.deepExtend = deepExtend_1.default;
|
|
11
|
+
exports.default = {
|
|
12
|
+
deepEqual: deepEqual_1.default,
|
|
13
|
+
deepExtend: deepExtend_1.default
|
|
14
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleverbrush/deep",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"deep operations on objects",
|
|
6
6
|
"deep equal",
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
],
|
|
9
9
|
"author": "Andrew Zolotukhin <andrew_zol@cleverbrush.com>",
|
|
10
10
|
"license": "BSD",
|
|
11
|
+
"files": [
|
|
12
|
+
"*",
|
|
13
|
+
"dist/*"
|
|
14
|
+
],
|
|
11
15
|
"main": "./dist/index.js",
|
|
12
16
|
"readme": "https://github.com/cleverbrush/libs/tree/master/libs/deep#readme",
|
|
13
17
|
"scripts": {
|