datum-merge 0.9.0 → 0.9.1
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/cjs/diff-lib/deep-diff.js +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -10
- package/dist/cjs/merge-conf.d.ts +8 -8
- package/dist/cjs/merge-conf.d.ts.map +1 -1
- package/dist/cjs/merge-conf.js +3 -3
- package/dist/cjs/merge-high.d.ts +7 -25
- package/dist/cjs/merge-high.d.ts.map +1 -1
- package/dist/cjs/merge-high.js +1 -11
- package/dist/cjs/merge-low.d.ts +20 -19
- package/dist/cjs/merge-low.d.ts.map +1 -1
- package/dist/cjs/merge-low.js +39 -41
- package/dist/esm/diff-lib/deep-diff.js +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/merge-conf.d.ts +8 -8
- package/dist/esm/merge-conf.d.ts.map +1 -1
- package/dist/esm/merge-conf.js +3 -3
- package/dist/esm/merge-high.d.ts +7 -25
- package/dist/esm/merge-high.d.ts.map +1 -1
- package/dist/esm/merge-high.js +0 -9
- package/dist/esm/merge-low.d.ts +20 -19
- package/dist/esm/merge-low.d.ts.map +1 -1
- package/dist/esm/merge-low.js +17 -19
- package/package.json +1 -1
- package/src/diff-lib/deep-diff.ts +2 -2
- package/src/index.ts +1 -1
- package/src/merge-conf.ts +13 -12
- package/src/merge-high.ts +15 -29
- package/src/merge-low.ts +21 -19
package/dist/cjs/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export { deepDiffFlat } from "./diff-high";
|
|
|
6
6
|
export { deepDiffTyped } from "./diff-high";
|
|
7
7
|
export { UpdateCode } from "./merge-low";
|
|
8
8
|
export { UpdateCode as MC } from "./merge-low";
|
|
9
|
+
export { type MergeCode } from "./merge-low";
|
|
9
10
|
export { updateCodeInfo } from "./merge-high";
|
|
10
|
-
export { MergeError } from "./merge-high";
|
|
11
11
|
export { shallowMerge, immutableMerge } from "./merge-high";
|
|
12
12
|
export { diffFromMerge } from "./merge-high";
|
|
13
13
|
export { deepMerge, immutableDeepMerge } from "./merge-high";
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.deepDiff = exports.mergeDiff = exports.merge = exports.immutableCustomMerge = exports.customMerge = exports.fillUpdateCodes = exports.immutableDetailMerge = exports.detailMerge = exports.immutableDeepMerge = exports.deepMerge = exports.diffFromMerge = exports.immutableMerge = exports.shallowMerge = exports.
|
|
17
|
+
exports.deepDiff = exports.mergeDiff = exports.merge = exports.immutableCustomMerge = exports.customMerge = exports.fillUpdateCodes = exports.immutableDetailMerge = exports.detailMerge = exports.immutableDeepMerge = exports.deepMerge = exports.diffFromMerge = exports.immutableMerge = exports.shallowMerge = exports.updateCodeInfo = exports.MC = exports.UpdateCode = exports.deepDiffTyped = exports.deepDiffFlat = exports.deepDiffLow = exports.unflattenObject = exports.flattenObject = exports.deepClone = exports.deepEquals = void 0;
|
|
18
18
|
var datum_utils_1 = require("./datum-utils");
|
|
19
19
|
Object.defineProperty(exports, "deepEquals", { enumerable: true, get: function () { return datum_utils_1.deepEquals; } });
|
|
20
20
|
var datum_utils_2 = require("./datum-utils");
|
|
@@ -35,15 +35,13 @@ Object.defineProperty(exports, "MC", { enumerable: true, get: function () { retu
|
|
|
35
35
|
var merge_high_1 = require("./merge-high");
|
|
36
36
|
Object.defineProperty(exports, "updateCodeInfo", { enumerable: true, get: function () { return merge_high_1.updateCodeInfo; } });
|
|
37
37
|
var merge_high_2 = require("./merge-high");
|
|
38
|
-
Object.defineProperty(exports, "
|
|
38
|
+
Object.defineProperty(exports, "shallowMerge", { enumerable: true, get: function () { return merge_high_2.shallowMerge; } });
|
|
39
|
+
Object.defineProperty(exports, "immutableMerge", { enumerable: true, get: function () { return merge_high_2.immutableMerge; } });
|
|
39
40
|
var merge_high_3 = require("./merge-high");
|
|
40
|
-
Object.defineProperty(exports, "
|
|
41
|
-
Object.defineProperty(exports, "immutableMerge", { enumerable: true, get: function () { return merge_high_3.immutableMerge; } });
|
|
41
|
+
Object.defineProperty(exports, "diffFromMerge", { enumerable: true, get: function () { return merge_high_3.diffFromMerge; } });
|
|
42
42
|
var merge_high_4 = require("./merge-high");
|
|
43
|
-
Object.defineProperty(exports, "
|
|
44
|
-
|
|
45
|
-
Object.defineProperty(exports, "deepMerge", { enumerable: true, get: function () { return merge_high_5.deepMerge; } });
|
|
46
|
-
Object.defineProperty(exports, "immutableDeepMerge", { enumerable: true, get: function () { return merge_high_5.immutableDeepMerge; } });
|
|
43
|
+
Object.defineProperty(exports, "deepMerge", { enumerable: true, get: function () { return merge_high_4.deepMerge; } });
|
|
44
|
+
Object.defineProperty(exports, "immutableDeepMerge", { enumerable: true, get: function () { return merge_high_4.immutableDeepMerge; } });
|
|
47
45
|
var merge_conf_1 = require("./merge-conf");
|
|
48
46
|
Object.defineProperty(exports, "detailMerge", { enumerable: true, get: function () { return merge_conf_1.detailMerge; } });
|
|
49
47
|
Object.defineProperty(exports, "immutableDetailMerge", { enumerable: true, get: function () { return merge_conf_1.immutableDetailMerge; } });
|
|
@@ -52,8 +50,8 @@ Object.defineProperty(exports, "fillUpdateCodes", { enumerable: true, get: funct
|
|
|
52
50
|
var merge_conf_3 = require("./merge-conf");
|
|
53
51
|
Object.defineProperty(exports, "customMerge", { enumerable: true, get: function () { return merge_conf_3.customMerge; } });
|
|
54
52
|
Object.defineProperty(exports, "immutableCustomMerge", { enumerable: true, get: function () { return merge_conf_3.immutableCustomMerge; } });
|
|
55
|
-
var
|
|
56
|
-
Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return
|
|
53
|
+
var merge_high_5 = require("./merge-high");
|
|
54
|
+
Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return merge_high_5.deepMerge; } });
|
|
57
55
|
var merge_conf_4 = require("./merge-conf");
|
|
58
56
|
Object.defineProperty(exports, "mergeDiff", { enumerable: true, get: function () { return merge_conf_4.customMerge; } });
|
|
59
57
|
__exportStar(require("./diff-lib/deep-diff"), exports);
|
package/dist/cjs/merge-conf.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { TupleObj } from "./type-utils";
|
|
2
|
-
import {
|
|
2
|
+
import { MergeCode } from "./merge-low";
|
|
3
3
|
export type DetailConfig = {
|
|
4
|
-
[key: string]:
|
|
4
|
+
[key: string]: MergeCode | DetailConfig;
|
|
5
5
|
};
|
|
6
6
|
export type MergeConfig = {
|
|
7
|
-
scalar?:
|
|
8
|
-
vector?:
|
|
9
|
-
nested?:
|
|
10
|
-
[glob: string]:
|
|
7
|
+
scalar?: MergeCode;
|
|
8
|
+
vector?: MergeCode;
|
|
9
|
+
nested?: MergeCode;
|
|
10
|
+
[glob: string]: MergeCode | MergeConfig | undefined;
|
|
11
11
|
};
|
|
12
12
|
export declare function detailMerge(target: {
|
|
13
13
|
[key: string]: any;
|
|
@@ -16,7 +16,7 @@ export declare function detailMerge(target: {
|
|
|
16
16
|
}, mergeCodes: DetailConfig): boolean;
|
|
17
17
|
export declare function immutableDetailMerge(target: any, source: any, mergeCodes: DetailConfig): any;
|
|
18
18
|
export declare function selectDetailKeys(obj: any, mergeCodes: DetailConfig, excludeKeys?: string[]): string[];
|
|
19
|
-
export declare function customMerge<T extends TupleObj>(target: T, source: Partial<T>, mergeConf: MergeConfig |
|
|
20
|
-
export declare const fillUpdateCodes: (source: any, mergeConf: MergeConfig |
|
|
19
|
+
export declare function customMerge<T extends TupleObj>(target: T, source: Partial<T>, mergeConf: MergeConfig | MergeCode, excludeKeys?: string[]): Partial<T> | false;
|
|
20
|
+
export declare const fillUpdateCodes: (source: any, mergeConf: MergeConfig | MergeCode, excludeKeys?: string[], blockUnset?: boolean) => DetailConfig;
|
|
21
21
|
export declare function immutableCustomMerge(target: any, source: any, mergeConf: MergeConfig, skipFill?: boolean): any;
|
|
22
22
|
//# sourceMappingURL=merge-conf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conf.d.ts","sourceRoot":"","sources":["../../src/merge-conf.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,
|
|
1
|
+
{"version":3,"file":"merge-conf.d.ts","sourceRoot":"","sources":["../../src/merge-conf.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAc,SAAS,EAAsC,MAAM,aAAa,CAAC;AAGxF,MAAM,MAAM,YAAY,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;CACvD,CAAC;AAUF,wBAAgB,WAAW,CACvB,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,UAAU,EAAE,YAAY,GACzB,OAAO,CA0BT;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,YAAY,GACzB,GAAG,CAIL;AAKD,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,YAAY,EACxB,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAaV;AAQD,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,EAC1C,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAyBpB;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,SAAS,gBACpB,MAAM,EAAE,eACV,OAAO,KACpB,YA4DF,CAAA;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,QAAQ,CAAC,EAAE,OAAO,GACnB,GAAG,CAOL"}
|
package/dist/cjs/merge-conf.js
CHANGED
|
@@ -136,9 +136,9 @@ const fillUpdateCodes = (source, mergeConf, excludeKeys, blockUnset = false) =>
|
|
|
136
136
|
};
|
|
137
137
|
exports.fillUpdateCodes = fillUpdateCodes;
|
|
138
138
|
function immutableCustomMerge(target, source, mergeConf, skipFill) {
|
|
139
|
-
const mergeCodes = skipFill
|
|
140
|
-
? mergeConf
|
|
141
|
-
:
|
|
139
|
+
const mergeCodes = !skipFill
|
|
140
|
+
? (0, exports.fillUpdateCodes)(source, mergeConf)
|
|
141
|
+
: mergeConf;
|
|
142
142
|
const targetCopy = (0, datum_utils_1.deepClone)(target);
|
|
143
143
|
detailMerge(targetCopy, source, mergeCodes);
|
|
144
144
|
return targetCopy;
|
package/dist/cjs/merge-high.d.ts
CHANGED
|
@@ -1,40 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type MergeCode = `${UpdateCode}`;
|
|
1
|
+
import { MergeCode } from "./merge-low";
|
|
3
2
|
export type MergePerms = {
|
|
4
3
|
enable: boolean;
|
|
5
4
|
insert?: boolean;
|
|
6
5
|
update?: boolean;
|
|
7
6
|
unset?: boolean;
|
|
8
7
|
};
|
|
9
|
-
export declare
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
s: any;
|
|
14
|
-
v?: string;
|
|
15
|
-
t?: any;
|
|
16
|
-
};
|
|
17
|
-
readonly code = 500;
|
|
18
|
-
constructor(data: {
|
|
19
|
-
e: string;
|
|
20
|
-
n?: string;
|
|
21
|
-
s: any;
|
|
22
|
-
v?: string;
|
|
23
|
-
t?: any;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
export declare function updateCodeInfo(mergeCode: UpdateCode | MergeCode): MergePerms;
|
|
27
|
-
export declare function shallowMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode, excludeKeys?: string[], includeKeys?: string[]): boolean;
|
|
28
|
-
export declare function immutableMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode): any;
|
|
29
|
-
export declare function diffFromMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode): any | false;
|
|
8
|
+
export declare function updateCodeInfo(mergeCode: MergeCode): MergePerms;
|
|
9
|
+
export declare function shallowMerge(target: any, source: any, scalarCode: MergeCode, vectorCode?: MergeCode, excludeKeys?: string[], includeKeys?: string[]): boolean;
|
|
10
|
+
export declare function immutableMerge(target: any, source: any, scalarCode: MergeCode, vectorCode?: MergeCode): any;
|
|
11
|
+
export declare function diffFromMerge(target: any, source: any, scalarCode: MergeCode, vectorCode?: MergeCode): any | false;
|
|
30
12
|
export declare function deepMerge(target: {
|
|
31
13
|
[key: string]: any;
|
|
32
14
|
}, source: {
|
|
33
15
|
[key: string]: any;
|
|
34
|
-
}, scalarCode:
|
|
16
|
+
}, scalarCode: MergeCode, vectorCode: MergeCode, nestedCode: MergeCode): boolean;
|
|
35
17
|
export declare function immutableDeepMerge(target: {
|
|
36
18
|
[key: string]: any;
|
|
37
19
|
}, source: {
|
|
38
20
|
[key: string]: any;
|
|
39
|
-
}, scalarCode:
|
|
21
|
+
}, scalarCode: MergeCode, vectorCode?: MergeCode, nestedCode?: MergeCode): any;
|
|
40
22
|
//# sourceMappingURL=merge-high.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-high.d.ts","sourceRoot":"","sources":["../../src/merge-high.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"merge-high.d.ts","sourceRoot":"","sources":["../../src/merge-high.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAkD,MAAM,aAAa,CAAC;AAExF,MAAM,MAAM,UAAU,GAAG;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,cAAc,CAC1B,SAAS,EAAE,SAAS,GACrB,UAAU,CAuBZ;AASD,wBAAgB,YAAY,CACxB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,EACtB,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAkBT;AAMD,wBAAgB,cAAc,CAC1B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,GACvB,GAAG,CAIL;AAOD,wBAAgB,aAAa,CACzB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,GACvB,GAAG,GAAG,KAAK,CAIb;AAUD,wBAAgB,SAAS,CACrB,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,GACtB,OAAO,CAqCT;AAMD,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,EACtB,UAAU,CAAC,EAAE,SAAS,GACvB,GAAG,CAQL"}
|
package/dist/cjs/merge-high.js
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.immutableDeepMerge = exports.deepMerge = exports.diffFromMerge = exports.immutableMerge = exports.shallowMerge = exports.updateCodeInfo =
|
|
3
|
+
exports.immutableDeepMerge = exports.deepMerge = exports.diffFromMerge = exports.immutableMerge = exports.shallowMerge = exports.updateCodeInfo = void 0;
|
|
4
4
|
const type_utils_1 = require("./type-utils");
|
|
5
5
|
const datum_utils_1 = require("./datum-utils");
|
|
6
6
|
const diff_high_1 = require("./diff-high");
|
|
7
7
|
const merge_low_1 = require("./merge-low");
|
|
8
|
-
class MergeError extends Error {
|
|
9
|
-
constructor(data) {
|
|
10
|
-
var _a;
|
|
11
|
-
super(data.e);
|
|
12
|
-
this.data = data;
|
|
13
|
-
this.code = 500;
|
|
14
|
-
this.name = (_a = data.n) !== null && _a !== void 0 ? _a : 'MergeError';
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
exports.MergeError = MergeError;
|
|
18
8
|
function updateCodeInfo(mergeCode) {
|
|
19
9
|
if (!(0, type_utils_1.isString)(mergeCode)) {
|
|
20
10
|
return { enable: false };
|
package/dist/cjs/merge-low.d.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
T
|
|
3
|
-
C
|
|
4
|
-
N
|
|
5
|
-
Y
|
|
6
|
-
B
|
|
7
|
-
U
|
|
8
|
-
H
|
|
9
|
-
I
|
|
10
|
-
D
|
|
11
|
-
XR
|
|
12
|
-
XM
|
|
13
|
-
XD
|
|
14
|
-
XI
|
|
15
|
-
XS
|
|
16
|
-
XF
|
|
17
|
-
}
|
|
18
|
-
export
|
|
19
|
-
export declare function
|
|
1
|
+
export declare const UpdateCode: {
|
|
2
|
+
readonly T: "T";
|
|
3
|
+
readonly C: "C";
|
|
4
|
+
readonly N: "N";
|
|
5
|
+
readonly Y: "Y";
|
|
6
|
+
readonly B: "B";
|
|
7
|
+
readonly U: "U";
|
|
8
|
+
readonly H: "H";
|
|
9
|
+
readonly I: "I";
|
|
10
|
+
readonly D: "D";
|
|
11
|
+
readonly XR: "XR";
|
|
12
|
+
readonly XM: "XM";
|
|
13
|
+
readonly XD: "XD";
|
|
14
|
+
readonly XI: "XI";
|
|
15
|
+
readonly XS: "XS";
|
|
16
|
+
readonly XF: "XF";
|
|
17
|
+
};
|
|
18
|
+
export type MergeCode = typeof UpdateCode[keyof typeof UpdateCode];
|
|
19
|
+
export declare function mergeScalarField(target: any, source: any, label: string, mergeCode: MergeCode): boolean;
|
|
20
|
+
export declare function mergeVectorField(target: any, source: any, label: string, mergeCode: MergeCode): boolean;
|
|
20
21
|
//# sourceMappingURL=merge-low.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAkBb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEnE,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACrB,OAAO,CAuDT;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACrB,OAAO,CA2DT"}
|
package/dist/cjs/merge-low.js
CHANGED
|
@@ -4,25 +4,23 @@ exports.mergeVectorField = exports.mergeScalarField = exports.UpdateCode = void
|
|
|
4
4
|
const lodash_es_1 = require("lodash-es");
|
|
5
5
|
const type_utils_1 = require("./type-utils");
|
|
6
6
|
const datum_utils_1 = require("./datum-utils");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
})(UpdateCode || (exports.UpdateCode = UpdateCode = {}));
|
|
25
|
-
;
|
|
7
|
+
exports.UpdateCode = {
|
|
8
|
+
T: "T",
|
|
9
|
+
C: "C",
|
|
10
|
+
N: "N",
|
|
11
|
+
Y: "Y",
|
|
12
|
+
B: "B",
|
|
13
|
+
U: "U",
|
|
14
|
+
H: "H",
|
|
15
|
+
I: "I",
|
|
16
|
+
D: "D",
|
|
17
|
+
XR: "XR",
|
|
18
|
+
XM: "XM",
|
|
19
|
+
XD: "XD",
|
|
20
|
+
XI: "XI",
|
|
21
|
+
XS: "XS",
|
|
22
|
+
XF: "XF",
|
|
23
|
+
};
|
|
26
24
|
function mergeScalarField(target, source, label, mergeCode) {
|
|
27
25
|
const sourceHas = !(0, type_utils_1.isNullish)(source[label]);
|
|
28
26
|
const targetHas = target.hasOwnProperty(label);
|
|
@@ -39,37 +37,37 @@ function mergeScalarField(target, source, label, mergeCode) {
|
|
|
39
37
|
}
|
|
40
38
|
let migrateVal = false;
|
|
41
39
|
switch (mergeCode) {
|
|
42
|
-
case UpdateCode.N:
|
|
40
|
+
case exports.UpdateCode.N:
|
|
43
41
|
return false;
|
|
44
|
-
case UpdateCode.Y:
|
|
42
|
+
case exports.UpdateCode.Y:
|
|
45
43
|
target[label] = source[label];
|
|
46
44
|
return true;
|
|
47
|
-
case UpdateCode.B:
|
|
45
|
+
case exports.UpdateCode.B:
|
|
48
46
|
if (sourceHas)
|
|
49
47
|
migrateVal = true;
|
|
50
48
|
break;
|
|
51
|
-
case UpdateCode.U:
|
|
49
|
+
case exports.UpdateCode.U:
|
|
52
50
|
if (targetHas)
|
|
53
51
|
migrateVal = true;
|
|
54
52
|
break;
|
|
55
|
-
case UpdateCode.I:
|
|
53
|
+
case exports.UpdateCode.I:
|
|
56
54
|
if (!targetHas)
|
|
57
55
|
migrateVal = true;
|
|
58
56
|
break;
|
|
59
|
-
case UpdateCode.H:
|
|
57
|
+
case exports.UpdateCode.H:
|
|
60
58
|
if (targetHas && sourceHas)
|
|
61
59
|
migrateVal = true;
|
|
62
60
|
break;
|
|
63
|
-
case UpdateCode.D:
|
|
61
|
+
case exports.UpdateCode.D:
|
|
64
62
|
if (targetHas && !sourceHas)
|
|
65
63
|
migrateVal = true;
|
|
66
64
|
break;
|
|
67
|
-
case UpdateCode.XR:
|
|
68
|
-
case UpdateCode.XS:
|
|
69
|
-
case UpdateCode.XF:
|
|
70
|
-
case UpdateCode.XM:
|
|
71
|
-
case UpdateCode.XD:
|
|
72
|
-
case UpdateCode.XI:
|
|
65
|
+
case exports.UpdateCode.XR:
|
|
66
|
+
case exports.UpdateCode.XS:
|
|
67
|
+
case exports.UpdateCode.XF:
|
|
68
|
+
case exports.UpdateCode.XM:
|
|
69
|
+
case exports.UpdateCode.XD:
|
|
70
|
+
case exports.UpdateCode.XI:
|
|
73
71
|
return mergeVectorField(target, source, label, mergeCode);
|
|
74
72
|
}
|
|
75
73
|
if (migrateVal) {
|
|
@@ -103,26 +101,26 @@ function mergeVectorField(target, source, label, mergeCode) {
|
|
|
103
101
|
}
|
|
104
102
|
let targetVals;
|
|
105
103
|
switch (mergeCode) {
|
|
106
|
-
case UpdateCode.N:
|
|
104
|
+
case exports.UpdateCode.N:
|
|
107
105
|
return false;
|
|
108
|
-
case UpdateCode.Y:
|
|
109
|
-
case UpdateCode.XR:
|
|
106
|
+
case exports.UpdateCode.Y:
|
|
107
|
+
case exports.UpdateCode.XR:
|
|
110
108
|
target[label] = (0, datum_utils_1.deepClone)(sourceVals);
|
|
111
109
|
return true;
|
|
112
|
-
case UpdateCode.XS:
|
|
110
|
+
case exports.UpdateCode.XS:
|
|
113
111
|
targetVals = (0, lodash_es_1.concat)((_a = target[label]) !== null && _a !== void 0 ? _a : [], sourceVals);
|
|
114
112
|
break;
|
|
115
|
-
case UpdateCode.XF:
|
|
113
|
+
case exports.UpdateCode.XF:
|
|
116
114
|
targetVals = (0, lodash_es_1.concat)(sourceVals, (_b = target[label]) !== null && _b !== void 0 ? _b : []);
|
|
117
115
|
break;
|
|
118
|
-
case UpdateCode.B:
|
|
119
|
-
case UpdateCode.XM:
|
|
116
|
+
case exports.UpdateCode.B:
|
|
117
|
+
case exports.UpdateCode.XM:
|
|
120
118
|
targetVals = (0, lodash_es_1.unionWith)(target[label], sourceVals, lodash_es_1.isEqual);
|
|
121
119
|
break;
|
|
122
|
-
case UpdateCode.XD:
|
|
120
|
+
case exports.UpdateCode.XD:
|
|
123
121
|
targetVals = (0, lodash_es_1.differenceWith)(target[label], sourceVals, lodash_es_1.isEqual);
|
|
124
122
|
break;
|
|
125
|
-
case UpdateCode.XI:
|
|
123
|
+
case exports.UpdateCode.XI:
|
|
126
124
|
targetVals = (0, lodash_es_1.intersectionWith)(target[label], sourceVals, lodash_es_1.isEqual);
|
|
127
125
|
break;
|
|
128
126
|
default:
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export { deepDiffFlat } from "./diff-high";
|
|
|
6
6
|
export { deepDiffTyped } from "./diff-high";
|
|
7
7
|
export { UpdateCode } from "./merge-low";
|
|
8
8
|
export { UpdateCode as MC } from "./merge-low";
|
|
9
|
+
export { type MergeCode } from "./merge-low";
|
|
9
10
|
export { updateCodeInfo } from "./merge-high";
|
|
10
|
-
export { MergeError } from "./merge-high";
|
|
11
11
|
export { shallowMerge, immutableMerge } from "./merge-high";
|
|
12
12
|
export { diffFromMerge } from "./merge-high";
|
|
13
13
|
export { deepMerge, immutableDeepMerge } from "./merge-high";
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -7,7 +7,6 @@ export { deepDiffTyped } from "./diff-high";
|
|
|
7
7
|
export { UpdateCode } from "./merge-low";
|
|
8
8
|
export { UpdateCode as MC } from "./merge-low";
|
|
9
9
|
export { updateCodeInfo } from "./merge-high";
|
|
10
|
-
export { MergeError } from "./merge-high";
|
|
11
10
|
export { shallowMerge, immutableMerge } from "./merge-high";
|
|
12
11
|
export { diffFromMerge } from "./merge-high";
|
|
13
12
|
export { deepMerge, immutableDeepMerge } from "./merge-high";
|
package/dist/esm/merge-conf.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { TupleObj } from "./type-utils";
|
|
2
|
-
import {
|
|
2
|
+
import { MergeCode } from "./merge-low";
|
|
3
3
|
export type DetailConfig = {
|
|
4
|
-
[key: string]:
|
|
4
|
+
[key: string]: MergeCode | DetailConfig;
|
|
5
5
|
};
|
|
6
6
|
export type MergeConfig = {
|
|
7
|
-
scalar?:
|
|
8
|
-
vector?:
|
|
9
|
-
nested?:
|
|
10
|
-
[glob: string]:
|
|
7
|
+
scalar?: MergeCode;
|
|
8
|
+
vector?: MergeCode;
|
|
9
|
+
nested?: MergeCode;
|
|
10
|
+
[glob: string]: MergeCode | MergeConfig | undefined;
|
|
11
11
|
};
|
|
12
12
|
export declare function detailMerge(target: {
|
|
13
13
|
[key: string]: any;
|
|
@@ -16,7 +16,7 @@ export declare function detailMerge(target: {
|
|
|
16
16
|
}, mergeCodes: DetailConfig): boolean;
|
|
17
17
|
export declare function immutableDetailMerge(target: any, source: any, mergeCodes: DetailConfig): any;
|
|
18
18
|
export declare function selectDetailKeys(obj: any, mergeCodes: DetailConfig, excludeKeys?: string[]): string[];
|
|
19
|
-
export declare function customMerge<T extends TupleObj>(target: T, source: Partial<T>, mergeConf: MergeConfig |
|
|
20
|
-
export declare const fillUpdateCodes: (source: any, mergeConf: MergeConfig |
|
|
19
|
+
export declare function customMerge<T extends TupleObj>(target: T, source: Partial<T>, mergeConf: MergeConfig | MergeCode, excludeKeys?: string[]): Partial<T> | false;
|
|
20
|
+
export declare const fillUpdateCodes: (source: any, mergeConf: MergeConfig | MergeCode, excludeKeys?: string[], blockUnset?: boolean) => DetailConfig;
|
|
21
21
|
export declare function immutableCustomMerge(target: any, source: any, mergeConf: MergeConfig, skipFill?: boolean): any;
|
|
22
22
|
//# sourceMappingURL=merge-conf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conf.d.ts","sourceRoot":"","sources":["../../src/merge-conf.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,
|
|
1
|
+
{"version":3,"file":"merge-conf.d.ts","sourceRoot":"","sources":["../../src/merge-conf.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAc,SAAS,EAAsC,MAAM,aAAa,CAAC;AAGxF,MAAM,MAAM,YAAY,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;CACvD,CAAC;AAUF,wBAAgB,WAAW,CACvB,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,UAAU,EAAE,YAAY,GACzB,OAAO,CA0BT;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,YAAY,GACzB,GAAG,CAIL;AAKD,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,YAAY,EACxB,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAaV;AAQD,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,EAC1C,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAyBpB;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,SAAS,gBACpB,MAAM,EAAE,eACV,OAAO,KACpB,YA4DF,CAAA;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,QAAQ,CAAC,EAAE,OAAO,GACnB,GAAG,CAOL"}
|
package/dist/esm/merge-conf.js
CHANGED
|
@@ -128,9 +128,9 @@ export const fillUpdateCodes = (source, mergeConf, excludeKeys, blockUnset = fal
|
|
|
128
128
|
return mergeCodes;
|
|
129
129
|
};
|
|
130
130
|
export function immutableCustomMerge(target, source, mergeConf, skipFill) {
|
|
131
|
-
const mergeCodes = skipFill
|
|
132
|
-
? mergeConf
|
|
133
|
-
:
|
|
131
|
+
const mergeCodes = !skipFill
|
|
132
|
+
? fillUpdateCodes(source, mergeConf)
|
|
133
|
+
: mergeConf;
|
|
134
134
|
const targetCopy = deepClone(target);
|
|
135
135
|
detailMerge(targetCopy, source, mergeCodes);
|
|
136
136
|
return targetCopy;
|
package/dist/esm/merge-high.d.ts
CHANGED
|
@@ -1,40 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type MergeCode = `${UpdateCode}`;
|
|
1
|
+
import { MergeCode } from "./merge-low";
|
|
3
2
|
export type MergePerms = {
|
|
4
3
|
enable: boolean;
|
|
5
4
|
insert?: boolean;
|
|
6
5
|
update?: boolean;
|
|
7
6
|
unset?: boolean;
|
|
8
7
|
};
|
|
9
|
-
export declare
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
s: any;
|
|
14
|
-
v?: string;
|
|
15
|
-
t?: any;
|
|
16
|
-
};
|
|
17
|
-
readonly code = 500;
|
|
18
|
-
constructor(data: {
|
|
19
|
-
e: string;
|
|
20
|
-
n?: string;
|
|
21
|
-
s: any;
|
|
22
|
-
v?: string;
|
|
23
|
-
t?: any;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
export declare function updateCodeInfo(mergeCode: UpdateCode | MergeCode): MergePerms;
|
|
27
|
-
export declare function shallowMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode, excludeKeys?: string[], includeKeys?: string[]): boolean;
|
|
28
|
-
export declare function immutableMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode): any;
|
|
29
|
-
export declare function diffFromMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode): any | false;
|
|
8
|
+
export declare function updateCodeInfo(mergeCode: MergeCode): MergePerms;
|
|
9
|
+
export declare function shallowMerge(target: any, source: any, scalarCode: MergeCode, vectorCode?: MergeCode, excludeKeys?: string[], includeKeys?: string[]): boolean;
|
|
10
|
+
export declare function immutableMerge(target: any, source: any, scalarCode: MergeCode, vectorCode?: MergeCode): any;
|
|
11
|
+
export declare function diffFromMerge(target: any, source: any, scalarCode: MergeCode, vectorCode?: MergeCode): any | false;
|
|
30
12
|
export declare function deepMerge(target: {
|
|
31
13
|
[key: string]: any;
|
|
32
14
|
}, source: {
|
|
33
15
|
[key: string]: any;
|
|
34
|
-
}, scalarCode:
|
|
16
|
+
}, scalarCode: MergeCode, vectorCode: MergeCode, nestedCode: MergeCode): boolean;
|
|
35
17
|
export declare function immutableDeepMerge(target: {
|
|
36
18
|
[key: string]: any;
|
|
37
19
|
}, source: {
|
|
38
20
|
[key: string]: any;
|
|
39
|
-
}, scalarCode:
|
|
21
|
+
}, scalarCode: MergeCode, vectorCode?: MergeCode, nestedCode?: MergeCode): any;
|
|
40
22
|
//# sourceMappingURL=merge-high.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-high.d.ts","sourceRoot":"","sources":["../../src/merge-high.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"merge-high.d.ts","sourceRoot":"","sources":["../../src/merge-high.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAkD,MAAM,aAAa,CAAC;AAExF,MAAM,MAAM,UAAU,GAAG;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,cAAc,CAC1B,SAAS,EAAE,SAAS,GACrB,UAAU,CAuBZ;AASD,wBAAgB,YAAY,CACxB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,EACtB,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAkBT;AAMD,wBAAgB,cAAc,CAC1B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,GACvB,GAAG,CAIL;AAOD,wBAAgB,aAAa,CACzB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,GACvB,GAAG,GAAG,KAAK,CAIb;AAUD,wBAAgB,SAAS,CACrB,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,GACtB,OAAO,CAqCT;AAMD,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,EACtB,UAAU,CAAC,EAAE,SAAS,GACvB,GAAG,CAQL"}
|
package/dist/esm/merge-high.js
CHANGED
|
@@ -2,15 +2,6 @@ import { isArrayOfAny, emptyObject, isObject, isString } from "./type-utils";
|
|
|
2
2
|
import { deepClone, getObjectKeys } from "./datum-utils";
|
|
3
3
|
import { deepDiffTyped } from "./diff-high";
|
|
4
4
|
import { UpdateCode, mergeScalarField, mergeVectorField } from "./merge-low";
|
|
5
|
-
export class MergeError extends Error {
|
|
6
|
-
constructor(data) {
|
|
7
|
-
var _a;
|
|
8
|
-
super(data.e);
|
|
9
|
-
this.data = data;
|
|
10
|
-
this.code = 500;
|
|
11
|
-
this.name = (_a = data.n) !== null && _a !== void 0 ? _a : 'MergeError';
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
5
|
export function updateCodeInfo(mergeCode) {
|
|
15
6
|
if (!isString(mergeCode)) {
|
|
16
7
|
return { enable: false };
|
package/dist/esm/merge-low.d.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
T
|
|
3
|
-
C
|
|
4
|
-
N
|
|
5
|
-
Y
|
|
6
|
-
B
|
|
7
|
-
U
|
|
8
|
-
H
|
|
9
|
-
I
|
|
10
|
-
D
|
|
11
|
-
XR
|
|
12
|
-
XM
|
|
13
|
-
XD
|
|
14
|
-
XI
|
|
15
|
-
XS
|
|
16
|
-
XF
|
|
17
|
-
}
|
|
18
|
-
export
|
|
19
|
-
export declare function
|
|
1
|
+
export declare const UpdateCode: {
|
|
2
|
+
readonly T: "T";
|
|
3
|
+
readonly C: "C";
|
|
4
|
+
readonly N: "N";
|
|
5
|
+
readonly Y: "Y";
|
|
6
|
+
readonly B: "B";
|
|
7
|
+
readonly U: "U";
|
|
8
|
+
readonly H: "H";
|
|
9
|
+
readonly I: "I";
|
|
10
|
+
readonly D: "D";
|
|
11
|
+
readonly XR: "XR";
|
|
12
|
+
readonly XM: "XM";
|
|
13
|
+
readonly XD: "XD";
|
|
14
|
+
readonly XI: "XI";
|
|
15
|
+
readonly XS: "XS";
|
|
16
|
+
readonly XF: "XF";
|
|
17
|
+
};
|
|
18
|
+
export type MergeCode = typeof UpdateCode[keyof typeof UpdateCode];
|
|
19
|
+
export declare function mergeScalarField(target: any, source: any, label: string, mergeCode: MergeCode): boolean;
|
|
20
|
+
export declare function mergeVectorField(target: any, source: any, label: string, mergeCode: MergeCode): boolean;
|
|
20
21
|
//# sourceMappingURL=merge-low.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAkBb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEnE,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACrB,OAAO,CAuDT;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACrB,OAAO,CA2DT"}
|
package/dist/esm/merge-low.js
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
import { concat, differenceWith, intersectionWith, unionWith, isEqual } from "lodash-es";
|
|
2
2
|
import { isArrayOfAny, isNullish } from "./type-utils";
|
|
3
3
|
import { areArraysEqual, deepClone } from "./datum-utils";
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
})(UpdateCode || (UpdateCode = {}));
|
|
22
|
-
;
|
|
4
|
+
export const UpdateCode = {
|
|
5
|
+
T: "T",
|
|
6
|
+
C: "C",
|
|
7
|
+
N: "N",
|
|
8
|
+
Y: "Y",
|
|
9
|
+
B: "B",
|
|
10
|
+
U: "U",
|
|
11
|
+
H: "H",
|
|
12
|
+
I: "I",
|
|
13
|
+
D: "D",
|
|
14
|
+
XR: "XR",
|
|
15
|
+
XM: "XM",
|
|
16
|
+
XD: "XD",
|
|
17
|
+
XI: "XI",
|
|
18
|
+
XS: "XS",
|
|
19
|
+
XF: "XF",
|
|
20
|
+
};
|
|
23
21
|
export function mergeScalarField(target, source, label, mergeCode) {
|
|
24
22
|
const sourceHas = !isNullish(source[label]);
|
|
25
23
|
const targetHas = target.hasOwnProperty(label);
|
package/package.json
CHANGED
|
@@ -63,7 +63,7 @@ type Observer<LHS, RHS = LHS> = (diff: Diff<LHS, RHS>) => void;
|
|
|
63
63
|
|
|
64
64
|
type FieldKey = string | number | symbol;
|
|
65
65
|
type FieldPath = FieldKey[];
|
|
66
|
-
|
|
66
|
+
type StackItem<LHS, RHS = LHS> = { lhs: LHS, rhs: RHS };
|
|
67
67
|
|
|
68
68
|
const typeNormalizer: PreFilterObject<any, any> = {
|
|
69
69
|
normalize: function (currentPath: any, key: any, lhs: any, rhs: any): [any, any] {
|
|
@@ -293,7 +293,7 @@ function deepDiff<LHS, RHS = LHS>(
|
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
-
stack.
|
|
296
|
+
stack.pop();
|
|
297
297
|
} else if ((lhs as any) !== (rhs as any)) {
|
|
298
298
|
// lhs is contains a cycle at this element and it differs from rhs
|
|
299
299
|
changes.push({
|
package/src/index.ts
CHANGED
|
@@ -9,8 +9,8 @@ export { deepDiffTyped } from "./diff-high";
|
|
|
9
9
|
|
|
10
10
|
export { UpdateCode } from "./merge-low";
|
|
11
11
|
export { UpdateCode as MC } from "./merge-low";
|
|
12
|
+
export { type MergeCode } from "./merge-low";
|
|
12
13
|
export { updateCodeInfo } from "./merge-high";
|
|
13
|
-
export { MergeError } from "./merge-high";
|
|
14
14
|
|
|
15
15
|
export { shallowMerge, immutableMerge } from "./merge-high";
|
|
16
16
|
export { diffFromMerge } from "./merge-high";
|
package/src/merge-conf.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { isArrayOfAny, emptyObject, isNullish, isObject, isString, TupleObj } from "./type-utils";
|
|
2
2
|
import { createGlobRegex, deepClone, getObjectKeys } from "./datum-utils";
|
|
3
3
|
import { deepDiffTyped } from "./diff-high";
|
|
4
|
-
import { UpdateCode, mergeScalarField, mergeVectorField } from "./merge-low";
|
|
4
|
+
import { UpdateCode, MergeCode, mergeScalarField, mergeVectorField } from "./merge-low";
|
|
5
5
|
import { updateCodeInfo } from "./merge-high";
|
|
6
6
|
|
|
7
7
|
export type DetailConfig = {
|
|
8
|
-
[key: string]:
|
|
8
|
+
[key: string]: MergeCode | DetailConfig;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export type MergeConfig = {
|
|
12
|
-
scalar?:
|
|
13
|
-
vector?:
|
|
14
|
-
nested?:
|
|
15
|
-
[glob: string]:
|
|
12
|
+
scalar?: MergeCode, //default
|
|
13
|
+
vector?: MergeCode, //array types
|
|
14
|
+
nested?: MergeCode, //object types
|
|
15
|
+
[glob: string]: MergeCode | MergeConfig | undefined,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
//-----------------------------------------------------------------------------
|
|
@@ -36,6 +36,7 @@ export function detailMerge(
|
|
|
36
36
|
for (const label of mergeKeys) {
|
|
37
37
|
const mergeCode = mergeCodes[label]!;
|
|
38
38
|
if (!isString(mergeCode)) {
|
|
39
|
+
//todo should nest for empty target
|
|
39
40
|
if ((isObject(target[label]) && isObject(source[label]))
|
|
40
41
|
? detailMerge(target[label], source[label], mergeCode)
|
|
41
42
|
: mergeScalarField(target, source, label, UpdateCode.I)
|
|
@@ -99,7 +100,7 @@ export function selectDetailKeys(
|
|
|
99
100
|
export function customMerge<T extends TupleObj>(
|
|
100
101
|
target: T,
|
|
101
102
|
source: Partial<T>,
|
|
102
|
-
mergeConf: MergeConfig |
|
|
103
|
+
mergeConf: MergeConfig | MergeCode,
|
|
103
104
|
excludeKeys?: string[],
|
|
104
105
|
): Partial<T> | false {
|
|
105
106
|
//implement externally
|
|
@@ -139,7 +140,7 @@ export function customMerge<T extends TupleObj>(
|
|
|
139
140
|
*/
|
|
140
141
|
export const fillUpdateCodes = (
|
|
141
142
|
source: any,
|
|
142
|
-
mergeConf: MergeConfig |
|
|
143
|
+
mergeConf: MergeConfig | MergeCode,
|
|
143
144
|
excludeKeys?: string[],
|
|
144
145
|
blockUnset: boolean = false,
|
|
145
146
|
): DetailConfig => {
|
|
@@ -181,7 +182,7 @@ export const fillUpdateCodes = (
|
|
|
181
182
|
if (globIndex >= 0) {
|
|
182
183
|
const globConf = mergeConf[globKeys[globIndex]!];
|
|
183
184
|
if (isString(globConf)) {
|
|
184
|
-
mergeCodes[srcLabel] = globConf as
|
|
185
|
+
mergeCodes[srcLabel] = globConf as MergeCode;
|
|
185
186
|
continue;
|
|
186
187
|
} else if (isObject(srcValue)) {
|
|
187
188
|
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, globConf!, [], blockUnset);
|
|
@@ -214,9 +215,9 @@ export function immutableCustomMerge(
|
|
|
214
215
|
mergeConf: MergeConfig,
|
|
215
216
|
skipFill?: boolean,
|
|
216
217
|
): any {
|
|
217
|
-
const mergeCodes = skipFill
|
|
218
|
-
? mergeConf
|
|
219
|
-
:
|
|
218
|
+
const mergeCodes = !skipFill
|
|
219
|
+
? fillUpdateCodes(source, mergeConf)
|
|
220
|
+
: mergeConf as DetailConfig;
|
|
220
221
|
const targetCopy = deepClone(target);
|
|
221
222
|
detailMerge(targetCopy, source, mergeCodes);
|
|
222
223
|
return targetCopy;
|
package/src/merge-high.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { isArrayOfAny, emptyObject, isObject, isString } from "./type-utils";
|
|
2
2
|
import { deepClone, getObjectKeys } from "./datum-utils";
|
|
3
3
|
import { deepDiffTyped } from "./diff-high";
|
|
4
|
-
import { UpdateCode, mergeScalarField, mergeVectorField } from "./merge-low";
|
|
4
|
+
import { MergeCode, UpdateCode, mergeScalarField, mergeVectorField } from "./merge-low";
|
|
5
5
|
|
|
6
|
-
export type MergeCode = `${UpdateCode}`;
|
|
7
6
|
export type MergePerms = {
|
|
8
7
|
enable: boolean;
|
|
9
8
|
insert?: boolean;
|
|
@@ -11,22 +10,8 @@ export type MergePerms = {
|
|
|
11
10
|
unset?: boolean;
|
|
12
11
|
};
|
|
13
12
|
|
|
14
|
-
export class MergeError extends Error {
|
|
15
|
-
readonly code = 500;
|
|
16
|
-
constructor(readonly data: {
|
|
17
|
-
e: string, //error message
|
|
18
|
-
n?: string, //error name
|
|
19
|
-
s: any, //source
|
|
20
|
-
v?: string, //container
|
|
21
|
-
t?: any, //target
|
|
22
|
-
}) {
|
|
23
|
-
super(data.e);
|
|
24
|
-
this.name = data.n ?? 'MergeError';
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
13
|
export function updateCodeInfo(
|
|
29
|
-
mergeCode:
|
|
14
|
+
mergeCode: MergeCode,
|
|
30
15
|
): MergePerms {
|
|
31
16
|
if (!isString(mergeCode)) {
|
|
32
17
|
return { enable: false };
|
|
@@ -62,8 +47,8 @@ export function updateCodeInfo(
|
|
|
62
47
|
export function shallowMerge(
|
|
63
48
|
target: any,
|
|
64
49
|
source: any,
|
|
65
|
-
scalarCode:
|
|
66
|
-
vectorCode?:
|
|
50
|
+
scalarCode: MergeCode,
|
|
51
|
+
vectorCode?: MergeCode,
|
|
67
52
|
excludeKeys?: string[],
|
|
68
53
|
includeKeys?: string[], //for delete
|
|
69
54
|
): boolean {
|
|
@@ -93,8 +78,8 @@ export function shallowMerge(
|
|
|
93
78
|
export function immutableMerge(
|
|
94
79
|
target: any,
|
|
95
80
|
source: any,
|
|
96
|
-
scalarCode:
|
|
97
|
-
vectorCode?:
|
|
81
|
+
scalarCode: MergeCode,
|
|
82
|
+
vectorCode?: MergeCode,
|
|
98
83
|
): any {
|
|
99
84
|
const targetCopy = deepClone(target);
|
|
100
85
|
shallowMerge(targetCopy, source, scalarCode, vectorCode);
|
|
@@ -109,8 +94,8 @@ export function immutableMerge(
|
|
|
109
94
|
export function diffFromMerge(
|
|
110
95
|
target: any,
|
|
111
96
|
source: any,
|
|
112
|
-
scalarCode:
|
|
113
|
-
vectorCode?:
|
|
97
|
+
scalarCode: MergeCode,
|
|
98
|
+
vectorCode?: MergeCode,
|
|
114
99
|
): any | false {
|
|
115
100
|
const targetCopy = immutableMerge(target, source, scalarCode, vectorCode);
|
|
116
101
|
const delta = deepDiffTyped(target, targetCopy);
|
|
@@ -128,9 +113,9 @@ export function diffFromMerge(
|
|
|
128
113
|
export function deepMerge(
|
|
129
114
|
target: { [key: string]: any },
|
|
130
115
|
source: { [key: string]: any },
|
|
131
|
-
scalarCode:
|
|
132
|
-
vectorCode:
|
|
133
|
-
nestedCode:
|
|
116
|
+
scalarCode: MergeCode,
|
|
117
|
+
vectorCode: MergeCode,
|
|
118
|
+
nestedCode: MergeCode,
|
|
134
119
|
): boolean {
|
|
135
120
|
const sourceKeys = getObjectKeys(source);
|
|
136
121
|
if (!sourceKeys?.length) {
|
|
@@ -145,6 +130,7 @@ export function deepMerge(
|
|
|
145
130
|
continue;
|
|
146
131
|
}
|
|
147
132
|
//recursive call for objects
|
|
133
|
+
//todo should nest for empty target
|
|
148
134
|
if (isObject(target[label]) && isObject(source[label])) {
|
|
149
135
|
if (nestedCode === UpdateCode.N)
|
|
150
136
|
continue;
|
|
@@ -176,9 +162,9 @@ export function deepMerge(
|
|
|
176
162
|
export function immutableDeepMerge(
|
|
177
163
|
target: { [key: string]: any },
|
|
178
164
|
source: { [key: string]: any },
|
|
179
|
-
scalarCode:
|
|
180
|
-
vectorCode?:
|
|
181
|
-
nestedCode?:
|
|
165
|
+
scalarCode: MergeCode,
|
|
166
|
+
vectorCode?: MergeCode,
|
|
167
|
+
nestedCode?: MergeCode,
|
|
182
168
|
): any {
|
|
183
169
|
const targetCopy = deepClone(target);
|
|
184
170
|
deepMerge(targetCopy, source,
|
package/src/merge-low.ts
CHANGED
|
@@ -3,31 +3,33 @@ import { concat, differenceWith, intersectionWith, unionWith, isEqual } from "lo
|
|
|
3
3
|
import { isArrayOfAny, isNullish } from "./type-utils";
|
|
4
4
|
import { areArraysEqual, deepClone } from "./datum-utils";
|
|
5
5
|
|
|
6
|
-
export
|
|
7
|
-
T
|
|
8
|
-
C
|
|
6
|
+
export const UpdateCode = {
|
|
7
|
+
T: "T", //touch, blank update
|
|
8
|
+
C: "C", //create instance
|
|
9
9
|
// scalar/def codes
|
|
10
|
-
N
|
|
11
|
-
Y
|
|
12
|
-
B
|
|
13
|
-
U
|
|
14
|
-
H
|
|
15
|
-
I
|
|
16
|
-
D
|
|
10
|
+
N: "N", //ignore change
|
|
11
|
+
Y: "Y", //accept any change
|
|
12
|
+
B: "B", //insert or update, no delete
|
|
13
|
+
U: "U", //update or delete only
|
|
14
|
+
H: "H", //update only if exists
|
|
15
|
+
I: "I", //insert only
|
|
16
|
+
D: "D", //delete only
|
|
17
17
|
// vector/xref codes
|
|
18
|
-
XR
|
|
19
|
-
XM
|
|
20
|
-
XD
|
|
21
|
-
XI
|
|
22
|
-
XS
|
|
23
|
-
XF
|
|
24
|
-
};
|
|
18
|
+
XR: "XR", //full replace
|
|
19
|
+
XM: "XM", //set union, vector merge
|
|
20
|
+
XD: "XD", //set difference, delete given values
|
|
21
|
+
XI: "XI", //set intersection, delete missing values
|
|
22
|
+
XS: "XS", //preserve order insert (allows dupes)
|
|
23
|
+
XF: "XF", //insert from start (allows dupes)
|
|
24
|
+
} as const;
|
|
25
|
+
|
|
26
|
+
export type MergeCode = typeof UpdateCode[keyof typeof UpdateCode];
|
|
25
27
|
|
|
26
28
|
export function mergeScalarField(
|
|
27
29
|
target: any,
|
|
28
30
|
source: any,
|
|
29
31
|
label: string,
|
|
30
|
-
mergeCode:
|
|
32
|
+
mergeCode: MergeCode,
|
|
31
33
|
): boolean {
|
|
32
34
|
const sourceHas = !isNullish(source[label]);
|
|
33
35
|
const targetHas = target.hasOwnProperty(label); //!isNullish(target[label]);
|
|
@@ -89,7 +91,7 @@ export function mergeVectorField(
|
|
|
89
91
|
target: any,
|
|
90
92
|
source: any,
|
|
91
93
|
label: string,
|
|
92
|
-
mergeCode:
|
|
94
|
+
mergeCode: MergeCode,
|
|
93
95
|
): boolean {
|
|
94
96
|
let sourceVals = source[label]; //get(source, label);
|
|
95
97
|
if (isNullish(sourceVals)) {
|