datum-merge 0.9.5 → 0.9.8
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/LICENSE +1 -1
- package/README.md +7 -4
- package/dist/cjs/datum-utils.js +22 -7
- package/dist/cjs/diff-high.js +27 -2
- package/dist/cjs/diff-lib/deep-diff.js +38 -36
- package/dist/cjs/index.js +6 -3
- package/dist/cjs/merge-conf.js +21 -13
- package/dist/cjs/merge-high.js +2 -2
- package/dist/cjs/merge-low.js +14 -8
- package/dist/cjs/patch-low.js +2 -0
- package/dist/{cjs → dts}/datum-utils.d.ts +3 -2
- package/dist/dts/datum-utils.d.ts.map +1 -0
- package/dist/dts/diff-high.d.ts +16 -0
- package/dist/dts/diff-high.d.ts.map +1 -0
- package/dist/{cjs → dts}/diff-lib/deep-diff.d.ts +14 -11
- package/dist/dts/diff-lib/deep-diff.d.ts.map +1 -0
- package/dist/{cjs → dts}/index.d.ts +2 -1
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/{cjs → dts}/merge-conf.d.ts +3 -3
- package/dist/dts/merge-conf.d.ts.map +1 -0
- package/dist/{esm → dts}/merge-high.d.ts +1 -1
- package/dist/{cjs → dts}/merge-high.d.ts.map +1 -1
- package/dist/{cjs → dts}/merge-low.d.ts.map +1 -1
- package/dist/{cjs → dts}/patch-low.d.ts.map +1 -1
- package/dist/{esm → dts}/type-utils.d.ts +1 -2
- package/dist/dts/type-utils.d.ts.map +1 -0
- package/dist/esm/datum-utils.js +19 -5
- package/dist/esm/diff-high.js +25 -1
- package/dist/esm/diff-lib/deep-diff.js +37 -35
- package/dist/esm/index.js +2 -1
- package/dist/esm/merge-conf.js +19 -12
- package/dist/esm/merge-high.js +2 -2
- package/dist/esm/merge-low.js +15 -9
- package/dist/esm/patch-low.js +2 -0
- package/package.json +12 -7
- package/src/datum-utils.ts +25 -7
- package/src/diff-high.ts +44 -3
- package/src/diff-lib/deep-diff.ts +60 -58
- package/src/index.ts +2 -1
- package/src/merge-conf.ts +35 -17
- package/src/merge-high.ts +4 -2
- package/src/merge-low.ts +18 -15
- package/src/patch-low.ts +4 -2
- package/src/type-utils.ts +1 -2
- package/dist/cjs/datum-utils.d.ts.map +0 -1
- package/dist/cjs/diff-high.d.ts +0 -15
- package/dist/cjs/diff-high.d.ts.map +0 -1
- package/dist/cjs/diff-lib/deep-diff.d.ts.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/merge-conf.d.ts.map +0 -1
- package/dist/cjs/merge-high.d.ts +0 -26
- package/dist/cjs/type-utils.d.ts +0 -32
- package/dist/cjs/type-utils.d.ts.map +0 -1
- package/dist/esm/datum-utils.d.ts +0 -12
- package/dist/esm/datum-utils.d.ts.map +0 -1
- package/dist/esm/diff-high.d.ts +0 -15
- package/dist/esm/diff-high.d.ts.map +0 -1
- package/dist/esm/diff-lib/deep-diff.d.ts +0 -60
- package/dist/esm/diff-lib/deep-diff.d.ts.map +0 -1
- package/dist/esm/index.d.ts +0 -26
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/merge-conf.d.ts +0 -22
- package/dist/esm/merge-conf.d.ts.map +0 -1
- package/dist/esm/merge-high.d.ts.map +0 -1
- package/dist/esm/merge-low.d.ts +0 -21
- package/dist/esm/merge-low.d.ts.map +0 -1
- package/dist/esm/patch-low.d.ts +0 -16
- package/dist/esm/patch-low.d.ts.map +0 -1
- package/dist/esm/type-utils.d.ts.map +0 -1
- /package/dist/{cjs → dts}/merge-low.d.ts +0 -0
- /package/dist/{cjs → dts}/patch-low.d.ts +0 -0
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -31,7 +31,10 @@ const changed = detailMerge(target, source, {
|
|
|
31
31
|
mykey: UpdateCode.I,
|
|
32
32
|
myarr: UpdateCode.XM,
|
|
33
33
|
anobj: UpdateCode.B,
|
|
34
|
-
myobj: {
|
|
34
|
+
myobj: {
|
|
35
|
+
myid: UpdateCode.I,
|
|
36
|
+
vals: UpdateCode.XR,
|
|
37
|
+
},
|
|
35
38
|
});
|
|
36
39
|
```
|
|
37
40
|
|
|
@@ -55,7 +58,7 @@ const diff = customMerge(target, source, conf);
|
|
|
55
58
|
|
|
56
59
|
## Upcoming Features
|
|
57
60
|
|
|
58
|
-
1. inline the
|
|
61
|
+
1. inline the [deep-diff](https://github.com/flitbit/diff) library which unmaintained and buggy. ([available](/src/diff-lib/README.md))
|
|
59
62
|
|
|
60
63
|
2. formalize config schema for deeply nested objects (for v1).
|
|
61
64
|
|
|
@@ -92,9 +95,9 @@ The value is migrated from the source field to the target field only if the pred
|
|
|
92
95
|
| I | `sX & t0` | insert only, no update or delete |
|
|
93
96
|
| D | `s0 & tX` | delete only, no update or insert |
|
|
94
97
|
| XR | `sX & tX` | full vector replacement |
|
|
95
|
-
| XM | `
|
|
98
|
+
| XM | `t ∪ s` | set union, vector merge |
|
|
96
99
|
| XD | `t - s` | set difference, delete given values |
|
|
97
|
-
| XI | `
|
|
100
|
+
| XI | `t ∩ s` | set intersection, delete missing values |
|
|
98
101
|
| XS | `t + s` | preserve order insert (allows dupes) |
|
|
99
102
|
| XF | `s + t` | insert from start (allows dupes) |
|
|
100
103
|
|
package/dist/cjs/datum-utils.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.selectObjKeys = exports.getGlobKeys = exports.createGlobRegex = exports.areArraysEqual = exports.toUniqueArray = exports.deepClone = exports.deepEqualsPath = exports.deepEquals = exports.createValueKeys = exports.getObjectKeys = void 0;
|
|
7
7
|
const lodash_es_1 = require("lodash-es");
|
|
8
8
|
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
|
9
9
|
function getObjectKeys(obj, excludeKeys, includeKeys) {
|
|
@@ -58,21 +58,36 @@ function areArraysEqual(arr1, arr2) {
|
|
|
58
58
|
}
|
|
59
59
|
exports.areArraysEqual = areArraysEqual;
|
|
60
60
|
function createGlobRegex(search) {
|
|
61
|
-
|
|
61
|
+
const pattern = search.replace(/\*/g, ".+");
|
|
62
62
|
return new RegExp(`^${pattern}$`);
|
|
63
63
|
}
|
|
64
64
|
exports.createGlobRegex = createGlobRegex;
|
|
65
|
-
function
|
|
65
|
+
function getGlobKeys(obj, includePats = ["*"], excludeKeys) {
|
|
66
66
|
const includeKeys = [];
|
|
67
67
|
if (!obj || !(includePats === null || includePats === void 0 ? void 0 : includePats.length)) {
|
|
68
68
|
return includeKeys;
|
|
69
69
|
}
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
const labels = getObjectKeys(obj, excludeKeys);
|
|
71
|
+
if (!labels || !labels.length) {
|
|
72
|
+
return includeKeys;
|
|
73
|
+
}
|
|
74
|
+
const globPats = includePats.filter((s) => s.includes("*"))
|
|
75
|
+
.map((g) => createGlobRegex(g));
|
|
76
|
+
for (const label of labels) {
|
|
77
|
+
if (includePats.includes(label)) {
|
|
78
|
+
includeKeys.push(label);
|
|
79
|
+
}
|
|
80
|
+
else if (globPats.findIndex((r) => r.test(label)) >= 0) {
|
|
73
81
|
includeKeys.push(label);
|
|
74
82
|
}
|
|
75
83
|
}
|
|
76
84
|
return includeKeys;
|
|
77
85
|
}
|
|
78
|
-
exports.
|
|
86
|
+
exports.getGlobKeys = getGlobKeys;
|
|
87
|
+
function selectObjKeys(obj, includeKeys) {
|
|
88
|
+
if (!(includeKeys === null || includeKeys === void 0 ? void 0 : includeKeys.length))
|
|
89
|
+
return Object.assign({}, obj);
|
|
90
|
+
return Object.fromEntries(Object.entries(obj)
|
|
91
|
+
.filter(([k, _]) => includeKeys.includes(k)));
|
|
92
|
+
}
|
|
93
|
+
exports.selectObjKeys = selectObjKeys;
|
package/dist/cjs/diff-high.js
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.unflattenObject = exports.flattenObject = exports.deepDiffFlat = exports.deepDiffLow = exports.deepDiffTyped = void 0;
|
|
3
|
+
exports.unflattenObject = exports.flattenObject = exports.deepDiffFlat = exports.deepDiffLow = exports.antiDiffTyped = exports.deepDiffTyped = void 0;
|
|
4
|
+
const type_utils_1 = require("./type-utils");
|
|
4
5
|
const deep_diff_1 = require("./diff-lib/deep-diff");
|
|
5
6
|
function deepDiffTyped(lhsObj, rhsObj, orderInd = false) {
|
|
7
|
+
if ((0, type_utils_1.emptyObject)(rhsObj)) {
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
if ((0, type_utils_1.emptyObject)(lhsObj)) {
|
|
11
|
+
return Object.assign({}, rhsObj);
|
|
12
|
+
}
|
|
6
13
|
const differences = deepDiffLow(lhsObj, rhsObj, orderInd);
|
|
7
14
|
const deltaObj = {};
|
|
8
15
|
if (!differences) {
|
|
9
16
|
return deltaObj;
|
|
10
17
|
}
|
|
11
18
|
for (const difference of differences) {
|
|
12
|
-
(0, deep_diff_1.applyChange)(deltaObj,
|
|
19
|
+
(0, deep_diff_1.applyChange)(deltaObj, undefined, difference);
|
|
13
20
|
}
|
|
14
21
|
cleanupObjArrays(deltaObj);
|
|
15
22
|
return deltaObj;
|
|
@@ -24,6 +31,24 @@ function cleanupObjArrays(obj) {
|
|
|
24
31
|
}
|
|
25
32
|
}
|
|
26
33
|
}
|
|
34
|
+
function antiDiffTyped(lhsObj, rhsObj, orderInd = false) {
|
|
35
|
+
if ((0, type_utils_1.emptyObject)(lhsObj) || (0, type_utils_1.emptyObject)(rhsObj)) {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
const differences = deepDiffLow(lhsObj, rhsObj, orderInd);
|
|
39
|
+
if (!differences) {
|
|
40
|
+
return Object.assign({}, lhsObj);
|
|
41
|
+
}
|
|
42
|
+
const modFields = new Set();
|
|
43
|
+
differences.map((d) => d === null || d === void 0 ? void 0 : d.path)
|
|
44
|
+
.filter((p) => !!p && p.length > 0)
|
|
45
|
+
.map((p) => (p === null || p === void 0 ? void 0 : p[0]).toString())
|
|
46
|
+
.forEach((s) => modFields.add(s));
|
|
47
|
+
const shareObj = Object.fromEntries(Object.entries(lhsObj)
|
|
48
|
+
.filter(([k, _]) => !modFields.has(k)));
|
|
49
|
+
return shareObj;
|
|
50
|
+
}
|
|
51
|
+
exports.antiDiffTyped = antiDiffTyped;
|
|
27
52
|
function deepDiffLow(lhsObj, rhsObj, orderInd = false) {
|
|
28
53
|
const differences = !orderInd
|
|
29
54
|
? (0, deep_diff_1.diff)(lhsObj, rhsObj)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getOrderIndependentHash = exports.realTypeOf = exports.applyDiff = exports.revertChange = exports.applyChange = exports.
|
|
3
|
+
exports.getOrderIndependentHash = exports.realTypeOf = exports.applyDiff = exports.revertChange = exports.applyChange = exports.orderIndependentDeepDiff = exports.observableDiff = exports.accumulateDiff = exports.orderIndependentDiff = exports.diff = void 0;
|
|
4
4
|
const typeNormalizer = {
|
|
5
5
|
normalize: function (currentPath, key, lhs, rhs) {
|
|
6
6
|
if (realTypeOf(lhs) === 'regexp' && realTypeOf(rhs) === 'regexp') {
|
|
@@ -21,14 +21,13 @@ function diff(lhs, rhs, prefilter) {
|
|
|
21
21
|
}
|
|
22
22
|
exports.diff = diff;
|
|
23
23
|
function orderIndependentDiff(lhs, rhs, prefilter) {
|
|
24
|
-
const changes =
|
|
25
|
-
deepDiff(lhs, rhs, changes, prefilter, null, null, null, true);
|
|
24
|
+
const changes = observableDiff(lhs, rhs, undefined, prefilter, true);
|
|
26
25
|
return (changes === null || changes === void 0 ? void 0 : changes.length) ? changes : undefined;
|
|
27
26
|
}
|
|
28
27
|
exports.orderIndependentDiff = orderIndependentDiff;
|
|
29
28
|
function observableDiff(lhs, rhs, observer, prefilter, orderIndependent) {
|
|
30
29
|
const changes = [];
|
|
31
|
-
deepDiff(lhs, rhs, changes, prefilter,
|
|
30
|
+
deepDiff(lhs, rhs, changes, prefilter, undefined, undefined, undefined, orderIndependent);
|
|
32
31
|
if (observer) {
|
|
33
32
|
changes.forEach((c) => observer(c));
|
|
34
33
|
}
|
|
@@ -46,10 +45,10 @@ function accumulateDiff(lhs, rhs, prefilter, accum, orderIndependent) {
|
|
|
46
45
|
return accum ? accum : (changes.length) ? changes : undefined;
|
|
47
46
|
}
|
|
48
47
|
exports.accumulateDiff = accumulateDiff;
|
|
49
|
-
function
|
|
48
|
+
function orderIndependentDeepDiff(lhs, rhs, changes, prefilter, path, key, stack) {
|
|
50
49
|
deepDiff(lhs, rhs, changes, prefilter, path, key, stack, true);
|
|
51
50
|
}
|
|
52
|
-
exports.
|
|
51
|
+
exports.orderIndependentDeepDiff = orderIndependentDeepDiff;
|
|
53
52
|
function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndependent = false) {
|
|
54
53
|
changes = changes || [];
|
|
55
54
|
path = path || [];
|
|
@@ -82,11 +81,11 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
|
|
|
82
81
|
const ltype = typeof lhs;
|
|
83
82
|
const rtype = typeof rhs;
|
|
84
83
|
const ldefined = ltype !== 'undefined' ||
|
|
85
|
-
(stack && (stack.length > 0) && stack
|
|
86
|
-
Object.getOwnPropertyDescriptor(stack
|
|
84
|
+
(stack && (stack.length > 0) && stack.at(-1).lhs &&
|
|
85
|
+
Object.getOwnPropertyDescriptor(stack.at(-1).lhs, key));
|
|
87
86
|
const rdefined = rtype !== 'undefined' ||
|
|
88
|
-
(stack && (stack.length > 0) && stack
|
|
89
|
-
Object.getOwnPropertyDescriptor(stack
|
|
87
|
+
(stack && (stack.length > 0) && stack.at(-1).rhs &&
|
|
88
|
+
Object.getOwnPropertyDescriptor(stack.at(-1).rhs, key));
|
|
90
89
|
if (!ldefined && rdefined) {
|
|
91
90
|
changes.push({
|
|
92
91
|
kind: 'N',
|
|
@@ -120,12 +119,11 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
|
|
|
120
119
|
lhs,
|
|
121
120
|
rhs
|
|
122
121
|
});
|
|
123
|
-
|
|
122
|
+
return;
|
|
124
123
|
}
|
|
125
|
-
|
|
126
|
-
let i, j;
|
|
124
|
+
if (ltype === 'object' && lhs !== null && rhs !== null) {
|
|
127
125
|
let other = false;
|
|
128
|
-
for (i = stack.length - 1; i > -1; --i) {
|
|
126
|
+
for (let i = stack.length - 1; i > -1; --i) {
|
|
129
127
|
if (stack[i].lhs === lhs) {
|
|
130
128
|
other = true;
|
|
131
129
|
break;
|
|
@@ -134,22 +132,24 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
|
|
|
134
132
|
if (!other) {
|
|
135
133
|
stack.push({ lhs: lhs, rhs: rhs });
|
|
136
134
|
if (Array.isArray(lhs) && Array.isArray(rhs)) {
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
let lArr = lhs;
|
|
136
|
+
let rArr = rhs;
|
|
139
137
|
if (orderIndependent) {
|
|
140
|
-
|
|
138
|
+
lArr = lArr.slice(0).sort(function (a, b) {
|
|
141
139
|
return getOrderIndependentHash(a) - getOrderIndependentHash(b);
|
|
142
140
|
});
|
|
143
|
-
|
|
141
|
+
rArr = rArr.slice(0).sort(function (a, b) {
|
|
144
142
|
return getOrderIndependentHash(a) - getOrderIndependentHash(b);
|
|
145
143
|
});
|
|
146
144
|
}
|
|
145
|
+
let i = rArr.length - 1;
|
|
146
|
+
let j = lArr.length - 1;
|
|
147
147
|
while (i > j) {
|
|
148
148
|
changes.push({
|
|
149
149
|
kind: 'A',
|
|
150
150
|
path: currentPath,
|
|
151
151
|
index: i,
|
|
152
|
-
item: { kind: 'N', rhs:
|
|
152
|
+
item: { kind: 'N', rhs: rArr[i--], path: undefined },
|
|
153
153
|
});
|
|
154
154
|
}
|
|
155
155
|
while (j > i) {
|
|
@@ -157,31 +157,33 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
|
|
|
157
157
|
kind: 'A',
|
|
158
158
|
path: currentPath,
|
|
159
159
|
index: j,
|
|
160
|
-
item: { kind: 'D', lhs:
|
|
160
|
+
item: { kind: 'D', lhs: lArr[j--], path: undefined },
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
163
|
for (; i >= 0; --i) {
|
|
164
|
-
deepDiff(
|
|
164
|
+
deepDiff(lArr[i], rArr[i], changes, prefilter, currentPath, i, stack, orderIndependent);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
else {
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
|
|
168
|
+
const lObj = lhs;
|
|
169
|
+
const rObj = rhs;
|
|
170
|
+
const akeys = [...Object.keys(lObj), ...Object.getOwnPropertySymbols(lObj)];
|
|
171
|
+
const pkeys = [...Object.keys(rObj), ...Object.getOwnPropertySymbols(rObj)];
|
|
172
|
+
for (let i = 0; i < akeys.length; ++i) {
|
|
171
173
|
const k = akeys[i];
|
|
172
174
|
const ki = pkeys.indexOf(k);
|
|
173
175
|
if (ki >= 0) {
|
|
174
|
-
deepDiff(
|
|
176
|
+
deepDiff(lObj[k], rObj[k], changes, prefilter, currentPath, k, stack, orderIndependent);
|
|
175
177
|
pkeys[ki] = null;
|
|
176
178
|
}
|
|
177
179
|
else {
|
|
178
|
-
deepDiff(
|
|
180
|
+
deepDiff(lObj[k], undefined, changes, prefilter, currentPath, k, stack, orderIndependent);
|
|
179
181
|
}
|
|
180
182
|
}
|
|
181
|
-
for (i = 0; i < pkeys.length; ++i) {
|
|
183
|
+
for (let i = 0; i < pkeys.length; ++i) {
|
|
182
184
|
const k = pkeys[i];
|
|
183
185
|
if (k) {
|
|
184
|
-
deepDiff(undefined,
|
|
186
|
+
deepDiff(undefined, rObj[k], changes, prefilter, currentPath, k, stack, orderIndependent);
|
|
185
187
|
}
|
|
186
188
|
}
|
|
187
189
|
}
|
|
@@ -209,18 +211,18 @@ function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndepende
|
|
|
209
211
|
}
|
|
210
212
|
function applyDiff(target, source, filter) {
|
|
211
213
|
if (!target || !source) {
|
|
212
|
-
return;
|
|
214
|
+
return target;
|
|
213
215
|
}
|
|
214
216
|
const onChange = function (change) {
|
|
215
217
|
if (!filter || filter(target, source, change)) {
|
|
216
|
-
applyChange(target,
|
|
218
|
+
applyChange(target, undefined, change);
|
|
217
219
|
}
|
|
218
220
|
};
|
|
219
221
|
observableDiff(target, source, onChange);
|
|
220
222
|
return target;
|
|
221
223
|
}
|
|
222
224
|
exports.applyDiff = applyDiff;
|
|
223
|
-
function applyChange(target,
|
|
225
|
+
function applyChange(target, unused, change) {
|
|
224
226
|
var _a;
|
|
225
227
|
if (!target || !change || !change.kind) {
|
|
226
228
|
return;
|
|
@@ -255,10 +257,10 @@ function applyChange(target, source, change) {
|
|
|
255
257
|
exports.applyChange = applyChange;
|
|
256
258
|
function applyArrayChange(arr, index, change) {
|
|
257
259
|
if (change.path && change.path.length > 0) {
|
|
258
|
-
const
|
|
260
|
+
const last = change.path.length - 1;
|
|
259
261
|
let it = arr[index];
|
|
260
262
|
let i;
|
|
261
|
-
for (i = 0; i <
|
|
263
|
+
for (i = 0; i < last; i++) {
|
|
262
264
|
it = it[change.path[i]];
|
|
263
265
|
}
|
|
264
266
|
switch (change.kind) {
|
|
@@ -290,7 +292,7 @@ function applyArrayChange(arr, index, change) {
|
|
|
290
292
|
}
|
|
291
293
|
return arr;
|
|
292
294
|
}
|
|
293
|
-
function revertChange(target,
|
|
295
|
+
function revertChange(target, unused, change) {
|
|
294
296
|
var _a;
|
|
295
297
|
if (!target || !change || !change.kind) {
|
|
296
298
|
return;
|
|
@@ -323,10 +325,10 @@ function revertChange(target, source, change) {
|
|
|
323
325
|
exports.revertChange = revertChange;
|
|
324
326
|
function revertArrayChange(arr, index, change) {
|
|
325
327
|
if (change.path && change.path.length > 0) {
|
|
326
|
-
const
|
|
328
|
+
const last = change.path.length - 1;
|
|
327
329
|
let it = arr[index];
|
|
328
330
|
let i;
|
|
329
|
-
for (i = 0; i <
|
|
331
|
+
for (i = 0; i < last; i++) {
|
|
330
332
|
it = it[change.path[i]];
|
|
331
333
|
}
|
|
332
334
|
switch (change.kind) {
|
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.deepPatchLog = exports.asLodashPath = exports.diffToPatchLog = exports.immutableCustomMerge = exports.customMerge = exports.fillUpdateCodes = exports.immutableDetailMerge = exports.detailMerge = exports.diffFromMerge = exports.immutableDeepMerge = exports.deepMerge = exports.immutableMerge = exports.shallowMerge = exports.updateCodeInfo = exports.MC = exports.UpdateCode = exports.unflattenObject = exports.flattenObject = exports.deepDiffFlat = exports.deepDiffTyped = exports.deepDiffLow = exports.deepClone = exports.deepEquals = void 0;
|
|
17
|
+
exports.deepDiff = exports.mergeDiff = exports.merge = exports.deepPatchLog = exports.asLodashPath = exports.diffToPatchLog = exports.bypassMerge = exports.immutableCustomMerge = exports.customMerge = exports.fillUpdateCodes = exports.immutableDetailMerge = exports.detailMerge = exports.diffFromMerge = exports.immutableDeepMerge = exports.deepMerge = exports.immutableMerge = exports.shallowMerge = exports.updateCodeInfo = exports.MC = exports.UpdateCode = exports.unflattenObject = exports.flattenObject = exports.deepDiffFlat = exports.antiDiffTyped = exports.deepDiffTyped = exports.deepDiffLow = 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");
|
|
@@ -23,6 +23,7 @@ var diff_high_1 = require("./diff-high");
|
|
|
23
23
|
Object.defineProperty(exports, "deepDiffLow", { enumerable: true, get: function () { return diff_high_1.deepDiffLow; } });
|
|
24
24
|
var diff_high_2 = require("./diff-high");
|
|
25
25
|
Object.defineProperty(exports, "deepDiffTyped", { enumerable: true, get: function () { return diff_high_2.deepDiffTyped; } });
|
|
26
|
+
Object.defineProperty(exports, "antiDiffTyped", { enumerable: true, get: function () { return diff_high_2.antiDiffTyped; } });
|
|
26
27
|
var diff_high_3 = require("./diff-high");
|
|
27
28
|
Object.defineProperty(exports, "deepDiffFlat", { enumerable: true, get: function () { return diff_high_3.deepDiffFlat; } });
|
|
28
29
|
var diff_high_4 = require("./diff-high");
|
|
@@ -50,6 +51,8 @@ Object.defineProperty(exports, "fillUpdateCodes", { enumerable: true, get: funct
|
|
|
50
51
|
var merge_conf_3 = require("./merge-conf");
|
|
51
52
|
Object.defineProperty(exports, "customMerge", { enumerable: true, get: function () { return merge_conf_3.customMerge; } });
|
|
52
53
|
Object.defineProperty(exports, "immutableCustomMerge", { enumerable: true, get: function () { return merge_conf_3.immutableCustomMerge; } });
|
|
54
|
+
var merge_conf_4 = require("./merge-conf");
|
|
55
|
+
Object.defineProperty(exports, "bypassMerge", { enumerable: true, get: function () { return merge_conf_4.bypassMerge; } });
|
|
53
56
|
var patch_low_1 = require("./patch-low");
|
|
54
57
|
Object.defineProperty(exports, "diffToPatchLog", { enumerable: true, get: function () { return patch_low_1.diffToPatchLog; } });
|
|
55
58
|
Object.defineProperty(exports, "asLodashPath", { enumerable: true, get: function () { return patch_low_1.asLodashPath; } });
|
|
@@ -57,8 +60,8 @@ var patch_low_2 = require("./patch-low");
|
|
|
57
60
|
Object.defineProperty(exports, "deepPatchLog", { enumerable: true, get: function () { return patch_low_2.deepPatchLog; } });
|
|
58
61
|
var merge_high_5 = require("./merge-high");
|
|
59
62
|
Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return merge_high_5.deepMerge; } });
|
|
60
|
-
var
|
|
61
|
-
Object.defineProperty(exports, "mergeDiff", { enumerable: true, get: function () { return
|
|
63
|
+
var merge_conf_5 = require("./merge-conf");
|
|
64
|
+
Object.defineProperty(exports, "mergeDiff", { enumerable: true, get: function () { return merge_conf_5.customMerge; } });
|
|
62
65
|
__exportStar(require("./diff-lib/deep-diff"), exports);
|
|
63
66
|
var diff_high_5 = require("./diff-high");
|
|
64
67
|
Object.defineProperty(exports, "deepDiff", { enumerable: true, get: function () { return diff_high_5.deepDiffLow; } });
|
package/dist/cjs/merge-conf.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fillUpdateCodes = exports.immutableCustomMerge = exports.customMerge = exports.
|
|
3
|
+
exports.fillUpdateCodes = exports.immutableCustomMerge = exports.bypassMerge = exports.customMerge = exports.getDetailKeys = exports.immutableDetailMerge = exports.detailMerge = 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");
|
|
@@ -43,7 +43,7 @@ function immutableDetailMerge(target, source, mergeCodes) {
|
|
|
43
43
|
return targetCopy;
|
|
44
44
|
}
|
|
45
45
|
exports.immutableDetailMerge = immutableDetailMerge;
|
|
46
|
-
function
|
|
46
|
+
function getDetailKeys(obj, mergeCodes, excludeKeys) {
|
|
47
47
|
const includeKeys = [];
|
|
48
48
|
if (!obj || !mergeCodes) {
|
|
49
49
|
return includeKeys;
|
|
@@ -57,7 +57,7 @@ function selectDetailKeys(obj, mergeCodes, excludeKeys) {
|
|
|
57
57
|
}
|
|
58
58
|
return includeKeys;
|
|
59
59
|
}
|
|
60
|
-
exports.
|
|
60
|
+
exports.getDetailKeys = getDetailKeys;
|
|
61
61
|
function customMerge(target, source, mergeConf, excludeKeys) {
|
|
62
62
|
switch (mergeConf) {
|
|
63
63
|
case merge_low_1.UpdateCode.C:
|
|
@@ -67,9 +67,7 @@ function customMerge(target, source, mergeConf, excludeKeys) {
|
|
|
67
67
|
case merge_low_1.UpdateCode.N:
|
|
68
68
|
return false;
|
|
69
69
|
case merge_low_1.UpdateCode.Y:
|
|
70
|
-
|
|
71
|
-
Object.assign(target, Object.assign({}, source));
|
|
72
|
-
return delta;
|
|
70
|
+
return bypassMerge(target, source);
|
|
73
71
|
}
|
|
74
72
|
const mergeCodes = (0, exports.fillUpdateCodes)(source, mergeConf, false, excludeKeys);
|
|
75
73
|
if ((0, type_utils_1.emptyObject)(mergeCodes)) {
|
|
@@ -84,6 +82,16 @@ function customMerge(target, source, mergeConf, excludeKeys) {
|
|
|
84
82
|
return false;
|
|
85
83
|
}
|
|
86
84
|
exports.customMerge = customMerge;
|
|
85
|
+
function bypassMerge(target, source) {
|
|
86
|
+
if ((0, type_utils_1.emptyObject)(source)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
let delta = (0, diff_high_1.deepDiffTyped)(target, source, true);
|
|
90
|
+
Object.assign(target, Object.assign({}, source));
|
|
91
|
+
delta = (0, datum_utils_1.selectObjKeys)(delta, (0, datum_utils_1.getObjectKeys)(source));
|
|
92
|
+
return (0, type_utils_1.emptyObject)(delta) ? false : delta;
|
|
93
|
+
}
|
|
94
|
+
exports.bypassMerge = bypassMerge;
|
|
87
95
|
function immutableCustomMerge(target, source, mergeConf, skipFill = false) {
|
|
88
96
|
const mergeCodes = !skipFill
|
|
89
97
|
? (0, exports.fillUpdateCodes)(source, mergeConf)
|
|
@@ -94,17 +102,17 @@ function immutableCustomMerge(target, source, mergeConf, skipFill = false) {
|
|
|
94
102
|
}
|
|
95
103
|
exports.immutableCustomMerge = immutableCustomMerge;
|
|
96
104
|
const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) => {
|
|
97
|
-
var _a, _b, _c;
|
|
98
105
|
if ((0, type_utils_1.isString)(mergeConf)) {
|
|
99
106
|
mergeConf = { scalar: mergeConf };
|
|
100
107
|
}
|
|
101
108
|
const deepConf = {
|
|
102
|
-
scalar: (
|
|
103
|
-
vector: (
|
|
104
|
-
nested: (
|
|
109
|
+
scalar: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.scalar) || merge_low_1.UpdateCode.B,
|
|
110
|
+
vector: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.vector) || merge_low_1.UpdateCode.XS,
|
|
111
|
+
nested: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.nested) || merge_low_1.UpdateCode.N,
|
|
105
112
|
};
|
|
106
113
|
const globKeys = (0, datum_utils_1.getObjectKeys)(mergeConf)
|
|
107
|
-
.filter((s) => s.includes("*"))
|
|
114
|
+
.filter((s) => s.includes("*"))
|
|
115
|
+
.sort((s1, s2) => s2.length - s1.length);
|
|
108
116
|
const globPats = globKeys.map((g) => (0, datum_utils_1.createGlobRegex)(g));
|
|
109
117
|
const mergeCodes = {};
|
|
110
118
|
const sourceKeys = (0, datum_utils_1.getObjectKeys)(source);
|
|
@@ -124,7 +132,7 @@ const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) =>
|
|
|
124
132
|
continue;
|
|
125
133
|
}
|
|
126
134
|
if ((0, type_utils_1.isObject)(labelConf) && (0, type_utils_1.isObject)(srcValue)) {
|
|
127
|
-
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, labelConf, blockUnset);
|
|
135
|
+
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, Object.assign(Object.assign({}, deepConf), labelConf), blockUnset);
|
|
128
136
|
continue;
|
|
129
137
|
}
|
|
130
138
|
const globIndex = globPats.findIndex((r) => r.test(srcLabel));
|
|
@@ -135,7 +143,7 @@ const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) =>
|
|
|
135
143
|
continue;
|
|
136
144
|
}
|
|
137
145
|
if ((0, type_utils_1.isObject)(globConf) && (0, type_utils_1.isObject)(srcValue)) {
|
|
138
|
-
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, globConf, blockUnset);
|
|
146
|
+
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, Object.assign(Object.assign({}, deepConf), globConf), blockUnset);
|
|
139
147
|
continue;
|
|
140
148
|
}
|
|
141
149
|
}
|
package/dist/cjs/merge-high.js
CHANGED
|
@@ -96,9 +96,9 @@ function immutableDeepMerge(target, source, scalarCode, vectorCode, nestedCode)
|
|
|
96
96
|
}
|
|
97
97
|
exports.immutableDeepMerge = immutableDeepMerge;
|
|
98
98
|
;
|
|
99
|
-
function diffFromMerge(target, source, scalarCode, vectorCode, nestedCode) {
|
|
99
|
+
function diffFromMerge(target, source, scalarCode, vectorCode, nestedCode, orderInd = false) {
|
|
100
100
|
const targetCopy = immutableDeepMerge(target, source, scalarCode, vectorCode, nestedCode);
|
|
101
|
-
const delta = (0, diff_high_1.deepDiffTyped)(target, targetCopy);
|
|
101
|
+
const delta = (0, diff_high_1.deepDiffTyped)(target, targetCopy, orderInd);
|
|
102
102
|
return (0, type_utils_1.emptyObject)(delta) ? false : delta;
|
|
103
103
|
}
|
|
104
104
|
exports.diffFromMerge = diffFromMerge;
|
package/dist/cjs/merge-low.js
CHANGED
|
@@ -23,7 +23,8 @@ exports.UpdateCode = {
|
|
|
23
23
|
};
|
|
24
24
|
function mergeScalarField(target, source, label, mergeCode) {
|
|
25
25
|
const sourceHas = !(0, type_utils_1.isNullish)(source[label]);
|
|
26
|
-
const
|
|
26
|
+
const targetKey = target.hasOwnProperty(label);
|
|
27
|
+
const targetHas = targetKey && !(0, type_utils_1.isNullish)(target[label]);
|
|
27
28
|
if (!targetHas && !sourceHas) {
|
|
28
29
|
return false;
|
|
29
30
|
}
|
|
@@ -40,7 +41,7 @@ function mergeScalarField(target, source, label, mergeCode) {
|
|
|
40
41
|
case exports.UpdateCode.N:
|
|
41
42
|
return false;
|
|
42
43
|
case exports.UpdateCode.Y:
|
|
43
|
-
target[label] = source[label];
|
|
44
|
+
target[label] = (0, datum_utils_1.deepClone)(source[label]);
|
|
44
45
|
return true;
|
|
45
46
|
case exports.UpdateCode.B:
|
|
46
47
|
if (sourceHas)
|
|
@@ -73,10 +74,12 @@ function mergeScalarField(target, source, label, mergeCode) {
|
|
|
73
74
|
if (!migrateVal) {
|
|
74
75
|
return false;
|
|
75
76
|
}
|
|
76
|
-
target[label] = (0,
|
|
77
|
+
target[label] = !sourceHas || (0, type_utils_1.isPrimitive)(source[label])
|
|
78
|
+
? source[label]
|
|
79
|
+
: (0, datum_utils_1.deepClone)(source[label]);
|
|
77
80
|
if ((0, type_utils_1.emptyValue)(target[label])) {
|
|
78
81
|
delete target[label];
|
|
79
|
-
return
|
|
82
|
+
return targetKey;
|
|
80
83
|
}
|
|
81
84
|
return true;
|
|
82
85
|
}
|
|
@@ -89,7 +92,8 @@ function mergeVectorField(target, source, label, mergeCode) {
|
|
|
89
92
|
return false;
|
|
90
93
|
}
|
|
91
94
|
let sourceVec = (0, type_utils_1.isArrayOfAny)(sourceVals);
|
|
92
|
-
const
|
|
95
|
+
const targetKey = target.hasOwnProperty(label);
|
|
96
|
+
const targetHas = targetKey && !(0, type_utils_1.isNullish)(target[label]);
|
|
93
97
|
const targetVec = (0, type_utils_1.isArrayOfAny)(target[label]);
|
|
94
98
|
if (targetHas && !targetVec) {
|
|
95
99
|
throw new TypeError("type change to vector for " + label);
|
|
@@ -103,9 +107,11 @@ function mergeVectorField(target, source, label, mergeCode) {
|
|
|
103
107
|
case exports.UpdateCode.N:
|
|
104
108
|
return false;
|
|
105
109
|
case exports.UpdateCode.Y:
|
|
106
|
-
case exports.UpdateCode.XR:
|
|
107
110
|
target[label] = (0, datum_utils_1.deepClone)(sourceVals);
|
|
108
111
|
return true;
|
|
112
|
+
case exports.UpdateCode.XR:
|
|
113
|
+
targetVals = sourceVals;
|
|
114
|
+
break;
|
|
109
115
|
case exports.UpdateCode.XS:
|
|
110
116
|
targetVals = (0, lodash_es_1.concat)((_a = target[label]) !== null && _a !== void 0 ? _a : [], sourceVals);
|
|
111
117
|
break;
|
|
@@ -127,10 +133,10 @@ function mergeVectorField(target, source, label, mergeCode) {
|
|
|
127
133
|
}
|
|
128
134
|
if (!(targetVals === null || targetVals === void 0 ? void 0 : targetVals.length)) {
|
|
129
135
|
delete target[label];
|
|
130
|
-
return
|
|
136
|
+
return targetKey;
|
|
131
137
|
}
|
|
132
138
|
const changed = !(0, datum_utils_1.areArraysEqual)(targetVals, target[label]);
|
|
133
|
-
target[label] = targetVals;
|
|
139
|
+
target[label] = !changed ? targetVals : (0, datum_utils_1.deepClone)(targetVals);
|
|
134
140
|
return changed;
|
|
135
141
|
}
|
|
136
142
|
exports.mergeVectorField = mergeVectorField;
|
package/dist/cjs/patch-low.js
CHANGED
|
@@ -44,6 +44,8 @@ exports.deepPatchLog = deepPatchLog;
|
|
|
44
44
|
function escapePathPart(path) {
|
|
45
45
|
if (typeof path === 'number')
|
|
46
46
|
return path.toString();
|
|
47
|
+
if (typeof path === 'symbol')
|
|
48
|
+
return path.toString();
|
|
47
49
|
if (path.indexOf('/') === -1 && path.indexOf('~') === -1)
|
|
48
50
|
return path;
|
|
49
51
|
return path.replace(/~/g, '~0').replace(/\//g, '~1');
|
|
@@ -4,9 +4,10 @@ export declare function createValueKeys<T>(keys: string[], value: T): {
|
|
|
4
4
|
};
|
|
5
5
|
export declare function deepEquals(lhs: any, rhs: any): boolean;
|
|
6
6
|
export declare function deepEqualsPath(lhs: any, rhs: any, atPath: string): boolean;
|
|
7
|
-
export declare function deepClone(val:
|
|
7
|
+
export declare function deepClone<T = any>(val: T): T;
|
|
8
8
|
export declare function toUniqueArray<T>(arr: T[]): T[];
|
|
9
9
|
export declare function areArraysEqual<T>(arr1: T[] | undefined, arr2: T[] | undefined): boolean;
|
|
10
10
|
export declare function createGlobRegex(search: string): RegExp;
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function getGlobKeys(obj: any, includePats?: string[], excludeKeys?: string[]): string[];
|
|
12
|
+
export declare function selectObjKeys<T extends object>(obj: T, includeKeys: string[]): Partial<T>;
|
|
12
13
|
//# sourceMappingURL=datum-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datum-utils.d.ts","sourceRoot":"","sources":["../../src/datum-utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CACzB,GAAG,EAAE,GAAG,EACR,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAaV;AAED,wBAAgB,eAAe,CAAC,CAAC,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,CAAC,GACT;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAA;CAAE,CAEtB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAEtD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAE5C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE9C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC5B,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,EACrB,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,GACtB,OAAO,CAaT;AAID,wBAAgB,eAAe,CAC3B,MAAM,EAAE,MAAM,GACf,MAAM,CAIR;AAED,wBAAgB,WAAW,CACvB,GAAG,EAAE,GAAG,EACR,WAAW,GAAE,MAAM,EAAU,EAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAmBV;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC1C,GAAG,EAAE,CAAC,EACN,WAAW,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,CAAC,CAAC,CAMZ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Diff } from "./diff-lib/deep-diff";
|
|
2
|
+
export declare function deepDiffTyped<T extends object>(lhsObj: T, rhsObj: T, orderInd?: boolean): Partial<T>;
|
|
3
|
+
export declare function antiDiffTyped<T extends object>(lhsObj: T, rhsObj: object, orderInd?: boolean): Partial<T>;
|
|
4
|
+
export declare function deepDiffLow<T = any, S = T>(lhsObj: T, rhsObj: S, orderInd?: boolean): readonly Diff<T, S>[] | false;
|
|
5
|
+
export declare function deepDiffFlat(oldFlat: any, newFlat: any, flatten?: boolean): [any, any];
|
|
6
|
+
export declare function flattenObject(obj: {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}): {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
export declare function unflattenObject(flatObj: {
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
}): {
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=diff-high.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-high.d.ts","sourceRoot":"","sources":["../../src/diff-high.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA2C,MAAM,sBAAsB,CAAC;AAOrF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC1C,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,CAAC,EACT,QAAQ,GAAE,OAAe,GAC1B,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAeD,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC1C,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAe,GAC1B,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EACtC,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,CAAC,EACT,QAAQ,GAAE,OAAe,GAC1B,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAO/B;AAID,wBAAgB,YAAY,CACxB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,OAAO,GAAE,OAAc,GACxB,CAAC,GAAG,EAAE,GAAG,CAAC,CAeZ;AAED,wBAAgB,aAAa,CACzB,GAAG,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAC5B;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAiBxB;AAED,wBAAgB,eAAe,CAC3B,OAAO,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAChC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAgBxB"}
|