datum-merge 0.9.5 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/merge-conf.d.ts.map +1 -1
- package/dist/cjs/merge-conf.js +7 -7
- package/dist/cjs/merge-low.d.ts.map +1 -1
- package/dist/cjs/merge-low.js +14 -8
- package/dist/cjs/type-utils.d.ts +1 -2
- package/dist/cjs/type-utils.d.ts.map +1 -1
- package/dist/esm/merge-conf.d.ts.map +1 -1
- package/dist/esm/merge-conf.js +7 -7
- package/dist/esm/merge-low.d.ts.map +1 -1
- package/dist/esm/merge-low.js +15 -9
- package/dist/esm/type-utils.d.ts +1 -2
- package/dist/esm/type-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/merge-conf.ts +11 -10
- package/src/merge-low.ts +18 -15
- package/src/type-utils.ts +1 -2
|
@@ -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,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,CAgCT;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;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,QAAQ,GAAE,OAAe,GAC1B,GAAG,CAOL;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,SAAS,eACtB,OAAO,gBACL,MAAM,EAAE,KACvB,
|
|
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,CAgCT;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;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,QAAQ,GAAE,OAAe,GAC1B,GAAG,CAOL;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,SAAS,eACtB,OAAO,gBACL,MAAM,EAAE,KACvB,YAoEF,CAAA"}
|
package/dist/cjs/merge-conf.js
CHANGED
|
@@ -94,17 +94,17 @@ function immutableCustomMerge(target, source, mergeConf, skipFill = false) {
|
|
|
94
94
|
}
|
|
95
95
|
exports.immutableCustomMerge = immutableCustomMerge;
|
|
96
96
|
const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) => {
|
|
97
|
-
var _a, _b, _c;
|
|
98
97
|
if ((0, type_utils_1.isString)(mergeConf)) {
|
|
99
98
|
mergeConf = { scalar: mergeConf };
|
|
100
99
|
}
|
|
101
100
|
const deepConf = {
|
|
102
|
-
scalar: (
|
|
103
|
-
vector: (
|
|
104
|
-
nested: (
|
|
101
|
+
scalar: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.scalar) || merge_low_1.UpdateCode.B,
|
|
102
|
+
vector: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.vector) || merge_low_1.UpdateCode.XS,
|
|
103
|
+
nested: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.nested) || merge_low_1.UpdateCode.N,
|
|
105
104
|
};
|
|
106
105
|
const globKeys = (0, datum_utils_1.getObjectKeys)(mergeConf)
|
|
107
|
-
.filter((s) => s.includes("*"))
|
|
106
|
+
.filter((s) => s.includes("*"))
|
|
107
|
+
.sort((s1, s2) => s2.length - s1.length);
|
|
108
108
|
const globPats = globKeys.map((g) => (0, datum_utils_1.createGlobRegex)(g));
|
|
109
109
|
const mergeCodes = {};
|
|
110
110
|
const sourceKeys = (0, datum_utils_1.getObjectKeys)(source);
|
|
@@ -124,7 +124,7 @@ const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) =>
|
|
|
124
124
|
continue;
|
|
125
125
|
}
|
|
126
126
|
if ((0, type_utils_1.isObject)(labelConf) && (0, type_utils_1.isObject)(srcValue)) {
|
|
127
|
-
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, labelConf, blockUnset);
|
|
127
|
+
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, Object.assign(Object.assign({}, deepConf), labelConf), blockUnset);
|
|
128
128
|
continue;
|
|
129
129
|
}
|
|
130
130
|
const globIndex = globPats.findIndex((r) => r.test(srcLabel));
|
|
@@ -135,7 +135,7 @@ const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) =>
|
|
|
135
135
|
continue;
|
|
136
136
|
}
|
|
137
137
|
if ((0, type_utils_1.isObject)(globConf) && (0, type_utils_1.isObject)(srcValue)) {
|
|
138
|
-
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, globConf, blockUnset);
|
|
138
|
+
mergeCodes[srcLabel] = (0, exports.fillUpdateCodes)(srcValue, Object.assign(Object.assign({}, deepConf), globConf), blockUnset);
|
|
139
139
|
continue;
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"AAIA,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,CAyDT;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACrB,OAAO,CA4DT"}
|
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/type-utils.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
export type PrimitiveType = "string" | "number" | "boolean";
|
|
2
2
|
export type Primitive = string | number | boolean;
|
|
3
3
|
export type PrimitiveArray = string[] | number[] | boolean[];
|
|
4
|
-
export type VectorArray = string[] | number[];
|
|
5
4
|
export type ObjectKeys<T> = keyof T;
|
|
6
5
|
export type ObjectVals<T> = T[keyof T];
|
|
7
6
|
export type Prettify<T> = {
|
|
8
7
|
[K in keyof T]: T[K];
|
|
9
8
|
} & {};
|
|
10
|
-
export type SafeTypes = Primitive |
|
|
9
|
+
export type SafeTypes = Primitive | PrimitiveArray;
|
|
11
10
|
export type SafeTupleObj = {
|
|
12
11
|
[label: string]: SafeTypes;
|
|
13
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;AAE7D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACpC,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAEhD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAE1D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAE7C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIlD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAIpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE,CAEvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE5C;AAED,wBAAgB,SAAS,CAAC,CAAC,EACvB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,GACpC,GAAG,IAAI,CAAC,EAAE,CAIZ;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,KAAK,CAItD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAK9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAS9C"}
|
|
@@ -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,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,CAgCT;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;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,QAAQ,GAAE,OAAe,GAC1B,GAAG,CAOL;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,SAAS,eACtB,OAAO,gBACL,MAAM,EAAE,KACvB,
|
|
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,CAgCT;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;AAMD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,QAAQ,GAAE,OAAe,GAC1B,GAAG,CAOL;AAWD,eAAO,MAAM,eAAe,WAChB,GAAG,aACA,WAAW,GAAG,SAAS,eACtB,OAAO,gBACL,MAAM,EAAE,KACvB,YAoEF,CAAA"}
|
package/dist/esm/merge-conf.js
CHANGED
|
@@ -86,17 +86,17 @@ export function immutableCustomMerge(target, source, mergeConf, skipFill = false
|
|
|
86
86
|
return targetCopy;
|
|
87
87
|
}
|
|
88
88
|
export const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKeys) => {
|
|
89
|
-
var _a, _b, _c;
|
|
90
89
|
if (isString(mergeConf)) {
|
|
91
90
|
mergeConf = { scalar: mergeConf };
|
|
92
91
|
}
|
|
93
92
|
const deepConf = {
|
|
94
|
-
scalar: (
|
|
95
|
-
vector: (
|
|
96
|
-
nested: (
|
|
93
|
+
scalar: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.scalar) || UpdateCode.B,
|
|
94
|
+
vector: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.vector) || UpdateCode.XS,
|
|
95
|
+
nested: (mergeConf === null || mergeConf === void 0 ? void 0 : mergeConf.nested) || UpdateCode.N,
|
|
97
96
|
};
|
|
98
97
|
const globKeys = getObjectKeys(mergeConf)
|
|
99
|
-
.filter((s) => s.includes("*"))
|
|
98
|
+
.filter((s) => s.includes("*"))
|
|
99
|
+
.sort((s1, s2) => s2.length - s1.length);
|
|
100
100
|
const globPats = globKeys.map((g) => createGlobRegex(g));
|
|
101
101
|
const mergeCodes = {};
|
|
102
102
|
const sourceKeys = getObjectKeys(source);
|
|
@@ -116,7 +116,7 @@ export const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKe
|
|
|
116
116
|
continue;
|
|
117
117
|
}
|
|
118
118
|
if (isObject(labelConf) && isObject(srcValue)) {
|
|
119
|
-
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, labelConf, blockUnset);
|
|
119
|
+
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, Object.assign(Object.assign({}, deepConf), labelConf), blockUnset);
|
|
120
120
|
continue;
|
|
121
121
|
}
|
|
122
122
|
const globIndex = globPats.findIndex((r) => r.test(srcLabel));
|
|
@@ -127,7 +127,7 @@ export const fillUpdateCodes = (source, mergeConf, blockUnset = false, excludeKe
|
|
|
127
127
|
continue;
|
|
128
128
|
}
|
|
129
129
|
if (isObject(globConf) && isObject(srcValue)) {
|
|
130
|
-
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, globConf, blockUnset);
|
|
130
|
+
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, Object.assign(Object.assign({}, deepConf), globConf), blockUnset);
|
|
131
131
|
continue;
|
|
132
132
|
}
|
|
133
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-low.d.ts","sourceRoot":"","sources":["../../src/merge-low.ts"],"names":[],"mappings":"AAIA,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,CAyDT;AAED,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACrB,OAAO,CA4DT"}
|
package/dist/esm/merge-low.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { concat, differenceWith, intersectionWith, unionWith, isEqual } from "lodash-es";
|
|
2
|
-
import { emptyValue, isArrayOfAny, isNullish, typeOfValue } from "./type-utils";
|
|
2
|
+
import { emptyValue, isArrayOfAny, isNullish, isPrimitive, typeOfValue } from "./type-utils";
|
|
3
3
|
import { areArraysEqual, deepClone } from "./datum-utils";
|
|
4
4
|
export const UpdateCode = {
|
|
5
5
|
T: "T",
|
|
@@ -20,7 +20,8 @@ export const UpdateCode = {
|
|
|
20
20
|
};
|
|
21
21
|
export function mergeScalarField(target, source, label, mergeCode) {
|
|
22
22
|
const sourceHas = !isNullish(source[label]);
|
|
23
|
-
const
|
|
23
|
+
const targetKey = target.hasOwnProperty(label);
|
|
24
|
+
const targetHas = targetKey && !isNullish(target[label]);
|
|
24
25
|
if (!targetHas && !sourceHas) {
|
|
25
26
|
return false;
|
|
26
27
|
}
|
|
@@ -37,7 +38,7 @@ export function mergeScalarField(target, source, label, mergeCode) {
|
|
|
37
38
|
case UpdateCode.N:
|
|
38
39
|
return false;
|
|
39
40
|
case UpdateCode.Y:
|
|
40
|
-
target[label] = source[label];
|
|
41
|
+
target[label] = deepClone(source[label]);
|
|
41
42
|
return true;
|
|
42
43
|
case UpdateCode.B:
|
|
43
44
|
if (sourceHas)
|
|
@@ -70,10 +71,12 @@ export function mergeScalarField(target, source, label, mergeCode) {
|
|
|
70
71
|
if (!migrateVal) {
|
|
71
72
|
return false;
|
|
72
73
|
}
|
|
73
|
-
target[label] =
|
|
74
|
+
target[label] = !sourceHas || isPrimitive(source[label])
|
|
75
|
+
? source[label]
|
|
76
|
+
: deepClone(source[label]);
|
|
74
77
|
if (emptyValue(target[label])) {
|
|
75
78
|
delete target[label];
|
|
76
|
-
return
|
|
79
|
+
return targetKey;
|
|
77
80
|
}
|
|
78
81
|
return true;
|
|
79
82
|
}
|
|
@@ -85,7 +88,8 @@ export function mergeVectorField(target, source, label, mergeCode) {
|
|
|
85
88
|
return false;
|
|
86
89
|
}
|
|
87
90
|
let sourceVec = isArrayOfAny(sourceVals);
|
|
88
|
-
const
|
|
91
|
+
const targetKey = target.hasOwnProperty(label);
|
|
92
|
+
const targetHas = targetKey && !isNullish(target[label]);
|
|
89
93
|
const targetVec = isArrayOfAny(target[label]);
|
|
90
94
|
if (targetHas && !targetVec) {
|
|
91
95
|
throw new TypeError("type change to vector for " + label);
|
|
@@ -99,9 +103,11 @@ export function mergeVectorField(target, source, label, mergeCode) {
|
|
|
99
103
|
case UpdateCode.N:
|
|
100
104
|
return false;
|
|
101
105
|
case UpdateCode.Y:
|
|
102
|
-
case UpdateCode.XR:
|
|
103
106
|
target[label] = deepClone(sourceVals);
|
|
104
107
|
return true;
|
|
108
|
+
case UpdateCode.XR:
|
|
109
|
+
targetVals = sourceVals;
|
|
110
|
+
break;
|
|
105
111
|
case UpdateCode.XS:
|
|
106
112
|
targetVals = concat((_a = target[label]) !== null && _a !== void 0 ? _a : [], sourceVals);
|
|
107
113
|
break;
|
|
@@ -123,10 +129,10 @@ export function mergeVectorField(target, source, label, mergeCode) {
|
|
|
123
129
|
}
|
|
124
130
|
if (!(targetVals === null || targetVals === void 0 ? void 0 : targetVals.length)) {
|
|
125
131
|
delete target[label];
|
|
126
|
-
return
|
|
132
|
+
return targetKey;
|
|
127
133
|
}
|
|
128
134
|
const changed = !areArraysEqual(targetVals, target[label]);
|
|
129
|
-
target[label] = targetVals;
|
|
135
|
+
target[label] = !changed ? targetVals : deepClone(targetVals);
|
|
130
136
|
return changed;
|
|
131
137
|
}
|
|
132
138
|
;
|
package/dist/esm/type-utils.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
export type PrimitiveType = "string" | "number" | "boolean";
|
|
2
2
|
export type Primitive = string | number | boolean;
|
|
3
3
|
export type PrimitiveArray = string[] | number[] | boolean[];
|
|
4
|
-
export type VectorArray = string[] | number[];
|
|
5
4
|
export type ObjectKeys<T> = keyof T;
|
|
6
5
|
export type ObjectVals<T> = T[keyof T];
|
|
7
6
|
export type Prettify<T> = {
|
|
8
7
|
[K in keyof T]: T[K];
|
|
9
8
|
} & {};
|
|
10
|
-
export type SafeTypes = Primitive |
|
|
9
|
+
export type SafeTypes = Primitive | PrimitiveArray;
|
|
11
10
|
export type SafeTupleObj = {
|
|
12
11
|
[label: string]: SafeTypes;
|
|
13
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;AAE7D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACpC,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAEhD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAE1D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAE7C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIlD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAIpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE,CAEvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE5C;AAED,wBAAgB,SAAS,CAAC,CAAC,EACvB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,GACpC,GAAG,IAAI,CAAC,EAAE,CAIZ;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,KAAK,CAItD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAK9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAS9C"}
|
package/package.json
CHANGED
package/src/merge-conf.ts
CHANGED
|
@@ -9,10 +9,10 @@ export type DetailConfig = {
|
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export type MergeConfig = {
|
|
12
|
-
scalar?: MergeCode
|
|
13
|
-
vector?: MergeCode
|
|
14
|
-
nested?: MergeCode
|
|
15
|
-
[glob: string]: MergeCode | 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
|
//-----------------------------------------------------------------------------
|
|
@@ -172,12 +172,13 @@ export const fillUpdateCodes = (
|
|
|
172
172
|
mergeConf = { scalar: mergeConf };
|
|
173
173
|
}
|
|
174
174
|
const deepConf = {
|
|
175
|
-
scalar: mergeConf?.scalar
|
|
176
|
-
vector: mergeConf?.vector
|
|
177
|
-
nested: mergeConf?.nested
|
|
175
|
+
scalar: mergeConf?.scalar || UpdateCode.B,
|
|
176
|
+
vector: mergeConf?.vector || UpdateCode.XS,
|
|
177
|
+
nested: mergeConf?.nested || UpdateCode.N,
|
|
178
178
|
};
|
|
179
179
|
const globKeys: string[] = getObjectKeys(mergeConf)
|
|
180
|
-
.filter((s) => s.includes("*"))
|
|
180
|
+
.filter((s) => s.includes("*"))
|
|
181
|
+
.sort((s1, s2) => s2.length - s1.length); //prefer longest
|
|
181
182
|
const globPats: RegExp[] = globKeys.map((g) => createGlobRegex(g));
|
|
182
183
|
|
|
183
184
|
//iterate keys in source
|
|
@@ -203,7 +204,7 @@ export const fillUpdateCodes = (
|
|
|
203
204
|
}
|
|
204
205
|
//handle nesting
|
|
205
206
|
if (isObject(labelConf) && isObject(srcValue)) {
|
|
206
|
-
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, labelConf, blockUnset);
|
|
207
|
+
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, { ...deepConf, ...labelConf }, blockUnset);
|
|
207
208
|
//todo nested deletes ignored
|
|
208
209
|
continue;
|
|
209
210
|
}
|
|
@@ -216,7 +217,7 @@ export const fillUpdateCodes = (
|
|
|
216
217
|
continue;
|
|
217
218
|
}
|
|
218
219
|
if (isObject(globConf) && isObject(srcValue)) {
|
|
219
|
-
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, globConf
|
|
220
|
+
mergeCodes[srcLabel] = fillUpdateCodes(srcValue, { ...deepConf, ...globConf! }, blockUnset);
|
|
220
221
|
continue;
|
|
221
222
|
}
|
|
222
223
|
}
|
package/src/merge-low.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
// import { get, has, set, unset } from "lodash-es";
|
|
2
1
|
import { concat, differenceWith, intersectionWith, unionWith, isEqual } from "lodash-es";
|
|
3
|
-
import { emptyValue, isArrayOfAny, isNullish, typeOfValue } from "./type-utils";
|
|
2
|
+
import { emptyValue, isArrayOfAny, isNullish, isPrimitive, typeOfValue } from "./type-utils";
|
|
4
3
|
import { areArraysEqual, deepClone } from "./datum-utils";
|
|
5
4
|
|
|
6
5
|
export const UpdateCode = {
|
|
@@ -32,7 +31,8 @@ export function mergeScalarField(
|
|
|
32
31
|
mergeCode: MergeCode,
|
|
33
32
|
): boolean {
|
|
34
33
|
const sourceHas = !isNullish(source[label]);
|
|
35
|
-
const
|
|
34
|
+
const targetKey = target.hasOwnProperty(label);
|
|
35
|
+
const targetHas = targetKey && !isNullish(target[label]);
|
|
36
36
|
if (!targetHas && !sourceHas) {
|
|
37
37
|
return false;
|
|
38
38
|
}
|
|
@@ -50,8 +50,8 @@ export function mergeScalarField(
|
|
|
50
50
|
case UpdateCode.N:
|
|
51
51
|
return false;
|
|
52
52
|
case UpdateCode.Y:
|
|
53
|
-
target[label] = source[label];
|
|
54
|
-
return true;
|
|
53
|
+
target[label] = deepClone(source[label]);
|
|
54
|
+
return true; //should bypass
|
|
55
55
|
case UpdateCode.B:
|
|
56
56
|
if (sourceHas) migrateVal = true;
|
|
57
57
|
break;
|
|
@@ -78,11 +78,12 @@ export function mergeScalarField(
|
|
|
78
78
|
if (!migrateVal) {
|
|
79
79
|
return false;
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
target[label] = !sourceHas || isPrimitive(source[label])
|
|
82
|
+
? source[label]
|
|
83
|
+
: deepClone(source[label]);
|
|
83
84
|
if (emptyValue(target[label])) {
|
|
84
85
|
delete target[label];
|
|
85
|
-
return
|
|
86
|
+
return targetKey;
|
|
86
87
|
}
|
|
87
88
|
return true;
|
|
88
89
|
};
|
|
@@ -98,7 +99,8 @@ export function mergeVectorField(
|
|
|
98
99
|
return false; //sourceHas
|
|
99
100
|
}
|
|
100
101
|
let sourceVec = isArrayOfAny(sourceVals);
|
|
101
|
-
const
|
|
102
|
+
const targetKey = target.hasOwnProperty(label);
|
|
103
|
+
const targetHas = targetKey && !isNullish(target[label]);
|
|
102
104
|
const targetVec = isArrayOfAny(target[label]);
|
|
103
105
|
if (targetHas && !targetVec) {
|
|
104
106
|
//should T => T[] change be allowed
|
|
@@ -115,9 +117,11 @@ export function mergeVectorField(
|
|
|
115
117
|
case UpdateCode.N:
|
|
116
118
|
return false;
|
|
117
119
|
case UpdateCode.Y:
|
|
118
|
-
case UpdateCode.XR:
|
|
119
120
|
target[label] = deepClone(sourceVals);
|
|
120
|
-
return true;
|
|
121
|
+
return true; //should bypass
|
|
122
|
+
case UpdateCode.XR:
|
|
123
|
+
targetVals = sourceVals;
|
|
124
|
+
break;
|
|
121
125
|
// case UpdateCode.C:
|
|
122
126
|
case UpdateCode.XS:
|
|
123
127
|
targetVals = concat(target[label] ?? [], sourceVals);
|
|
@@ -142,12 +146,11 @@ export function mergeVectorField(
|
|
|
142
146
|
}
|
|
143
147
|
if (!targetVals?.length) {
|
|
144
148
|
delete target[label];
|
|
145
|
-
return
|
|
149
|
+
return targetKey;
|
|
146
150
|
}
|
|
147
|
-
|
|
151
|
+
//array replaced
|
|
148
152
|
const changed = !areArraysEqual(targetVals, target[label]);
|
|
149
153
|
// && !deepEquals(targetVals, target[label]);
|
|
150
|
-
|
|
151
|
-
target[label] = targetVals; //array replaced
|
|
154
|
+
target[label] = !changed ? targetVals : deepClone(targetVals);
|
|
152
155
|
return changed;
|
|
153
156
|
};
|
package/src/type-utils.ts
CHANGED
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
export type PrimitiveType = "string" | "number" | "boolean";
|
|
3
3
|
export type Primitive = string | number | boolean;
|
|
4
4
|
export type PrimitiveArray = string[] | number[] | boolean[];
|
|
5
|
-
export type VectorArray = string[] | number[];
|
|
6
5
|
|
|
7
6
|
export type ObjectKeys<T> = keyof T;
|
|
8
7
|
export type ObjectVals<T> = T[keyof T];
|
|
9
8
|
export type Prettify<T> = { [K in keyof T]: T[K]; } & {};
|
|
10
9
|
|
|
11
|
-
export type SafeTypes = Primitive |
|
|
10
|
+
export type SafeTypes = Primitive | PrimitiveArray;
|
|
12
11
|
export type SafeTupleObj = { [label: string]: SafeTypes };
|
|
13
12
|
export type TupleObj = { [label: string]: any };
|
|
14
13
|
|