@verdant-web/common 1.11.1 → 1.13.0
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/migration.d.ts +7 -0
- package/dist/cjs/migration.js +46 -6
- package/dist/cjs/migration.js.map +1 -1
- package/dist/cjs/oids.d.ts +5 -5
- package/dist/cjs/oids.js +37 -22
- package/dist/cjs/oids.js.map +1 -1
- package/dist/cjs/oids.test.js +62 -44
- package/dist/cjs/oids.test.js.map +1 -1
- package/dist/cjs/operation.d.ts +2 -2
- package/dist/cjs/operation.js +16 -7
- package/dist/cjs/operation.js.map +1 -1
- package/dist/cjs/operation.test.js +180 -30
- package/dist/cjs/operation.test.js.map +1 -1
- package/dist/cjs/patch.d.ts +3 -3
- package/dist/cjs/patch.js +6 -6
- package/dist/cjs/patch.js.map +1 -1
- package/dist/cjs/schema/defaults.test.js +4 -4
- package/dist/cjs/schema/defaults.test.js.map +1 -1
- package/dist/cjs/schema/{defaults.d.ts → fields.d.ts} +3 -0
- package/dist/cjs/schema/{defaults.js → fields.js} +48 -3
- package/dist/cjs/schema/fields.js.map +1 -0
- package/dist/cjs/schema/index.d.ts +1 -1
- package/dist/cjs/schema/index.js +1 -1
- package/dist/cjs/schema/index.js.map +1 -1
- package/dist/cjs/schema/validation.d.ts +3 -0
- package/dist/cjs/schema/validation.js +87 -0
- package/dist/cjs/schema/validation.js.map +1 -0
- package/dist/cjs/utils.d.ts +5 -1
- package/dist/cjs/utils.js +9 -5
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/migration.d.ts +7 -0
- package/dist/esm/migration.js +47 -7
- package/dist/esm/migration.js.map +1 -1
- package/dist/esm/oids.d.ts +5 -5
- package/dist/esm/oids.js +34 -21
- package/dist/esm/oids.js.map +1 -1
- package/dist/esm/oids.test.js +62 -44
- package/dist/esm/oids.test.js.map +1 -1
- package/dist/esm/operation.d.ts +2 -2
- package/dist/esm/operation.js +18 -9
- package/dist/esm/operation.js.map +1 -1
- package/dist/esm/operation.test.js +180 -30
- package/dist/esm/operation.test.js.map +1 -1
- package/dist/esm/patch.d.ts +3 -3
- package/dist/esm/patch.js +6 -6
- package/dist/esm/patch.js.map +1 -1
- package/dist/esm/schema/defaults.test.js +2 -2
- package/dist/esm/schema/defaults.test.js.map +1 -1
- package/dist/esm/schema/{defaults.d.ts → fields.d.ts} +3 -0
- package/dist/esm/schema/{defaults.js → fields.js} +44 -2
- package/dist/esm/schema/fields.js.map +1 -0
- package/dist/esm/schema/index.d.ts +1 -1
- package/dist/esm/schema/index.js +1 -1
- package/dist/esm/schema/index.js.map +1 -1
- package/dist/esm/schema/validation.d.ts +3 -0
- package/dist/esm/schema/validation.js +82 -0
- package/dist/esm/schema/validation.js.map +1 -0
- package/dist/esm/utils.d.ts +5 -1
- package/dist/esm/utils.js +9 -5
- package/dist/esm/utils.js.map +1 -1
- package/dist/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/migration.ts +74 -15
- package/src/oids.test.ts +62 -51
- package/src/oids.ts +35 -26
- package/src/operation.test.ts +189 -41
- package/src/operation.ts +23 -19
- package/src/patch.ts +5 -15
- package/src/schema/defaults.test.ts +2 -2
- package/src/schema/{defaults.ts → fields.ts} +55 -1
- package/src/schema/index.ts +1 -1
- package/src/schema/validation.ts +99 -0
- package/src/utils.ts +9 -5
- package/dist/cjs/schema/defaults.js.map +0 -1
- package/dist/esm/schema/defaults.js.map +0 -1
package/dist/cjs/patch.js
CHANGED
|
@@ -12,13 +12,13 @@ class PatchCreator {
|
|
|
12
12
|
constructor(getNow, createSubId) {
|
|
13
13
|
this.getNow = getNow;
|
|
14
14
|
this.createSubId = createSubId;
|
|
15
|
-
this.createDiff = (from, to,
|
|
16
|
-
return (0, operation_js_1.diffToPatches)(from, to, this.getNow,
|
|
15
|
+
this.createDiff = (from, to, options = {}) => {
|
|
16
|
+
return (0, operation_js_1.diffToPatches)(from, to, this.getNow, this.createSubId, [], options);
|
|
17
17
|
};
|
|
18
18
|
this.createInitialize = (obj, oid) => {
|
|
19
19
|
return (0, operation_js_1.initialToPatches)(obj, oid, this.getNow, this.createSubId);
|
|
20
20
|
};
|
|
21
|
-
this.createSet = (oid, key, value
|
|
21
|
+
this.createSet = (oid, key, value) => {
|
|
22
22
|
// incoming value must be normalized. if it's not a primitive, it and all sub-objects
|
|
23
23
|
// must be created
|
|
24
24
|
if (!(0, utils_js_1.isObject)(value) || (0, refs_js_1.isRef)(value)) {
|
|
@@ -35,7 +35,7 @@ class PatchCreator {
|
|
|
35
35
|
];
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
const itemOid = (0, oids_js_1.createSubOid)(oid,
|
|
38
|
+
const itemOid = (0, oids_js_1.createSubOid)(oid, this.createSubId);
|
|
39
39
|
return [
|
|
40
40
|
// since we're setting a complex nested object, we can initialize it wholesale.
|
|
41
41
|
// no diffing to do.
|
|
@@ -79,7 +79,7 @@ class PatchCreator {
|
|
|
79
79
|
];
|
|
80
80
|
}
|
|
81
81
|
else {
|
|
82
|
-
const itemOid = (0, oids_js_1.createSubOid)(oid,
|
|
82
|
+
const itemOid = (0, oids_js_1.createSubOid)(oid, this.createSubId);
|
|
83
83
|
return [
|
|
84
84
|
...(0, operation_js_1.initialToPatches)(value, itemOid, this.getNow),
|
|
85
85
|
{
|
|
@@ -134,7 +134,7 @@ class PatchCreator {
|
|
|
134
134
|
];
|
|
135
135
|
}
|
|
136
136
|
else {
|
|
137
|
-
const itemOid = (0, oids_js_1.createSubOid)(oid,
|
|
137
|
+
const itemOid = (0, oids_js_1.createSubOid)(oid, this.createSubId);
|
|
138
138
|
return [
|
|
139
139
|
...(0, operation_js_1.initialToPatches)(value, itemOid, this.getNow),
|
|
140
140
|
{
|
package/dist/cjs/patch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const vitest_1 = require("vitest");
|
|
4
|
-
const
|
|
4
|
+
const fields_js_1 = require("./fields.js");
|
|
5
5
|
const oids_js_1 = require("../oids.js");
|
|
6
6
|
(0, vitest_1.describe)('getting field defaults', () => {
|
|
7
7
|
(0, vitest_1.it)('does not apply the same oid from the previous application', () => {
|
|
@@ -12,9 +12,9 @@ const oids_js_1 = require("../oids.js");
|
|
|
12
12
|
name: 'test',
|
|
13
13
|
},
|
|
14
14
|
};
|
|
15
|
-
const first = (0,
|
|
16
|
-
(0, oids_js_1.assignOid)(first, (0, oids_js_1.createOid)('test', '1'
|
|
17
|
-
const second = (0,
|
|
15
|
+
const first = (0, fields_js_1.getFieldDefault)(field);
|
|
16
|
+
(0, oids_js_1.assignOid)(first, (0, oids_js_1.createOid)('test', '1'));
|
|
17
|
+
const second = (0, fields_js_1.getFieldDefault)(field);
|
|
18
18
|
(0, vitest_1.expect)((0, oids_js_1.maybeGetOid)(second)).toBe(undefined);
|
|
19
19
|
});
|
|
20
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.test.js","sourceRoot":"","sources":["../../../src/schema/defaults.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C
|
|
1
|
+
{"version":3,"file":"defaults.test.js","sourceRoot":"","sources":["../../../src/schema/defaults.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,2CAA8C;AAC9C,wCAAuE;AAEvE,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;IACvC,IAAA,WAAE,EAAC,2DAA2D,EAAE,GAAG,EAAE;QACpE,MAAM,KAAK,GAAG;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE;gBACR,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,MAAM;aACZ;SACQ,CAAC;QACX,MAAM,KAAK,GAAG,IAAA,2BAAe,EAAC,KAAK,CAAC,CAAC;QACrC,IAAA,mBAAS,EAAC,KAAK,EAAE,IAAA,mBAAS,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAA,2BAAe,EAAC,KAAK,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,IAAA,qBAAW,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { StorageFieldSchema, StorageCollectionSchema } from './types.js';
|
|
2
|
+
export declare function isNullable(field: StorageFieldSchema): boolean | undefined;
|
|
2
3
|
export declare function addFieldDefaults(collection: StorageCollectionSchema, value: any): any;
|
|
3
4
|
export declare function traverseCollectionFieldsAndApplyDefaults(value: any, field: StorageFieldSchema): any;
|
|
4
5
|
export declare function getFieldDefault(field: StorageFieldSchema): any;
|
|
6
|
+
export declare function removeExtraProperties(collection: StorageCollectionSchema, value: any): any;
|
|
7
|
+
export declare function traverseCollectionFieldsAndRemoveExtraProperties(value: any, field: StorageFieldSchema): void;
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getFieldDefault = exports.traverseCollectionFieldsAndApplyDefaults = exports.addFieldDefaults = void 0;
|
|
3
|
+
exports.traverseCollectionFieldsAndRemoveExtraProperties = exports.removeExtraProperties = exports.getFieldDefault = exports.traverseCollectionFieldsAndApplyDefaults = exports.addFieldDefaults = exports.isNullable = void 0;
|
|
4
4
|
const oids_js_1 = require("../oids.js");
|
|
5
|
+
const utils_js_1 = require("../utils.js");
|
|
6
|
+
function isNullable(field) {
|
|
7
|
+
if (field.type === 'any')
|
|
8
|
+
return true;
|
|
9
|
+
if (field.type === 'map')
|
|
10
|
+
return false;
|
|
11
|
+
return field.nullable;
|
|
12
|
+
}
|
|
13
|
+
exports.isNullable = isNullable;
|
|
5
14
|
function addFieldDefaults(collection, value) {
|
|
6
15
|
for (const [key, field] of Object.entries(collection.fields)) {
|
|
7
16
|
const defaultValue = getFieldDefault(field);
|
|
8
|
-
if (defaultValue !== undefined && value[key] === undefined)
|
|
17
|
+
if ((defaultValue !== undefined && value[key] === undefined) ||
|
|
18
|
+
// covers the case where a previously nullable field
|
|
19
|
+
// now has a default during a new migration
|
|
20
|
+
(!isNullable(field) && value[key] === null)) {
|
|
9
21
|
value[key] = defaultValue;
|
|
10
22
|
}
|
|
11
23
|
if (value[key]) {
|
|
@@ -69,4 +81,37 @@ function getFieldDefault(field) {
|
|
|
69
81
|
return undefined;
|
|
70
82
|
}
|
|
71
83
|
exports.getFieldDefault = getFieldDefault;
|
|
72
|
-
|
|
84
|
+
function removeExtraProperties(collection, value) {
|
|
85
|
+
for (const [key, fieldValue] of Object.entries(value)) {
|
|
86
|
+
// MUST NOT DELETE THESE!
|
|
87
|
+
if (key === oids_js_1.OID_KEY || key === oids_js_1.LEGACY_OID_KEY)
|
|
88
|
+
continue;
|
|
89
|
+
if (!collection.fields[key]) {
|
|
90
|
+
delete value[key];
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
traverseCollectionFieldsAndRemoveExtraProperties(fieldValue, collection.fields[key]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
exports.removeExtraProperties = removeExtraProperties;
|
|
99
|
+
function traverseCollectionFieldsAndRemoveExtraProperties(value, field) {
|
|
100
|
+
if ((0, utils_js_1.isObject)(value) && field.type === 'object') {
|
|
101
|
+
for (const [key, fieldValue] of Object.entries(value)) {
|
|
102
|
+
if (!field.properties[key]) {
|
|
103
|
+
delete value[key];
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
traverseCollectionFieldsAndRemoveExtraProperties(fieldValue, field.properties[key]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (Array.isArray(value) && field.type === 'array') {
|
|
111
|
+
for (const item of value) {
|
|
112
|
+
traverseCollectionFieldsAndRemoveExtraProperties(item, field.items);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.traverseCollectionFieldsAndRemoveExtraProperties = traverseCollectionFieldsAndRemoveExtraProperties;
|
|
117
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/schema/fields.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/schema/index.js
CHANGED
|
@@ -25,5 +25,5 @@ function schema(input) {
|
|
|
25
25
|
exports.schema = schema;
|
|
26
26
|
__exportStar(require("./types.js"), exports);
|
|
27
27
|
__exportStar(require("./indexFilters.js"), exports);
|
|
28
|
-
__exportStar(require("./
|
|
28
|
+
__exportStar(require("./fields.js"), exports);
|
|
29
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,SAAgB,UAAU,CAIxB,KAA6D;IAC9D,OAAO,KAAK,CAAC;AACd,CAAC;AAND,gCAMC;AAED,SAAgB,MAAM,CAIpB,KAAa;IACd,OAAO,KAAK,CAAC;AACd,CAAC;AAND,wBAMC;AAED,6CAA2B;AAE3B,oDAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,SAAgB,UAAU,CAIxB,KAA6D;IAC9D,OAAO,KAAK,CAAC;AACd,CAAC;AAND,gCAMC;AAED,SAAgB,MAAM,CAIpB,KAAa;IACd,OAAO,KAAK,CAAC;AACd,CAAC;AAND,wBAMC;AAED,6CAA2B;AAE3B,oDAAkC;AAClC,8CAA4B"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { StorageCollectionSchema, StorageFieldSchema } from './types.js';
|
|
2
|
+
export declare function validateEntity(schema: StorageCollectionSchema, entity: any): void;
|
|
3
|
+
export declare function validateEntityField(field: StorageFieldSchema, value: any, fieldPath?: string[]): void;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateEntityField = exports.validateEntity = void 0;
|
|
4
|
+
const oids_js_1 = require("../oids.js");
|
|
5
|
+
const utils_js_1 = require("../utils.js");
|
|
6
|
+
function validateEntity(schema, entity) {
|
|
7
|
+
for (const [key, value] of Object.entries(entity)) {
|
|
8
|
+
if (!schema.fields[key]) {
|
|
9
|
+
throw new Error(`Invalid field "${key}"`);
|
|
10
|
+
}
|
|
11
|
+
if (value) {
|
|
12
|
+
validateEntityField(schema.fields[key], value);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.validateEntity = validateEntity;
|
|
17
|
+
function validateEntityField(field, value, fieldPath = []) {
|
|
18
|
+
if (field.type === 'object') {
|
|
19
|
+
if (!(0, utils_js_1.isObject)(value)) {
|
|
20
|
+
if (value === null && field.nullable)
|
|
21
|
+
return;
|
|
22
|
+
throw new Error(`Expected object${field.nullable ? ' or null' : ''} for field ${formatField(fieldPath)}}`);
|
|
23
|
+
}
|
|
24
|
+
for (const [key, subField] of Object.entries(field.properties)) {
|
|
25
|
+
if (value[key]) {
|
|
26
|
+
validateEntityField(subField, value[key]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const key of Object.keys(value)) {
|
|
30
|
+
if (!field.properties[key]) {
|
|
31
|
+
throw new Error(`Invalid field "${key}" on value ${formatField(fieldPath)}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (field.type === 'array') {
|
|
36
|
+
if (!Array.isArray(value)) {
|
|
37
|
+
if (value === null && field.nullable)
|
|
38
|
+
return;
|
|
39
|
+
throw new Error(`Expected array${field.nullable ? ' or null' : ''} for field ${formatField(fieldPath)}}`);
|
|
40
|
+
}
|
|
41
|
+
for (const item of value) {
|
|
42
|
+
validateEntityField(field.items, item);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (field.type === 'map') {
|
|
46
|
+
if (!(0, utils_js_1.isObject)(value)) {
|
|
47
|
+
throw new Error(`Expected map for field ${formatField(fieldPath)}}`);
|
|
48
|
+
}
|
|
49
|
+
for (const [key, item] of Object.entries(value)) {
|
|
50
|
+
// santiy check to weed out any id field
|
|
51
|
+
if (key === oids_js_1.OID_KEY || key === oids_js_1.LEGACY_OID_KEY)
|
|
52
|
+
continue;
|
|
53
|
+
validateEntityField(field.values, item);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (field.type === 'string') {
|
|
57
|
+
if (typeof value !== 'string') {
|
|
58
|
+
if (value === null && field.nullable)
|
|
59
|
+
return;
|
|
60
|
+
throw new Error(`Expected string ${field.nullable ? ' or null' : ''} for field ${formatField(fieldPath)}}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (field.type === 'boolean') {
|
|
64
|
+
if (typeof value !== 'boolean') {
|
|
65
|
+
if (value === null && field.nullable)
|
|
66
|
+
return;
|
|
67
|
+
throw new Error(`Expected boolean ${field.nullable ? ' or null' : ''} for field ${formatField(fieldPath)}}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (field.type === 'number') {
|
|
71
|
+
if (typeof value !== 'number') {
|
|
72
|
+
if (value === null && field.nullable)
|
|
73
|
+
return;
|
|
74
|
+
throw new Error(`Expected number ${field.nullable ? ' or null' : ''} for field ${formatField(fieldPath)}}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (field.type === 'file') {
|
|
78
|
+
if (value === null && !field.nullable) {
|
|
79
|
+
throw new Error(`Expected file for field ${formatField(fieldPath)}}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.validateEntityField = validateEntityField;
|
|
84
|
+
function formatField(fieldPath) {
|
|
85
|
+
return fieldPath.join('.');
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/schema/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/utils.d.ts
CHANGED
|
@@ -6,7 +6,11 @@ export declare function getSortedIndex<T>(array: T[], insert: T, compare: (a: T,
|
|
|
6
6
|
* of key insertion order
|
|
7
7
|
*/
|
|
8
8
|
export declare function stableStringify(obj: any): string;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* A version of structured cloning which preserves object identity
|
|
11
|
+
* references in the system.
|
|
12
|
+
*/
|
|
13
|
+
export declare function cloneDeep<T>(obj: T, copyOids?: boolean): T;
|
|
10
14
|
export declare function hashObject(obj: any): string;
|
|
11
15
|
export declare function isObject(obj: any): any;
|
|
12
16
|
export declare function roughSizeOfObject(object: any): number;
|
package/dist/cjs/utils.js
CHANGED
|
@@ -51,20 +51,24 @@ function stableStringify(obj) {
|
|
|
51
51
|
return JSON.stringify(obj, orderedReplacer);
|
|
52
52
|
}
|
|
53
53
|
exports.stableStringify = stableStringify;
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
/**
|
|
55
|
+
* A version of structured cloning which preserves object identity
|
|
56
|
+
* references in the system.
|
|
57
|
+
*/
|
|
58
|
+
function cloneDeep(obj, copyOids = true) {
|
|
59
|
+
if (isObject(obj) || Array.isArray(obj)) {
|
|
56
60
|
const oid = (0, oids_js_1.maybeGetOid)(obj);
|
|
57
61
|
let clone;
|
|
58
62
|
if (Array.isArray(obj)) {
|
|
59
|
-
clone = obj.map(cloneDeep);
|
|
63
|
+
clone = obj.map((v) => cloneDeep(v, copyOids));
|
|
60
64
|
}
|
|
61
65
|
else {
|
|
62
66
|
clone = {};
|
|
63
67
|
for (const [key, value] of Object.entries(obj)) {
|
|
64
|
-
clone[key] = cloneDeep(value);
|
|
68
|
+
clone[key] = cloneDeep(value, copyOids);
|
|
65
69
|
}
|
|
66
70
|
}
|
|
67
|
-
if (oid) {
|
|
71
|
+
if (copyOids && oid) {
|
|
68
72
|
(0, oids_js_1.assignOid)(clone, oid);
|
|
69
73
|
}
|
|
70
74
|
return clone;
|
package/dist/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,+BAA0B;AAC1B,uCAAmD;AAEnD,SAAgB,IAAI,CACnB,GAAM,EACN,IAAY;IAEZ,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;KACvB;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AATD,oBASC;AAED,SAAgB,IAAI,CACnB,GAAM,EACN,IAAY;IAEZ,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAW,CAAC,EAAE;YAChC,MAAM,CAAC,GAAG,CAAC,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;SAChC;KACD;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAXD,oBAWC;AAED,SAAgB,cAAc,CAC7B,KAAU,EACV,MAAS,EACT,OAA+B;IAE/B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IACxB,OAAO,GAAG,GAAG,IAAI,EAAE;QAClB,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,GAAG,GAAG,CAAC,EAAE;YACZ,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;SACd;aAAM;YACN,IAAI,GAAG,GAAG,CAAC;SACX;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAjBD,wCAiBC;AAED,SAAS,eAAe,CAAC,CAAM,EAAE,CAAM;IACtC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC5D,OAAO,CAAC,CAAC;KACT;IACD,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;AACH,CAAC;AACD;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAQ;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AAC7C,CAAC;AAFD,0CAEC;AAED,SAAgB,SAAS,CAAI,GAAM;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/migration.d.ts
CHANGED
|
@@ -40,6 +40,12 @@ declare type MigrationMutations<New extends StorageSchema> = {
|
|
|
40
40
|
export interface MigrationTools<Old extends StorageSchema<any>, New extends StorageSchema<any>> {
|
|
41
41
|
migrate: MigrationRunner<Old, New>;
|
|
42
42
|
identity: <T>(val: T) => T;
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated - default field values are automatically
|
|
45
|
+
* applied during migration, you don't need to use this.
|
|
46
|
+
* Please remove it from your migrations - even old ones
|
|
47
|
+
* (old migrations can be updated!)
|
|
48
|
+
*/
|
|
43
49
|
withDefaults: (collectionName: string, value: any) => any;
|
|
44
50
|
queries: MigrationQueries<Old>;
|
|
45
51
|
mutations: MigrationMutations<New>;
|
|
@@ -57,6 +63,7 @@ export interface MigrationEngine<Old extends StorageSchema, New extends StorageS
|
|
|
57
63
|
newOids: string[];
|
|
58
64
|
/** Promises that should be resolved before completing the migration */
|
|
59
65
|
awaitables: Promise<any>[];
|
|
66
|
+
log: (...messages: any[]) => void;
|
|
60
67
|
}
|
|
61
68
|
declare type MigrationProcedure<Old extends StorageSchema, New extends StorageSchema> = (tools: MigrationTools<Old, New>) => Promise<void>;
|
|
62
69
|
declare type EmptySchema = {
|
package/dist/esm/migration.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { stableStringify, addFieldDefaults, } from './index.js';
|
|
1
|
+
import { stableStringify, addFieldDefaults, removeExtraProperties, assignOid, getOid, } from './index.js';
|
|
2
2
|
const emptySchema = {
|
|
3
3
|
version: 0,
|
|
4
4
|
collections: {},
|
|
@@ -20,6 +20,20 @@ export function migrate(oldSchemaOrNewSchema, newSchemaOrProcedure, procedureIfT
|
|
|
20
20
|
stableStringify(newSchema.collections[key]));
|
|
21
21
|
const removedCollections = Object.keys(oldSchema.collections).filter((key) => !newSchema.collections[key]);
|
|
22
22
|
const addedCollections = Object.keys(newSchema.collections).filter((key) => !oldSchema.collections[key]);
|
|
23
|
+
// collections which added one or more field defaults
|
|
24
|
+
const autoMigratedCollections = new Set();
|
|
25
|
+
for (const collection of changedCollections) {
|
|
26
|
+
const oldFields = oldSchema.collections[collection].fields;
|
|
27
|
+
const newFields = newSchema.collections[collection].fields;
|
|
28
|
+
// a new default was added - we can auto-migrate it
|
|
29
|
+
if (Object.keys(newFields).some((key) => { var _a, _b; return !((_a = oldFields[key]) === null || _a === void 0 ? void 0 : _a.default) && ((_b = newFields[key]) === null || _b === void 0 ? void 0 : _b.default); })) {
|
|
30
|
+
autoMigratedCollections.add(collection);
|
|
31
|
+
}
|
|
32
|
+
// a field was removed - we can auto-migrate it
|
|
33
|
+
if (Object.keys(oldFields).some((key) => !newFields[key])) {
|
|
34
|
+
autoMigratedCollections.add(collection);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
23
37
|
const addedIndexes = {};
|
|
24
38
|
const removedIndexes = {};
|
|
25
39
|
for (const changed of [...changedCollections, ...addedCollections]) {
|
|
@@ -34,20 +48,38 @@ export function migrate(oldSchemaOrNewSchema, newSchemaOrProcedure, procedureIfT
|
|
|
34
48
|
removedIndexes[changed] = removed;
|
|
35
49
|
}
|
|
36
50
|
}
|
|
51
|
+
const withDefaults = (collectionName, val) => {
|
|
52
|
+
return addFieldDefaults(newSchema.collections[collectionName], val);
|
|
53
|
+
};
|
|
54
|
+
const autoMigration = (collectionName) => (val) => {
|
|
55
|
+
const collection = newSchema.collections[collectionName];
|
|
56
|
+
return addFieldDefaults(collection, removeExtraProperties(collection, val));
|
|
57
|
+
};
|
|
37
58
|
return {
|
|
38
59
|
version: newSchema.version,
|
|
39
60
|
migrate: async (engine) => {
|
|
40
61
|
const migratedCollections = [];
|
|
41
62
|
await procedure({
|
|
42
63
|
migrate: async (collection, strategy) => {
|
|
64
|
+
const auto = autoMigration(collection);
|
|
65
|
+
const wrapped = async (val) => {
|
|
66
|
+
const baseValue = await strategy(val);
|
|
67
|
+
// assign OID from original value in case user's strategy
|
|
68
|
+
// involves cloning
|
|
69
|
+
assignOid(baseValue, getOid(val));
|
|
70
|
+
const result = auto(baseValue);
|
|
71
|
+
return result;
|
|
72
|
+
};
|
|
43
73
|
// @ts-ignore
|
|
44
|
-
await engine.migrate(collection,
|
|
74
|
+
await engine.migrate(collection, wrapped);
|
|
45
75
|
migratedCollections.push(collection);
|
|
76
|
+
// since the user migrated this one and we wrap their
|
|
77
|
+
// strategy with auto-migration, we can remove it from
|
|
78
|
+
// the auto-migration list
|
|
79
|
+
autoMigratedCollections.delete(collection);
|
|
46
80
|
},
|
|
47
81
|
identity: (val) => val,
|
|
48
|
-
withDefaults
|
|
49
|
-
return addFieldDefaults(newSchema.collections[collectionName], val);
|
|
50
|
-
},
|
|
82
|
+
withDefaults,
|
|
51
83
|
info: {
|
|
52
84
|
changedCollections,
|
|
53
85
|
addedCollections,
|
|
@@ -56,8 +88,16 @@ export function migrate(oldSchemaOrNewSchema, newSchemaOrProcedure, procedureIfT
|
|
|
56
88
|
queries: engine.queries,
|
|
57
89
|
mutations: engine.mutations,
|
|
58
90
|
});
|
|
91
|
+
// mandatory migration of fields which had defaults added or
|
|
92
|
+
// fields removed but weren't migrated by the user
|
|
93
|
+
engine.log('debug', 'auto-migrating collections with new defaults', autoMigratedCollections);
|
|
94
|
+
for (const name of autoMigratedCollections) {
|
|
95
|
+
await engine.migrate(name, autoMigration(name));
|
|
96
|
+
migratedCollections.push(name);
|
|
97
|
+
}
|
|
59
98
|
const unmigrated = changedCollections.filter((collection) => !migratedCollections.includes(collection));
|
|
60
99
|
if (unmigrated.length > 0) {
|
|
100
|
+
// TODO: does this deserve a full-on error?
|
|
61
101
|
console.error('Unmigrated changed collections:', unmigrated);
|
|
62
102
|
}
|
|
63
103
|
},
|
|
@@ -110,12 +150,12 @@ export function createDefaultMigration(schema, newSchema) {
|
|
|
110
150
|
version: 0,
|
|
111
151
|
collections: {},
|
|
112
152
|
};
|
|
113
|
-
return migrate(oldSchema, newSchema || schema, async ({ migrate,
|
|
153
|
+
return migrate(oldSchema, newSchema || schema, async ({ migrate, info }) => {
|
|
114
154
|
if ((newSchema || schema).version === 1)
|
|
115
155
|
return;
|
|
116
156
|
for (const collection of info.changedCollections) {
|
|
117
157
|
// @ts-ignore indefinite type resolution
|
|
118
|
-
await migrate(collection, (old) =>
|
|
158
|
+
await migrate(collection, (old) => old);
|
|
119
159
|
}
|
|
120
160
|
});
|
|
121
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/migration.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EAGf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/migration.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/oids.d.ts
CHANGED
|
@@ -28,7 +28,6 @@ import { ObjectRef } from './operation.js';
|
|
|
28
28
|
* conflict resolution purposes
|
|
29
29
|
*/
|
|
30
30
|
export declare type ObjectIdentifier = string;
|
|
31
|
-
export declare type KeyPath = (string | number)[];
|
|
32
31
|
export declare const LEGACY_OID_KEY = "__@@oid_do_not_use";
|
|
33
32
|
export declare const OID_KEY = "@@id";
|
|
34
33
|
export declare function getOid(obj: any): string;
|
|
@@ -41,14 +40,14 @@ export declare function isOidKey(key: string): boolean;
|
|
|
41
40
|
* For sub-objects, assign a random sub-OID if no OID
|
|
42
41
|
* is already assigned.
|
|
43
42
|
*/
|
|
44
|
-
export declare function ensureOid(obj: any, rootOid: ObjectIdentifier,
|
|
45
|
-
export declare function
|
|
46
|
-
export declare function
|
|
43
|
+
export declare function ensureOid(obj: any, rootOid: ObjectIdentifier, createSubId?: () => string): string;
|
|
44
|
+
export declare function ensureCompatibleOid(obj: any, rootOid: ObjectIdentifier, createSubId?: () => string): string;
|
|
45
|
+
export declare function createOid(collection: string, documentId: string, subId?: string): string;
|
|
46
|
+
export declare function createSubOid(root: ObjectIdentifier, createSubId?: () => string): string;
|
|
47
47
|
export declare function decomposeOid(oid: ObjectIdentifier): {
|
|
48
48
|
collection: string;
|
|
49
49
|
id: string;
|
|
50
50
|
subId?: string;
|
|
51
|
-
keyPath: KeyPath;
|
|
52
51
|
};
|
|
53
52
|
export declare function assertAllLevelsHaveOids(obj: any, root?: any): void;
|
|
54
53
|
export declare function assignOidsToAllSubObjects(obj: any, createSubId?: () => string): void;
|
|
@@ -85,3 +84,4 @@ export declare function getOidRoot(oid: ObjectIdentifier): string;
|
|
|
85
84
|
*/
|
|
86
85
|
export declare function getOidRange(oid: ObjectIdentifier): string[];
|
|
87
86
|
export declare function getRoots(oids: ObjectIdentifier[]): string[];
|
|
87
|
+
export declare function areOidsRelated(oidA: ObjectIdentifier, oidB: ObjectIdentifier): boolean;
|