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.
@@ -185,7 +185,7 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
185
185
  }
186
186
  }
187
187
  }
188
- stack.length = stack.length - 1;
188
+ stack.pop();
189
189
  }
190
190
  else if (lhs !== rhs) {
191
191
  changes.push({
@@ -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";
@@ -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,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,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"}
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.MergeError = exports.updateCodeInfo = exports.MC = exports.UpdateCode = exports.deepDiffTyped = exports.deepDiffFlat = exports.deepDiffLow = exports.unflattenObject = exports.flattenObject = exports.deepClone = exports.deepEquals = void 0;
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, "MergeError", { enumerable: true, get: function () { return merge_high_2.MergeError; } });
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, "shallowMerge", { enumerable: true, get: function () { return merge_high_3.shallowMerge; } });
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, "diffFromMerge", { enumerable: true, get: function () { return merge_high_4.diffFromMerge; } });
44
- var merge_high_5 = require("./merge-high");
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 merge_high_6 = require("./merge-high");
56
- Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return merge_high_6.deepMerge; } });
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);
@@ -1,13 +1,13 @@
1
1
  import { TupleObj } from "./type-utils";
2
- import { UpdateCode } from "./merge-low";
2
+ import { MergeCode } from "./merge-low";
3
3
  export type DetailConfig = {
4
- [key: string]: UpdateCode | DetailConfig;
4
+ [key: string]: MergeCode | DetailConfig;
5
5
  };
6
6
  export type MergeConfig = {
7
- scalar?: UpdateCode;
8
- vector?: UpdateCode;
9
- nested?: UpdateCode;
10
- [glob: string]: UpdateCode | MergeConfig | undefined;
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 | UpdateCode, excludeKeys?: string[]): Partial<T> | false;
20
- export declare const fillUpdateCodes: (source: any, mergeConf: MergeConfig | UpdateCode, excludeKeys?: string[], blockUnset?: boolean) => DetailConfig;
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,EAAE,UAAU,EAAsC,MAAM,aAAa,CAAC;AAG7E,MAAM,MAAM,YAAY,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;CACxD,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,CAyBT;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,UAAU,EACnC,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAyBpB;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,UAAU,gBACrB,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"}
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"}
@@ -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
- : (0, exports.fillUpdateCodes)(source, mergeConf);
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;
@@ -1,40 +1,22 @@
1
- import { UpdateCode } from "./merge-low";
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 class MergeError extends Error {
10
- readonly data: {
11
- e: string;
12
- n?: string;
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: UpdateCode, vectorCode: UpdateCode, nestedCode: UpdateCode): boolean;
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: UpdateCode, vectorCode?: UpdateCode, nestedCode?: UpdateCode): any;
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,UAAU,EAAsC,MAAM,aAAa,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG,GAAG,UAAU,EAAE,CAAC;AACxC,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,qBAAa,UAAW,SAAQ,KAAK;IAErB,QAAQ,CAAC,IAAI,EAAE;QACvB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,EAAE,GAAG,CAAC;QACP,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,GAAG,CAAC;KACX;IAPD,QAAQ,CAAC,IAAI,OAAO;gBACC,IAAI,EAAE;QACvB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,EAAE,GAAG,CAAC;QACP,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,GAAG,CAAC;KACX;CAIJ;AAED,wBAAgB,cAAc,CAC1B,SAAS,EAAE,UAAU,GAAG,SAAS,GAClC,UAAU,CAuBZ;AASD,wBAAgB,YAAY,CACxB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,EACvB,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,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,GACxB,GAAG,CAIL;AAOD,wBAAgB,aAAa,CACzB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,GACxB,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,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,GACvB,OAAO,CAoCT;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,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,UAAU,GACxB,GAAG,CAQL"}
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"}
@@ -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 = exports.MergeError = void 0;
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 };
@@ -1,20 +1,21 @@
1
- export declare enum UpdateCode {
2
- T = "T",
3
- C = "C",
4
- N = "N",
5
- Y = "Y",
6
- B = "B",
7
- U = "U",
8
- H = "H",
9
- I = "I",
10
- D = "D",
11
- XR = "XR",
12
- XM = "XM",
13
- XD = "XD",
14
- XI = "XI",
15
- XS = "XS",
16
- XF = "XF"
17
- }
18
- export declare function mergeScalarField(target: any, source: any, label: string, mergeCode: UpdateCode): boolean;
19
- export declare function mergeVectorField(target: any, source: any, label: string, mergeCode: UpdateCode): boolean;
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,oBAAY,UAAU;IAClB,CAAC,MAAM;IACP,CAAC,MAAM;IAEP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IAEP,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACZ;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,UAAU,GACtB,OAAO,CAuDT;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,UAAU,GACtB,OAAO,CA2DT"}
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"}
@@ -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
- var UpdateCode;
8
- (function (UpdateCode) {
9
- UpdateCode["T"] = "T";
10
- UpdateCode["C"] = "C";
11
- UpdateCode["N"] = "N";
12
- UpdateCode["Y"] = "Y";
13
- UpdateCode["B"] = "B";
14
- UpdateCode["U"] = "U";
15
- UpdateCode["H"] = "H";
16
- UpdateCode["I"] = "I";
17
- UpdateCode["D"] = "D";
18
- UpdateCode["XR"] = "XR";
19
- UpdateCode["XM"] = "XM";
20
- UpdateCode["XD"] = "XD";
21
- UpdateCode["XI"] = "XI";
22
- UpdateCode["XS"] = "XS";
23
- UpdateCode["XF"] = "XF";
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:
@@ -186,7 +186,7 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
186
186
  }
187
187
  }
188
188
  }
189
- stack.length = stack.length - 1;
189
+ stack.pop();
190
190
  }
191
191
  else if (lhs !== rhs) {
192
192
  changes.push({
@@ -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";
@@ -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,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,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"}
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";
@@ -1,13 +1,13 @@
1
1
  import { TupleObj } from "./type-utils";
2
- import { UpdateCode } from "./merge-low";
2
+ import { MergeCode } from "./merge-low";
3
3
  export type DetailConfig = {
4
- [key: string]: UpdateCode | DetailConfig;
4
+ [key: string]: MergeCode | DetailConfig;
5
5
  };
6
6
  export type MergeConfig = {
7
- scalar?: UpdateCode;
8
- vector?: UpdateCode;
9
- nested?: UpdateCode;
10
- [glob: string]: UpdateCode | MergeConfig | undefined;
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 | UpdateCode, excludeKeys?: string[]): Partial<T> | false;
20
- export declare const fillUpdateCodes: (source: any, mergeConf: MergeConfig | UpdateCode, excludeKeys?: string[], blockUnset?: boolean) => DetailConfig;
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,EAAE,UAAU,EAAsC,MAAM,aAAa,CAAC;AAG7E,MAAM,MAAM,YAAY,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;CACxD,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,CAyBT;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,UAAU,EACnC,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAyBpB;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,UAAU,gBACrB,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"}
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"}
@@ -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
- : fillUpdateCodes(source, mergeConf);
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;
@@ -1,40 +1,22 @@
1
- import { UpdateCode } from "./merge-low";
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 class MergeError extends Error {
10
- readonly data: {
11
- e: string;
12
- n?: string;
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: UpdateCode, vectorCode: UpdateCode, nestedCode: UpdateCode): boolean;
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: UpdateCode, vectorCode?: UpdateCode, nestedCode?: UpdateCode): any;
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,UAAU,EAAsC,MAAM,aAAa,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG,GAAG,UAAU,EAAE,CAAC;AACxC,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,qBAAa,UAAW,SAAQ,KAAK;IAErB,QAAQ,CAAC,IAAI,EAAE;QACvB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,EAAE,GAAG,CAAC;QACP,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,GAAG,CAAC;KACX;IAPD,QAAQ,CAAC,IAAI,OAAO;gBACC,IAAI,EAAE;QACvB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,EAAE,GAAG,CAAC;QACP,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,GAAG,CAAC;KACX;CAIJ;AAED,wBAAgB,cAAc,CAC1B,SAAS,EAAE,UAAU,GAAG,SAAS,GAClC,UAAU,CAuBZ;AASD,wBAAgB,YAAY,CACxB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,EACvB,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,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,GACxB,GAAG,CAIL;AAOD,wBAAgB,aAAa,CACzB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,GACxB,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,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,GACvB,OAAO,CAoCT;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,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,UAAU,GACxB,GAAG,CAQL"}
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"}
@@ -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 };
@@ -1,20 +1,21 @@
1
- export declare enum UpdateCode {
2
- T = "T",
3
- C = "C",
4
- N = "N",
5
- Y = "Y",
6
- B = "B",
7
- U = "U",
8
- H = "H",
9
- I = "I",
10
- D = "D",
11
- XR = "XR",
12
- XM = "XM",
13
- XD = "XD",
14
- XI = "XI",
15
- XS = "XS",
16
- XF = "XF"
17
- }
18
- export declare function mergeScalarField(target: any, source: any, label: string, mergeCode: UpdateCode): boolean;
19
- export declare function mergeVectorField(target: any, source: any, label: string, mergeCode: UpdateCode): boolean;
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,oBAAY,UAAU;IAClB,CAAC,MAAM;IACP,CAAC,MAAM;IAEP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;IAEP,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACZ;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,UAAU,GACtB,OAAO,CAuDT;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,UAAU,GACtB,OAAO,CA2DT"}
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"}
@@ -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 var UpdateCode;
5
- (function (UpdateCode) {
6
- UpdateCode["T"] = "T";
7
- UpdateCode["C"] = "C";
8
- UpdateCode["N"] = "N";
9
- UpdateCode["Y"] = "Y";
10
- UpdateCode["B"] = "B";
11
- UpdateCode["U"] = "U";
12
- UpdateCode["H"] = "H";
13
- UpdateCode["I"] = "I";
14
- UpdateCode["D"] = "D";
15
- UpdateCode["XR"] = "XR";
16
- UpdateCode["XM"] = "XM";
17
- UpdateCode["XD"] = "XD";
18
- UpdateCode["XI"] = "XI";
19
- UpdateCode["XS"] = "XS";
20
- UpdateCode["XF"] = "XF";
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datum-merge",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "author": "Rohit Kulkarni <rohk@live.com>",
5
5
  "license": "MIT",
6
6
  "description": "Simplified diff and merging for deeply nested objects.",
@@ -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
- // type StackItem<LHS, RHS = LHS> = { lhs: LHS, rhs: RHS };
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.length = stack.length - 1;
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]: UpdateCode | DetailConfig;
8
+ [key: string]: MergeCode | DetailConfig;
9
9
  };
10
10
 
11
11
  export type MergeConfig = {
12
- scalar?: UpdateCode, //default
13
- vector?: UpdateCode, //array types
14
- nested?: UpdateCode, //object types
15
- [glob: string]: UpdateCode | MergeConfig | undefined,
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 | UpdateCode,
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 | UpdateCode,
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 UpdateCode;
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 as DetailConfig
219
- : fillUpdateCodes(source, mergeConf);
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: UpdateCode | 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: UpdateCode,
66
- vectorCode?: UpdateCode,
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: UpdateCode,
97
- vectorCode?: UpdateCode,
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: UpdateCode,
113
- vectorCode?: UpdateCode,
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: UpdateCode,
132
- vectorCode: UpdateCode,
133
- nestedCode: UpdateCode,
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: UpdateCode,
180
- vectorCode?: UpdateCode,
181
- nestedCode?: UpdateCode,
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 enum UpdateCode {
7
- T = "T", //touch, blank update
8
- C = "C", //create instance
6
+ export const UpdateCode = {
7
+ T: "T", //touch, blank update
8
+ C: "C", //create instance
9
9
  // scalar/def codes
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
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 = "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
- };
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: UpdateCode,
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: UpdateCode,
94
+ mergeCode: MergeCode,
93
95
  ): boolean {
94
96
  let sourceVals = source[label]; //get(source, label);
95
97
  if (isNullish(sourceVals)) {