aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/util/query.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/util/query.ts')
-rw-r--r--packages/taler-wallet-core/src/util/query.ts40
1 files changed, 33 insertions, 7 deletions
diff --git a/packages/taler-wallet-core/src/util/query.ts b/packages/taler-wallet-core/src/util/query.ts
index 3d4ff79cb..71d7b9783 100644
--- a/packages/taler-wallet-core/src/util/query.ts
+++ b/packages/taler-wallet-core/src/util/query.ts
@@ -61,6 +61,13 @@ export interface IndexOptions {
* undefined if added in the first version.
*/
versionAdded?: number;
+
+ /**
+ * Does this index enforce unique keys?
+ *
+ * Defaults to false.
+ */
+ unique?: boolean;
}
function requestToPromise(req: IDBRequest): Promise<any> {
@@ -276,6 +283,7 @@ export interface IndexDescriptor {
name: string;
keyPath: IDBKeyPath | IDBKeyPath[];
multiEntry?: boolean;
+ unique?: boolean;
}
export interface StoreDescriptor<RecordType> {
@@ -292,7 +300,11 @@ export interface StoreOptions {
export function describeContents<RecordType = never>(
options: StoreOptions,
): StoreDescriptor<RecordType> {
- return { keyPath: options.keyPath, _dummy: undefined as any };
+ return {
+ keyPath: options.keyPath,
+ _dummy: undefined as any,
+ autoIncrement: options.autoIncrement,
+ };
}
export function describeIndex(
@@ -304,6 +316,7 @@ export function describeIndex(
keyPath,
name,
multiEntry: options.multiEntry,
+ unique: options.unique,
};
}
@@ -339,11 +352,18 @@ export interface StoreReadOnlyAccessor<RecordType, IndexMap> {
indexes: GetIndexReadOnlyAccess<RecordType, IndexMap>;
}
+export interface InsertResponse {
+ /**
+ * Key of the newly inserted (via put/add) record.
+ */
+ key: IDBValidKey;
+}
+
export interface StoreReadWriteAccessor<RecordType, IndexMap> {
get(key: IDBValidKey): Promise<RecordType | undefined>;
iter(query?: IDBValidKey): ResultStream<RecordType>;
- put(r: RecordType): Promise<void>;
- add(r: RecordType): Promise<void>;
+ put(r: RecordType): Promise<InsertResponse>;
+ add(r: RecordType): Promise<InsertResponse>;
delete(key: IDBValidKey): Promise<void>;
indexes: GetIndexReadWriteAccess<RecordType, IndexMap>;
}
@@ -577,13 +597,19 @@ function makeWriteContext(
const req = tx.objectStore(storeName).openCursor(query);
return new ResultStream<any>(req);
},
- add(r) {
+ async add(r) {
const req = tx.objectStore(storeName).add(r);
- return requestToPromise(req);
+ const key = await requestToPromise(req);
+ return {
+ key: key,
+ };
},
- put(r) {
+ async put(r) {
const req = tx.objectStore(storeName).put(r);
- return requestToPromise(req);
+ const key = await requestToPromise(req);
+ return {
+ key: key,
+ };
},
delete(k) {
const req = tx.objectStore(storeName).delete(k);