datum-merge 0.3.1-alpha → 0.5.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.
@@ -0,0 +1,425 @@
1
+ export { diff };
2
+ export { orderIndependentDiff };
3
+ export { accumulateDiff };
4
+ export { observableDiff };
5
+ export { orderIndependentObservableDiff };
6
+ export { applyChange, revertChange };
7
+ export { applyDiff };
8
+ export { realTypeOf };
9
+ export { getOrderIndependentHash };
10
+ const typeNormalizer = {
11
+ normalize: function (currentPath, key, lhs, rhs) {
12
+ if (realTypeOf(lhs) === 'regexp' && realTypeOf(rhs) === 'regexp') {
13
+ lhs = lhs.toString();
14
+ rhs = rhs.toString();
15
+ }
16
+ if (realTypeOf(lhs) === 'date' && realTypeOf(rhs) === 'date') {
17
+ lhs = lhs.valueOf();
18
+ rhs = rhs.valueOf();
19
+ }
20
+ return [lhs, rhs];
21
+ }
22
+ };
23
+ function diff(lhs, rhs, prefilter) {
24
+ const changes = [];
25
+ deepDiff(lhs, rhs, changes, prefilter);
26
+ return (changes === null || changes === void 0 ? void 0 : changes.length) ? changes : undefined;
27
+ }
28
+ function orderIndependentDiff(lhs, rhs, prefilter) {
29
+ const changes = [];
30
+ deepDiff(lhs, rhs, changes, prefilter, null, null, null, true);
31
+ return (changes === null || changes === void 0 ? void 0 : changes.length) ? changes : undefined;
32
+ }
33
+ function observableDiff(lhs, rhs, observer, prefilter, orderIndependent) {
34
+ const changes = [];
35
+ deepDiff(lhs, rhs, changes, prefilter, null, null, null, orderIndependent);
36
+ if (observer) {
37
+ changes.forEach((c) => observer(c));
38
+ }
39
+ return changes;
40
+ }
41
+ function accumulateDiff(lhs, rhs, prefilter, accum, orderIndependent) {
42
+ const observer = (accum) ?
43
+ function (difference) {
44
+ if (difference) {
45
+ accum.push(difference);
46
+ }
47
+ } : undefined;
48
+ const changes = observableDiff(lhs, rhs, observer, prefilter, orderIndependent);
49
+ return accum ? accum : (changes.length) ? changes : undefined;
50
+ }
51
+ function orderIndependentObservableDiff(lhs, rhs, changes, prefilter, path, key, stack) {
52
+ deepDiff(lhs, rhs, changes, prefilter, path, key, stack, true);
53
+ }
54
+ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndependent = false) {
55
+ changes = changes || [];
56
+ path = path || [];
57
+ stack = stack || [];
58
+ const currentPath = path.slice(0);
59
+ if (typeof key !== 'undefined' && key !== null) {
60
+ if (prefilter) {
61
+ if (typeof (prefilter) === 'function' && prefilter(currentPath, key)) {
62
+ return;
63
+ }
64
+ else if (typeof (prefilter) === 'object') {
65
+ if (prefilter.prefilter && prefilter.prefilter(currentPath, key)) {
66
+ return;
67
+ }
68
+ if (prefilter.normalize) {
69
+ const alt = prefilter.normalize(currentPath, key, lhs, rhs);
70
+ if (alt) {
71
+ lhs = alt[0];
72
+ rhs = alt[1];
73
+ }
74
+ }
75
+ }
76
+ }
77
+ currentPath.push(key);
78
+ }
79
+ if (realTypeOf(lhs) === 'regexp' && realTypeOf(rhs) === 'regexp') {
80
+ lhs = lhs.toString();
81
+ rhs = rhs.toString();
82
+ }
83
+ const ltype = typeof lhs;
84
+ const rtype = typeof rhs;
85
+ const ldefined = ltype !== 'undefined' ||
86
+ (stack && (stack.length > 0) && stack[stack.length - 1].lhs &&
87
+ Object.getOwnPropertyDescriptor(stack[stack.length - 1].lhs, key));
88
+ const rdefined = rtype !== 'undefined' ||
89
+ (stack && (stack.length > 0) && stack[stack.length - 1].rhs &&
90
+ Object.getOwnPropertyDescriptor(stack[stack.length - 1].rhs, key));
91
+ if (!ldefined && rdefined) {
92
+ changes.push({
93
+ kind: 'N',
94
+ path: currentPath,
95
+ rhs
96
+ });
97
+ return;
98
+ }
99
+ else if (!rdefined && ldefined) {
100
+ changes.push({
101
+ kind: 'D',
102
+ path: currentPath,
103
+ lhs
104
+ });
105
+ return;
106
+ }
107
+ else if (realTypeOf(lhs) !== realTypeOf(rhs)) {
108
+ changes.push({
109
+ kind: 'E',
110
+ path: currentPath,
111
+ lhs,
112
+ rhs
113
+ });
114
+ return;
115
+ }
116
+ if (realTypeOf(lhs) === 'date'
117
+ && (lhs.valueOf() - rhs.valueOf()) !== 0) {
118
+ changes.push({
119
+ kind: 'E',
120
+ path: currentPath,
121
+ lhs,
122
+ rhs
123
+ });
124
+ new Date();
125
+ }
126
+ else if (ltype === 'object' && lhs !== null && rhs !== null) {
127
+ let i, j;
128
+ let other = false;
129
+ for (i = stack.length - 1; i > -1; --i) {
130
+ if (stack[i].lhs === lhs) {
131
+ other = true;
132
+ break;
133
+ }
134
+ }
135
+ if (!other) {
136
+ stack.push({ lhs: lhs, rhs: rhs });
137
+ if (Array.isArray(lhs) && Array.isArray(rhs)) {
138
+ i = rhs.length - 1;
139
+ j = lhs.length - 1;
140
+ if (orderIndependent) {
141
+ lhs = lhs.slice().sort(function (a, b) {
142
+ return getOrderIndependentHash(a) - getOrderIndependentHash(b);
143
+ });
144
+ rhs = rhs.slice().sort(function (a, b) {
145
+ return getOrderIndependentHash(a) - getOrderIndependentHash(b);
146
+ });
147
+ }
148
+ while (i > j) {
149
+ changes.push({
150
+ kind: 'A',
151
+ path: currentPath,
152
+ index: i,
153
+ item: { kind: 'N', rhs: rhs[i--] },
154
+ });
155
+ }
156
+ while (j > i) {
157
+ changes.push({
158
+ kind: 'A',
159
+ path: currentPath,
160
+ index: j,
161
+ item: { kind: 'D', lhs: lhs[j--] },
162
+ });
163
+ }
164
+ for (; i >= 0; --i) {
165
+ deepDiff(lhs[i], rhs[i], changes, prefilter, currentPath, i, stack, orderIndependent);
166
+ }
167
+ }
168
+ else {
169
+ const akeys = [...Object.keys(lhs), ...Object.getOwnPropertySymbols(lhs)];
170
+ const pkeys = [...Object.keys(rhs), ...Object.getOwnPropertySymbols(rhs)];
171
+ for (i = 0; i < akeys.length; ++i) {
172
+ const k = akeys[i];
173
+ const ki = pkeys.indexOf(k);
174
+ if (ki >= 0) {
175
+ deepDiff(lhs[k], rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);
176
+ pkeys[ki] = null;
177
+ }
178
+ else {
179
+ deepDiff(lhs[k], undefined, changes, prefilter, currentPath, k, stack, orderIndependent);
180
+ }
181
+ }
182
+ for (i = 0; i < pkeys.length; ++i) {
183
+ const k = pkeys[i];
184
+ if (k) {
185
+ deepDiff(undefined, rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);
186
+ }
187
+ }
188
+ }
189
+ stack.length = stack.length - 1;
190
+ }
191
+ else if (lhs !== rhs) {
192
+ changes.push({
193
+ kind: 'E',
194
+ path: currentPath,
195
+ lhs,
196
+ rhs
197
+ });
198
+ }
199
+ }
200
+ else if (lhs !== rhs) {
201
+ if (!(ltype === 'number' && isNaN(lhs) && isNaN(rhs))) {
202
+ changes.push({
203
+ kind: 'E',
204
+ path: currentPath,
205
+ lhs,
206
+ rhs
207
+ });
208
+ }
209
+ }
210
+ }
211
+ function applyDiff(target, source, filter) {
212
+ if (!target || !source) {
213
+ return;
214
+ }
215
+ const onChange = function (change) {
216
+ if (!filter || filter(target, source, change)) {
217
+ applyChange(target, source, change);
218
+ }
219
+ };
220
+ observableDiff(target, source, onChange);
221
+ return target;
222
+ }
223
+ function applyChange(target, source, change) {
224
+ var _a;
225
+ if (!target || !change || !change.kind) {
226
+ return;
227
+ }
228
+ let it = target;
229
+ const rootPath = !((_a = change.path) === null || _a === void 0 ? void 0 : _a.length);
230
+ const last = rootPath ? 0 : change.path.length - 1;
231
+ let i = -1;
232
+ while (++i < last) {
233
+ if (typeof it[change.path[i]] === 'undefined') {
234
+ it[change.path[i]] = (typeof change.path[i + 1] !== 'undefined'
235
+ && typeof change.path[i + 1] === 'number') ? [] : {};
236
+ }
237
+ it = it[change.path[i]];
238
+ }
239
+ switch (change.kind) {
240
+ case 'A':
241
+ if (!rootPath && typeof it[change.path[i]] === 'undefined') {
242
+ it[change.path[i]] = [];
243
+ }
244
+ applyArrayChange(rootPath ? it : it[change.path[i]], change.index, change.item);
245
+ break;
246
+ case 'D':
247
+ delete it[change.path[i]];
248
+ break;
249
+ case 'E':
250
+ case 'N':
251
+ it[change.path[i]] = change.rhs;
252
+ break;
253
+ }
254
+ }
255
+ function applyArrayChange(arr, index, change) {
256
+ if (change.path && change.path.length > 0) {
257
+ const u = change.path.length - 1;
258
+ let it = arr[index];
259
+ let i;
260
+ for (i = 0; i < u; i++) {
261
+ it = it[change.path[i]];
262
+ }
263
+ switch (change.kind) {
264
+ case 'A':
265
+ applyArrayChange(it[change.path[i]], change.index, change.item);
266
+ break;
267
+ case 'D':
268
+ delete it[change.path[i]];
269
+ break;
270
+ case 'E':
271
+ case 'N':
272
+ it[change.path[i]] = change.rhs;
273
+ break;
274
+ }
275
+ }
276
+ else {
277
+ switch (change.kind) {
278
+ case 'A':
279
+ applyArrayChange(arr[index], change.index, change.item);
280
+ break;
281
+ case 'D':
282
+ arr = arrayRemove(arr, index);
283
+ break;
284
+ case 'E':
285
+ case 'N':
286
+ arr[index] = change.rhs;
287
+ break;
288
+ }
289
+ }
290
+ return arr;
291
+ }
292
+ function revertChange(target, source, change) {
293
+ var _a;
294
+ if (!target || !change || !change.kind) {
295
+ return;
296
+ }
297
+ let it = target;
298
+ const rootPath = !((_a = change.path) === null || _a === void 0 ? void 0 : _a.length);
299
+ const last = rootPath ? 0 : change.path.length - 1;
300
+ let i;
301
+ for (i = 0; i < last; i++) {
302
+ if (typeof it[change.path[i]] === 'undefined') {
303
+ it[change.path[i]] = {};
304
+ }
305
+ it = it[change.path[i]];
306
+ }
307
+ switch (change.kind) {
308
+ case 'A':
309
+ revertArrayChange(rootPath ? it : it[change.path[i]], change.index, change.item);
310
+ break;
311
+ case 'D':
312
+ it[change.path[i]] = change.lhs;
313
+ break;
314
+ case 'E':
315
+ it[change.path[i]] = change.lhs;
316
+ break;
317
+ case 'N':
318
+ delete it[change.path[i]];
319
+ break;
320
+ }
321
+ }
322
+ function revertArrayChange(arr, index, change) {
323
+ if (change.path && change.path.length > 0) {
324
+ const u = change.path.length - 1;
325
+ let it = arr[index];
326
+ let i;
327
+ for (i = 0; i < u; i++) {
328
+ it = it[change.path[i]];
329
+ }
330
+ switch (change.kind) {
331
+ case 'A':
332
+ revertArrayChange(it[change.path[i]], change.index, change.item);
333
+ break;
334
+ case 'D':
335
+ it[change.path[i]] = change.lhs;
336
+ break;
337
+ case 'E':
338
+ it[change.path[i]] = change.lhs;
339
+ break;
340
+ case 'N':
341
+ delete it[change.path[i]];
342
+ break;
343
+ }
344
+ }
345
+ else {
346
+ switch (change.kind) {
347
+ case 'A':
348
+ revertArrayChange(arr[index], change.index, change.item);
349
+ break;
350
+ case 'D':
351
+ arr[index] = change.lhs;
352
+ break;
353
+ case 'E':
354
+ arr[index] = change.lhs;
355
+ break;
356
+ case 'N':
357
+ arr = arrayRemove(arr, index);
358
+ break;
359
+ }
360
+ }
361
+ return arr;
362
+ }
363
+ function arrayRemove(arr, index) {
364
+ index = index < 0 ? arr.length + index : index;
365
+ arr.splice(index, 1);
366
+ return arr;
367
+ }
368
+ function realTypeOf(val) {
369
+ const type = typeof val;
370
+ if (type !== 'object') {
371
+ return type;
372
+ }
373
+ if (val === Math) {
374
+ return 'math';
375
+ }
376
+ else if (val === null) {
377
+ return 'null';
378
+ }
379
+ else if (Array.isArray(val)) {
380
+ return 'array';
381
+ }
382
+ else if (Object.prototype.toString.call(val) === '[object Date]') {
383
+ return 'date';
384
+ }
385
+ else if (typeof val.toString === 'function' && /^\/.*\//.test(val.toString())) {
386
+ return 'regexp';
387
+ }
388
+ return 'object';
389
+ }
390
+ function getOrderIndependentHash(val) {
391
+ let accum = 0;
392
+ const type = realTypeOf(val);
393
+ if (type === 'array') {
394
+ val.forEach(function (item) {
395
+ accum += getOrderIndependentHash(item);
396
+ });
397
+ const arrayString = `[type: array, hash: ${accum}]`;
398
+ return accum + hashThisString(arrayString);
399
+ }
400
+ if (type === 'object') {
401
+ for (let key in val) {
402
+ if (val.hasOwnProperty(key)) {
403
+ const keyValueHash = getOrderIndependentHash(val[key]);
404
+ const keyValueString = `[ type: object, key: ${key}, value hash: ${keyValueHash}]`;
405
+ accum += hashThisString(keyValueString);
406
+ }
407
+ }
408
+ return accum;
409
+ }
410
+ const stringToHash = `[ type: ${type} ; value: ${val}]`;
411
+ return accum + hashThisString(stringToHash);
412
+ }
413
+ function hashThisString(str) {
414
+ let hash = 0;
415
+ if (str.length === 0) {
416
+ return hash;
417
+ }
418
+ for (let i = 0; i < str.length; i++) {
419
+ const char = str.charCodeAt(i);
420
+ hash = ((hash << 5) - hash) + char;
421
+ hash = hash & hash;
422
+ }
423
+ return hash;
424
+ }
425
+ //# sourceMappingURL=deep-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-diff.js","sourceRoot":"","sources":["../../../src/diff-lib/deep-diff.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
- export { deepEquals } from "./data-utils";
2
- export { flattenObject, unflattenObject } from "./data-utils";
1
+ export { deepEquals } from "./datum-utils";
2
+ export { deepClone } from "./datum-utils";
3
+ export { flattenObject, unflattenObject } from "./datum-utils";
3
4
  export { deepDiffLow } from "./diff-high";
4
5
  export { deepDiffFlat } from "./diff-high";
5
6
  export { deepDiffTyped } from "./diff-high";
6
7
  export { UpdateCode } from "./merge-low";
7
- export { updateCodeInfo } from "./merge-low";
8
+ export { updateCodeInfo } from "./merge-high";
8
9
  export { MergeError } from "./merge-high";
9
10
  export { shallowMerge, immutableMerge } from "./merge-high";
10
- export { type DetailConfig, detailMerge } from "./merge-high";
11
11
  export { diffFromMerge } from "./merge-high";
12
- export { shallowMerge as merge } from "./merge-high";
13
- export { deepDiffTyped as diff } from "./diff-high";
12
+ export { deepMerge, immutableDeepMerge } from "./merge-high";
13
+ export { type DetailConfig, } from "./merge-conf";
14
+ export { detailMerge, immutableDetailMerge } from "./merge-conf";
15
+ export { deepMerge as merge } from "./merge-high";
16
+ export * from "./diff-lib/deep-diff";
17
+ export { deepDiffLow as deepDiff } from "./diff-high";
package/dist/esm/index.js CHANGED
@@ -1,14 +1,17 @@
1
- export { deepEquals } from "./data-utils";
2
- export { flattenObject, unflattenObject } from "./data-utils";
1
+ export { deepEquals } from "./datum-utils";
2
+ export { deepClone } from "./datum-utils";
3
+ export { flattenObject, unflattenObject } from "./datum-utils";
3
4
  export { deepDiffLow } from "./diff-high";
4
5
  export { deepDiffFlat } from "./diff-high";
5
6
  export { deepDiffTyped } from "./diff-high";
6
7
  export { UpdateCode } from "./merge-low";
7
- export { updateCodeInfo } from "./merge-low";
8
+ export { updateCodeInfo } from "./merge-high";
8
9
  export { MergeError } from "./merge-high";
9
10
  export { shallowMerge, immutableMerge } from "./merge-high";
10
- export { detailMerge } from "./merge-high";
11
11
  export { diffFromMerge } from "./merge-high";
12
- export { shallowMerge as merge } from "./merge-high";
13
- export { deepDiffTyped as diff } from "./diff-high";
12
+ export { deepMerge, immutableDeepMerge } from "./merge-high";
13
+ export { detailMerge, immutableDetailMerge } from "./merge-conf";
14
+ export { deepMerge as merge } from "./merge-high";
15
+ export * from "./diff-lib/deep-diff";
16
+ export { deepDiffLow as deepDiff } from "./diff-high";
14
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9D,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,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAqB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,YAAY,IAAI,KAAK,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","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,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;AAG7D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,cAAc,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { UpdateCode } from "./merge-low";
2
+ export type DetailConfig = {
3
+ [key: string]: UpdateCode | DetailConfig;
4
+ };
5
+ export declare function detailMerge(target: {
6
+ [key: string]: any;
7
+ }, source: {
8
+ [key: string]: any;
9
+ }, mergeCodes: DetailConfig): boolean;
10
+ export declare function immutableDetailMerge(target: any, source: any, mergeCodes: DetailConfig): any;
@@ -0,0 +1,33 @@
1
+ import { emptyObject, isObject, isString } from "./type-utils";
2
+ import { deepClone, getObjectKeys } from "./datum-utils";
3
+ import { UpdateCode, mergeScalarField, mergeVectorField } from "./merge-low";
4
+ export function detailMerge(target, source, mergeCodes) {
5
+ if (!isObject(mergeCodes) || emptyObject(mergeCodes)) {
6
+ return false;
7
+ }
8
+ let changed = false;
9
+ const mergeKeys = getObjectKeys(mergeCodes);
10
+ for (const label of mergeKeys) {
11
+ const mergeCode = mergeCodes[label];
12
+ if (!isString(mergeCode)) {
13
+ if ((isObject(target[label]) && isObject(source[label]))
14
+ ? detailMerge(target[label], source[label], mergeCode)
15
+ : mergeScalarField(target, source, label, UpdateCode.I)) {
16
+ changed = true;
17
+ }
18
+ continue;
19
+ }
20
+ if (mergeCode.toString().startsWith("X")
21
+ ? mergeVectorField(target, source, label, mergeCode)
22
+ : mergeScalarField(target, source, label, mergeCode)) {
23
+ changed = true;
24
+ }
25
+ }
26
+ return changed;
27
+ }
28
+ export function immutableDetailMerge(target, source, mergeCodes) {
29
+ const targetCopy = deepClone(target);
30
+ detailMerge(targetCopy, source, mergeCodes);
31
+ return targetCopy;
32
+ }
33
+ //# sourceMappingURL=merge-conf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-conf.js","sourceRoot":"","sources":["../../src/merge-conf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAY7E,MAAM,UAAU,WAAW,CACvB,MAA8B,EAC9B,MAA8B,EAC9B,UAAwB;IAExB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpD,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;gBACtD,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EACzD,CAAC;gBACC,OAAO,GAAG,IAAI,CAAC;YACnB,CAAC;YACD,SAAS;QACb,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YACpC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC;YACpD,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EACtD,CAAC;YACC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAMD,MAAM,UAAU,oBAAoB,CAChC,MAAW,EACX,MAAW,EACX,UAAwB;IAExB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC;AACtB,CAAC"}
@@ -7,8 +7,11 @@ export type MergeTuple = {
7
7
  [label: string]: any;
8
8
  };
9
9
  export type MergeCode = `${UpdateCode}`;
10
- export type DetailConfig = {
11
- [path: string]: UpdateCode;
10
+ export type MergePerms = {
11
+ enable: boolean;
12
+ insert?: boolean;
13
+ update?: boolean;
14
+ unset?: boolean;
12
15
  };
13
16
  export declare class MergeError extends Error {
14
17
  readonly data: {
@@ -27,11 +30,17 @@ export declare class MergeError extends Error {
27
30
  t?: any;
28
31
  });
29
32
  }
30
- export declare function detailMerge(target: {
31
- [key: string]: any;
32
- }, source: {
33
- [key: string]: any;
34
- }, mergeCodes: DetailConfig): boolean;
33
+ export declare function updateCodeInfo(mergeCode: UpdateCode | MergeCode): MergePerms;
35
34
  export declare function shallowMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode, excludeKeys?: string[], includeKeys?: string[]): boolean;
36
35
  export declare function immutableMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode): any;
37
36
  export declare function diffFromMerge(target: any, source: any, scalarCode: UpdateCode, vectorCode?: UpdateCode): any | false;
37
+ export declare function deepMerge(target: {
38
+ [key: string]: any;
39
+ }, source: {
40
+ [key: string]: any;
41
+ }, scalarCode: UpdateCode, vectorCode: UpdateCode, nestedCode: UpdateCode): boolean;
42
+ export declare function immutableDeepMerge(target: {
43
+ [key: string]: any;
44
+ }, source: {
45
+ [key: string]: any;
46
+ }, scalarCode: UpdateCode, vectorCode?: UpdateCode, nestedCode?: UpdateCode): any;