@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
|
@@ -18,13 +18,21 @@ export interface ISmartdataCollectionTopologyIndex {
|
|
|
18
18
|
export interface ISmartdataExpectedCollectionTopology {
|
|
19
19
|
readonly collectionName: string;
|
|
20
20
|
readonly indexes: readonly ISmartdataCollectionTopologyIndex[];
|
|
21
|
+
/** Undeclared installed indexes the model accepts by name, never verifies. */
|
|
22
|
+
readonly toleratedIndexNames: readonly string[];
|
|
21
23
|
}
|
|
22
24
|
export interface ISmartdataCollectionTopologyInspection {
|
|
23
25
|
readonly collectionName: string;
|
|
24
26
|
readonly status: TSmartdataCollectionTopologyStatus;
|
|
25
27
|
readonly reasonCodes: readonly TSmartdataCollectionTopologyReasonCode[];
|
|
26
28
|
readonly expectedIndexes: readonly ISmartdataCollectionTopologyIndex[];
|
|
29
|
+
/** Installed indexes SmartData declares and verifies. */
|
|
27
30
|
readonly actualIndexes: readonly ISmartdataCollectionTopologyIndex[];
|
|
31
|
+
/**
|
|
32
|
+
* Installed indexes the model tolerates by name. They are observed, never
|
|
33
|
+
* verified, created or dropped, and they never make the topology divergent.
|
|
34
|
+
*/
|
|
35
|
+
readonly toleratedIndexes: readonly string[];
|
|
28
36
|
}
|
|
29
37
|
type TCollectionModelSchemaResolver = () => INormalizedCollectionModelSchema;
|
|
30
38
|
export declare const collectionModelSchemaResolverSymbol: unique symbol;
|
|
@@ -41,6 +49,17 @@ export declare const compareSmartdataTopologyStrings: (leftArg: string, rightArg
|
|
|
41
49
|
export declare const getExpectedCollectionTopologyForModel: (constructorArg: ICollectionTopologyModelConstructor) => ISmartdataExpectedCollectionTopology;
|
|
42
50
|
/** @internal Normalizes the same contract for a bound collection. */
|
|
43
51
|
export declare const getExpectedCollectionTopologyForSchema: (schema: INormalizedCollectionModelSchema) => ISmartdataExpectedCollectionTopology;
|
|
52
|
+
/**
|
|
53
|
+
* @internal A single-field ascending unique index is what makes a declared
|
|
54
|
+
* identity globally constraining, whatever the index is called.
|
|
55
|
+
*/
|
|
56
|
+
export declare const isIdentityIndexFor: (indexArg: INormalizedCollectionModelSchema["indexes"][number], fieldArg: string) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* @internal Name of the unique index that backs an identity field in a bound
|
|
59
|
+
* schema. Index-creation fallbacks resolve it here so that a model naming its
|
|
60
|
+
* own backing index never gets a second unique index over the same key.
|
|
61
|
+
*/
|
|
62
|
+
export declare const getIdentityIndexName: (schemaArg: INormalizedCollectionModelSchema | undefined, fieldArg: string) => string | undefined;
|
|
44
63
|
export declare const inspectCollectionTopologyForModel: (constructorArg: ICollectionTopologyModelConstructor, dbArg: SmartdataDb) => Promise<ISmartdataCollectionTopologyInspection>;
|
|
45
64
|
/** @internal Pure normalization shared by model and namespace inspection. */
|
|
46
65
|
export declare const inspectCollectionTopologySnapshot: (expected: ISmartdataExpectedCollectionTopology, rawSnapshot: ICollectionTopologyRawSnapshot) => ISmartdataCollectionTopologyInspection;
|
|
@@ -141,8 +141,24 @@ export const getExpectedCollectionTopologyForSchema = (schema) => {
|
|
|
141
141
|
return Object.freeze({
|
|
142
142
|
collectionName: schema.collectionName,
|
|
143
143
|
indexes,
|
|
144
|
+
toleratedIndexNames: Object.freeze([...schema.toleratedIndexNames].sort(compareSmartdataTopologyStrings)),
|
|
144
145
|
});
|
|
145
146
|
};
|
|
147
|
+
/**
|
|
148
|
+
* @internal A single-field ascending unique index is what makes a declared
|
|
149
|
+
* identity globally constraining, whatever the index is called.
|
|
150
|
+
*/
|
|
151
|
+
export const isIdentityIndexFor = (indexArg, fieldArg) => indexArg.options.unique === true &&
|
|
152
|
+
indexArg.key.length === 1 &&
|
|
153
|
+
indexArg.key[0][0] === fieldArg &&
|
|
154
|
+
indexArg.key[0][1] === 1;
|
|
155
|
+
/**
|
|
156
|
+
* @internal Name of the unique index that backs an identity field in a bound
|
|
157
|
+
* schema. Index-creation fallbacks resolve it here so that a model naming its
|
|
158
|
+
* own backing index never gets a second unique index over the same key.
|
|
159
|
+
*/
|
|
160
|
+
export const getIdentityIndexName = (schemaArg, fieldArg) => schemaArg?.indexes.find((indexArg) => isIdentityIndexFor(indexArg, fieldArg))
|
|
161
|
+
?.name;
|
|
146
162
|
const normalizeActualIndex = (rawIndexArg) => {
|
|
147
163
|
if (typeof rawIndexArg !== 'object' ||
|
|
148
164
|
rawIndexArg === null ||
|
|
@@ -274,12 +290,13 @@ const normalizeActualIndex = (rawIndexArg) => {
|
|
|
274
290
|
return { index: normalized, name, supported };
|
|
275
291
|
};
|
|
276
292
|
const buildReasonCodes = (reasonsArg) => Object.freeze(reasonCodeOrder.filter((reasonCodeArg) => reasonsArg.has(reasonCodeArg)));
|
|
277
|
-
const createInspection = (expectedArg, statusArg, reasonsArg, actualIndexesArg) => Object.freeze({
|
|
293
|
+
const createInspection = (expectedArg, statusArg, reasonsArg, actualIndexesArg, toleratedIndexesArg = []) => Object.freeze({
|
|
278
294
|
collectionName: expectedArg.collectionName,
|
|
279
295
|
status: statusArg,
|
|
280
296
|
reasonCodes: buildReasonCodes(reasonsArg),
|
|
281
297
|
expectedIndexes: expectedArg.indexes,
|
|
282
298
|
actualIndexes: sortIndexes(actualIndexesArg),
|
|
299
|
+
toleratedIndexes: Object.freeze([...toleratedIndexesArg].sort(compareSmartdataTopologyStrings)),
|
|
283
300
|
});
|
|
284
301
|
export const inspectCollectionTopologyForModel = async (constructorArg, dbArg) => {
|
|
285
302
|
const expected = getExpectedCollectionTopologyForModel(constructorArg);
|
|
@@ -326,8 +343,17 @@ export const inspectCollectionTopologySnapshot = (expected, rawSnapshot) => {
|
|
|
326
343
|
}
|
|
327
344
|
const normalizedIndexes = [];
|
|
328
345
|
const unsupportedNames = new Set();
|
|
346
|
+
const toleratedNames = new Set(expected.toleratedIndexNames);
|
|
347
|
+
const toleratedIndexes = [];
|
|
329
348
|
for (const rawIndex of rawIndexes) {
|
|
330
349
|
const normalized = normalizeActualIndex(rawIndex);
|
|
350
|
+
if (normalized.name && toleratedNames.has(normalized.name)) {
|
|
351
|
+
// A tolerated index belongs to whoever created it — a migration, an
|
|
352
|
+
// operator — so it is observed by name and nothing about its keys or
|
|
353
|
+
// options is asserted. SmartData neither creates nor drops it.
|
|
354
|
+
toleratedIndexes.push(normalized.name);
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
331
357
|
if (!normalized.supported) {
|
|
332
358
|
reasons.add('unsupported_actual_index');
|
|
333
359
|
if (normalized.name) {
|
|
@@ -379,10 +405,10 @@ export const inspectCollectionTopologySnapshot = (expected, rawSnapshot) => {
|
|
|
379
405
|
: [...reasons].every((reasonArg) => reasonArg === 'expected_index_missing')
|
|
380
406
|
? 'compatible'
|
|
381
407
|
: 'divergent';
|
|
382
|
-
return createInspection(expected, status, reasons, normalizedIndexes);
|
|
408
|
+
return createInspection(expected, status, reasons, normalizedIndexes, toleratedIndexes);
|
|
383
409
|
}
|
|
384
410
|
catch {
|
|
385
411
|
throw new SmartdataPersistenceError('unsupported_operation', 'Collection topology inspection returned unreadable metadata.');
|
|
386
412
|
}
|
|
387
413
|
};
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb2xsZWN0aW9udG9wb2xvZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMuY29sbGVjdGlvbnRvcG9sb2d5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaURyRSxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxNQUFNLENBQ3ZELHFEQUFxRCxDQUN0RCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsTUFBTSxDQUN4RCxzREFBc0QsQ0FDdkQsQ0FBQztBQWtCRixNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDL0IsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUk7SUFDWixNQUFNLEVBQUUsS0FBSztJQUNiLGtCQUFrQixFQUFFLElBQUk7Q0FDekIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxlQUFlLEdBQXNEO0lBQ3pFLDBCQUEwQjtJQUMxQiw0QkFBNEI7SUFDNUIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZiwwQkFBMEI7Q0FDM0IsQ0FBQztBQUNGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdEMsR0FBRztJQUNILEtBQUs7SUFDTCxNQUFNO0lBQ04sSUFBSTtJQUNKLFlBQVk7SUFDWixRQUFRO0lBQ1IsUUFBUTtJQUNSLG9CQUFvQjtDQUNyQixDQUFDLENBQUM7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElB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
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb2xsZWN0aW9udG9wb2xvZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMuY29sbGVjdGlvbnRvcG9sb2d5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBeURyRSxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxNQUFNLENBQ3ZELHFEQUFxRCxDQUN0RCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsTUFBTSxDQUN4RCxzREFBc0QsQ0FDdkQsQ0FBQztBQWtCRixNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDL0IsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUk7SUFDWixNQUFNLEVBQUUsS0FBSztJQUNiLGtCQUFrQixFQUFFLElBQUk7Q0FDekIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxlQUFlLEdBQXNEO0lBQ3pFLDBCQUEwQjtJQUMxQiw0QkFBNEI7SUFDNUIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZiwwQkFBMEI7Q0FDM0IsQ0FBQztBQUNGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdEMsR0FBRztJQUNILEtBQUs7SUFDTCxNQUFNO0lBQ04sSUFBSTtJQUNKLFlBQVk7SUFDWixRQUFRO0lBQ1IsUUFBUTtJQUNSLG9CQUFvQjtDQUNyQixDQUFDLENBQUM7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElB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
|
|
@@ -6,10 +6,21 @@ import * as plugins from './plugins.js';
|
|
|
6
6
|
export declare class SmartdataDbCursor<T = any> {
|
|
7
7
|
mongodbCursor: plugins.mongodb.FindCursor<T>;
|
|
8
8
|
private smartdataDbDoc;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Releases an owned SmartData session lease the cursor holds for its whole
|
|
11
|
+
* lifetime. Supplied by the operation that created the cursor; inert for a
|
|
12
|
+
* raw driver session or no session at all.
|
|
13
|
+
*/
|
|
14
|
+
private releaseSession;
|
|
15
|
+
constructor(cursorArg: plugins.mongodb.FindCursor<T>, dbDocArg: typeof SmartDataDbDoc, releaseSessionArg?: () => void);
|
|
10
16
|
next(closeAtEnd?: boolean): Promise<T | null>;
|
|
11
17
|
forEach(forEachFuncArg: (itemArg: T) => Promise<any>, closeCursorAtEnd?: boolean): Promise<void>;
|
|
12
18
|
toArray(): Promise<T[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Closes the driver cursor and releases an owned session lease even when the
|
|
21
|
+
* driver's own cleanup rejects, so a failed close can never strand the
|
|
22
|
+
* session and block every later operation on it.
|
|
23
|
+
*/
|
|
13
24
|
close(): Promise<void>;
|
|
14
25
|
private closeAfterError;
|
|
15
26
|
}
|
|
@@ -8,9 +8,16 @@ export class SmartdataDbCursor {
|
|
|
8
8
|
// INSTANCE
|
|
9
9
|
mongodbCursor;
|
|
10
10
|
smartdataDbDoc;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Releases an owned SmartData session lease the cursor holds for its whole
|
|
13
|
+
* lifetime. Supplied by the operation that created the cursor; inert for a
|
|
14
|
+
* raw driver session or no session at all.
|
|
15
|
+
*/
|
|
16
|
+
releaseSession;
|
|
17
|
+
constructor(cursorArg, dbDocArg, releaseSessionArg = () => { }) {
|
|
12
18
|
this.mongodbCursor = cursorArg;
|
|
13
19
|
this.smartdataDbDoc = dbDocArg;
|
|
20
|
+
this.releaseSession = releaseSessionArg;
|
|
14
21
|
}
|
|
15
22
|
async next(closeAtEnd = true) {
|
|
16
23
|
let nextDocument;
|
|
@@ -66,8 +73,18 @@ export class SmartdataDbCursor {
|
|
|
66
73
|
await this.close();
|
|
67
74
|
return convertedResult;
|
|
68
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Closes the driver cursor and releases an owned session lease even when the
|
|
78
|
+
* driver's own cleanup rejects, so a failed close can never strand the
|
|
79
|
+
* session and block every later operation on it.
|
|
80
|
+
*/
|
|
69
81
|
async close() {
|
|
70
|
-
|
|
82
|
+
try {
|
|
83
|
+
await this.mongodbCursor.close();
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
this.releaseSession();
|
|
87
|
+
}
|
|
71
88
|
}
|
|
72
89
|
async closeAfterError(errorArg) {
|
|
73
90
|
try {
|
|
@@ -79,4 +96,4 @@ export class SmartdataDbCursor {
|
|
|
79
96
|
throw errorArg;
|
|
80
97
|
}
|
|
81
98
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jdXJzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMuY3Vyc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsU0FBUztJQUVULFdBQVc7SUFDSixhQUFhLENBQWdDO0lBQzVDLGNBQWMsQ0FBd0I7SUFDOUM7Ozs7T0FJRztJQUNLLGNBQWMsQ0FBYTtJQUNuQyxZQUNFLFNBQXdDLEVBQ3hDLFFBQStCLEVBQy9CLG9CQUFnQyxHQUFHLEVBQUUsR0FBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUk7UUFDakMsSUFBSSxZQUFzQixDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakQsQ0FBQztRQUFDLE9BQU8sU0FBUyxFQUFFLENBQUM7WUFDbkIsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FDM0QsWUFBWSxDQUNSLENBQUM7UUFDVCxDQUFDO1FBQUMsT0FBTyxlQUFlLEVBQUUsQ0FBQztZQUN6QixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBNEMsRUFBRSxnQkFBZ0IsR0FBRyxJQUFJO1FBQ3hGLElBQUksQ0FBQztZQUNILElBQUksWUFBaUIsQ0FBQztZQUN0QixHQUFHLENBQUM7Z0JBQ0YsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDdkUsTUFBTSxjQUFjLENBQUMsaUJBQXdCLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUMsUUFBUSxZQUFZLEVBQUU7UUFDekIsQ0FBQztRQUFDLE9BQU8sY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELE1BQU0sY0FBYyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLGVBQW9CLENBQUM7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xELGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsQ0FDekQsQ0FBQztRQUNYLENBQUM7UUFBQyxPQUFPLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQWlCO1FBQzdDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwrREFBK0Q7UUFDakUsQ0FBQztRQUNELE1BQU0sUUFBUSxDQUFDO0lBQ2pCLENBQUM7Q0FDRiJ9
|
|
@@ -38,6 +38,14 @@ export interface IUnIOptions {
|
|
|
38
38
|
* non-empty string. Numeric identities require an explicit opt-in.
|
|
39
39
|
*/
|
|
40
40
|
valueType?: TSmartdataIdentityValueType;
|
|
41
|
+
/**
|
|
42
|
+
* Name of the single-field ascending unique index that backs this identity.
|
|
43
|
+
* Defaults to `<field>_1`. A collection whose unique index was created by a
|
|
44
|
+
* migration under another name declares that name here: MongoDB refuses a
|
|
45
|
+
* second index over the same key, so without it the identity could not be
|
|
46
|
+
* declared at all.
|
|
47
|
+
*/
|
|
48
|
+
indexName?: string;
|
|
41
49
|
}
|
|
42
50
|
export declare function globalSvDb(): (value: undefined, context: ClassFieldDecoratorContext) => void;
|
|
43
51
|
/**
|
|
@@ -58,6 +66,20 @@ export interface SvDbOptions {
|
|
|
58
66
|
* expression references.
|
|
59
67
|
*/
|
|
60
68
|
numeric?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Declares a persisted field that only atomic operations may overwrite.
|
|
71
|
+
*
|
|
72
|
+
* The field stays a declared persisted root — atomic filters, updates and
|
|
73
|
+
* `$expr` references, projections, sorts and hydration all accept it. Every
|
|
74
|
+
* operation that creates a document stores it, so a created document is
|
|
75
|
+
* complete: `insert()`, `insertMany()`, `insertManyIfAbsent()`, a `save()`
|
|
76
|
+
* on a new instance, and the upsert branch of a `save()` whose row is gone,
|
|
77
|
+
* which seeds it through `$setOnInsert`. A `save()` that matches a stored
|
|
78
|
+
* document never writes it, so a stale instance can never overwrite a
|
|
79
|
+
* counter, quota or lease that concurrent atomic writers own. Combine with
|
|
80
|
+
* `numeric` for `$expr` references.
|
|
81
|
+
*/
|
|
82
|
+
atomicOnly?: boolean;
|
|
61
83
|
}
|
|
62
84
|
/**
|
|
63
85
|
* saveable - saveable decorator to be used on class properties
|
|
@@ -86,10 +108,19 @@ export interface IIndexOptions {
|
|
|
86
108
|
*/
|
|
87
109
|
export declare function index(options?: IIndexOptions): (value: undefined, context: ClassFieldDecoratorContext) => void;
|
|
88
110
|
type ElementOf<T> = T extends ReadonlyArray<infer U> ? U : T;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Explicit BSON null is a legitimate predicate for a field the model declares
|
|
113
|
+
* optional. MongoDB answers `{ field: null }` with the documents that store an
|
|
114
|
+
* explicit null *and* the documents where the field is absent, so it is the
|
|
115
|
+
* only predicate that addresses a value an earlier writer stored as null. The
|
|
116
|
+
* runtime filters have always accepted it; the declared type admits it wherever
|
|
117
|
+
* the field type contains `undefined`.
|
|
118
|
+
*/
|
|
119
|
+
export type TSmartdataOptionalNullPredicate<TValue> = undefined extends TValue ? null : never;
|
|
120
|
+
type InValues<T> = ReadonlyArray<ElementOf<T> | TSmartdataOptionalNullPredicate<T>>;
|
|
121
|
+
export type MongoFilterCondition<T> = T | TSmartdataOptionalNullPredicate<T> | {
|
|
122
|
+
$eq?: T | TSmartdataOptionalNullPredicate<T>;
|
|
123
|
+
$ne?: T | TSmartdataOptionalNullPredicate<T>;
|
|
93
124
|
$gt?: T;
|
|
94
125
|
$gte?: T;
|
|
95
126
|
$lt?: T;
|
|
@@ -133,7 +164,12 @@ export interface ISmartdataCursorOptions<T> {
|
|
|
133
164
|
/** Model-declared index name, or MongoDB's built-in `_id_` index. */
|
|
134
165
|
hint?: string;
|
|
135
166
|
maxTimeMS?: number;
|
|
136
|
-
|
|
167
|
+
/**
|
|
168
|
+
* An owned session from `db.createSession()` stays leased until the cursor
|
|
169
|
+
* is closed, so the cursor and the session's next operation can never run in
|
|
170
|
+
* parallel. A raw `ClientSession` keeps its unmanaged pass-through behavior.
|
|
171
|
+
*/
|
|
172
|
+
session?: TSmartdataOrdinarySession;
|
|
137
173
|
/**
|
|
138
174
|
* @deprecated Prefer the structured cursor options. The modifier runs last
|
|
139
175
|
* for backward compatibility.
|
|
@@ -183,7 +219,16 @@ type TSmartdataAtomicMonotonic<T> = Partial<{
|
|
|
183
219
|
[TKey in TSmartdataMonotonicDocumentPath<T>]: NonNullable<T[TKey]> extends Date ? Date : number;
|
|
184
220
|
}> & Partial<Record<TSmartdataAtomicNestedDocumentPath<T>, number | Date>>;
|
|
185
221
|
export type TSmartdataAtomicNumericFieldReference<T> = `$${TSmartdataNumericDocumentPath<T>}`;
|
|
186
|
-
|
|
222
|
+
/**
|
|
223
|
+
* Reads a declared numeric field, substituting a finite literal when the field
|
|
224
|
+
* is absent or stored as null. A document written before the field existed
|
|
225
|
+
* therefore takes the declared default instead of failing the comparison, while
|
|
226
|
+
* a present non-numeric value still fails closed.
|
|
227
|
+
*/
|
|
228
|
+
export interface ISmartdataAtomicNumericIfNull<T> {
|
|
229
|
+
$ifNull: readonly [TSmartdataAtomicNumericFieldReference<T>, number];
|
|
230
|
+
}
|
|
231
|
+
export type TSmartdataAtomicNumericExpressionOperand<T> = number | TSmartdataAtomicNumericFieldReference<T> | ISmartdataAtomicNumericIfNull<T> | {
|
|
187
232
|
$add: readonly [
|
|
188
233
|
TSmartdataAtomicNumericExpressionOperand<T>,
|
|
189
234
|
TSmartdataAtomicNumericExpressionOperand<T>,
|
|
@@ -282,15 +327,15 @@ export interface ISmartdataAtomicUpdate<T> {
|
|
|
282
327
|
}
|
|
283
328
|
type TSmartdataAtomicDirectEquality<TValue> = TValue extends ReadonlyArray<infer TEntry> ? ReadonlyArray<TSmartdataAtomicDirectEquality<TEntry>> : TValue extends object ? TValue extends Date | ArrayBufferView | plugins.mongodb.ObjectId | plugins.mongodb.Binary | plugins.mongodb.Decimal128 | plugins.mongodb.Long | plugins.mongodb.Int32 | plugins.mongodb.Double | plugins.mongodb.Timestamp | plugins.mongodb.MinKey | plugins.mongodb.MaxKey ? TValue : never : Exclude<TValue, undefined>;
|
|
284
329
|
type TSmartdataAtomicInValue<TValue> = TValue extends ReadonlyArray<infer TEntry> ? TSmartdataAtomicDirectEquality<TEntry> : TSmartdataAtomicDirectEquality<TValue>;
|
|
285
|
-
export type TSmartdataAtomicFilterCondition<TValue> = TSmartdataAtomicDirectEquality<TValue> | {
|
|
286
|
-
$eq?: TValue
|
|
287
|
-
$ne?: TSmartdataAtomicDirectEquality<TValue>;
|
|
330
|
+
export type TSmartdataAtomicFilterCondition<TValue> = TSmartdataAtomicDirectEquality<TValue> | TSmartdataOptionalNullPredicate<TValue> | {
|
|
331
|
+
$eq?: TValue | TSmartdataOptionalNullPredicate<TValue>;
|
|
332
|
+
$ne?: TSmartdataAtomicDirectEquality<TValue> | TSmartdataOptionalNullPredicate<TValue>;
|
|
288
333
|
$gt?: TSmartdataAtomicDirectEquality<TValue>;
|
|
289
334
|
$gte?: TSmartdataAtomicDirectEquality<TValue>;
|
|
290
335
|
$lt?: TSmartdataAtomicDirectEquality<TValue>;
|
|
291
336
|
$lte?: TSmartdataAtomicDirectEquality<TValue>;
|
|
292
|
-
$in?: ReadonlyArray<TSmartdataAtomicInValue<TValue>>;
|
|
293
|
-
$nin?: ReadonlyArray<TSmartdataAtomicInValue<TValue>>;
|
|
337
|
+
$in?: ReadonlyArray<TSmartdataAtomicInValue<TValue> | TSmartdataOptionalNullPredicate<TValue>>;
|
|
338
|
+
$nin?: ReadonlyArray<TSmartdataAtomicInValue<TValue> | TSmartdataOptionalNullPredicate<TValue>>;
|
|
294
339
|
$exists?: boolean;
|
|
295
340
|
$type?: plugins.mongodb.BSONType | plugins.mongodb.BSONTypeAlias;
|
|
296
341
|
$regex?: string | RegExp;
|
|
@@ -347,6 +392,14 @@ export type TSmartdataAtomicFindOneAndUpdateResult<T, TReturnDocument extends TS
|
|
|
347
392
|
status: 'not_matched';
|
|
348
393
|
document: null;
|
|
349
394
|
};
|
|
395
|
+
export interface ISmartdataAtomicFindOneAndReplaceOptions {
|
|
396
|
+
/**
|
|
397
|
+
* Which image to return: the stored replacement (`'after'`, the default) or
|
|
398
|
+
* the document it ousted (`'before'`).
|
|
399
|
+
*/
|
|
400
|
+
returnDocument?: TSmartdataAtomicReturnDocument;
|
|
401
|
+
session?: TSmartdataOrdinarySession;
|
|
402
|
+
}
|
|
350
403
|
export interface ISmartdataAtomicDeleteOptions {
|
|
351
404
|
session?: TSmartdataOrdinarySession;
|
|
352
405
|
/** Client-side operation deadline, including server selection and pool waits. */
|
|
@@ -396,6 +449,25 @@ export interface ISmartdataAtomicUpsertManyResult {
|
|
|
396
449
|
modifiedCount: number;
|
|
397
450
|
upsertedCount: number;
|
|
398
451
|
}
|
|
452
|
+
/**
|
|
453
|
+
* How a fenced save treats a declared persisted field the instance holds as
|
|
454
|
+
* `undefined`. `'ignore'` leaves whatever the document stores for it, which is
|
|
455
|
+
* what an instance that never loaded the field needs; `'unset'` removes it from
|
|
456
|
+
* the stored document, which is what an instance that deliberately cleared the
|
|
457
|
+
* field needs.
|
|
458
|
+
*/
|
|
459
|
+
export type TSmartdataAbsentDeclaredFields = 'ignore' | 'unset';
|
|
460
|
+
export interface ISmartdataSaveIfOptions {
|
|
461
|
+
session?: TSmartdataOrdinarySession;
|
|
462
|
+
/** Defaults to `'ignore'`. */
|
|
463
|
+
absentDeclaredFields?: TSmartdataAbsentDeclaredFields;
|
|
464
|
+
}
|
|
465
|
+
export interface ISmartdataSaveIfResult {
|
|
466
|
+
acknowledged: boolean;
|
|
467
|
+
/** `0` means the fence did not match, so nothing was written. */
|
|
468
|
+
matchedCount: number;
|
|
469
|
+
modifiedCount: number;
|
|
470
|
+
}
|
|
399
471
|
export declare const convertFilterForMongoDb: (filterArg: {
|
|
400
472
|
[key: string]: any;
|
|
401
473
|
}) => {
|
|
@@ -511,6 +583,40 @@ export declare class SmartDataDbDoc<T extends TImplements, TImplements, TManager
|
|
|
511
583
|
* before or after image with a sanitized persistence outcome.
|
|
512
584
|
*/
|
|
513
585
|
static atomicFindOneAndUpdate<T, TReturnDocument extends TSmartdataAtomicReturnDocument>(this: plugins.tsclass.typeFest.Class<T>, filterArg: TSmartdataAtomicFilter<T>, updateArg: ISmartdataAtomicUpdate<T>, optionsArg: ISmartdataAtomicFindOneAndUpdateOptions<TReturnDocument, T>): Promise<TSmartdataAtomicFindOneAndUpdateResult<T, TReturnDocument>>;
|
|
586
|
+
/**
|
|
587
|
+
* Atomically replaces one ordinary model document with a new one, including
|
|
588
|
+
* its declared identity.
|
|
589
|
+
*
|
|
590
|
+
* This is the one operation that moves an `@unI()` identity: the matched
|
|
591
|
+
* document ceases to exist and the replacement takes its `_id` slot in a
|
|
592
|
+
* single compare-and-swap, which is what a model whose identity is the
|
|
593
|
+
* additional-authenticated-data of an encrypted field needs when it rotates.
|
|
594
|
+
* Every other write keeps identities immutable.
|
|
595
|
+
*
|
|
596
|
+
* `replacementArg` is a newly constructed instance that was never stored.
|
|
597
|
+
* Its `createSavableObject()` body is written whole, so a field the matched
|
|
598
|
+
* document carried and the replacement does not is gone afterwards — replace
|
|
599
|
+
* semantics, not `$set` — and atomic-only fields are seeded from the
|
|
600
|
+
* instance exactly as `insert()` seeds them. The body never carries an
|
|
601
|
+
* `_id`: keeping the matched document's primary key is the point of the
|
|
602
|
+
* operation, so a model whose declared identity *is* the `_id`
|
|
603
|
+
* (`identityAsDocumentId`) cannot rotate and is refused before any write.
|
|
604
|
+
*
|
|
605
|
+
* The filter follows the singular rule of `atomicUpdate()` and
|
|
606
|
+
* `atomicFindOneAndUpdate()`: declared paths and at least one top-level
|
|
607
|
+
* equality anchor. It does not have to pin a unique index — the caller
|
|
608
|
+
* usually searches by the owning field precisely because it does not know
|
|
609
|
+
* which identity is stored — so a filter matching several documents replaces
|
|
610
|
+
* one of them, as with every singular atomic operation.
|
|
611
|
+
*
|
|
612
|
+
* Like `insert()` and the other static atomic operations, this one runs no
|
|
613
|
+
* instance hooks; `beforeSave()`-style normalization belongs before the
|
|
614
|
+
* call. On a match the replacement becomes a stored instance, exactly as
|
|
615
|
+
* `insert()` marks it, and the returned instance is hydrated from the image
|
|
616
|
+
* named by `returnDocument`. Without a match nothing is written, `null` is
|
|
617
|
+
* returned, and the replacement stays untouched.
|
|
618
|
+
*/
|
|
619
|
+
static atomicFindOneAndReplace<T>(this: plugins.tsclass.typeFest.Class<T>, filterArg: TSmartdataAtomicFilter<T>, replacementArg: T, opts?: ISmartdataAtomicFindOneAndReplaceOptions): Promise<T | null>;
|
|
514
620
|
/**
|
|
515
621
|
* Atomically deletes one ordinary model document using a strict selector.
|
|
516
622
|
*
|
|
@@ -749,6 +855,27 @@ export declare class SmartDataDbDoc<T extends TImplements, TImplements, TManager
|
|
|
749
855
|
save(opts?: {
|
|
750
856
|
session?: plugins.mongodb.ClientSession;
|
|
751
857
|
}): Promise<any>;
|
|
858
|
+
/**
|
|
859
|
+
* Saves this instance only while the stored document still matches `fence`.
|
|
860
|
+
*
|
|
861
|
+
* The write is one `updateOne` that never upserts: the instance's identity
|
|
862
|
+
* addresses the document, the fence adds the condition the caller depends on
|
|
863
|
+
* — a status, a revision, a lease owner — and the update applies only if the
|
|
864
|
+
* server still sees that condition. `matchedCount === 0` means another writer
|
|
865
|
+
* moved the document first; nothing was written and this instance is exactly
|
|
866
|
+
* as it was before the call, so the caller can reload and decide.
|
|
867
|
+
*
|
|
868
|
+
* The stored document receives the same fields an ordinary `save()` writes,
|
|
869
|
+
* minus the ones no `save()` may write: declared identities are immutable and
|
|
870
|
+
* already pinned by the filter, and atomic-only fields belong to concurrent
|
|
871
|
+
* atomic writers — a fenced save never creates a document, so it has nothing
|
|
872
|
+
* to seed either. Declared fields this instance holds as `undefined` follow
|
|
873
|
+
* `absentDeclaredFields`.
|
|
874
|
+
*
|
|
875
|
+
* `beforeSave()` runs before the write, as with `save()`; `afterSave()` runs
|
|
876
|
+
* only when the fence matched, because a fence that missed saved nothing.
|
|
877
|
+
*/
|
|
878
|
+
saveIf(fenceArg: TSmartdataAtomicFilter<T>, optsArg?: ISmartdataSaveIfOptions): Promise<ISmartdataSaveIfResult>;
|
|
752
879
|
/**
|
|
753
880
|
* deletes a document from the database (optionally within a transaction)
|
|
754
881
|
*/
|