@lossless.org/client 0.1.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 +37 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.losslessorgclient.d.ts +32 -0
- package/dist_ts/classes.losslessorgclient.js +103 -0
- package/dist_ts/core/classes.error.d.ts +16 -0
- package/dist_ts/core/classes.error.js +29 -0
- package/dist_ts/core/classes.operation.d.ts +17 -0
- package/dist_ts/core/classes.operation.js +70 -0
- package/dist_ts/core/interfaces.d.ts +18 -0
- package/dist_ts/core/interfaces.js +2 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +3 -0
- package/dist_ts/nosqldb/classes.atomicdelete.d.ts +26 -0
- package/dist_ts/nosqldb/classes.atomicdelete.js +44 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.d.ts +27 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.js +86 -0
- package/dist_ts/nosqldb/classes.atomicupdate.d.ts +26 -0
- package/dist_ts/nosqldb/classes.atomicupdate.js +55 -0
- package/dist_ts/nosqldb/classes.bootstraprecord.d.ts +14 -0
- package/dist_ts/nosqldb/classes.bootstraprecord.js +80 -0
- package/dist_ts/nosqldb/classes.bsonassertion.d.ts +2 -0
- package/dist_ts/nosqldb/classes.bsonassertion.js +29 -0
- package/dist_ts/nosqldb/classes.bsonobjectid.d.ts +2 -0
- package/dist_ts/nosqldb/classes.bsonobjectid.js +50 -0
- package/dist_ts/nosqldb/classes.bsonsnapshot.d.ts +3 -0
- package/dist_ts/nosqldb/classes.bsonsnapshot.js +126 -0
- package/dist_ts/nosqldb/classes.cached-document.d.ts +27 -0
- package/dist_ts/nosqldb/classes.cached-document.js +112 -0
- package/dist_ts/nosqldb/classes.collection.d.ts +302 -0
- package/dist_ts/nosqldb/classes.collection.js +1568 -0
- package/dist_ts/nosqldb/classes.collectionfactory.d.ts +30 -0
- package/dist_ts/nosqldb/classes.collectionfactory.js +65 -0
- package/dist_ts/nosqldb/classes.collectionlifecycle.d.ts +4 -0
- package/dist_ts/nosqldb/classes.collectionlifecycle.js +15 -0
- package/dist_ts/nosqldb/classes.collectionpreparation.d.ts +34 -0
- package/dist_ts/nosqldb/classes.collectionpreparation.js +134 -0
- package/dist_ts/nosqldb/classes.collectiontopology.d.ts +47 -0
- package/dist_ts/nosqldb/classes.collectiontopology.js +388 -0
- package/dist_ts/nosqldb/classes.connection.d.ts +18 -0
- package/dist_ts/nosqldb/classes.connection.js +23 -0
- package/dist_ts/nosqldb/classes.convenience.d.ts +1 -0
- package/dist_ts/nosqldb/classes.convenience.js +5 -0
- package/dist_ts/nosqldb/classes.cursor.d.ts +15 -0
- package/dist_ts/nosqldb/classes.cursor.js +82 -0
- package/dist_ts/nosqldb/classes.cursoroperation.d.ts +7 -0
- package/dist_ts/nosqldb/classes.cursoroperation.js +36 -0
- package/dist_ts/nosqldb/classes.db.d.ts +98 -0
- package/dist_ts/nosqldb/classes.db.js +434 -0
- package/dist_ts/nosqldb/classes.distributedcoordinator.d.ts +52 -0
- package/dist_ts/nosqldb/classes.distributedcoordinator.js +314 -0
- package/dist_ts/nosqldb/classes.doc.d.ts +722 -0
- package/dist_ts/nosqldb/classes.doc.js +2976 -0
- package/dist_ts/nosqldb/classes.easystore.d.ts +42 -0
- package/dist_ts/nosqldb/classes.easystore.js +199 -0
- package/dist_ts/nosqldb/classes.exactpersistence.d.ts +141 -0
- package/dist_ts/nosqldb/classes.exactpersistence.js +1110 -0
- package/dist_ts/nosqldb/classes.lucene.adapter.d.ts +173 -0
- package/dist_ts/nosqldb/classes.lucene.adapter.js +623 -0
- package/dist_ts/nosqldb/classes.mongoadministration.d.ts +73 -0
- package/dist_ts/nosqldb/classes.mongoadministration.js +497 -0
- package/dist_ts/nosqldb/classes.namespaceinspection.d.ts +42 -0
- package/dist_ts/nosqldb/classes.namespaceinspection.js +138 -0
- package/dist_ts/nosqldb/classes.operationbudget.d.ts +22 -0
- package/dist_ts/nosqldb/classes.operationbudget.js +65 -0
- package/dist_ts/nosqldb/classes.ordinarypersistence.d.ts +18 -0
- package/dist_ts/nosqldb/classes.ordinarypersistence.js +71 -0
- package/dist_ts/nosqldb/classes.persistence.d.ts +14 -0
- package/dist_ts/nosqldb/classes.persistence.js +34 -0
- package/dist_ts/nosqldb/classes.session.d.ts +28 -0
- package/dist_ts/nosqldb/classes.session.js +246 -0
- package/dist_ts/nosqldb/classes.storedinspection.d.ts +44 -0
- package/dist_ts/nosqldb/classes.storedinspection.js +100 -0
- package/dist_ts/nosqldb/classes.testdatabase.d.ts +56 -0
- package/dist_ts/nosqldb/classes.testdatabase.js +250 -0
- package/dist_ts/nosqldb/classes.watcher.d.ts +37 -0
- package/dist_ts/nosqldb/classes.watcher.js +98 -0
- package/dist_ts/nosqldb/index.d.ts +27 -0
- package/dist_ts/nosqldb/index.js +18 -0
- package/dist_ts/nosqldb/logging.d.ts +2 -0
- package/dist_ts/nosqldb/logging.js +3 -0
- package/dist_ts/nosqldb/plugins.d.ts +17 -0
- package/dist_ts/nosqldb/plugins.js +20 -0
- package/dist_ts/nosqldb/shim.d.ts +1 -0
- package/dist_ts/nosqldb/shim.js +8 -0
- package/dist_ts/nosqldb/testsupport.d.ts +3 -0
- package/dist_ts/nosqldb/testsupport.js +3 -0
- package/dist_ts/objectstorage/classes.bucket.d.ts +227 -0
- package/dist_ts/objectstorage/classes.bucket.js +939 -0
- package/dist_ts/objectstorage/classes.connection.d.ts +21 -0
- package/dist_ts/objectstorage/classes.connection.js +27 -0
- package/dist_ts/objectstorage/classes.directory.d.ts +124 -0
- package/dist_ts/objectstorage/classes.directory.js +335 -0
- package/dist_ts/objectstorage/classes.exactpathpurgeerror.d.ts +5 -0
- package/dist_ts/objectstorage/classes.exactpathpurgeerror.js +18 -0
- package/dist_ts/objectstorage/classes.exactuploaderror.d.ts +5 -0
- package/dist_ts/objectstorage/classes.exactuploaderror.js +19 -0
- package/dist_ts/objectstorage/classes.file.d.ts +91 -0
- package/dist_ts/objectstorage/classes.file.js +255 -0
- package/dist_ts/objectstorage/classes.listcursor.d.ts +41 -0
- package/dist_ts/objectstorage/classes.listcursor.js +67 -0
- package/dist_ts/objectstorage/classes.metadata.d.ts +57 -0
- package/dist_ts/objectstorage/classes.metadata.js +113 -0
- package/dist_ts/objectstorage/classes.smartbucket.d.ts +57 -0
- package/dist_ts/objectstorage/classes.smartbucket.js +357 -0
- package/dist_ts/objectstorage/classes.trash.d.ts +11 -0
- package/dist_ts/objectstorage/classes.trash.js +22 -0
- package/dist_ts/objectstorage/classes.watcher.d.ts +79 -0
- package/dist_ts/objectstorage/classes.watcher.js +249 -0
- package/dist_ts/objectstorage/helpers.d.ts +25 -0
- package/dist_ts/objectstorage/helpers.js +215 -0
- package/dist_ts/objectstorage/index.d.ts +13 -0
- package/dist_ts/objectstorage/index.js +13 -0
- package/dist_ts/objectstorage/interfaces.d.ts +276 -0
- package/dist_ts/objectstorage/interfaces.js +2 -0
- package/dist_ts/objectstorage/internal.exactpathpurge.operations.d.ts +11 -0
- package/dist_ts/objectstorage/internal.exactpathpurge.operations.js +1069 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.d.ts +40 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.js +382 -0
- package/dist_ts/objectstorage/internal.exactupload.operations.d.ts +11 -0
- package/dist_ts/objectstorage/internal.exactupload.operations.js +1104 -0
- package/dist_ts/objectstorage/internal.multipart.planner.d.ts +8 -0
- package/dist_ts/objectstorage/internal.multipart.planner.js +63 -0
- package/dist_ts/objectstorage/internal.multipart.stream.d.ts +17 -0
- package/dist_ts/objectstorage/internal.multipart.stream.js +440 -0
- package/dist_ts/objectstorage/internal.multipart.types.d.ts +82 -0
- package/dist_ts/objectstorage/internal.multipart.types.js +2 -0
- package/dist_ts/objectstorage/plugins.d.ts +17 -0
- package/dist_ts/objectstorage/plugins.js +23 -0
- package/dist_ts/plugins.d.ts +4 -0
- package/dist_ts/plugins.js +5 -0
- package/dist_ts/sqldb/classes.clickhouseconnection.d.ts +39 -0
- package/dist_ts/sqldb/classes.clickhouseconnection.js +225 -0
- package/dist_ts/sqldb/classes.sqlconnection.d.ts +50 -0
- package/dist_ts/sqldb/classes.sqlconnection.js +376 -0
- package/dist_ts/sqldb/classes.sqltable.d.ts +29 -0
- package/dist_ts/sqldb/classes.sqltable.js +70 -0
- package/dist_ts/sqldb/clickhouse/classes.metricwriter.d.ts +27 -0
- package/dist_ts/sqldb/clickhouse/classes.metricwriter.js +89 -0
- package/dist_ts/sqldb/clickhouse/index.d.ts +9 -0
- package/dist_ts/sqldb/clickhouse/index.js +13 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.d.ts +88 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.js +304 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.d.ts +28 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.js +46 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.d.ts +43 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.js +155 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.d.ts +13 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.js +36 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.d.ts +49 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.js +106 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.d.ts +51 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.js +96 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.d.ts +5 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.js +6 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.types.d.ts +53 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.types.js +41 -0
- package/dist_ts/sqldb/index.d.ts +6 -0
- package/dist_ts/sqldb/index.js +6 -0
- package/dist_ts/sqldb/interfaces.d.ts +53 -0
- package/dist_ts/sqldb/interfaces.js +19 -0
- package/dist_ts/sqldb/internal.sqlpool.d.ts +51 -0
- package/dist_ts/sqldb/internal.sqlpool.js +214 -0
- package/dist_ts/sqldb/plugins.clickhouse.d.ts +4 -0
- package/dist_ts/sqldb/plugins.clickhouse.js +5 -0
- package/dist_ts/sqldb/plugins.mariadb.d.ts +4 -0
- package/dist_ts/sqldb/plugins.mariadb.js +5 -0
- package/docs/source/smartbucket/license.md +19 -0
- package/docs/source/smartclickhouse/license.md +19 -0
- package/license.md +21 -0
- package/package.json +101 -0
- package/readme.md +157 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.losslessorgclient.ts +104 -0
- package/ts/core/classes.error.ts +31 -0
- package/ts/core/classes.operation.ts +60 -0
- package/ts/core/interfaces.ts +24 -0
- package/ts/index.ts +4 -0
- package/ts/nosqldb/classes.atomicdelete.ts +81 -0
- package/ts/nosqldb/classes.atomicfindoneandupdate.ts +152 -0
- package/ts/nosqldb/classes.atomicupdate.ts +99 -0
- package/ts/nosqldb/classes.bootstraprecord.ts +107 -0
- package/ts/nosqldb/classes.bsonassertion.ts +25 -0
- package/ts/nosqldb/classes.bsonobjectid.ts +45 -0
- package/ts/nosqldb/classes.bsonsnapshot.ts +105 -0
- package/ts/nosqldb/classes.cached-document.ts +67 -0
- package/ts/nosqldb/classes.collection.ts +2399 -0
- package/ts/nosqldb/classes.collectionfactory.ts +87 -0
- package/ts/nosqldb/classes.collectionlifecycle.ts +24 -0
- package/ts/nosqldb/classes.collectionpreparation.ts +164 -0
- package/ts/nosqldb/classes.collectiontopology.ts +645 -0
- package/ts/nosqldb/classes.connection.ts +31 -0
- package/ts/nosqldb/classes.convenience.ts +5 -0
- package/ts/nosqldb/classes.cursor.ts +88 -0
- package/ts/nosqldb/classes.cursoroperation.ts +38 -0
- package/ts/nosqldb/classes.db.ts +637 -0
- package/ts/nosqldb/classes.distributedcoordinator.ts +305 -0
- package/ts/nosqldb/classes.doc.ts +4928 -0
- package/ts/nosqldb/classes.easystore.ts +154 -0
- package/ts/nosqldb/classes.exactpersistence.ts +1974 -0
- package/ts/nosqldb/classes.lucene.adapter.ts +780 -0
- package/ts/nosqldb/classes.mongoadministration.ts +867 -0
- package/ts/nosqldb/classes.namespaceinspection.ts +199 -0
- package/ts/nosqldb/classes.operationbudget.ts +75 -0
- package/ts/nosqldb/classes.ordinarypersistence.ts +84 -0
- package/ts/nosqldb/classes.persistence.ts +62 -0
- package/ts/nosqldb/classes.session.ts +389 -0
- package/ts/nosqldb/classes.storedinspection.ts +151 -0
- package/ts/nosqldb/classes.testdatabase.ts +272 -0
- package/ts/nosqldb/classes.watcher.ts +96 -0
- package/ts/nosqldb/index.ts +51 -0
- package/ts/nosqldb/logging.ts +3 -0
- package/ts/nosqldb/plugins.ts +37 -0
- package/ts/nosqldb/shim.ts +6 -0
- package/ts/nosqldb/testsupport.ts +13 -0
- package/ts/objectstorage/classes.bucket.ts +1114 -0
- package/ts/objectstorage/classes.connection.ts +36 -0
- package/ts/objectstorage/classes.directory.ts +425 -0
- package/ts/objectstorage/classes.exactpathpurgeerror.ts +24 -0
- package/ts/objectstorage/classes.exactuploaderror.ts +25 -0
- package/ts/objectstorage/classes.file.ts +303 -0
- package/ts/objectstorage/classes.listcursor.ts +89 -0
- package/ts/objectstorage/classes.metadata.ts +134 -0
- package/ts/objectstorage/classes.smartbucket.ts +445 -0
- package/ts/objectstorage/classes.trash.ts +30 -0
- package/ts/objectstorage/classes.watcher.ts +289 -0
- package/ts/objectstorage/helpers.ts +254 -0
- package/ts/objectstorage/index.ts +13 -0
- package/ts/objectstorage/interfaces.ts +389 -0
- package/ts/objectstorage/internal.exactpathpurge.operations.ts +1936 -0
- package/ts/objectstorage/internal.exactupload.capability.ts +580 -0
- package/ts/objectstorage/internal.exactupload.operations.ts +1715 -0
- package/ts/objectstorage/internal.multipart.planner.ts +90 -0
- package/ts/objectstorage/internal.multipart.stream.ts +606 -0
- package/ts/objectstorage/internal.multipart.types.ts +106 -0
- package/ts/objectstorage/plugins.ts +35 -0
- package/ts/plugins.ts +4 -0
- package/ts/sqldb/classes.clickhouseconnection.ts +189 -0
- package/ts/sqldb/classes.sqlconnection.ts +350 -0
- package/ts/sqldb/classes.sqltable.ts +70 -0
- package/ts/sqldb/clickhouse/classes.metricwriter.ts +72 -0
- package/ts/sqldb/clickhouse/index.ts +16 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.ts +372 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.ts +52 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.ts +120 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.resultset.ts +44 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.ts +123 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.ts +114 -0
- package/ts/sqldb/clickhouse/smartclickhouse.plugins.ts +5 -0
- package/ts/sqldb/clickhouse/smartclickhouse.types.ts +134 -0
- package/ts/sqldb/index.ts +6 -0
- package/ts/sqldb/interfaces.ts +61 -0
- package/ts/sqldb/internal.sqlpool.ts +179 -0
- package/ts/sqldb/plugins.clickhouse.ts +4 -0
- package/ts/sqldb/plugins.mariadb.ts +4 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SmartdataDb } from './classes.db.js';
|
|
2
|
+
/**
|
|
3
|
+
* EasyStore allows the storage of easy objects. It also allows easy sharing of the object between different instances
|
|
4
|
+
*/
|
|
5
|
+
export declare class EasyStore<T> {
|
|
6
|
+
smartdataDbRef: SmartdataDb;
|
|
7
|
+
nameId: string;
|
|
8
|
+
private easyStoreClass;
|
|
9
|
+
constructor(nameIdArg: string, smartdataDbRefArg: SmartdataDb);
|
|
10
|
+
private easyStorePromise?;
|
|
11
|
+
private getEasyStore;
|
|
12
|
+
/**
|
|
13
|
+
* reads all keyValue pairs at once and returns them
|
|
14
|
+
*/
|
|
15
|
+
readAll(): Promise<any>;
|
|
16
|
+
/**
|
|
17
|
+
* reads a keyValueFile from disk
|
|
18
|
+
*/
|
|
19
|
+
readKey<TKey extends keyof T>(keyArg: TKey): Promise<Partial<T>[TKey]>;
|
|
20
|
+
/**
|
|
21
|
+
* writes a specific key to the keyValueStore
|
|
22
|
+
*/
|
|
23
|
+
writeKey<TKey extends keyof T>(keyArg: TKey, valueArg: T[TKey]): Promise<void>;
|
|
24
|
+
deleteKey(keyArg: keyof T): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* merges all keyValue pairs from the object argument into the store.
|
|
27
|
+
* Existing keys that are not present in `keyValueObject` are preserved.
|
|
28
|
+
* To overwrite the entire store and drop missing keys, use `replace()`.
|
|
29
|
+
*/
|
|
30
|
+
writeAll(keyValueObject: Partial<T>): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* atomically replaces the entire store with the given object.
|
|
33
|
+
* Unlike `writeAll` (which merges), `replace` clears any keys not
|
|
34
|
+
* present in `keyValueObject`. Useful when you need to drop a key.
|
|
35
|
+
*/
|
|
36
|
+
replace(keyValueObject: Partial<T>): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* wipes a key value store from disk
|
|
39
|
+
*/
|
|
40
|
+
wipe(): Promise<void>;
|
|
41
|
+
cleanUpEphemeral(): Promise<void>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import * as plugins from './plugins.js';
|
|
36
|
+
import { Collection } from './classes.collection.js';
|
|
37
|
+
import { SmartdataDb } from './classes.db.js';
|
|
38
|
+
import { SmartDataDbDoc, svDb, unI } from './classes.doc.js';
|
|
39
|
+
const easyStoreClassByDb = new WeakMap();
|
|
40
|
+
const getEasyStoreClassForDb = (smartdataDbArg) => {
|
|
41
|
+
const existingClass = easyStoreClassByDb.get(smartdataDbArg);
|
|
42
|
+
if (existingClass) {
|
|
43
|
+
return existingClass;
|
|
44
|
+
}
|
|
45
|
+
let SmartdataEasyStore = (() => {
|
|
46
|
+
let _classDecorators = [Collection(() => smartdataDbArg)];
|
|
47
|
+
let _classDescriptor;
|
|
48
|
+
let _classExtraInitializers = [];
|
|
49
|
+
let _classThis;
|
|
50
|
+
let _classSuper = SmartDataDbDoc;
|
|
51
|
+
let _nameId_decorators;
|
|
52
|
+
let _nameId_initializers = [];
|
|
53
|
+
let _nameId_extraInitializers = [];
|
|
54
|
+
let _ephemeral_decorators;
|
|
55
|
+
let _ephemeral_initializers = [];
|
|
56
|
+
let _ephemeral_extraInitializers = [];
|
|
57
|
+
let _lastEdit_decorators;
|
|
58
|
+
let _lastEdit_initializers = [];
|
|
59
|
+
let _lastEdit_extraInitializers = [];
|
|
60
|
+
let _data_decorators;
|
|
61
|
+
let _data_initializers = [];
|
|
62
|
+
let _data_extraInitializers = [];
|
|
63
|
+
var SmartdataEasyStore = class extends _classSuper {
|
|
64
|
+
static { _classThis = this; }
|
|
65
|
+
static {
|
|
66
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
67
|
+
_nameId_decorators = [unI()];
|
|
68
|
+
_ephemeral_decorators = [svDb()];
|
|
69
|
+
_lastEdit_decorators = [svDb()];
|
|
70
|
+
_data_decorators = [svDb()];
|
|
71
|
+
__esDecorate(null, null, _nameId_decorators, { kind: "field", name: "nameId", static: false, private: false, access: { has: obj => "nameId" in obj, get: obj => obj.nameId, set: (obj, value) => { obj.nameId = value; } }, metadata: _metadata }, _nameId_initializers, _nameId_extraInitializers);
|
|
72
|
+
__esDecorate(null, null, _ephemeral_decorators, { kind: "field", name: "ephemeral", static: false, private: false, access: { has: obj => "ephemeral" in obj, get: obj => obj.ephemeral, set: (obj, value) => { obj.ephemeral = value; } }, metadata: _metadata }, _ephemeral_initializers, _ephemeral_extraInitializers);
|
|
73
|
+
__esDecorate(null, null, _lastEdit_decorators, { kind: "field", name: "lastEdit", static: false, private: false, access: { has: obj => "lastEdit" in obj, get: obj => obj.lastEdit, set: (obj, value) => { obj.lastEdit = value; } }, metadata: _metadata }, _lastEdit_initializers, _lastEdit_extraInitializers);
|
|
74
|
+
__esDecorate(null, null, _data_decorators, { kind: "field", name: "data", static: false, private: false, access: { has: obj => "data" in obj, get: obj => obj.data, set: (obj, value) => { obj.data = value; } }, metadata: _metadata }, _data_initializers, _data_extraInitializers);
|
|
75
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
76
|
+
SmartdataEasyStore = _classThis = _classDescriptor.value;
|
|
77
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
78
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
79
|
+
}
|
|
80
|
+
nameId = __runInitializers(this, _nameId_initializers, void 0);
|
|
81
|
+
ephemeral = (__runInitializers(this, _nameId_extraInitializers), __runInitializers(this, _ephemeral_initializers, void 0));
|
|
82
|
+
lastEdit = (__runInitializers(this, _ephemeral_extraInitializers), __runInitializers(this, _lastEdit_initializers, void 0));
|
|
83
|
+
data = (__runInitializers(this, _lastEdit_extraInitializers), __runInitializers(this, _data_initializers, void 0));
|
|
84
|
+
constructor() {
|
|
85
|
+
super(...arguments);
|
|
86
|
+
__runInitializers(this, _data_extraInitializers);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
return SmartdataEasyStore = _classThis;
|
|
90
|
+
})();
|
|
91
|
+
easyStoreClassByDb.set(smartdataDbArg, SmartdataEasyStore);
|
|
92
|
+
return SmartdataEasyStore;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* EasyStore allows the storage of easy objects. It also allows easy sharing of the object between different instances
|
|
96
|
+
*/
|
|
97
|
+
export class EasyStore {
|
|
98
|
+
// instance
|
|
99
|
+
smartdataDbRef;
|
|
100
|
+
nameId;
|
|
101
|
+
easyStoreClass;
|
|
102
|
+
constructor(nameIdArg, smartdataDbRefArg) {
|
|
103
|
+
this.smartdataDbRef = smartdataDbRefArg;
|
|
104
|
+
this.nameId = nameIdArg;
|
|
105
|
+
this.easyStoreClass = getEasyStoreClassForDb(smartdataDbRefArg);
|
|
106
|
+
}
|
|
107
|
+
easyStorePromise;
|
|
108
|
+
async getEasyStore() {
|
|
109
|
+
if (this.easyStorePromise) {
|
|
110
|
+
return this.easyStorePromise;
|
|
111
|
+
}
|
|
112
|
+
// first run from here
|
|
113
|
+
const deferred = plugins.smartpromise.defer();
|
|
114
|
+
this.easyStorePromise = deferred.promise;
|
|
115
|
+
try {
|
|
116
|
+
let easyStore = await this.easyStoreClass.getInstance({
|
|
117
|
+
nameId: this.nameId,
|
|
118
|
+
});
|
|
119
|
+
if (!easyStore) {
|
|
120
|
+
easyStore = new this.easyStoreClass();
|
|
121
|
+
easyStore.nameId = this.nameId;
|
|
122
|
+
easyStore.data = {};
|
|
123
|
+
await easyStore.save();
|
|
124
|
+
}
|
|
125
|
+
deferred.resolve(easyStore);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// settle the deferred and clear the cache so concurrent callers get the
|
|
129
|
+
// error instead of awaiting forever, and later callers can retry
|
|
130
|
+
this.easyStorePromise = undefined;
|
|
131
|
+
deferred.reject(error);
|
|
132
|
+
}
|
|
133
|
+
return deferred.promise;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* reads all keyValue pairs at once and returns them
|
|
137
|
+
*/
|
|
138
|
+
async readAll() {
|
|
139
|
+
const easyStore = await this.getEasyStore();
|
|
140
|
+
return easyStore.data;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* reads a keyValueFile from disk
|
|
144
|
+
*/
|
|
145
|
+
async readKey(keyArg) {
|
|
146
|
+
const easyStore = await this.getEasyStore();
|
|
147
|
+
return easyStore.data[keyArg];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* writes a specific key to the keyValueStore
|
|
151
|
+
*/
|
|
152
|
+
async writeKey(keyArg, valueArg) {
|
|
153
|
+
const easyStore = await this.getEasyStore();
|
|
154
|
+
easyStore.data[keyArg] = valueArg;
|
|
155
|
+
await easyStore.save();
|
|
156
|
+
}
|
|
157
|
+
async deleteKey(keyArg) {
|
|
158
|
+
const easyStore = await this.getEasyStore();
|
|
159
|
+
delete easyStore.data[keyArg];
|
|
160
|
+
await easyStore.save();
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* merges all keyValue pairs from the object argument into the store.
|
|
164
|
+
* Existing keys that are not present in `keyValueObject` are preserved.
|
|
165
|
+
* To overwrite the entire store and drop missing keys, use `replace()`.
|
|
166
|
+
*/
|
|
167
|
+
async writeAll(keyValueObject) {
|
|
168
|
+
const easyStore = await this.getEasyStore();
|
|
169
|
+
easyStore.data = { ...easyStore.data, ...keyValueObject };
|
|
170
|
+
await easyStore.save();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* atomically replaces the entire store with the given object.
|
|
174
|
+
* Unlike `writeAll` (which merges), `replace` clears any keys not
|
|
175
|
+
* present in `keyValueObject`. Useful when you need to drop a key.
|
|
176
|
+
*/
|
|
177
|
+
async replace(keyValueObject) {
|
|
178
|
+
const easyStore = await this.getEasyStore();
|
|
179
|
+
easyStore.data = { ...keyValueObject };
|
|
180
|
+
await easyStore.save();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* wipes a key value store from disk
|
|
184
|
+
*/
|
|
185
|
+
async wipe() {
|
|
186
|
+
const easyStore = await this.getEasyStore();
|
|
187
|
+
easyStore.data = {};
|
|
188
|
+
await easyStore.save();
|
|
189
|
+
}
|
|
190
|
+
async cleanUpEphemeral() {
|
|
191
|
+
// Clean up ephemeral data periodically while connected
|
|
192
|
+
while (this.smartdataDbRef.status === 'connected') {
|
|
193
|
+
await plugins.smartdelay.delayFor(60000); // Check every minute
|
|
194
|
+
// TODO: Implement actual cleanup logic for ephemeral data
|
|
195
|
+
// For now, this prevents the infinite CPU loop
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lYXN5c3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMuZWFzeXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7QUFFM0QsTUFBTSxzQkFBc0IsR0FBRyxDQUFJLGNBQTJCLEVBQUUsRUFBRTtJQUNoRSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO1FBRUssa0JBQWtCO2dDQUR2QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDOzs7OzBCQUNBLGNBQWM7Ozs7Ozs7Ozs7Ozs7c0NBQXRCLFNBQVEsV0FHaEM7Ozs7c0NBQ0UsR0FBRyxFQUFFO3lDQUdMLElBQUksRUFBRTt3Q0FNTixJQUFJLEVBQUU7b0NBR04sSUFBSSxFQUFFO2dCQVhQLG9LQUFPLE1BQU0sNkJBQU4sTUFBTSx1RkFBVTtnQkFHdkIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUdkO2dCQUdGLDBLQUFBLFFBQVEsNkJBQVIsUUFBUSwyRkFBVTtnQkFHbEIsOEpBQU8sSUFBSSw2QkFBSixJQUFJLG1GQUFjO2dCQWpCM0IsNktBa0JDOzs7Z0JBbEJLLHVEQUFrQjs7WUFLZixNQUFN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
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { SmartdataCollection } from './classes.collection.js';
|
|
3
|
+
import type { SmartdataSession } from './classes.session.js';
|
|
4
|
+
import { type MongoFilter, type SmartDataDbDoc } from './classes.doc.js';
|
|
5
|
+
declare const reservedKeys: readonly ["_id", "_smartdataRevision", "_createdAt", "_updatedAt"];
|
|
6
|
+
type TReservedKey = (typeof reservedKeys)[number];
|
|
7
|
+
export type TExactPersistedDocument<TPersisted extends object> = Omit<TPersisted, TReservedKey> & {
|
|
8
|
+
[TKey in TReservedKey]?: never;
|
|
9
|
+
};
|
|
10
|
+
export type TStoredDocument<TPersisted extends object> = Omit<TPersisted, TReservedKey> & {
|
|
11
|
+
_id: plugins.mongodb.ObjectId;
|
|
12
|
+
_smartdataRevision?: string;
|
|
13
|
+
_createdAt?: never;
|
|
14
|
+
_updatedAt?: never;
|
|
15
|
+
};
|
|
16
|
+
export type TExactDistinctValue<TValue> = TValue extends ReadonlyArray<infer TEntry> ? TEntry : TValue;
|
|
17
|
+
type TExactDocumentPathLeaf = string | number | boolean | bigint | symbol | null | undefined | Date | RegExp | Uint8Array | ((...args: any[]) => unknown) | {
|
|
18
|
+
readonly _bsontype: string;
|
|
19
|
+
};
|
|
20
|
+
type TExactDocumentPathTarget<TValue> = NonNullable<TValue> extends ReadonlyArray<infer TEntry> ? NonNullable<TEntry> : NonNullable<TValue>;
|
|
21
|
+
type TExactDocumentPathInternal<TDocument, TDepth extends readonly unknown[]> = TDepth['length'] extends 8 ? never : TDocument extends TExactDocumentPathLeaf ? never : TDocument extends object ? {
|
|
22
|
+
[TKey in keyof TDocument & string]: TExactDocumentPathTarget<TDocument[TKey]> extends TExactDocumentPathLeaf ? TKey : TExactDocumentPathTarget<TDocument[TKey]> extends object ? TKey | `${TKey}.${TExactDocumentPathInternal<TExactDocumentPathTarget<TDocument[TKey]>, [
|
|
23
|
+
...TDepth,
|
|
24
|
+
unknown
|
|
25
|
+
]>}` : TKey;
|
|
26
|
+
}[keyof TDocument & string] : never;
|
|
27
|
+
type TExactDocumentPathContainer<TValue> = NonNullable<TValue> extends ReadonlyArray<infer TEntry> ? NonNullable<TEntry> : NonNullable<TValue>;
|
|
28
|
+
export type TExactDocumentPath<TDocument extends object> = TExactDocumentPathInternal<TDocument, []>;
|
|
29
|
+
type TExactDocumentPathValueForContainer<TContainer, TPath extends string> = TContainer extends unknown ? TPath extends `${infer THead}.${infer TTail}` ? THead extends keyof TContainer ? TExactDocumentPathValue<TContainer[THead], TTail> : never : TPath extends keyof TContainer ? Exclude<TContainer[TPath], undefined> : never : never;
|
|
30
|
+
export type TExactDocumentPathValue<TDocument, TPath extends string> = TExactDocumentPathValueForContainer<TExactDocumentPathContainer<TDocument>, TPath>;
|
|
31
|
+
export declare const isMongoObjectId: (valueArg: unknown) => valueArg is plugins.mongodb.ObjectId;
|
|
32
|
+
export type TExactInsertResult<TPersisted extends object> = {
|
|
33
|
+
status: 'inserted' | 'already_committed';
|
|
34
|
+
document: TStoredDocument<TPersisted>;
|
|
35
|
+
} | {
|
|
36
|
+
status: 'conflict';
|
|
37
|
+
document: TStoredDocument<TPersisted>;
|
|
38
|
+
};
|
|
39
|
+
export type TExactTransitionResult<TPersisted extends object> = {
|
|
40
|
+
status: 'transitioned';
|
|
41
|
+
document: TStoredDocument<TPersisted>;
|
|
42
|
+
} | {
|
|
43
|
+
status: 'concurrent_change';
|
|
44
|
+
};
|
|
45
|
+
export type TExactDeleteResult = {
|
|
46
|
+
status: 'deleted';
|
|
47
|
+
deletedCount: 1;
|
|
48
|
+
} | {
|
|
49
|
+
status: 'concurrent_change';
|
|
50
|
+
deletedCount: 0;
|
|
51
|
+
};
|
|
52
|
+
export type TExactPersistenceErrorCode = 'ambiguous_write' | 'invalid_configuration' | 'invalid_document' | 'noncanonical_document' | 'reserved_field' | 'unique_conflict' | 'unsupported_operation';
|
|
53
|
+
export declare class SmartdataExactPersistenceError extends Error {
|
|
54
|
+
readonly code: TExactPersistenceErrorCode;
|
|
55
|
+
constructor(codeArg: TExactPersistenceErrorCode, messageArg: string, optionsArg?: ErrorOptions);
|
|
56
|
+
}
|
|
57
|
+
export type TExactDocumentAssertion<TPersisted extends object> = (documentArg: unknown) => asserts documentArg is TPersisted;
|
|
58
|
+
type TExactAssertedDocument<TAssertion extends TExactDocumentAssertion<object>> = TAssertion extends TExactDocumentAssertion<infer TPersisted> ? TPersisted : never;
|
|
59
|
+
export type TExactIdentityKey<TPersisted extends object> = {
|
|
60
|
+
[TKey in Exclude<keyof TPersisted, TReservedKey> & string]-?: [
|
|
61
|
+
TPersisted[TKey]
|
|
62
|
+
] extends [string] ? TKey : never;
|
|
63
|
+
}[Exclude<keyof TPersisted, TReservedKey> & string];
|
|
64
|
+
export interface IExactPersistenceOptions<TPersisted extends object> {
|
|
65
|
+
reconcileBy?: TExactIdentityKey<TPersisted>;
|
|
66
|
+
assertDocument: TExactDocumentAssertion<TPersisted>;
|
|
67
|
+
}
|
|
68
|
+
export type TPersistedOf<TModel extends SmartDataDbDoc<any, any, any>> = TModel extends SmartDataDbDoc<any, infer TPersisted, any> ? TPersisted : never;
|
|
69
|
+
export type TExact<TModel extends SmartDataDbDoc<any, any, any>> = SmartdataExactCollection<TModel, TPersistedOf<TModel>>;
|
|
70
|
+
export interface IExactSessionOptions {
|
|
71
|
+
session?: SmartdataSession;
|
|
72
|
+
}
|
|
73
|
+
export interface IExactReadOptions extends IExactSessionOptions {
|
|
74
|
+
signal?: AbortSignal;
|
|
75
|
+
}
|
|
76
|
+
export interface IFindStoredOptions<TPersisted extends object> extends IExactReadOptions {
|
|
77
|
+
filter?: MongoFilter<TStoredDocument<TPersisted>>;
|
|
78
|
+
sort?: Partial<Record<TExactDocumentPath<TStoredDocument<TPersisted>>, 1 | -1>>;
|
|
79
|
+
skip?: number;
|
|
80
|
+
limit?: number;
|
|
81
|
+
}
|
|
82
|
+
interface IExactModelConstructor<TModel extends SmartDataDbDoc<any, any, any>> {
|
|
83
|
+
new (...args: any[]): TModel;
|
|
84
|
+
collection: SmartdataCollection<any>;
|
|
85
|
+
createInstanceFromMongoDbNativeDoc<T>(documentArg: any): T;
|
|
86
|
+
name: string;
|
|
87
|
+
prototype: TModel;
|
|
88
|
+
}
|
|
89
|
+
export declare class SmartdataExactCollection<TModel extends SmartDataDbDoc<any, any, any>, TPersisted extends object> {
|
|
90
|
+
private readonly modelConstructor;
|
|
91
|
+
private readonly collection;
|
|
92
|
+
private readonly options;
|
|
93
|
+
private initializationPromise?;
|
|
94
|
+
private initializedCollection?;
|
|
95
|
+
private initializationTarget?;
|
|
96
|
+
private initializationGeneration;
|
|
97
|
+
private readonly allowedPersistedKeys;
|
|
98
|
+
private readonly uniqueIndexes;
|
|
99
|
+
private readonly reconcileBy;
|
|
100
|
+
constructor(modelConstructor: IExactModelConstructor<TModel>, collection: SmartdataCollection<any>, options: IExactPersistenceOptions<TPersisted>);
|
|
101
|
+
private initialize;
|
|
102
|
+
private initializeOnce;
|
|
103
|
+
prepare(): Promise<void>;
|
|
104
|
+
private beginOperation;
|
|
105
|
+
private runOperation;
|
|
106
|
+
private canonicalizeDocument;
|
|
107
|
+
private assertAllowedTopLevelKeys;
|
|
108
|
+
private canonicalizePersistedDocument;
|
|
109
|
+
private canonicalizeStoredDocument;
|
|
110
|
+
private assertWithoutMutation;
|
|
111
|
+
private getPersistedBody;
|
|
112
|
+
private persistedDocumentsEqual;
|
|
113
|
+
private storedDocumentsEqual;
|
|
114
|
+
private validateReconcileIdentity;
|
|
115
|
+
private serializeModel;
|
|
116
|
+
private createPersistedDocument;
|
|
117
|
+
private hydrateStoredDocument;
|
|
118
|
+
private findByReconcileIdentity;
|
|
119
|
+
private ambiguousWriteError;
|
|
120
|
+
private canonicalizeDeleteCurrent;
|
|
121
|
+
private reconcileDeleteOutcome;
|
|
122
|
+
insert(documentArg: TModel | TExactPersistedDocument<TPersisted>, optionsArg?: IExactSessionOptions): Promise<TExactInsertResult<TPersisted>>;
|
|
123
|
+
toPersisted(storedDocumentArg: TStoredDocument<TPersisted>): TExactPersistedDocument<TPersisted>;
|
|
124
|
+
canonicalBytes(persistedDocumentArg: TExactPersistedDocument<TPersisted>): Uint8Array;
|
|
125
|
+
findStoredOne(filterArg: MongoFilter<TStoredDocument<TPersisted>>, optionsArg?: IExactReadOptions): Promise<TStoredDocument<TPersisted> | null>;
|
|
126
|
+
findStored(optionsArg?: IFindStoredOptions<TPersisted>): Promise<Array<TStoredDocument<TPersisted>>>;
|
|
127
|
+
count(filterArg?: MongoFilter<TStoredDocument<TPersisted>>, optionsArg?: IExactSessionOptions): Promise<number>;
|
|
128
|
+
distinct<TField extends TExactDocumentPath<TStoredDocument<TPersisted>>>(fieldArg: TField, filterArg?: MongoFilter<TStoredDocument<TPersisted>>, optionsArg?: IExactSessionOptions): Promise<Array<TExactDistinctValue<TExactDocumentPathValue<TStoredDocument<TPersisted>, TField>>>>;
|
|
129
|
+
transition(optionsArg: {
|
|
130
|
+
current: TStoredDocument<TPersisted>;
|
|
131
|
+
change: (modelArg: TModel) => void;
|
|
132
|
+
}, sessionOptionsArg?: IExactSessionOptions): Promise<TExactTransitionResult<TPersisted>>;
|
|
133
|
+
delete(optionsArg: {
|
|
134
|
+
current: TStoredDocument<TPersisted>;
|
|
135
|
+
}, sessionOptionsArg?: IExactSessionOptions): Promise<TExactDeleteResult>;
|
|
136
|
+
}
|
|
137
|
+
export declare function exactPersistence<TAssertion extends TExactDocumentAssertion<object>>(optionsArg: {
|
|
138
|
+
assertDocument: TAssertion;
|
|
139
|
+
reconcileBy?: TExactIdentityKey<TExactAssertedDocument<TAssertion>>;
|
|
140
|
+
}): <TConstructor extends new (...args: any[]) => SmartDataDbDoc<any, TExactAssertedDocument<TAssertion>, any> & TExactAssertedDocument<TAssertion>>(valueArg: TConstructor, contextArg: ClassDecoratorContext) => void;
|
|
141
|
+
export {};
|