@lossless.org/client 1.1.0 → 1.3.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/.smartconfig.json +1 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/nosqldb/classes.atomicdelete.js +3 -3
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.d.ts +20 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.js +45 -2
- package/dist_ts/nosqldb/classes.atomicupdate.js +4 -4
- package/dist_ts/nosqldb/classes.collection.d.ts +37 -1
- package/dist_ts/nosqldb/classes.collection.js +235 -30
- package/dist_ts/nosqldb/classes.collectiontopology.d.ts +19 -0
- package/dist_ts/nosqldb/classes.collectiontopology.js +29 -3
- package/dist_ts/nosqldb/classes.cursor.d.ts +12 -1
- package/dist_ts/nosqldb/classes.cursor.js +20 -3
- package/dist_ts/nosqldb/classes.doc.d.ts +138 -11
- package/dist_ts/nosqldb/classes.doc.js +490 -91
- package/dist_ts/nosqldb/classes.exactpersistence.js +10 -2
- package/dist_ts/nosqldb/classes.namespaceinspection.js +2 -2
- package/dist_ts/nosqldb/classes.persistence.d.ts +6 -0
- package/dist_ts/nosqldb/classes.persistence.js +13 -1
- package/dist_ts/nosqldb/classes.session.d.ts +15 -1
- package/dist_ts/nosqldb/classes.session.js +32 -6
- package/package.json +4 -1
- package/readme.md +38 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/nosqldb/classes.atomicdelete.ts +2 -4
- package/ts/nosqldb/classes.atomicfindoneandupdate.ts +69 -2
- package/ts/nosqldb/classes.atomicupdate.ts +3 -6
- package/ts/nosqldb/classes.collection.ts +372 -35
- package/ts/nosqldb/classes.collectiontopology.ts +56 -1
- package/ts/nosqldb/classes.cursor.ts +22 -2
- package/ts/nosqldb/classes.doc.ts +819 -132
- package/ts/nosqldb/classes.exactpersistence.ts +9 -1
- package/ts/nosqldb/classes.namespaceinspection.ts +1 -1
- package/ts/nosqldb/classes.persistence.ts +17 -0
- package/ts/nosqldb/classes.session.ts +52 -13
package/.smartconfig.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@lossless.org/client',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.3.0',
|
|
7
7
|
description: 'One typed client for NoSQLDB, MongoDB, SQLDB, MariaDB, ClickHouse and S3 object storage.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDBGQUEwRjtDQUN4RyxDQUFBIn0=
|
|
@@ -11,7 +11,7 @@ export const executeAtomicDelete = async (collectionArg, filterArg, optsArg) =>
|
|
|
11
11
|
return runWithOrdinarySmartdataSession(optsArg?.session, collectionArg.smartdataDb, {
|
|
12
12
|
ordinaryWrite: true,
|
|
13
13
|
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
14
|
-
|
|
14
|
+
collectionName: collectionArg.collectionName,
|
|
15
15
|
}, async (rawSessionArg) => {
|
|
16
16
|
await collectionArg.init();
|
|
17
17
|
return collectionArg.mongoDbCollection.deleteOne(filterArg, {
|
|
@@ -32,7 +32,7 @@ export const executeAtomicDeleteMany = async (collectionArg, filterArg, optsArg)
|
|
|
32
32
|
return runWithOrdinarySmartdataSession(optsArg?.session, collectionArg.smartdataDb, {
|
|
33
33
|
ordinaryWrite: true,
|
|
34
34
|
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
35
|
-
|
|
35
|
+
collectionName: collectionArg.collectionName,
|
|
36
36
|
}, async (rawSessionArg) => {
|
|
37
37
|
await collectionArg.init();
|
|
38
38
|
return collectionArg.mongoDbCollection.deleteMany(filterArg, {
|
|
@@ -41,4 +41,4 @@ export const executeAtomicDeleteMany = async (collectionArg, filterArg, optsArg)
|
|
|
41
41
|
});
|
|
42
42
|
});
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdG9taWNkZWxldGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMuYXRvbWljZGVsZXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFDTCwrQkFBK0IsR0FFaEMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLGFBQXFDLEVBQ3JDLFNBQTJELEVBQzNELE9BR0MsRUFDc0MsRUFBRTtJQUN6QyxPQUFPLCtCQUErQixDQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUNoQixhQUFhLENBQUMsV0FBVyxFQUN6QjtRQUNFLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFFBQVEsRUFBRSxhQUFhLENBQUMsK0JBQStCLEVBQUU7UUFDekQsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO0tBQzdDLEVBQ0QsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLE9BQU8sYUFBYSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FDOUMsU0FBUyxFQUNUO1lBQ0UsT0FBTyxFQUFFLGFBQWE7WUFDdEIsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTO1NBQzlCLENBQ0YsQ0FBQztJQUNKLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDMUMsYUFBcUMsRUFDckMsU0FBMkQsRUFDM0QsT0FHQyxFQUNzQyxFQUFFO0lBQ3pDLE9BQU8sK0JBQStCLENBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLGFBQWEsQ0FBQyxXQUFXLEVBQ3pCO1FBQ0UsYUFBYSxFQUFFLElBQUk7UUFDbkIsUUFBUSxFQUFFLGFBQWEsQ0FBQywrQkFBK0IsRUFBRTtRQUN6RCxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7S0FDN0MsRUFDRCxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUU7UUFDdEIsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxhQUFhLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUMvQyxTQUFTLEVBQ1Q7WUFDRSxPQUFPLEVBQUUsYUFBYTtZQUN0QixTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVM7U0FDOUIsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -12,6 +12,13 @@ export type TAtomicFindOneAndUpdateExecutionResult = {
|
|
|
12
12
|
status: 'not_matched';
|
|
13
13
|
document: null;
|
|
14
14
|
};
|
|
15
|
+
export type TAtomicFindOneAndReplaceExecutionResult = {
|
|
16
|
+
status: 'matched';
|
|
17
|
+
document: TRawDocument;
|
|
18
|
+
} | {
|
|
19
|
+
status: 'not_matched';
|
|
20
|
+
document: null;
|
|
21
|
+
};
|
|
15
22
|
/**
|
|
16
23
|
* Executes a model-validated atomic find-one-and-update against MongoDB.
|
|
17
24
|
*
|
|
@@ -24,4 +31,17 @@ export declare const executeAtomicFindOneAndUpdate: <T>(collectionArg: Smartdata
|
|
|
24
31
|
sort?: Record<string, 1 | -1>;
|
|
25
32
|
session?: TSmartdataOrdinarySession;
|
|
26
33
|
}) => Promise<TAtomicFindOneAndUpdateExecutionResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Executes a model-validated atomic find-one-and-replace against MongoDB.
|
|
36
|
+
*
|
|
37
|
+
* This helper is package-internal. `SmartDataDbDoc.atomicFindOneAndReplace()`
|
|
38
|
+
* owns the public API and must validate the filter and the replacement body
|
|
39
|
+
* before calling this raw persistence boundary. The replacement never carries
|
|
40
|
+
* a stored `_id`, so the matched document keeps its own primary key while its
|
|
41
|
+
* declared identity changes.
|
|
42
|
+
*/
|
|
43
|
+
export declare const executeAtomicFindOneAndReplace: <T>(collectionArg: SmartdataCollection<T>, filterArg: plugins.mongodb.Filter<plugins.mongodb.Document>, replacementArg: plugins.mongodb.WithoutId<plugins.mongodb.Document>, optionsArg: {
|
|
44
|
+
returnDocument: "before" | "after";
|
|
45
|
+
session?: TSmartdataOrdinarySession;
|
|
46
|
+
}) => Promise<TAtomicFindOneAndReplaceExecutionResult>;
|
|
27
47
|
export {};
|
|
@@ -50,7 +50,7 @@ export const executeAtomicFindOneAndUpdate = async (collectionArg, filterArg, up
|
|
|
50
50
|
return runWithOrdinarySmartdataSession(optionsArg.session, collectionArg.smartdataDb, {
|
|
51
51
|
ordinaryWrite: true,
|
|
52
52
|
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
53
|
-
|
|
53
|
+
collectionName: collectionArg.collectionName,
|
|
54
54
|
}, async (rawSessionArg) => {
|
|
55
55
|
if (policy && !rawSessionArg?.inTransaction()) {
|
|
56
56
|
throw new SmartdataPersistenceError('unsupported_operation', 'Validated ordinary updates require an active owned transaction.');
|
|
@@ -83,4 +83,47 @@ export const executeAtomicFindOneAndUpdate = async (collectionArg, filterArg, up
|
|
|
83
83
|
}
|
|
84
84
|
});
|
|
85
85
|
};
|
|
86
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Executes a model-validated atomic find-one-and-replace against MongoDB.
|
|
88
|
+
*
|
|
89
|
+
* This helper is package-internal. `SmartDataDbDoc.atomicFindOneAndReplace()`
|
|
90
|
+
* owns the public API and must validate the filter and the replacement body
|
|
91
|
+
* before calling this raw persistence boundary. The replacement never carries
|
|
92
|
+
* a stored `_id`, so the matched document keeps its own primary key while its
|
|
93
|
+
* declared identity changes.
|
|
94
|
+
*/
|
|
95
|
+
export const executeAtomicFindOneAndReplace = async (collectionArg, filterArg, replacementArg, optionsArg) => {
|
|
96
|
+
if (collectionArg.getBoundModelSchema()?.ordinaryPersistence) {
|
|
97
|
+
// A validated ordinary document owns its stored shape and primary key, so
|
|
98
|
+
// it is written through its own postimage path, never replaced wholesale.
|
|
99
|
+
throw new SmartdataPersistenceError('unsupported_operation', 'Validated ordinary models require transactional postimage updates.');
|
|
100
|
+
}
|
|
101
|
+
return runWithOrdinarySmartdataSession(optionsArg.session, collectionArg.smartdataDb, {
|
|
102
|
+
ordinaryWrite: true,
|
|
103
|
+
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
104
|
+
collectionName: collectionArg.collectionName,
|
|
105
|
+
}, async (rawSessionArg) => {
|
|
106
|
+
await collectionArg.init();
|
|
107
|
+
try {
|
|
108
|
+
const result = await collectionArg.mongoDbCollection.findOneAndReplace(filterArg, replacementArg, {
|
|
109
|
+
includeResultMetadata: true,
|
|
110
|
+
returnDocument: optionsArg.returnDocument,
|
|
111
|
+
upsert: false,
|
|
112
|
+
session: rawSessionArg,
|
|
113
|
+
});
|
|
114
|
+
const classified = classifyResult(result, {
|
|
115
|
+
returnDocument: optionsArg.returnDocument,
|
|
116
|
+
upsert: false,
|
|
117
|
+
});
|
|
118
|
+
if (classified.status === 'upserted') {
|
|
119
|
+
// Unreachable: this operation never requests an upsert.
|
|
120
|
+
return unsupportedResult();
|
|
121
|
+
}
|
|
122
|
+
return classified;
|
|
123
|
+
}
|
|
124
|
+
catch (errorArg) {
|
|
125
|
+
return normalizeOrdinaryPersistenceError(errorArg, `Atomic find-one-and-replace conflicts with a unique index in collection "${collectionArg.collectionName}".`);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdG9taWNmaW5kb25lYW5kdXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLmF0b21pY2ZpbmRvbmVhbmR1cGRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx5QkFBeUIsR0FDMUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGtCQUFrQixFQUNsQix3QkFBd0IsR0FHekIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWFsRixNQUFNLGlCQUFpQixHQUFHLEdBQVUsRUFBRTtJQUNwQyxNQUFNLElBQUkseUJBQXlCLENBQ2pDLHVCQUF1QixFQUN2QixtRUFBbUUsQ0FDcEUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQ3JCLFNBQWlFLEVBQ2pFLFVBR0MsRUFDdUMsRUFBRTtJQUMxQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO0lBQzNDLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0UsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUVuQyxJQUNFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQztXQUNiLFFBQVEsQ0FBQyxlQUFlLEtBQUssSUFBSTtXQUNqQyxDQUFDLFdBQVc7V0FDWixTQUFTLENBQUMsS0FBSyxLQUFLLElBQUksRUFDM0IsQ0FB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
|
|
@@ -12,7 +12,7 @@ export const executeAtomicUpdate = async (collectionArg, filterArg, updateArg, o
|
|
|
12
12
|
return runWithOrdinarySmartdataSession(optsArg?.session, collectionArg.smartdataDb, {
|
|
13
13
|
ordinaryWrite: true,
|
|
14
14
|
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
15
|
-
|
|
15
|
+
collectionName: collectionArg.collectionName,
|
|
16
16
|
}, async (rawSessionArg) => {
|
|
17
17
|
await collectionArg.init();
|
|
18
18
|
try {
|
|
@@ -39,7 +39,7 @@ export const executeAtomicUpsertMany = async (collectionArg, operationsArg, opts
|
|
|
39
39
|
return runWithOrdinarySmartdataSession(optsArg?.session, collectionArg.smartdataDb, {
|
|
40
40
|
ordinaryWrite: true,
|
|
41
41
|
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
42
|
-
|
|
42
|
+
collectionName: collectionArg.collectionName,
|
|
43
43
|
}, async (rawSessionArg) => {
|
|
44
44
|
await collectionArg.init();
|
|
45
45
|
try {
|
|
@@ -79,7 +79,7 @@ export const executeAtomicUpdateMany = async (collectionArg, filterArg, updateAr
|
|
|
79
79
|
return runWithOrdinarySmartdataSession(optsArg?.session, collectionArg.smartdataDb, {
|
|
80
80
|
ordinaryWrite: true,
|
|
81
81
|
prepared: collectionArg.isInitializedForCurrentDatabase(),
|
|
82
|
-
|
|
82
|
+
collectionName: collectionArg.collectionName,
|
|
83
83
|
}, async (rawSessionArg) => {
|
|
84
84
|
await collectionArg.init();
|
|
85
85
|
try {
|
|
@@ -92,4 +92,4 @@ export const executeAtomicUpdateMany = async (collectionArg, filterArg, updateAr
|
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdG9taWN1cGRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMuYXRvbWljdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdFLE9BQU8sRUFDTCwrQkFBK0IsR0FFaEMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLGFBQXFDLEVBQ3JDLFNBQTJELEVBQzNELFNBQWlFLEVBQ2pFLE9BR0MsRUFDc0MsRUFBRTtJQUN6QyxPQUFPLCtCQUErQixDQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUNoQixhQUFhLENBQUMsV0FBVyxFQUN6QjtRQUNFLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFFBQVEsRUFBRSxhQUFhLENBQUMsK0JBQStCLEVBQUU7UUFDekQsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO0tBQzdDLEVBQ0QsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxhQUFhLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUNwRCxTQUFTLEVBQ1QsU0FBUyxFQUNUO2dCQUNFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLElBQUk7Z0JBQ2hDLE9BQU8sRUFBRSxhQUFhO2FBQ3ZCLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8saUNBQWlDLENBQ3RDLFFBQVEsRUFDUiw4REFBOEQsYUFBYSxDQUFDLGNBQWMsSUFBSSxDQUMvRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FDRixD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
|
|
@@ -30,6 +30,14 @@ export interface ICollectionBindingOptions {
|
|
|
30
30
|
* `_id === document[field]`.
|
|
31
31
|
*/
|
|
32
32
|
identityAsDocumentId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Names of installed indexes this model accepts without declaring them —
|
|
35
|
+
* typically migration-owned indexes SmartData does not express, such as
|
|
36
|
+
* partial or filtered unique indexes. A tolerated index is never created,
|
|
37
|
+
* never dropped and never verified beyond its name, and it no longer makes
|
|
38
|
+
* the collection topology divergent.
|
|
39
|
+
*/
|
|
40
|
+
toleratedIndexNames?: ReadonlyArray<string>;
|
|
33
41
|
}
|
|
34
42
|
export type TCollectionModelIndexDirection = 1 | -1 | 'text';
|
|
35
43
|
export interface ICollectionModelIndexOptions {
|
|
@@ -65,6 +73,16 @@ export interface ICollectionModelConfig<TModel extends object = any> {
|
|
|
65
73
|
* numeric-field constraint.
|
|
66
74
|
*/
|
|
67
75
|
numericFields?: ReadonlyArray<TSmartdataNumericDocumentPath<TModel>>;
|
|
76
|
+
/**
|
|
77
|
+
* Persisted top-level fields that only atomic operations may overwrite. Every
|
|
78
|
+
* write that creates a document stores them — `insert()`, `insertMany()`,
|
|
79
|
+
* `insertManyIfAbsent()` and the insert branch of `save()` — and they read
|
|
80
|
+
* like any other declared field, but a `save()` that matches a stored
|
|
81
|
+
* document leaves them untouched, so a stale instance cannot overwrite a
|
|
82
|
+
* value concurrent atomic writers own. An identity field cannot be
|
|
83
|
+
* atomic-only.
|
|
84
|
+
*/
|
|
85
|
+
atomicOnlyFields?: ReadonlyArray<keyof TModel & string>;
|
|
68
86
|
/**
|
|
69
87
|
* Persisted string identity fields with @unI()-equivalent selector and
|
|
70
88
|
* immutability semantics. Each field requires an explicit single-field,
|
|
@@ -86,12 +104,23 @@ export interface ICollectionModelConfig<TModel extends object = any> {
|
|
|
86
104
|
* Stable named MongoDB indexes. Object property order defines key order.
|
|
87
105
|
*/
|
|
88
106
|
indexes?: ReadonlyArray<ICollectionModelIndex>;
|
|
107
|
+
/**
|
|
108
|
+
* Names of installed indexes this model does not declare but accepts —
|
|
109
|
+
* typically indexes a migration owns, such as partial or filtered unique
|
|
110
|
+
* indexes SmartData does not express. A tolerated index is never created,
|
|
111
|
+
* never dropped and never verified beyond its name, and it no longer makes
|
|
112
|
+
* the collection topology divergent. Every undeclared index outside this
|
|
113
|
+
* list still does.
|
|
114
|
+
*/
|
|
115
|
+
toleratedIndexNames?: ReadonlyArray<string>;
|
|
89
116
|
}
|
|
90
117
|
export interface INormalizedCollectionModelSchema {
|
|
91
118
|
readonly ordinaryPersistence?: IOrdinaryPersistencePolicy;
|
|
92
119
|
readonly collectionName: string;
|
|
93
120
|
readonly persistedFields: readonly string[];
|
|
94
121
|
readonly numericFields: readonly string[];
|
|
122
|
+
/** Declared persisted fields a matching instance `save()` never overwrites. */
|
|
123
|
+
readonly atomicOnlyFields: readonly string[];
|
|
95
124
|
readonly identityFields: readonly string[];
|
|
96
125
|
/** Declared identity field stored as the document `_id`, if any. */
|
|
97
126
|
readonly identityAsDocumentId?: string;
|
|
@@ -102,6 +131,8 @@ export interface INormalizedCollectionModelSchema {
|
|
|
102
131
|
readonly key: ReadonlyArray<readonly [string, TCollectionModelIndexDirection]>;
|
|
103
132
|
readonly options: Readonly<IIndexOptions>;
|
|
104
133
|
}>;
|
|
134
|
+
/** Undeclared installed indexes this model accepts by name, never touches. */
|
|
135
|
+
readonly toleratedIndexNames: readonly string[];
|
|
105
136
|
readonly fingerprint: string;
|
|
106
137
|
}
|
|
107
138
|
export type TCompoundIndexDirection = 1 | -1;
|
|
@@ -229,8 +260,13 @@ export declare class SmartdataCollection<T> {
|
|
|
229
260
|
maxTimeMS?: number;
|
|
230
261
|
session?: TSmartdataOrdinarySession;
|
|
231
262
|
}): Promise<any>;
|
|
263
|
+
/**
|
|
264
|
+
* An owned session stays leased until the returned cursor is closed, because
|
|
265
|
+
* the cursor outlives this call and the driver forbids a parallel operation
|
|
266
|
+
* on the same session.
|
|
267
|
+
*/
|
|
232
268
|
getCursor(filterObjectArg: any, dbDocArg: typeof SmartDataDbDoc, opts?: {
|
|
233
|
-
session?:
|
|
269
|
+
session?: TSmartdataOrdinarySession;
|
|
234
270
|
}): Promise<SmartdataDbCursor<any>>;
|
|
235
271
|
/**
|
|
236
272
|
* finds an object in the DbCollection
|